.net Naudio无法完全读取WMA、OGG和AC3音频文件
我无法使用NAUDIO完全读取WMA文件的音频内容(所有字节) 下面是两个失败的WMA音频文件示例 我的代码(简化).net Naudio无法完全读取WMA、OGG和AC3音频文件,.net,naudio,wma,.net,Naudio,Wma,我无法使用NAUDIO完全读取WMA文件的音频内容(所有字节) 下面是两个失败的WMA音频文件示例 我的代码(简化) Dim myReader作为新的NAudio.Wave.AudioFileReader(stringAudioFileURL) 将myAudioData设置为字节(myWaveReader.Length-1) myReader.Read(myAudioData,0,myReader.Length) 如果是myReader.Position myReader.Length,则
Dim myReader作为新的NAudio.Wave.AudioFileReader(stringAudioFileURL)
将myAudioData设置为字节(myWaveReader.Length-1)
myReader.Read(myAudioData,0,myReader.Length)
如果是myReader.Position myReader.Length,则
抛出新System.Exception(“读取文件结尾失败!”)
如果结束
myReader.Dispose()
对于提供的两个示例文件,AudioFileReader无法读取文件(AudioFileReader.Length)的末尾(所有字节)
我可以在Windows Media Player中打开并成功播放这两个文件
根据进一步的测试…同样的问题也发生在NAUDIO中,OGG和AC3格式的音频文件
谢谢!还有…你好,感谢马克·希思为《纳迪奥》!。。。一个伟大的微软视窗音频工具集 我想说问题是因为没有在循环中调用
myReader.Read()
,因为它会覆盖,但是我用第一个文件尝试了你的代码,第一个调用Read()
返回47562752
,第二个返回0
,所以它只能读取。我既不熟悉NAudio,也不熟悉WMA文件的结构,但我认为结尾的16208
字节可能是音频容器本身或其他非音频数据。我最初使用循环进行读取…就像这样…而iBytesLeftToRead>0 iBytesToRead=System.Math.Min(iBytesLeftToRead,readBuffer.Length)samplesReadPrior=samplesRead samplesRead+=myWaveReader.Read(readBuffer,0,iBytesToRead)数组.Copy(readBuffer,0,myAudioData,samplesReadPrior,iBytesToRead)iBytesLeftToRead=CType(myWaveReader.Length-myWaveReader.Position,Integer)End While'但当我的循环无法读取文件的最后16208字节时,它变成无限循环。我使用Dim byteslaining=myReader.Length Dim lastReadCount=myReader.read(myAudioData,0,byteslaining)而lastReadCount>0 byteslaining-=lastReadCount lastReadCount=myReader.read(myAudioData,myReader.Length-bytesRemaining,bytesRemaining)在
结束时结束。循环正确退出,因为该条件基于Read()
的结果,但它不会读取比原始无环版本更多的数据。
Dim myReader As New NAudio.Wave.AudioFileReader(stringAudioFileURL)
Dim myAudioData As Byte(myWaveReader.Length - 1)
myReader.Read(myAudioData, 0, myReader.Length)
If myReader.Position <> myReader.Length Then
Throw New System.Exception("Failed to read to end of file!")
End If
myReader.Dispose()