オリジナルって何だ 音楽の真髄って何だ?

山之内氏は「スタジオで録音したのと同等の“オリジナルの音”がそのまま家庭で楽しめるなんて、今までなかったこと。声の柔らかさ、ブレスのリアルさなど、オリジナルの持つ強み ? 言うなれば音楽の真髄を味わわせてくれる」と賞賛。

最初に断っておくと、私はピュアオーディオ愛好家ではありませんが、ピュアオーディオ愛好家が嫌いだってこともありません。

上記の記事で、「スタジオで録音した」ものが「オリジナル」であるように解釈できる発言があるのですが、これにはちょっと違和感があって、個人的には音楽におけるオリジナルというのは、つまり演奏の現場で、その場所固有の空気の振動を体で感じること、だという気がするのです。でも、そんなこといってたら現在における「録音」による再現を前提とした、視聴覚体験は、いきなり全否定されてしまう。だから、ここでは私は原理主義的な主張をするつもりはないのですが、かといって専門家が「オリジナル」とまで断言していいのかどうか、には気持ち悪さが残ります。

録音、というのはつまり、そのものが空気振動を電気的記録へと置き換えていますし、デジタルならさらに符号化も経ているわけで、このもろもろの変換を経由した後であることにも関わらず、これをオリジナル、としてしまうのは、発言者の立場が関係していると考えるのが自然でしょうか。つまり録音/再生の現場に近い人。この人たちにとってはオリジナルとはつまり「マスター」に近い状態を指すとしても自然なことなので、上記のような発言になったのも頷けます。

ちなみに、じゃあ「○○教会にて○○時から○○の演奏をします」、という古くからの体験としての音楽の形が「オリジナル」なのか、というと、それすらいろいろと議論は残るのですが、本エントリとしてはやり過ぎなので掘り下げられません。そもそも「同じ音(認識)を複数の人が得る」ということは音楽においてはありえない、という見方もあるので、オリジナルの定義があいまいになってくるというか、コミュニケーションの道具(言葉)として、オリジナルという単語が使えない、というか。

で、話を戻して、山之内氏の主張も、ここまでなら「ふーん」でいいのですが、「いうなれば音楽の真髄」までくるとさらに気持ち悪い。オーディオに関係することと音楽に関係することはイコールではありませんが、だとすれば「音楽の真髄」と発言していいのか?「オーディオの真髄」ならまだ発言できるかもしれないが。

現代の音楽はすでに、録音、媒体化を経て、どこかまったく別の場所と機会と環境で繰り返し再生されることを前提としています。が、だとしても、これを「音楽の真髄」などといってもいいのかどうかは疑問が残るところです。現代の音楽はふたたび体験的価値を求めて、特定の環境を前提としたインスタレーションが数多く造られていたりしますし、いまなお、音楽自体は「録音と再生」を前提としてしか語れないような脆弱なものではないと私は思います。

で、ここまで言っといてあれですが、でも、この記事の編集者による加減を経た後に上記のような記事になっていて、山之内氏自身の発言とは細部で異なりがあるのかもしれません。
山之内氏のオリジナルな発言かどうかは不明です、ということかな(笑)

AS3, FP10 のサウンドレイテンシ問題

http://cgarcade.com/blog/flash_10_dynamic_sound_latency

最近、FP10、というかActionScript3で音を扱う(リズムゲームとかね)場合のレイテンシで頭を悩ませている。しかも出口が見つかっていない。

現象とか状況としては

  • Sound#play でも SampleDataEvent でもいいのだけど、とにかく再生要求から実際に音が聴こえるまでのレイテンシが激しい
    • 100ms以上はある
  • Sound#play を呼ぶと一音目と(同時)二音目でレイテンシが異なる.
    • これは「無音」をずっと再生しておくと すべて同一レイテンシになる (チャネルがクローズされることが原因らしい?)

単純に、「動画と音声の同期」ならば、AS3ではレイテンシが計測できるので問題はない。ここで問題になるのはゲームなど、ユーザとのインタラクションがあるケース。

ボタンを押すと音がなる、という動作をするゲームは多い。そのタイミングの正確さでゲームとしている音ゲーなんかだと、押してから200msとか経過してから音がなったんではリズムを取ることは難しい。これが非常に悩ましい。

もちろん、音ゲーの場合、キーに同期して音を鳴らすのはあきらめて、単純にボタンを押すタイミングだけで採点するということは可能だが、これはなんというかあまり楽しくない。なにかボタンを押すと音がなる、という楽器/オモチャ感は、かなり肉感的な快楽を含むものなのでこれを失いたくない・・・

なんとかして、Flashで気持ちの良い音ゲーは作れないのか...? 模索中。

USB接続のMIDIデバイスが認識されない人へ。Logicool Qcam使ってませんか?

最初に断っておきますと、Logicool Qcamという製品はなかなかに優秀でいいモノだと思います。そのモノ自体とドライバは別個に議論することが可能ならば、Logicool Qcamのドライバはクソです。

まずは、事象。

USB接続のMIDIバイス(たとえばDJ用コントローラや、フィジカルコントローラ、KORG nanoシリーズ、AKAI LPK25シリーズ、USB接続可能なデジタルピアノetc...)を接続すると、ドライバはインストールされてうまくいっているように見えるが、MIDIポートが見えない(=使えない)

Qcamインストール後、何回か遭遇して悩んでたのですが、自分だけなのかなあ、だからLogitechさんアップデートもなにもしてくれないのかなあ、と思ってたら、事例としてほかにも見つけたのでした。

ロジクール社製のWEB Cameraドライバーにつて
2007年5月10日 問題:
Windows上では、VCI-100が、USBオーディオバイス、USB複合デバイスとして、認識され動作するが、Traktor3 LE 及び Toraktor3.2で、VCI-100を認識できない。
概略:
米国Logitech社製 日本法人では、ロジクール社製のWEB Camera (QuickCam 又は、Qcam)の商標で販売されている専用ドライバー及びソフトウエアをアンインストールするとVCI-100をソフトウエア上から認識されるようになった。という報告が多数確認されました。
これらの専用ドライバー及びソフトウエアをインストールすると、[USBオーディオバイス]の中の[ドライバーファイル]の中に、 [lvusbsta.sys]というシステムファイルが生成され、何らかの原因で、USB MIDI コントローラー(VCI-100を含む)を、ソフトウエア上から認識できなくなるようです。
尚、このシステムファイルは、単体でのデリート及びアンインストールは出来ず、又、システムが不安定になる等の危険がありますので、絶対に行わないようにして下さい。
自己責任において、専用ドライバー及びソフトウエアをアンインストールする場合は、必ずコントロールパネル上の[アプリケーションの追加と削除]から、アンインストールされることをお勧めします。

USBドライバの衝突を疑え
ロジクール (Logitech Internationalの日本国内ブランド名) のWebcamのドライバ「LVUSBSTA.SYS」がインストールされていると、ARIAからEWI USBが見つからない、との報告あり。
Webcamのソフトをソフトウェアの追加と削除で削除しよう。

「多数」ってのがどれくらいかはわかりませんが、少なくとも私だけの問題ではなさそうです。上記事例ではLogicool Qcamのドライバをアンインストールすれば状況が回復するかもしれない、とのことなのでやってみた。結論、なおりました。

とりあえず、すぐに問題との関連性が見つかりにくいかもしれないので、検索用キーワードとして以下のような結論を。

AKAI LPK25を接続してもMIDIが認識されない時は、Logicool Qcamドライバが入ってないか疑え。入ってたら即消せ。

なんつータイトルだよ

ピアノソロ 中級 ヒット イケメン・ソングス オリジナルキー&サイズ

ピアノソロ 中級 ヒット イケメン・ソングス オリジナルキー&サイズ

なんつータイトルだよ・・・

ChucK入門 #11 ループ素材をカットしてみる

ひさびさのChucK。SndBufを使うとループ素材を簡単にカットしてつなぎかえることもできるはず、なのでやってみた。

SndBuf l1;
"c:/temp/amen.wav" => l1.read;
1 => l1.loop;
 
l1 => dac;
l1.samples() => int full;
8 => int breaks;
full / breaks => int offset;
 
while (true) {
    Std.rand2(0, breaks-1) => int ps;
    <<< ps >>>;
    ps * offset => l1.pos;
    offset::samp => now;
}

http://gist.github.com/188928

ファイル名のとおり、まずはアーメンでやってみる・・・↓

Download

これ、素材のサンプル数を単純に8で割ったり16で割ったりしてつないでいるだけなので揺らぎの要素にまったく対応していないからですね。定番のアーメンは揺らいでいる、ということです(当たり前か)。

ということで、もっと機械的なループで同じことをしてみるとこんな感じ↓

Download

これはうまくはいくのですが素材つくりとしてはうまくいってない感じですね。

実際にはサンプルのオフセットをキレイに8/16で割るという方法ではなくて、ゲインを解析するという方法を採るなどする必要がありそうです(Recycle!なんかの方法)

正規表現(Regex)によるパターンマッチング

Scalaの強力な構文のひとつ、 match〜caseによるパターンマッチングですが、正規表現にも使うことができます。

scala> val a = """Regexp here, (\w+) and (\w+)""".r
a: scala.util.matching.Regex = Regexp here, (\w+) and (\w+)
 
scala> "Regexp here, hoge and fuga" match {
     | case a(c,d) => c+d
     | }
res0: java.lang.String = hogefuga

上記のgistぺたりは http://gist.github.com/187119

case句にRegexインスタンスを渡して(..)内にグルーピングごとのマッチ結果を代入する変数名などを入れます。ところで

  case ("hoge".r)(m) =>

みたいな風にはかけないみたいです。case句の中で評価されるような式は書けないということで、正規表現のマッチングは事前に valなどを使って変数名だけで解決できるようにしておく必要があるようです。

RDBMSにOracleを利用している時にCRUDify(list)が動かない

Liftの CRUDify はコーディングをほとんどせずに、CRUD機能を提供してくれる、とても便利な機構です。Ruby On Rails(/AR)のscaffoldみたいな。

で、OracleRDBMSとしているときに、CRUDifyの"List"機能がまったく動いてくれない、と思って四苦八苦していたのです。こんな例外が出ます。

Message: java.sql.SQLException: ORA-00933: SQLコマンドが正しく終了されていません。

で、どんなSQLが出来ているか、など追いかけていたら、どうやら LiftMapperの MetaMapperクラスの以下のメソッドが原因の様子

  def addEndStuffs(in: String, params: List[QueryParam[A]], conn: SuperConnection): (String, Box[Long], Box[Long]) = {
(略)
      val ret = (max, start) match {
        case (Full(max), Full(start)) => tmp + " LIMIT "+max+" OFFSET "+start
        case (Full(max), _) => tmp + " LIMIT "+max
        case (_, Full(start)) => tmp + " LIMIT "+conn.driverType.maxSelectLimit+" OFFSET "+start
        case _ => tmp
      }
(略)

ご覧のとおり、で、LIMIT句とOFFSET句が使われており、私が使っているRDBMS(Oracle10g)ではこの構文がサポートされていません。そりゃエラーにもなります。

こういうRDBMSのDialectを吸収する仕掛けにはまだなっていないようで、残念ながら現在のLiftMapperで、addEndStuffsを使って件数制限やページングのようなことをしている箇所は使えない、ということになりそうです。

ああ、CRUDify使いたい…

ただ、 たとえば

  with MetaMapperなんとか { override def addEndStuffs..

とかするのは、あまりにやっつけというか、設計的にはあまり美しくないように思います。どうしても使いたいなら仕方ないのですが、どうしたもんかなあ、などと考える。

OracleDialect、みたいな感じでうまく委譲されていればいいのでしょうが、いまのところそうはなっていない様子。