gpt4 book ai didi

objective-c - 判断音频文件是否为VBR

转载 作者:行者123 更新时间:2023-12-03 16:35:45 25 4
gpt4 key购买 nike

我正在尝试确定音频文件是否在 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 性?

可获取VBR和CBR示例文件here (不是我的页面)。

最佳答案

最好的办法是直接从文件中读取 MPEG 帧头。如果它们都指定相同的编码参数(版本、层、比特率、采样率和 channel ),则文件为 CBR。否则,文件为 VBR/ABR。

有几个 MP3 库可以直接用于执行此操作,也可以提供正确的代码供您借用来执行此操作。如果文件存储在快速存储中,性能也完全符合您的要求。

如果您需要进一步的帮助,我是 C# MP3 解码器项目的主要贡献者,可以为您提供一些示例。

关于objective-c - 判断音频文件是否为VBR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25811885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com