Nicotto Town


毎日えんやこらせっせ


MS GS音源でピッチベンドが使えなくなった理由

 Vistaや7でもテルミンもどきが動くようにって事で作り始めた、ピッチ変更ルーチンですが、やっと納得行くものが完成した。もっとも、馬鹿正直にアンチエイリアス掛けてサンプリングし直してるだけなので、これくらいまでは誰でも辿り着けるだろう。ただ、音程の切り替え時にプチノイズが乗るので困り果ててる。orz

 それでまあ、色々調べたらぶち当たったのが、次のAPI

    waveOutSetPlaybackRate, waveOutSetPitch

 けったいなAPIだ、それぞれの効果としては再生時のスピードの変更やピッチの変更くらいにしか使えない。普通は使わないようなこんなのをOSが持ってるのも変な話で、実際Vista以降はAPIのスタブは有るけど、未実装らしい。なるほど、MS GSドライバがWaveOut APIを直接使ってるとは思わないけど、ピッチベンドのためにこのルーチンを使ってたって事なんだろうな。MS GSドライバはVistaになったからといって、どこが変わったわけでも無く、ピッチベンド時にはこのルーチン呼びに行くんだけど、OSが対応していないだけなんだ。トホホ

 似たような機能は今ではDirectXが実装してて、DirectXで動くMS GSドライバのような、DAWのようなもの

    Microsoft DirectMusic Producer

ではピッチベンドもサポートしてる。これも自前でピッチベンドしてるんじゃなくて、DirectXのルーチン使ってるって事なんだろう。そして、未だにDirectXはOS後付なだけあって、Midiドライバとして簡単には使えない。そもそもエクセルさえあればどんな環境でも動くってのが目標だったしな。w

 ここまで来てだいたい肝は見えた。たとえカリカリに速い言語を使ったとしても、ここのところは避けて通れないので、VBAで試してみる値打ちはある。もうすでにVBAではやり過ぎだろうな感じだけど、もう一息なので行くところまで行ってしまおう。www

 ところで、スムーズな音程切り替えが出来ないのは同じだけど、自由な音程を出す方法としてBeepがあります。これがまたVista以降だと色々すったもんだがあって、VBAだと素直に使えないので困る。orz Beepに関する面白英訳コラムはこちら。

●Windows 7のBeep ドライバってどうなったのさ?
  http://cpplover.blogspot.com/2010/01/windows-7beep.html

アバター
2012/01/06 20:53
BeepもCPUパワー食ってよければ意外と何でもありだったりするのだけどな。
ぴーとかしかならない組み込みのマイコン見てると、コード書き直したくなる。
昨今のマイコンだと多分Beepだけでも和声出せるよなw
まぁ使われ方にもよるんだけど、メイン基板からもらった処理を下請けするくらいなら、もうちょい頑張れるだろとか。
P/ECEとかいう地味に消えていったガヂェットも、あれって直接スピーカーたたいて鳴らしてたような記憶。



Copyright © 2025 SMILE-LAB Co., Ltd. All Rights Reserved.