【发布时间】:2012-03-05 21:29:18
【问题描述】:
我在麦克风/线路输入音频渲染回调的末尾添加了以下代码。
但应用程序不断崩溃并出现 EXC_BAD_ACCESS :
err = ExtAudioFileWriteAsync(mOutputAudioFile, inNumberFrames, ioData);
其余代码如下:
ExtAudioFileRef mOutputAudioFile;
AudioFileID mAfid;
NSLog(@"Writing output to file ....");
NSArray *dirPaths;
NSString *docsDir;
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
NSLog(@"docDir = %@", docsDir);
NSString *soundFilePath = [docsDir stringByAppendingPathComponent:@"sound.caf"];
NSURL *inPath = [NSURL fileURLWithPath:soundFilePath];
NSLog(@"Output file path is : %@", inPath);
AudioStreamBasicDescription mStreamFormat;
mStreamFormat.mChannelsPerFrame = 1;
mStreamFormat.mSampleRate = 44100.00;
mStreamFormat.mFormatID = kAudioFormatLinearPCM;
mStreamFormat.mFormatFlags = kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
mStreamFormat.mBitsPerChannel = 16;
mStreamFormat.mBytesPerFrame = 2;
mStreamFormat.mFramesPerPacket = 1;
mStreamFormat.mBytesPerPacket = 2;
mStreamFormat.mReserved = 0;
err = AudioFileCreateWithURL((CFURLRef)inPath, kAudioFileCAFType, &mStreamFormat, kAudioFileFlags_EraseFile, &mAfid);
if (err != noErr) {
NSLog(@"ERROR : Audio file could not be created !! %d", (int)err);
}
err = ExtAudioFileWrapAudioFileID(mAfid, true, &mOutputAudioFile);
err = ExtAudioFileSetProperty(mOutputAudioFile, kExtAudioFileProperty_ClientDataFormat, sizeof(AudioStreamBasicDescription), &mStreamFormat);
if (ioData) {
err = ExtAudioFileWriteAsync(mOutputAudioFile, inNumberFrames, ioData);
if (err != noErr) {
NSLog(@"ERROR : Audio file could not be written !! %d", (int)err);
}
}
else {
NSLog(@"No ioData found");
}
NSLog(@"Done writing output to file ....");
我已经尝试了几乎所有的方法。如果有人可以帮助我解决它,我将非常感激。谢谢!
更新 1:
如果我使用 ExtAudioFileWrite 而不是 ExtAudioFileWriteAsync,应用程序不会崩溃,但会为 ExtAudioFileWrite 返回错误 -50。
我仍然不知道它发生了什么。非常感谢这方面的任何帮助。
谢谢。
【问题讨论】:
-
控制台的完整错误信息是什么?
-
您之前在调用中缺少检查错误,也许如果您检查返回值,您将获得所需的信息。另外,如何定义以下内容:inNumberFrames, ioData
-
@CocoaFu 控制台中没有消息。这是可悲的部分。它只说:[切换到进程 6191 线程 0x18203] [切换到进程 6191 线程 0x18203] 当前语言:自动;目前objective-c
-
@BinyaminSharet - 你说的是回调的返回值吗?
-
我说的是
ExtAudioFileWrapAudioFileID和后面的那一行
标签: objective-c xcode audio exc-bad-access core-audio