我为这个answer解决了我的问题。 我想要将带有字节数组类型的数据库的2个波形文件连接在一起并播放然后处理它!
这是我的代码:
public static void Play()
{
List<byte[]> audio = dal.SelectSound("خدمات", "احیاء");
byte[] sound = new byte[audio[0].Length + audio[1].Length];
Stream outputSound = Concatenate(sound, audio);
try
{
WaveFileReader wavFileReader = new WaveFileReader(outputSound);
var waveOut = new WaveOut(); // or WaveOutEvent()
waveOut.Init(wavFileReader);
waveOut.Play();
}
catch (Exception ex)
{
Logs.ErrorLogEntry(ex);
}
}
public static Stream Concatenate(byte[] outputFile, List<byte[]> sourceFiles)
{
byte[] buffer = new byte[1024];
Stream streamWriter = new MemoryStream(outputFile);
try
{
foreach (byte[] sourceFile in sourceFiles)
{
Stream streamReader = new MemoryStream(sourceFile);
using (WaveFileReader reader = new WaveFileReader(streamReader))
{
int read;
while ((read = reader.Read(buffer, 0, buffer.Length)) > 0)
{
streamWriter.Write(buffer, 0, read);
}
}
}
}
return streamWriter;
}
但是我收到了这个错误:
不是WAVE文件 - 没有RIFF标题
执行此行后:
WaveFileReader wavFileReader = new WaveFileReader(outputSound);
提前致谢。
答案 0 :(得分:3)
WAV文件不仅仅是一个字节数组,每个WAV文件都有一个44字节的标题(RIFF标题)来告诉任何软件如何播放它。除此之外,这个标题包含有关文件长度的信息,因此在连接两个WAV文件时,你最终会遇到两个大问题。首先,第一个WAV文件在开始时仍然会有旧标题,这将告诉你的软件文件比实际文件短,其次,第二个WAV文件的标题将卡在新文件的中间,如果你回放它可能听起来很奇怪!
因此,当您连接文件时,您需要执行以下操作:
WaveFileReader wavFileReader = new
WaveFileReader(outputSound);