マネージ コードを使用して音楽プレーヤーを開発しており、Microsoft.DirectX.DirectSound を使用しています。play メソッドを呼び出すと、「値が期待される範囲内にありません」というエラーが表示されます。したがって、問題は 24 ビットの WAV ファイルのみです。それが例外の理由でした。16ビットファイルの場合は正常に動作しています。24ビットファイルでも機能させる方法はありますか?
ありがとうございました!
using Microsoft.DirectX.DirectSound;
using DS = Microsoft.DirectX.DirectSound;
.......
private DS.Device sounddevice;
private DevicesCollection AuioDevList;
//Create buffer
private SecondaryBuffer secondaryBuffer;
private BufferDescription d = new BufferDescription();
private void initializeSound()
{
// List all Audio Cards
AuioDevList = new DevicesCollection();
// Populate cmbAudioCards
cmbAudioCards.Items.Clear();
for (int i = 0; i < AuioDevList.Count; i++)
{
cmbAudioCards.Items.Add(AuioDevList[i].Description);
}
cmbAudioCards.SelectedIndex = 0;
sounddevice = new DS.Device(AuioDevList[0].DriverGuid);
sounddevice.SetCooperativeLevel(this.Handle, CooperativeLevel.Normal);
// Set descriptor’s flags
d.ControlPan = true;
d.ControlVolume = true;
d.ControlFrequency = true;
d.ControlEffects = true;
}
private void prepareSound(string file)
{
playing = false;
//secondaryBuffer.Stop();
secondaryBuffer = new SecondaryBuffer(file, d, sounddevice);
secondaryBuffer.Volume = trkVolume.Value;
}
private void btnPlay_Click(object sender, EventArgs e)
{
//Here is throwing exception
secondaryBuffer.Play(0, BufferPlayFlags.Default);//
}