2014-09-12 2 views
0

Я пытаюсь определить, использует ли аудио файл VBR или нет в приложении 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); 

Почему врет? Что я делаю не так?

Как я могу реально определить VBR-iness аудиофайла в приложении Cocoa?

Файлы образцов VBR и CBR могут быть получены (не на моей странице).

+0

см. Http://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header, часть 2.3 описывает заголовки VBR, я тестировал ее против файлов из вашей ссылки и обнаружил CBR и VBR файлы правильно. – user3473830

ответ

1

Ваш лучший выбор - прочитать заголовки кадров MPEG из файла напрямую. Если все они задают одни и те же параметры кодирования (версия, слой, биттрейт, выборка, & каналов), то это CBR. В противном случае файл будет VBR/ABR.

Существует несколько MP3-библиотек, которые могут быть использованы для этого напрямую или иметь правильный код для заимствования, чтобы сделать это. Если файл находится на быстром хранении, производительность также хорошо соответствует вашим требованиям.

Если вам нужна дополнительная помощь, я являюсь основным участником проекта декодера C# MP3 и могу указать вам его на некоторые примеры.

+0

Спасибо за ваш ответ! Будет ли это работать как для файлов mp3, так и для mpeg4? Должен признаться, я надеялся на более конкретные образцы кода, но, по-видимому, это не кажется важным вопросом для многих людей. – fzwo

+0

Я даже не смотрел формат MPEG4-контейнера (выглядит как часть 14 стандарта). В принципе, я думаю, что это сработает, но вам нужно будет найти код для чтения информации о кадрировании. Например, код, на котором я работаю, - https://nlayer.codeplex.com/. MpegStreamReader.cs имеет соответствующий код (с вызовами других типов). – ioctlLR

+0

Поскольку вы были единственными, кто отвечал, и ваш ответ несколько полезен (хотя и не совсем то, что я искал), я награждаю вас щедростью. Спасибо, что нашли время ответить! – fzwo

Смежные вопросы