PCは、何でもできる箱である。
スピーカーとキーボードが付いているのだから、楽器になるはず。
まずMIDIで音を鳴らしてみる。色々な音色が使えるのは嬉しいが、遅延が酷い。
これはこれで楽しいが、演奏するという用途で考えると論外。
そこで、WAVファイルを用意してPlaySoundで再生してみる。
あるいは、waveOut系のAPIを使って、リアルタイムで波形を作ってみる。
これも、MIDIよりはうんとマシだが、確かに遅延が存在する。
キーボードを押すと音が出るようにして、ちょっと連打してみると、
どの音がどの打鍵に対応しているのか、わからなくなってしまう。
これらも演奏用途としてはギリギリ許容範囲外。
waveOutほどの低レベルなことをやってダメなのだから、これに関しては諦めていた。
このスペックのハードウェアを使って、原理的には可能であろうことが、
現状のWindows環境(当時XP)ではできない。悔しいが仕方ない。
が、最近になって、Windows Vistaで音量を変えるAPIを調べていたときに、
Core Audio APIsの存在を知った。EndpointVolume APIで音量の設定ができる。
そしてWASAPIが、自分が求めていた神APIだった(Vista以降で使える)。
これを排他モード(他ソフトから音が出なくなる)で使うと、遅延を感じない。
キーボードの打鍵音に、はり付くように鳴ってくれて非常に気持ちがいい。
共有モードでは遅延を感じるが、まあ許容範囲である(Vista環境)。
この共有モードの遅延はWindows 7で改善されているらしい。
以下、リンク集。
楽しいハック講座 (4) Windows7 オーディオアーキテクチャの概要 - Windows Multimedia Hacks - Site Home - MSDN Blogs
わかりやすい解説記事。
Google Code Archive - Long-term storage for Google Code Project Hosting.
ここは必見。ソースも公開されている。他のページも勉強になる。
Download: Windows SDK Update for Windows Vista - Microsoft Download Center - Download Details
少し古いSDK。サンプルだけならすぐインストールできる。
"WinAudio"というサンプルがあって、共有モードで音を鳴らすことができる。