【问题标题】:EXC_BAD_ACCESS on ExtAudioFileWriteAsyncExtAudioFileWriteAsync 上的 EXC_BAD_ACCESS
【发布时间】: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


【解决方案1】:

检查 ioData.mNumberBuffers 值。对我来说,尽管缓冲区列表中只有 1 个缓冲区,但它被设置为 2。这导致了 EXC_BAD_ACCESS。

【讨论】:

    【解决方案2】:

    此处答案中发布的示例代码回答了我所有的问题:

    Can anybody help me in recording iPhone output sound through Audio Unit

    非常感谢大家的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-23
      • 2015-03-13
      • 2021-04-02
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多