Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net Naudio无法完全读取WMA、OGG和AC3音频文件_.net_Naudio_Wma - Fatal编程技术网

.net Naudio无法完全读取WMA、OGG和AC3音频文件

.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,则

我无法使用NAUDIO完全读取WMA文件的音频内容(所有字节)

下面是两个失败的WMA音频文件示例

我的代码(简化)

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()