在 NAudio 中添加 WAV 标头
Posted
技术标签:
【中文标题】在 NAudio 中添加 WAV 标头【英文标题】:Prepend WAV Header in NAudio 【发布时间】:2016-09-05 10:15:07 【问题描述】:我正在使用 MediaFoundationReader 和 ResamplerDmoStream 将 MP4(音频)文件重新采样到 WAV 到 WaveFormat(16000, 16, 1)。重新采样后,我将流发送到语音 API 进行转录,但 API 失败,因为流不包含 WAV 标头。 如果我将流保存到 WAV 文件(使用 WaveFileWriter),再次读取文件,然后将流发送到 API,那么 API 可以工作,因为流包含 WAV 标头。 有没有办法在 ResamplerDmoStream 重采样后将 WAV 标头添加到流中,以防止耗时的 I/O?
【问题讨论】:
【参考方案1】:您可以使用WaveFileWriter
写信给Stream
。所以在这种情况下,我会写信给MemoryStream
,并且必须处理WaveFileWriter
才能正确完成WAV 标头。但是你会得到一个 WAV 文件的内存表示。
需要注意的是,当您处理WaveFileWriter
时,您可能最终会处理MemoryStream
,因此我在NAudio 中有一个名为IgnoreDisposeStream
的便利类,您可以将MemoryStream
包裹起来以阻止它获取使用前丢弃。
【讨论】:
感谢您的详细解释。使用 ResamplerDmoStream 在 API 端提供了不一致的结果,所以最终我最终改用了 MediaFoundationResampler。我尝试了 WaveFileWriter.Write,但它需要知道字节数组的长度才能创建适当大小的流,并且 MediaFoundationResampler 不提供长度的 getter。如何从 MediaFoundationResampler 创建适当大小的流?以上是关于在 NAudio 中添加 WAV 标头的主要内容,如果未能解决你的问题,请参考以下文章