我想对 Wave 文件进行一些更改,然后直接播放。
所以我定义了一个字节数组来存储波形文件的字节,如下所示:
byte[] byteArr;
byteArr = File.ReadAllBytes(dlg.FileName);
其中 dlg 是一个 OpenFile 对话框。
然后我对波形的采样比特率进行如下更改:
private void playSlectedWave_Click(object sender, EventArgs e)
{
int sample = 50000;
MemoryStream fs = new MemoryStream(byteArr);
BinaryReader br = new BinaryReader(fs);
int length = (int)fs.Length-8;
fs.Position = 22;
short channels = br.ReadInt16();
fs.Position = 34;
short BitsPerSample = br.ReadInt16();
byte[] arrfile = new byte[fs.Length];
fs.Position = 0;
fs.Read(arrfile, 0, arrfile.Length);
BinaryWriter bw = new BinaryWriter(fs);
bw.BaseStream.Seek(0, SeekOrigin.Begin);
bw.Write(arrfile, 0, 24);
bw.Write(sample);
bw.Write((int)(sample* ((BitsPerSample * channels) / 8)));
bw.Write((short)((BitsPerSample * channels) / 8));
bw.Write(arrfile, 34, arrfile.Length - 34);
SoundPlayer SP = new SoundPlayer(fs);
SP.Play();
}
我的问题是,当它到达时,SP.Play()
它会抛出一个异常,指出 Wave Header 已损坏。
有关更多信息,我尝试使用以前的代码,但使用 FileStream 而不是 MemoryStream,它对我来说很好用。
有谁知道为什么?