iOS:如何将音频文件读入 float 缓冲区

标签 ios file core-audio

我有一个非常短的音频文件,例如 .PCM 格式的十分之一秒

我想使用 RemoteIO 重复循环文件以产生连续的音乐音调。那么如何将其读入 float 组?

编辑:虽然我可能会挖掘出文件格式,将文件提取到 NSData 中并手动处理它,但我猜想有一种更明智的通用方法......(例如应对不同的格式)

最佳答案

您可以使用 ExtAudioFile 以多种客户端格式从任何受支持的数据格式中读取数据。下面是一个将文件读取为 16 位整数的示例:

CFURLRef url = /* ... */;
ExtAudioFileRef eaf;
OSStatus err = ExtAudioFileOpenURL((CFURLRef)url, &eaf);
if(noErr != err)
  /* handle error */

AudioStreamBasicDescription format;
format.mSampleRate = 44100;
format.mFormatID = kAudioFormatLinearPCM;
format.mFormatFlags = kAudioFormatFormatFlagIsPacked;
format.mBitsPerChannel = 16;
format.mChannelsPerFrame = 2;
format.mBytesPerFrame = format.mChannelsPerFrame * 2;
format.mFramesPerPacket = 1;
format.mBytesPerPacket = format.mFramesPerPacket * format.mBytesPerFrame;

err = ExtAudioFileSetProperty(eaf, kExtAudioFileProperty_ClientDataFormat, sizeof(format), &format);

/* Read the file contents using ExtAudioFileRead */

如果你想要 Float32 数据,你可以像这样设置 format:

format.mFormatID = kAudioFormatLinearPCM;
format.mFormatFlags = kAudioFormatFlagsNativeFloatPacked;
format.mBitsPerChannel = 32;

关于iOS:如何将音频文件读入 float 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7537505/

相关文章:

具有按比例填充的 subview 和固有宽度的 iOS StackView 的行为不符合预期

ios - 如何查找两个谷歌地图路线是否在 IOS 项目中相交

iphone - CFRelease 但仍然泄漏

ios5 - 如何暂停、停止和重置 AUFilePlayer?

iphone - 如何更改 PhoneGap 1.x 中的起始页

c - C 编译错误

c - 将文件名打印到标准输出

file - Matlab 保存扩展名为 m~ 的文件的副本。它们有什么作用?我可以关闭它们吗?

ios - 如何以编程方式将音乐文件设置为 iphone 中的调用音和消息音

ios - 标签栏应用程序中的 iAd 横幅