确定音频文件是否为VBR
我试图确定音频文件是否在Cocoa应用程序(OS X 10.8+)中使用VBR。确定音频文件是否为VBR
AVFoundation似乎根本无法回答这个问题,AudioToolbox对我说谎。
下面的代码坚定地声称,我扔在它的任何MP3文件是VBR;即使文件,其中我知道这是不是(与MediaInfo交叉检查)
OSStatus result = noErr;
UInt32 size;
AudioFileID audioFile;
AudioStreamBasicDescription audioFormat;
AudioFormatPropertyID vbrInfo;
// Open audio file.
result = AudioFileOpenURL((__bridge CFURLRef)originalURL, kAudioFileReadPermission, 0, &audioFile);
if(result != noErr)
{
NSLog(@"Error in AudioFileOpenURL: %d", (int)result);
return;
}
// Get data format
size = sizeof(audioFormat);
result = AudioFileGetProperty(audioFile, kAudioFilePropertyDataFormat, &size, &audioFormat);
if(result != noErr)
{
NSLog(@"Error in AudioFileGetProperty: %d", (int)result);
return;
}
// Get vbr info
size = sizeof(vbrInfo);
result = AudioFormatGetProperty(kAudioFormatProperty_FormatIsVBR, sizeof(audioFormat), &audioFormat, &size, &vbrInfo);
if(result != noErr)
{
NSLog(@"Error getting vbr info: %d", (int)result);
return;
}
NSLog(@"%@ is VBR: %d", originalURL.lastPathComponent, vbrInfo);
为什么说谎的情况?我究竟做错了什么?
如何可靠地确定Cocoa应用程序中音频文件的VBR性?
VBR和CBR示例文件可以获得(不是我的网页)。
最好的办法是直接从文件中读取MPEG帧头。如果它们都指定相同的编码参数(版本,图层,比特率,采样率,通道),则文件为CBR。否则,该文件是VBR/ABR。
有几个MP3库可以用来直接做这个或者有正确的代码供你借用。如果文件处于快速存储状态,则性能也符合您的要求。
如果您需要进一步的帮助,我是C#MP3解码器项目的主要贡献者,并且可以为您提供一些示例。
谢谢你的回答! 这对于mp3和mpeg4文件都适用吗?我必须承认,我希望能得到更具体的代码样本,但显然这对许多人来说似乎并不是一个重要的问题。 – fzwo 2014-09-16 07:30:16
我甚至没有看过MPEG4容器格式(看起来像标准的第14部分)。原则上我认为它可以工作,但是你必须找到代码来阅读取景信息。例如代码,我工作的解码器是https://nlayer.codeplex.com/。 MpegStreamReader.cs有相关的代码(调用其他类型)。 – ioctlLR 2014-09-16 15:49:05
既然你是唯一能回答的人,而你的回答有些帮助(虽然不是我真正想找的),但我会奖赏你的赏金。感谢您花时间回答! – fzwo 2014-09-22 12:59:31
看看http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header部分2.3介绍了有关VBR标题,我测试了它从您的链接文件,它检测到CBR和VBR文件正确。 – user3473830 2014-09-22 10:00:54