2013/05/21
FirefoxのWebAudioAPIのサポート状況
現在 Firefox Aurora にデフォルトでオンの状態で入っています。
もうすぐFirefoxでも普通にWebAudioAPIが使えるようになるのは喜ばしい事なのですが、サポート状況が完全ではないため、問題が発生するケースがありそうです。
そんなに完全にチェックしたわけではないのですが、ちょっと触ってみた所、次のような気を付けるべき点があります。
こんな感じですので、今の所ノードの機能を色々使った複雑なアプリを作るのは少し厳しいかも知れませんが、とりあえずBufferにデータを読み込んでBufferSourceで鳴らしてフィルターを掛けてみる、などさわりの部分を確認するくらいは可能かと思います。
WebAudioAPI解説のページのサンプルは残念ながらFirefoxでまだサポートされていないOscillatorを各所で使っている事もあって、ほとんどがそのままでは動きませんでした。
やっかいなのはAudioContextがプリフィックスなしで入っているため、そのままではpolyfillにフォールバックしない事です。折角有効になったFirefoxのWebAudioAPIを使いたいのはやまやまですが、Firefoxの場合は強制的にフォールバックしてWAAPISimで動かすような変更を現在加えています。
WAAPISimの読み込みの前に次の1行を指定します。これでAudioContextが生きていてもオシレーターが使えない環境の場合には強制的にPolyfillで置き換えを行います。
<script type="text/javascript">waapisimForceSimWhenLackOsc=1;</script>
Posted by g200kg : 9:19 PM : PermaLink
2013/05/20
asm.jsでFFTしてみた、のだが。
最近一部で話題の"asm.js"。
GIGAZINE:「JavaScriptがネイティブアプリに近い実行速度まで高速化」
たとえばこんな記事があります↑。すんごく期待してしまったわけですよ、これがFirefox22で搭載されると。
特徴としては
- Nativeで書いた時の1/2程度の速度になる
- Javascriptのサブセットなので非対応ブラウザでもそのまま動く
- DOM関連は駄目だけど純粋な数値計算で威力を発揮する
既存のコードが恩恵を受けられる事はほとんどないだろう、とか使い道には色々議論があるようなんですが、これはWebAudio関連の処理と相性が良いに違いない!
て事で正式には6月リリースですがNightlyビルドではもう使えるらしいので、試してみました。ある程度実用になりそうなあたりを狙ってFFTをやらせてみます。
で、書いたのがこちら:asmjstest.html
2048ポイントのFFTを変換/逆変換を繰り返して速度を見ます。元波形は矩形波で変換後の波形(緑、元の矩形波と同じはず)とスペクトル(赤)が表示されます。 FirefoxのNightly以外のブラウザはasm.js非対応なので [ASM]と[NoASM]は同じ結果になります。
結果:
| 時間 | |
|---|---|
| Firefox ASM,10000回 | 4156 |
| Firefox NoASM,10000回 | 6009 |
| Chrome 10000回 | 4859 |
| IE10 10000回 | 12164 |
あれ、うん...。速い事は速いのだけど。なんかもっとこう爆速な感じを期待してたのだが?
処理にもよるでしょうけど、せいぜい通常のJavascriptの2倍程度の速度を狙う感じでしょうか。stdlib経由で数値関数なんかも使えるのですが、オーバーヘッドが大きいようでできれば使用を避けた方が良いように思います。こうやれば、もっと速くなるよ!! 的なノウハウがないものかと模索してるんですが、なかなかうまくいかんです。
爆速だったら入出力の方法とか色々整備したい所だけど、ちょっとモチベーションが下がりました。せっかく書いたのでおいておきますけど。複素数入力で、正規化する/しないのフラグがあります。汎用性を持たせようとしてたので通常の配列からデータを渡せるようにして、ついでにここでスクランブルまでやっています。
https://github.com/g200kg/Fft-asm.js
なお、asm.jsの仕様はここ http://asmjs.org/spec/latest/
正直結構書くにくいです。簡単に説明すると、
- asm.js化したい関数やファイルに "use asm"; と書く
- 変数は数値のみで文字列やオブジェクトは使えない
- 数値は var i=0; var r=0.0; のように常に型を意識しながら書く
- 配列は通常コードと共有するArrayBuffer、1つのみを使いまわす
他にもたくさん制限があるのでコンソールでasm.js化のエラーが出てないか確認しながら書く感じになります。
「結局 asm.js は名前のせいで過大な期待を煽りすぎなのだと思う。冷静に考えれば、普通のJSの2倍くらいの速度が出るのは凄い事かも知れん」、となんとなくフォローしておく。嫌いじゃないんだよ、この手のやつ。
Posted by g200kg : 3:03 PM : PermaLink
2013/05/15
WebAudioAPI解説:convolver編、panner編
WebAudioAPI解説に「コンボルバーの使い方」と「パンナーの使い方」を追加しました。


Posted by g200kg : 2:26 PM : PermaLink
2013/05/07
インパルスレスポンス、WebAudioAPI、そしてOpenairlib
インパルスレスポンスと言えばコンボリューションリバーブ。コンボリューションリバーブと言えば、WebAudioAPIのConvolverという事で、Webアプリ上でもコンボリューションリバーブが使えるようになったわけです。ネイティブプログラムのプラグインの世界でも当初フリーだったSIRのコンボリューションエフェクトがスゲーとか言いつつ重くてひーひー言ってた時代から考えると進歩したものですが、実はちょっと気になる事があるのです。
コンボリューションエフェクトを使う際には元となるIRデータが必要ですが、このIRデータをどうやって調達するか。
現在販売されている大手メーカー製のコンボリューションプラグインならIRデータも充分最初からバンドルされていますが、SIRのように元々エンジンしかない場合これが問題なわけで、有志がIRデータを作成して公開したりしていました(製品名を出してサンプリングしたものとかグレーな感じのものも多いですが)。今ではIRライブラリという形の製品だとか、とりあえずお試しでという事ならばIRライブラリの一部がフリー素材として公開されたりしているのでこういうものを使う事が多いのではないかと思います。
ただですね。製品のIRライブラリとかそのデモ版とかと言う奴は、ライセンス的には大抵使用はできても再頒布はできないのです。VSTなんかのプラグインでローカル環境で使う分には何も問題はないのですが、Webアプリ(WebAudioAPI)で使おうとするとどこかのサイトに置く事になりますので、これはまずいかも知れません。はっきりと「他サイトへのアップロードを禁じる」と書かれているものもあります。
このあたりを考慮するとWebAudioAPIで使えるIRデータの選択肢が急激に狭まってしまいます。個人が作成してフリーで提供されているものなどもあるのですが、やはり「Webアプリで使いたいからIRファイルをそのままネット上に置く」という事自体がまだ想定外だと思われますので、そういう使い方をして良いか確認を取る必要がありそうです。
一番有望なのはcode.google.comにあるこのあたり
https://code.google.com/p/chromium/source/browse/trunk/samples/audio/?r=2266#audio%2Fimpulse-responses
ただ元データのLICENSEが明記してあるのは一部だけです。bin_dfeqおよびbinauralディレクトリにあるIRデータの元は
http://www.acoustics.hut.fi/projects/poririrs/
で「非商用に限りフリー」とされています。その他のIRデータは独自に作られたものなのか元ネタがあるのか判断がつきません。これらはWebAudioAPIの各種サンプルコードでもあちこちで使われているのでそう妙な事にはなっていないとは思うのですが・・・何か一言書いておいてくれれば安心できるんですがねー。
他にはネット上で使うのに適合しそうなのがないかと思ってちょっと探した所、こういうのを見つけました。これは英国ヨーク大学のプロジェクトのようです。ライセンスは Creative Commons ベースでファイル毎に設定されているようですので、使いやすいのではないでしょうか。
http://www.openairlib.net/
ホールとか教会とかに偏っちゃいそうですけど、IRデータをマップに対応させるとかちょっと面白そうな試みもあります。2年以上前から始まっているのを考えるとデータ数が少し寂しいですが、充実していって欲しいですね。

Posted by g200kg : 1:28 PM : PermaLink
2013/05/03
WebAudioAPIのちょっと困ったところ
WebAudioAPIは実装間のコンパチビリティを取るのが結構やっかいだと思うのだよ。
例えばフィルターのQをグイーンと上げて発振する手前ぎりぎりで使ってたはずが別のブラウザだとピーピー言っちゃってるなんて事になったら目も当てらんない。
昨日気が付いた所:
- AudioParamのvalueに値を入れても直接反映されず、ある時定数を持ってスムージングされる。
- ただし、そのAudioParamに別の信号(オシレータとか)を接続した場合はそのスムージング処理は行われない。
Javascriptで全ての信号処理をするならJavascriptさえちゃんと走っていればどの環境でも同じ結果が出るのだけど、WebAudioAPIはブラックボックス化した各ノードがそれぞれそれなりの機能を持っているので、複雑なつなぎで音を作ると環境による微妙な違いが結果としてバタフライ効果的に作用する可能性がある。もうソースコードコピペするくらいのつもりの互換性がないと厳しいかも知れん。
まあWebAudioAPIそのものを実装する人なんてほとんどいないのであまり問題にはならないのかも知れないけど。FirefoxのWebAudioAPIの実装が今進んでいるはずだけど、どんなもんだろうか。
Posted by g200kg : 12:30 PM : PermaLink
2013/05/02
JKnobMan 1.2.7 リリース
JknobMan 1.2.7 をリリースしました。
JKnobMan 1.2.7
* 例えば "(99:1),<C>,(1:99)"のような複雑な形式のダイナミックテキストで
正常に動作しないケースがあったのを修正。1.2.6でエンバグしていました。
Posted by g200kg : 4:59 PM : PermaLink
2013/05/02
Teburin+WebGroove session
ジェスチャーシンセTeburinにフォルマント音源を搭載したので、WebGrooveと一緒にちょっと音出し。
こんなのがブラウザだけでできるというのはなかなか感慨深いです。
http://www.youtube.com/watch?v=3XdUvJNAYQ0
Posted by g200kg : 6:20 AM : PermaLink
2013/04/30
Teburin
AirThereminという名前のプロダクトが既にあったのと、テルミン・スペシャリストの@i_mecha氏よりテルミンというよりMiburiっぽいという意見をいただきましたので、名前を「AirTheremin」から「Teburin」に変えました。
カメラ画像がでっかくなっています。ついでにちょっとデモ動画を撮ってみました。
Posted by g200kg : 6:04 PM : PermaLink
2013/04/30
AirTheremin
WebカメラとWebAudioAPIを組み合わせたエアーテルミンを作ってみました。
http://www.g200kg.com/airtheremin/
動作させるにはカメラデバイスとChromeブラウザが必要です。
カメラからの画像を解析してテルミン風に身振りで音源をコントロールできます。
(注:テルミンをシミュレートしているわけではありません)
カメラは最近のノートPCなんかだと大抵内蔵されていると思います。起動するとカメラ使用の問い合わせが出ますので、許可してください (なお残念ながらiOSデバイスだとまだ対応していないようです)。
青っぽい画面でカメラ画像が表示されますが動きのある部分は赤くなります。緑色の玉が動きのある部分の中心を追いかけて行き、左右方向がピッチ、上下方向でフィルターを操作できます。また動きの激しさが音の大きさに対応しています。
※ WAAPISimを入れていますのでFirefoxでも動作しない事もないのですがオーディオ関係のパフォーマンスがちょっと厳しいのと、カメラ関係でエラーが出て少し挙動が不安定です。

Posted by g200kg : 8:14 AM : PermaLink
2013/04/28
KievII : Webベースのオーディオプラグイン
以前から存在は知っていて、その内ちゃんと触ってみようと思いつつそのままになっていたのですが、「KievII」というWebベースのオーディオアプリのフレームワークがあります。先日このKievIIの中の人からメールをもらってちょっとやりとりしたりしてました。
http://kievii.net

詳しい経緯を知っているわけではないのですが、元々はスタンドアローンなオーディオ系Webアプリを作るためのライブラリ的な位置づけで開発をはじめたのではないかと推察され、下の図のように実際にKievIIで構築したアプリも公開されています。

そしてもうひとつの側面がKievIIHostというホストアプリとそこに読み込むオーディオ処理のプラグインという形のものです。KievIIのページのメニューにある「KievII Host」という奴がそれです。
KievII Host
このページを開くと赤っぽい背景が表示され、ここに「Add Plugin」のメニューからシンセやらエフェクターやらを読み込んでケーブルで結線して音を出す事ができます。これらのプラグインのI/F仕様はK2Hと呼んでいるようです。またプラグインの仕様は現在拡張を考えているようで今のところ次世代I/F仕様は「Hyachinth(ヒヤシンス)」と呼ばれています。

とまあ、こんな感じのものなのですが、以前紹介した事のある「meemoo」ともちょっと似ていますね。Meemooはビデオ/イメージを含むマルチメディア系Webアプリ全体のフレームワークを目指しているのに対しKievIIの方はオーディオに特化してDAW/プラグイン的なものを目指しているという違いはありますが。
WebMIDILink、K2H/Hyacinth、Meemooとそれぞれ目指しているゴールは近いところにあってそれぞれにアプローチしているわけですが、単に規格が乱立するという話ではなく補完しつつうまく繋がって行ければと思います。
| 規格 | 扱うメディア | モジュールの接続 |
|---|---|---|
| WebMIDILink | MIDI | ウインドウ間 |
| K2H/Hyacinth | オーディオ | ウインドウ内 |
| Meemoo | ビデオ/オーディオ/MIDI | ウインドウ内⇒ウインドウ間に変更 |
Posted by g200kg : 3:42 PM : PermaLink
2013/04/27
WebSequencerを少し修正
先日某氏よりリクエストのあったWebSequencerのオートプレイと再生ボタンがわかりにくい件を改善してみた。
URL形式で保存する際に自動再生を指定する事ができるようになりました。[SaveFile]で表示されるリンクの隣のチェックボックスで指定します。URLとしてはパラメータにplay=1またはp=1を追加すると自動再生です。
また、トランスポート関係のボタンはかなりでっかくして目立つように変更しています。
WebSequencer (autoplay)

Posted by g200kg : 5:56 AM : PermaLink
2013/04/23
JKnobMan 1.2.6 リリース
JKnobManを1.2.6にアップデートしました。
JKnobMan 1.2.6
* BugFix: ダイナミックテキストの編集中にハングする事があったのを修正
1点のみ修正しました。
Posted by g200kg : 9:08 PM : PermaLink
2013/04/23
AVIDはWebサイトのメンテをもう少しちゃんとしないと
いかんのではないだろうか。
http://www.avid.com/jp/
たまたまちょっと見に行ったのだけど状況が良くわからない。
コンシューマ製品から撤退するのでM-AUDIOは売却したというニュースが流れてもう結構経つし、そういう決定をしたならそれはそれでしょうがないのだけど、「製品」タブには「FastTrackファミリー」があるのでFastTrackファミリーはAVIDが販売する製品として残るという事でいいのか? でも写真には「M-AUDIO」て書いてあるし。
そして更に「製品カテゴリー」タブから「オーディオ/MIDIインターフェース」のメニューに入った先のFastTrack製品のリンクはm-audio.comに飛んで404 NotFoundになってるのはさすがになんとかしないと。
M-Powered製品のアップグレードパスとか問題になりそうだなあ。
Posted by g200kg : 12:46 AM : PermaLink
2013/04/20
Windows更新プログラムの不具合
一週間ほど前に凄く久しぶりのブルースクリーンを見て以来どうもPCが不調で、タイミング的に話題になっていた更新プログラムKB2823324関連の問題ではないかと思いつつもそのまま様子を見ていたのだが、今日はついにブラウジング中に無言でリブートしやがった。
Microsoftの更新プログラムに不具合、アンインストールを勧告
やっぱりさっさとアンインストールするべきだったようだ。
ちなみにアンインストールは
「コントロールパネル」=>「プログラム」=>「インストールされた更新プログラムを表示」から KB2823324 を探して右クリック=>「アンインストール」

Posted by g200kg : 9:10 PM : PermaLink
2013/04/16
ケロケロしたい人へのヒント
おかげさまで結構たくさんの人にKeroVeeを使ってもらっているのですが、ケロケロエフェクトという奴はそれなりにノウハウが必要なエフェクトですので、ちょっとそのあたりを掘り下げてみます。
そもそもケロケロエフェクトというものについて
人間の声の音程というのは下図左のように結構ふらついています。歌のうまい下手の話ではなく、声の出始めのちょっとしたしゃくりあげとかビブラートだとかそういう微妙な変化があるからこそ人間の声だと認識しているわけですが、これを強制的に下図右のような階段状に補正してしまう事で人の声ではない違和感を作り出すのがケロケロエフェクトですね。

これを聴いた時に機械っぽい雰囲気を感じるポイントは、
- 音が持続している時の平坦さ
- 音程が変化する際の段差の急激さ
ケロケロの例
次に適当なボーカルの例があります。最初はスタッカート気味に一つひとつの音を区切った感じ、2回目はできるだけ音を繋いでのっぺりした感じで発音しています。これにKeroVeeを掛けたものは次のようになります。
音を1つずつ区切ってしまうと、下の図のように音程の変化部分の階段が途切れてしまうのでケロケロ効果半減です。

勿論好みもあるしどれくらいが良いかはケースによると思いますが、とにかくケロケロ感を出すためには変化の少ない連続的な音のピッチがある瞬間突然変化する事が必要ですので、音の頭で妙にしゃくったり強いアクセントを付けたりしない方が良い結果が出ると思います。更に、MIDIトラックを使って音程を指定するなら、元音が途切れている場合でも音が持続している所を狙って音程を変えてやる、なんていう方法もあります。タイミング的におかしくなければ、ですけど。

何にしてもケロケロエフェクトは曲のスケールを指定したりMIDIトラックを準備したりしないと効果的に掛かりませんので、はじめての人にはとっつきにくい部分があるのですが、その辺はちゃんとしてるけど思うような結果が出ないという時はエフェクトを掛けるとどうなるかを意識しつつ元音を作る必要があると思うわけです。
ということで、ケロケロは流行しすぎてもう結構と言われるかも知れませんが思う存分ケロケロしてくださいね。
Posted by g200kg : 7:00 PM : PermaLink
g200kg


Jpn
Eng
RSS Feed (日本語エントリ)
g200kg on Twitter
g200kg on Facebook