【发布时间】:2014-09-12 15:35:18
【问题描述】:
我正在尝试在 Cocoa 应用程序 (OS X 10.8+) 中确定音频文件是否使用 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-iness?
VBR和CBR示例文件可以获取here(不是我的页面)。
【问题讨论】:
-
看看codeproject.com/Articles/8295/MPEG-Audio-Frame-Header 第 2.3 部分关于 VBR 头的描述,我根据您的链接中的文件对其进行了测试,它正确地检测到了 CBR 和 VBR 文件。
标签: objective-c macos cocoa audio mp3