我有一个文件.ogg,我需要将它转换为.wav。我打算使用Opus.Net (使用NAudio),但是在OpusDecoder.Decode()中得到了这个异常:
"System.Exception:‘解码失败- InvalidPacket'“
这是代码:
byte[] audioBynary = File.ReadAllBytes($"{filePath}{fileOgg}");
_decoder = OpusDecoder.Create(48000, 1);
var pcmBinary = _decoder.Decode(audioBynary, audioBynary.Length, out int decodedLenght);
WaveFileWriter.CreateWaveFile($"{filePath}{fileWav}", new WaveFileReader(new MemoryStream(pcmBinary)));发布于 2018-06-20 14:43:46
对我来说,我使用Concentus读取ogg/opus文件,将其字节复制到memoryStream中,然后使用它创建一个RawSourceWaveStream。我可以从ISampleProvider中获得一个RawSourceWaveStream,这就是您需要为WaveFileWriter.CreateWaveFile16提供的内容。
沃伊拉
var filePath = $@"C:\Users\blabla\foo\bar\";
var fileOgg = "testAudio.ogg";
var fileWav = "testAudio.wav";
using (FileStream fileIn = new FileStream($"{filePath}{fileOgg}", FileMode.Open))
using (MemoryStream pcmStream = new MemoryStream())
{
OpusDecoder decoder = OpusDecoder.Create(48000, 1);
OpusOggReadStream oggIn = new OpusOggReadStream(decoder, fileIn);
while (oggIn.HasNextPacket)
{
short[] packet = oggIn.DecodeNextPacket();
if (packet != null)
{
for (int i = 0; i < packet.Length; i++)
{
var bytes = BitConverter.GetBytes(packet[i]);
pcmStream.Write(bytes, 0, bytes.Length);
}
}
}
pcmStream.Position = 0;
var wavStream = new RawSourceWaveStream(pcmStream, new WaveFormat(48000, 1));
var sampleProvider = wavStream.ToSampleProvider();
WaveFileWriter.CreateWaveFile16($"{filePath}{fileWav}", sampleProvider);https://stackoverflow.com/questions/50932145
复制相似问题