如何在C#中从原始音频样本创建波形流?

5

如何在C#中从原始音频样本创建波形流?


@Jake:“原始音频”怎么样?它是互联网上99%的MPEG音轨的声音。 - MusiGenesis
你想使用C#读取一个.wav文件吗? - anishMarokey
我已经实现了一个设备,包括麦克风/前置放大器/ADC电路,用于捕获语音命令 - 数字化的音频在FPGA上进行处理,并通过以太网发送到PC。UDP接收器正在提取16位样本(每个数据包64个)。采样等特征已知(当然)。现在我需要将这些样本转换成某种波形流,以便输入到语音识别程序中。谢谢。 - refugee
1个回答

2
以下是一份在C#中读写WAV文件的良好示例项目:http://www.codeproject.com/KB/audio-video/Concatenation%5FWave%5FFiles.aspx。假设您的“原始音频”是一个短整型(2字节)整数数组,这是一个简单的任务。 WAV文件的头部是44个字节(请参见注释),因此您需要首先写出头部(使用示例中的代码),然后是数据。
注意:并非所有WAV文件都是“规范”的,这意味着它们不都有一个由44个字节组成的头部,后面跟着数据。 WAV格式实际上是一种RIFF格式,这意味着它们可以包含各种不同的数据,并且头部不一定在开头。 但是,由于您只是写入WAV文件,所以所有这些都无关紧要。
更新:如果语音识别程序期望流(而不是文件路径),则可以像这样轻松创建MemoryStream:MemoryStream
byte[] bytes = System.IO.File.ReadAllBytes("c:\whatever.wav"); 
System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes); 

或者您可以完全避免文件I/O,并在第一次创建WAV文件时将其作为内存字节数组创建,并从中创建MemoryStream


非常感谢您的回答! 我已经了解了规范的WAV文件格式等内容。 您链接中的代码/项目对此非常有帮助。 那么关于流媒体,您能否介绍一些相关信息呢? 此外,这个文件(如果最终是文件而不是流?!)将被语音识别程序读取 - 因此头文件等确实很重要。 - refugee
@refugee:我假设语音识别程序以流的形式作为输入,并持续监视新数据的流。您可能需要包含有关此程序及其所期望的输入类型的更多详细信息。WAV 文件的标题包括一个值,指示随后的数据大小 - 如果程序期望无限制的流,则不适用。也许您的语音识别程序期望初始调用,告诉它流数据将采用什么格式,然后是实际的数据流。 - MusiGenesis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接