Core Audio 中 , Audio File Service 三步走,
- 本地文件,转音频解决 ID
通过 AudioFileOpenURL
- 拿音频解决 ID,获取信息的内存大小
AudioFileGetPropertyInfo
- 那后面两个,获取信息
拿后面的音频解决 ID 和信息的内存大小,
获取信息
AudioFileGetProperty
int main (int argc, const char * argv[]) {
// 先看参数的个数
if (argc < 2) {printf ("Usage: CAMetadata /full/path/to/audiofile SSn");
return -1;
} // 1
// 再去取参数
NSString *audioFilePath = [[NSString stringWithUTF8String:argv[1]]
stringByExpandingTildeInPath]; // 2
NSURL *audioURL = [NSURL fileURLWithPath:audioFilePath]; // 3
NSLog (@"audioURL: %@", audioURL);
AudioFileID audioFile; // 4
OSStatus theErr = noErr; // 5
theErr = AudioFileOpenURL((__bridge CFURLRef)audioURL, kAudioFileReadPermission, 0, &audioFile); // 6
assert (theErr == noErr); // 7
UInt32 dictionarySize = 0; // 8
theErr = AudioFileGetPropertyInfo (audioFile, kAudioFilePropertyInfoDictionary,
&dictionarySize, 0); // 9
assert (theErr == noErr); // 10
CFDictionaryRef dictionary; // 11
theErr = AudioFileGetProperty (audioFile, kAudioFilePropertyInfoDictionary,
&dictionarySize, &dictionary); // 12
assert (theErr == noErr); // 13
NSLog (@"nndictionary: %@", dictionary); // 14
CFRelease (dictionary); // 15
theErr = AudioFileClose (audioFile); // 16
assert (theErr == noErr); // 17
return 0;
}
argv 是一个字符串的数组
下面的 argv,外面有两个参数。
- argv[0]
执行的程序名字
- argv[1]
本地的音频门路
命令行,增加参数
这样解决下
Core Audio 的属性查看:
封装格局,File Format
kAudioFilePropertyFileFormat = ‘ffmt’,
编码格局,Data Format
kAudioFilePropertyDataFormat = ‘dfmt’,
Core Audio 无奈辨认格局:
fmt?
kAudioFileUnsupportedDataFormatError
Core Audio 办法的参数,特别强调输出、输入
参数名称中,
in, 是 input,
out, 是 output,
io, 是输出 + 输入,input + output