2010-05-18 33 views

回答

2

这是在C#中的读取和写入WAV文件的一个很好的示例项目:

http://www.codeproject.com/KB/audio-video/Concatenation%5FWave%5FFiles.aspx

假设你的“原始音频”是短(2字节)整数数组,这是一个简单的任务。 WAV文件的标题为44个字节(请参阅注释),因此您先写出标题(使用示例中的代码),然后再写入数据。

注意:并非所有的WAV文件都是“规范的”,这意味着它们并不都具有44字节的标头,后面跟着数据。 WAV格式实际上是一种RIFF格式,这意味着它们可以包含各种不同的数据,并且标题不一定在开头。然而,这些都不重要,因为你只是 WAV文件。

更新:如果语音识别程序期待一个流(而不是一个文件路径),可以很容易地创建一个MemoryStream这样的:

byte[] bytes = System.IO.File.ReadAllBytes("c:\whatever.wav"); 
System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes); 

或者你能避免文件I/O总而言之,首先创建您的WAV文件作为内存中的字节数组,然后从中创建MemoryStream

+0

非常感谢您的回答! 我曾阅读过关于规范的WAV文件格式等。 链接中的代码/项目对此很有帮助。 流怎么样,你可以告诉一些关于流的东西吗? 另外,这个文件(如果最后是文件而不是流?!)将被语音识别程序读取 - 所以头文件等无所谓。 – refugee 2010-05-19 13:12:03

+0

@refugee:我假设语音识别程序将一个流作为输入,并持续监视流中的新数据。您可能需要包含有关此程序的更多详细信息以及它期望的输入类型。 WAV *文件头*包含一个值,表示后面数据的大小 - 如果程序期望开放式流,则不适用。这可能是因为您的语音识别程序需要一个初始调用,告诉它它将使用什么格式的流数据,然后是实际的数据流。 – MusiGenesis 2010-05-19 13:31:40

相关问题