2011-09-28
■SDLでサウンドキャプチャ(失敗)
マイクから入力した音にエフェクトをかけてリアルタイムに出力する
プログラムを作ろうとしている。
とりあえずSDL Audioで波形を指定しながら流していく出力はうまくできた。
環境はWindowsXPで、言語はD言語。
次はマイクからの入力だけれど、SDL1.2ではサウンドキャプチャのAPIが
まだ実装されていなくて、開発中の1.3で実装される予定らしい。
http://torsion.org/witten/sdl/
ここで、SDL1.2.4でサウンドキャプチャできるようにしたパッチを発見。これを使えばSDL1.2で音を取り込める、のだろうか?
とりあえず試してみた。あとから同じようなことをするときに
困らないように自分用メモ。
今回やったことは
SDLのソース(SDL1.2.4.tar.gz)を探してダウンロード。
BCCをインストール
patchは、http://cetus.sakura.ne.jp/softlab/toolbox1/index.html
のpatch.exe(windows版)を使わせてもらう。
SDLのソースのroot directoryにdiffファイルを持ってきて、
patch.exeにパスを通した状態で、
patch.exe -p 1 < SDL-1.2-record.diff
これでソースが変更される。
Borland/freebccディレクトリで、
make -f SDL.mak
でSDLをビルド。
出来上がったSDL.dllからDMDのimplibでD言語用libファイルを作成。
これで、DLLとインポートライブラリはOKのはず。
これで desired_spec.format |= AUDIO_INPUTでrecordingを指定してみたが、一般保護違反で落ちる。
いろいろ弄ってもうまくいかず。
ADUIO_OPTPUTは問題なく動く。
D言語周辺がなにかまずいのか?
ここで、ダメ元で同じのをCで書いてBCCでコンパイルしてみる。
結局、Cで書いてみたけれど、おんなじところで落ちる。
環境がWindowsなのもまずいのかもしれない。
SDLの描画関連のAPIには慣れているので、リアルタイムエフェクトソフトを作るときに、SDLで全部完結してしまえば楽だと思ったけれど、どうも難しい気がする。
出力ONLYのソフトシンセならSDLだけで十分作れそう。
でもやっぱりエフェクタが作りたいので、次はPortAudioやOpenALについて調べてみよう。




