[ Jpn | Eng ]

Main Menu



Recent

最近の記事

Search

サイト内検索:

Archive

Powered by
MTOS 5.2.2


2013/05/21

FirefoxのWebAudioAPIのサポート状況

Twitter Google+ Facebook

現在 Firefox Aurora にデフォルトでオンの状態で入っています。
もうすぐFirefoxでも普通にWebAudioAPIが使えるようになるのは喜ばしい事なのですが、サポート状況が完全ではないため、問題が発生するケースがありそうです。

そんなに完全にチェックしたわけではないのですが、ちょっと触ってみた所、次のような気を付けるべき点があります。


  • オーディオコンテキストはプリフィックスなしのAudioContextになっています。
  • OscillatorNode、ConvolverNode、WaveShaperNodeがありません。
  • ノードの接続で信号のループを作ったり複雑な接続をすると正常に動かない場合があります。
  • BufferSourceNodeのplaybackRate、start()、stop()はパラメータや関数はありますが無効です。playbackRateは1に固定、再生は勝手に始まります。
  • BiquadFilterNodeのtypeは古い仕様の数値での指定は効きません。文字列で指定する必要があります。
  • DelayNodeは入力が途絶えるとバッファ内のデータを繰り返し出力し続けます。
  • PannerNodeは存在しますが、効いていないようです。

  • こんな感じですので、今の所ノードの機能を色々使った複雑なアプリを作るのは少し厳しいかも知れませんが、とりあえず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してみた、のだが。

    Twitter Google+ Facebook
    最近一部で話題の"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編

    Twitter Google+ Facebook

    WebAudioAPI解説に「コンボルバーの使い方」と「パンナーの使い方」を追加しました。

    Posted by g200kg : 2:26 PM : PermaLink

    2013/05/07

    インパルスレスポンス、WebAudioAPI、そしてOpenairlib

    Twitter Google+ Facebook

    インパルスレスポンスと言えばコンボリューションリバーブ。コンボリューションリバーブと言えば、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のちょっと困ったところ

    Twitter Google+ Facebook
    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 リリース

    Twitter Google+ Facebook

    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

    Twitter Google+ Facebook

    ジェスチャーシンセTeburinにフォルマント音源を搭載したので、WebGrooveと一緒にちょっと音出し。
    こんなのがブラウザだけでできるというのはなかなか感慨深いです。

    http://www.youtube.com/watch?v=3XdUvJNAYQ0

    Posted by g200kg : 6:20 AM : PermaLink

    2013/04/30

    Teburin

    Twitter Google+ Facebook

    AirThereminという名前のプロダクトが既にあったのと、テルミン・スペシャリストの@i_mecha氏よりテルミンというよりMiburiっぽいという意見をいただきましたので、名前を「AirTheremin」から「Teburin」に変えました。

    カメラ画像がでっかくなっています。ついでにちょっとデモ動画を撮ってみました。

    http://youtu.be/txY41cqiWiA

    Posted by g200kg : 6:04 PM : PermaLink

    2013/04/30

    AirTheremin

    Twitter Google+ Facebook

    WebカメラとWebAudioAPIを組み合わせたエアーテルミンを作ってみました。
    http://www.g200kg.com/airtheremin/

    動作させるにはカメラデバイスとChromeブラウザが必要です。
    カメラからの画像を解析してテルミン風に身振りで音源をコントロールできます。
    (注:テルミンをシミュレートしているわけではありません)

    カメラは最近のノートPCなんかだと大抵内蔵されていると思います。起動するとカメラ使用の問い合わせが出ますので、許可してください (なお残念ながらiOSデバイスだとまだ対応していないようです)。

    青っぽい画面でカメラ画像が表示されますが動きのある部分は赤くなります。緑色の玉が動きのある部分の中心を追いかけて行き、左右方向がピッチ、上下方向でフィルターを操作できます。また動きの激しさが音の大きさに対応しています。

    ※ WAAPISimを入れていますのでFirefoxでも動作しない事もないのですがオーディオ関係のパフォーマンスがちょっと厳しいのと、カメラ関係でエラーが出て少し挙動が不安定です。

    Posted by g200kg : 8:14 AM : PermaLink

    2013/04/28

    KievII : Webベースのオーディオプラグイン

    Twitter Google+ Facebook

    以前から存在は知っていて、その内ちゃんと触ってみようと思いつつそのままになっていたのですが、「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/プラグイン的なものを目指しているという違いはありますが。

    Meemoo

    WebMIDILink、K2H/Hyacinth、Meemooとそれぞれ目指しているゴールは近いところにあってそれぞれにアプローチしているわけですが、単に規格が乱立するという話ではなく補完しつつうまく繋がって行ければと思います。

    規格扱うメディアモジュールの接続
    WebMIDILinkMIDIウインドウ間
    K2H/Hyacinthオーディオウインドウ内
    Meemooビデオ/オーディオ/MIDIウインドウ内⇒ウインドウ間に変更

    Posted by g200kg : 3:42 PM : PermaLink

    2013/04/27

    WebSequencerを少し修正

    Twitter Google+ Facebook

    先日某氏よりリクエストのあったWebSequencerのオートプレイと再生ボタンがわかりにくい件を改善してみた。

    URL形式で保存する際に自動再生を指定する事ができるようになりました。[SaveFile]で表示されるリンクの隣のチェックボックスで指定します。URLとしてはパラメータにplay=1またはp=1を追加すると自動再生です。
    また、トランスポート関係のボタンはかなりでっかくして目立つように変更しています。
    WebSequencer (autoplay)

    Posted by g200kg : 5:56 AM : PermaLink

    2013/04/23

    JKnobMan 1.2.6 リリース

    Twitter Google+ Facebook

    JKnobManを1.2.6にアップデートしました。

    JKnobMan 1.2.6
    * BugFix: ダイナミックテキストの編集中にハングする事があったのを修正

    1点のみ修正しました。

    Posted by g200kg : 9:08 PM : PermaLink

    2013/04/23

    AVIDはWebサイトのメンテをもう少しちゃんとしないと

    Twitter Google+ Facebook

    いかんのではないだろうか。
    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更新プログラムの不具合

    Twitter Google+ Facebook

    一週間ほど前に凄く久しぶりのブルースクリーンを見て以来どうもPCが不調で、タイミング的に話題になっていた更新プログラムKB2823324関連の問題ではないかと思いつつもそのまま様子を見ていたのだが、今日はついにブラウジング中に無言でリブートしやがった。

    Microsoftの更新プログラムに不具合、アンインストールを勧告

    やっぱりさっさとアンインストールするべきだったようだ。
    ちなみにアンインストールは
    「コントロールパネル」=>「プログラム」=>「インストールされた更新プログラムを表示」から KB2823324 を探して右クリック=>「アンインストール」

    Posted by g200kg : 9:10 PM : PermaLink

    2013/04/16

    ケロケロしたい人へのヒント

    Twitter Google+ Facebook

    おかげさまで結構たくさんの人にKeroVeeを使ってもらっているのですが、ケロケロエフェクトという奴はそれなりにノウハウが必要なエフェクトですので、ちょっとそのあたりを掘り下げてみます。

    そもそもケロケロエフェクトというものについて


    人間の声の音程というのは下図左のように結構ふらついています。歌のうまい下手の話ではなく、声の出始めのちょっとしたしゃくりあげとかビブラートだとかそういう微妙な変化があるからこそ人間の声だと認識しているわけですが、これを強制的に下図右のような階段状に補正してしまう事で人の声ではない違和感を作り出すのがケロケロエフェクトですね。

    これを聴いた時に機械っぽい雰囲気を感じるポイントは、
    • 音が持続している時の平坦さ
    • 音程が変化する際の段差の急激さ
    の2つがあります。中でも2番目の音程の階段状の変化がケロケロ的には重要なのですが、これをうまく作るにはやっぱり元音が重要だと思うわけです。

    ケロケロの例

    次に適当なボーカルの例があります。最初はスタッカート気味に一つひとつの音を区切った感じ、2回目はできるだけ音を繋いでのっぺりした感じで発音しています。

    00623.mp3 (kerosample-o.mp3)

    これにKeroVeeを掛けたものは次のようになります。

    00624.mp3 (kerosample-e.mp3)

    音を1つずつ区切ってしまうと、下の図のように音程の変化部分の階段が途切れてしまうのでケロケロ効果半減です。

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


    何にしてもケロケロエフェクトは曲のスケールを指定したりMIDIトラックを準備したりしないと効果的に掛かりませんので、はじめての人にはとっつきにくい部分があるのですが、その辺はちゃんとしてるけど思うような結果が出ないという時はエフェクトを掛けるとどうなるかを意識しつつ元音を作る必要があると思うわけです。

    ということで、ケロケロは流行しすぎてもう結構と言われるかも知れませんが思う存分ケロケロしてくださいね。

    Posted by g200kg : 7:00 PM : PermaLink

    g200kg