2014-09-12 66 views
0

我試圖確定音頻文件是否在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示例文件可以獲得(不是我的網頁)。

+0

看看http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header部分2.3介紹了有關VBR標題,我測試了它從您的鏈接文件,它檢測到CBR和VBR文件正確。 – user3473830 2014-09-22 10:00:54

回答

1

最好的辦法是直接從文件中讀取MPEG幀頭。如果它們都指定相同的編碼參數(版本,圖層,比特率,採樣率,通道),則文件爲CBR。否則,該文件是VBR/ABR。

有幾個MP3庫可以用來直接做這個或者有正確的代碼供你借用。如果文件處於快速存儲狀態,則性能也符合您的要求。

如果您需要進一步的幫助,我是C#MP3解碼器項目的主要貢獻者,並且可以爲您提供一些示例。

+0

謝謝你的回答! 這對於mp3和mpeg4文件都適用嗎?我必須承認,我希望能得到更具體的代碼樣本,但顯然這對許多人來說似乎並不是一個重要的問題。 – fzwo 2014-09-16 07:30:16

+0

我甚至沒有看過MPEG4容器格式(看起來像標準的第14部分)。原則上我認爲它可以工作,但是你必須找到代碼來閱讀取景信息。例如代碼,我工作的解碼器是https://nlayer.codeplex.com/。 MpegStreamReader.cs有相關的代碼(調用其他類型)。 – ioctlLR 2014-09-16 15:49:05

+0

既然你是唯一能回答的人,而你的回答有些幫助(雖然不是我真正想找的),但我會獎賞你的賞金。感謝您花時間回答! – fzwo 2014-09-22 12:59:31

相關問題