WASAPIのテスト
Delphi6でWASAPIを使ってWaveサウンドを再生させてみました。
WASAPIの排他モードで動きます。
完全ロスレスです。データは24bitで送信しているので、
24bitのwavサウンドはボリュームを落とせません。(ビットが欠けるため)
16bitのwavサウンドは、8bitの範囲でボリュームが可変できます。
浮動小数点などは使っていないので、出力の「デジタルデータ」の品質は、生データの品質を保っています。
(ボリュームを落とすと、DACのSNなどで劣化するとは思いますが。)
ヘッダがなかったのでちょっと大変でしたが、一応できました。
サポートするつもりはほとんどないので、私の環境で動けばいいかな?
くらいなのですが、公開してみます。
ファイルは読み込まれるとメモリにすべて読み出され、
メモリから再生されます。
filetypesman-x64などで、wavファイルをこのプログラムで開くようにすると
(openなどを上書きせずにopen2などのコマンドを作ってデフォルトにしたほうが後々よいです)
このプログラムでWavファイルを再生することができます。
対応しているのは、wavサウンド(16bit,24bit)のみ。
対応デバイスは、2ch, ビット長(32bitまたは24bit), 有効ビット24bit, レイテンシ200ms。
もう少し手を加えればいろいろ対応できるとは思うのですが・・・。
ソースコード(いろいろ無いのでこのままでは動きません)
2017.11.02
一部のページのファイルが破損する出来事がありました。
不正アクセスや、改ざんとは少し違いますが、念のため実行可能ファイルは
削除します。
ご迷惑をおかけします。
使ってみられる方は、まず、メインメニューの「開く」でファイルが正常に再生されるかどうか
試してみるといいと思います。再生されないようならopenの設定をしても開けません。
排他モードを使いますので、排他モードを使うチェックを入れておいてください。
WASAPIでIAudioClientをInitializeするときにひっかかったのが
WAVEFORMATEXTENSIBLE構造体のcbSizeの値です。
sizeof(WAVEFORMATEXTENSIBLE)にすると失敗するデバイスがあります。
22とかいう数字にしないといけません。
PlayPCMWinのソースを読んでわかりましたが、普通は気づかないですね。
戻る