ios - 使用ExtAudioFileWrite记录来自回调的数据

标签 ios core-audio

我目前正在从iPhone的麦克风录制立体声音频,并且必须记录回调中的数据以进行分析。

目前,我的AudioStreamBasicDescription格式为

AudioStreamBasicDescription format;
format.mSampleRate          = 0;
format.mFormatID            = kAudioFormatLinearPCM;
format.mFormatFlags         = kAudioFormatFlagIsFloat | kAudioFormatFlagsNativeEndian | kAudioFormatFlagIsPacked | kAudioFormatFlagIsNonInterleaved;
format.mFramesPerPacket     = 1;
format.mChannelsPerFrame    = 2;
format.mBitsPerChannel      = 32;
format.mBytesPerPacket      = 4;
format.mBytesPerFrame       = 4;

我将数据渲染到的缓冲区列表是
inputBufferList->mNumberBuffers = NUMCHANNELS;
for (size_t n = 0; n < NUMCHANNELS; n++) {
    inputBufferList->mBuffers[n].mDataByteSize = inNumberFrames * sizeof(float);
    inputBufferList->mBuffers[n].mNumberChannels = 1;
    inputBufferList->mBuffers[n].mData = malloc(inputBufferList->mBuffers[n].mDataByteSize);
}

当我尝试将此数据写入ExtAudioFileWrite时,它给出了一个错误,并且据说格式是错误的。有没有关于如何使用ExtAudioFileWrite编写立体声音频的教程?

编辑:

这是我的设置方法
NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString* destinationFilePath = [[NSString alloc] initWithFormat: @"%@/testrecording.wav", documentsDirectory];

CFURLRef destinationURL = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, (CFStringRef)destinationFilePath, kCFURLPOSIXPathStyle, false);

OSStatus status;

ExtAudioFileRef cfref;

status = ExtAudioFileCreateWithURL(destinationURL, kAudioFileWAVEType,
                                   &format, NULL, kAudioFileFlags_EraseFile,
                                   &cfref);

状态在此显示异常

最佳答案

1718449215是kAudioConverterErr_FormatNotSupported('fmt?'),因此我猜测WAVE可能不支持浮点LPCM。您可以尝试更改为kAudioFormatFlagIsSignedInteger或切换文件格式,例如kAudioFileM4ATypekAudioFileCAFType或(也许?)kAudioFileAIFFType

不要忘记为前者更新格式大小,为后者更新文件名扩展名。

关于ios - 使用ExtAudioFileWrite记录来自回调的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44059966/

相关文章:

ios - 为桌面 Mac 构建和编译 PJSIP

swift - 使用准确的 CMTime 将 AudioBuffer 转换为 CMSampleBuffer

iphone - 使用 RemoteIO 和 Audio Unit 播放音频文件

ios - 计算从当前位置到 x 个对象的距离,并使用从最近到最远的过滤器对它们进行排序

ios - 将初始化程序添加到 View Controller 会导致 viewDidLoad 中的 socket 为零

ios - 使用 AVAudioPlayer 从互联网播放音频

ios - 如何增加声音的音量并消除 objective-c 中的背景噪音

objective-c - 捕获播放声音

ios - 我怎样才能使用 AVAudioPlayer 更快*和*更高音调地播放音频?

iphone - MKMapView 不更新用户位置图像