我目前正在从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);
状态在此
中显示异常答案 0 :(得分:2)
1718449215是kAudioConverterErr_FormatNotSupported
('fmt?'),所以我猜测WAVE可能不支持float LPCM。您可以尝试更改为kAudioFormatFlagIsSignedInteger
或切换文件格式,例如kAudioFileM4AType
,kAudioFileCAFType
或(可能?)kAudioFileAIFFType
。
不要忘记更新前者的格式大小,以及后者的文件扩展名。