My task is to decode a mp3 file, exclude its header, side information and the optional checksum. I just need the actual data of every frame of the mp3 file. I have googled a lot but did't find a way ! Can any one tell me a direct way to do that. I am using NAudio to access frames using ReadNextFrame() Any help will be appreciated.
问问题
3373 次
3 回答
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");
于 2013-09-17T07:44:28.353 回答
0
编辑:看起来这是一个欺骗问题,在这里得到了更好的回答。
原创:听起来你想要一个完整的 MP3 解码器,输出 main_data 块而不是解码它们。
两种选择:
- 构建您自己的阅读器(完成第三层的位储层计算),或
- 从现有解码器中删除音频解码逻辑并插入您的输出逻辑。
您可能可以应用一些技巧,这些技巧可以让您至少对某些标题/侧面信息进行短路解码,但这需要对规范有透彻的了解。
如果您需要从选项 #2 开始,请尝试搜索 NLayer、JLayer、libmad 或“dist10 源”。
于 2013-09-18T19:40:39.787 回答
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);
于 2020-06-18T12:42:00.050 回答