我目前正在从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
或切换文件格式,例如kAudioFileM4AType
,kAudioFileCAFType
或(也许?)kAudioFileAIFFType
。
不要忘记为前者更新格式大小,为后者更新文件名扩展名。
关于ios - 使用ExtAudioFileWrite记录来自回调的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44059966/