我的任务是解码mp3文件,排除其标题,辅助信息和可选的校验和。我只需要mp3文件每一帧的实际数据。 我google了很多但没找到方法! 任何人都能告诉我一个直接的方法。我正在使用NAudio使用ReadNextFrame()访问帧 任何帮助将不胜感激。
答案 0 :(得分:1)
如http://mark-dot-net.blogspot.de/2010/11/merging-mp3-files-with-naudio-in-c-and.html中所述,您可以将代码更改为:
public static byte[] GetRawMp3Frames(string filename)
{
using(MemoryStream output = new MemoryStream()) {
Mp3FileReader reader = new Mp3FileReader(filename);
Mp3Frame frame;
while ((frame = reader.ReadNextFrame()) != null)
{
output.Write(frame.RawData, 0, frame.RawData.Length);
}
return output.ToArray();
}
}
然后你可以这样处理只有帧的字节:
var btAllFrames = GetRawMp3Frames("MyMp3.mp3");
答案 1 :(得分:0)
编辑:看起来这是一个更好的回答问题here。
ORIGINAL: 听起来你想要一个完整的MP3解码器来输出main_data块而不是解码它们。
两个选项:
您可以应用一些技巧,这些技巧可以让您至少对某些标题/边信息进行短路解码,但这需要彻底了解规范。
如果您需要选择#2选项,请尝试搜索NLayer,JLayer,libmad或“dist10 source”。
答案 2 :(得分:0)
显然NAudio使用NLayer。
这对我有用
byte[] data = File.ReadAllBytes("path/to/file.mp3");
var memStream = new System.IO.MemoryStream(results);
var mpgFile = new NLayer.MpegFile(memStream);
var samples = new float[mpgFile.Length];
mpgFile.ReadSamples(samples, 0, (int)mpgFile.Length);