【发布时间】:2012-01-13 11:58:50
【问题描述】:
我必须设计一个播放声音的程序(来自 WAV 文件)。我必须创建一个 wav 并播放它。完成后,我必须更改该波形文件的内容并再次播放。这就像播放一个不断变化的波形文件。我想创建一个流,但问题是当我编辑该流时(使用 ms.Postion 和 ms.WriteByte),出现错误,提示“wave 头文件已损坏”。以下是我的代码:
MemoryStream ms = new MemoryStream(Sample1);
SoundPlayer myPlayer = new SoundPlayer(ms);
myPlayer.Play(); //Wav file plays
for (int x = 0; x < 50; x++)
{
ms.Position = 44 + x;
ms.WriteByte(10);
}
myPlayer.Stop();
myPlayer.Play(); //Header file corrupt
是否有另一种方法可以循环播放流,并在播放时更改其内容。例如,流正在循环 Sound1,每当按下按钮时,流的内容都会更改为播放 Sound2。
谢谢!
【问题讨论】:
-
尝试将整个内存流写入一个文件,看看
SoundPlayer是否在做一些意想不到的事情,比如不使用规范的 .wav 文件格式。不编辑内存流时Sample1会播放吗? -
是的,当我不编辑内存流时它会播放
-
现在我已经设法通过更改数组“Sample1”的内容来更改流的内容。问题是当我运行声音播放器(即 myPlayer.PlayLooping)时,我只能听到原始流的内容。我找不到将声音播放器设置为播放新流的方法。谢谢
-
头文件损坏是因为开始播放时,内存流中的位置不为0。要解决这个问题,首先需要写入整个内存流,设置文件长度在标题中,将位置设置为 0 并开始播放。