C# 使用NAudio直接从转换后的MP3文件中读取示例

C# 使用NAudio直接从转换后的MP3文件中读取示例,c#,mp3,naudio,C#,Mp3,Naudio,我尝试使用NAudio从(转换的)MP3文件中读取PCM样本,但失败,因为read方法每次返回零(表示EOF) 示例:这段代码尝试读取单个16位样本,始终打印“0”: 输出: 16 bit PCM: 44kHz 2 channels 0 16 bit PCM: 44kHz 2 channels 2 但是这个从WAV文件读取的版本工作得很好(我使用iTunes将MP3转换为WAV,所以它们应该包含类似的示例): 输出: 16 bit PCM: 44kHz 2 channels 0 16 bi

我尝试使用NAudio从(转换的)MP3文件中读取PCM样本,但失败,因为
read
方法每次返回零(表示EOF)

示例:这段代码尝试读取单个16位样本,始终打印“0”:

输出:

16 bit PCM: 44kHz 2 channels
0
16 bit PCM: 44kHz 2 channels
2
但是这个从WAV文件读取的版本工作得很好(我使用iTunes将MP3转换为WAV,所以它们应该包含类似的示例):

输出:

16 bit PCM: 44kHz 2 channels
0
16 bit PCM: 44kHz 2 channels
2

这是怎么回事?两个流具有相同的波形格式,因此我希望能够使用相同的API来读取样本。设置
位置
属性也没有帮助。

您可能需要读取较大的数据块。NAudio使用ACM执行从MP3到WAV的转换,如果目标缓冲区不够大,编解码器可能会拒绝转换任何数据。换句话说,在读取第一个样本之前,需要转换样本块


WAV文件是另一回事,因为它很好而且很容易从中读取单个样本。

我假设
BlockAlignReductionStream
可以做到这一点。也许我需要给它传递一个参数,告诉它分配一个更大的缓冲区?是的,块对齐减少流在某些情况下确实可以帮助您,但它在Read方法中计算的sourceReadCount可能是0或太低。如果您可以调试以查看sourceReadCount的计算结果,那将非常有趣。也许我可以帮你修理一下