Csharp/C#教程:使用NAudio解码mu-law音频分享


使用NAudio解码mu-law音频

我正在尝试使用NAudio将mu-law编码音频解码为pcm音频。 我的服务是POST原始mu-law编码的音频字节,我从NAudio得到一个错误,数据没有RIFF标题。 我需要以某种方式添加它吗? 我正在使用的代码是:

WaveFileReader reader = new WaveFileReader(tmpMemStream); using (WaveStream convertedStream = WaveFormatConversionStream.CreatePcmStream(reader)) { WaveFileWriter.CreateWaveFile(recordingsPath + "/" + outputFileName, convertedStream); } 

我也将原始数据保存到磁盘并在Matlab中进行解码,这没有问题。 谢谢。

由于您只有原始的mu-law数据,因此无法在其上使用WaveFileReader。 而是创建一个inheritance自WaveStream的新类。

在其Read方法中,从tmpMemStream返回数据。 作为WaveFormat返回一个mu-law WaveFormat。

这是一个你可以使用的通用助手类:

 public class RawSourceWaveStream : WaveStream { private Stream sourceStream; private WaveFormat waveFormat; public RawSourceWaveStream(Stream sourceStream, WaveFormat waveFormat) { this.sourceStream = sourceStream; this.waveFormat = waveFormat; } public override WaveFormat WaveFormat { get { return this.waveFormat; } } public override long Length { get { return this.sourceStream.Length; } } public override long Position { get { return this.sourceStream.Position; } set { this.sourceStream.Position = value; } } public override int Read(byte[] buffer, int offset, int count) { return sourceStream.Read(buffer, offset, count); } } 

现在,您可以像以前一样继续创建转换后的文件,并将RawSourceWaveStream作为输入传递:

上述就是C#学习教程:使用NAudio解码mu-law音频分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 var waveFormat = WaveFormat.CreateMuLawFormat(8000, 1); var reader = new RawSourceWaveStream(tmpMemStream, waveFormat); using (WaveStream convertedStream = WaveFormatConversionStream.CreatePcmStream(reader)) { WaveFileWriter.CreateWaveFile(recordingsPath + "/" + outputFileName, convertedStream); } 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/998415.html

(0)
上一篇 2021年12月27日
下一篇 2021年12月27日

精彩推荐