gpt4 book ai didi

objective-c - AudioQueue启动失败

转载 作者:行者123 更新时间:2023-12-03 16:55:48 25 4
gpt4 key购买 nike

我按照以下步骤创建了一个 AudioQueue。

  1. 使用 AudioQueueNewOutput 创建新输出
  2. kAudioQueueProperty_IsRunning 属性添加属性监听器
  3. 使用 AudioQueueAllocateBuffer 分配我的缓冲区
  4. 调用AudioQueuePrime
  5. 调用AudioQueueStart

问题是,当我调用 AudioQueuePrime 时,它会在控制台上输出以下错误

AudioConverterNew returned -50
Prime failed (-50); will stop (11025/0 frames)

这里出了什么问题?

附注:

  1. 我在 iOS(设备和模拟器)上遇到此错误
  2. 调用 AudioQueueNewOutput 时安装的输出回调永远不会被调用!
  3. 文件有效,并且 AudioStreamBasicDescription 与格式 (AAC) 匹配
  4. 我用 Mat 的 AudioStreamer 测试了该文件它似乎在那里工作

示例初始化代码:

<小时/>
// Get the stream description from the first sample buffer
OSStatus err = noErr;

EDSampleBuffer *firstBuf = [sampleBufs objectAtIndex:0];
AudioStreamBasicDescription asbd = firstBuf.streamDescription;

// TODO: remove temporary format setup, just to ensure format for now
asbd.mSampleRate = 44100.00;
asbd.mFramesPerPacket = 1024; // AAC default
asbd.mChannelsPerFrame = 2;

pfcc(asbd.mFormatID);
// -----------------------------------

// Create a new output
err = AudioQueueNewOutput(&asbd, _audioQueueOutputCallback, self, NULL, NULL, 0, &audioQueue);
if (err) {
[self _reportError:kASAudioQueueInitializationError];
goto bail;
}

// Add property listener for queue state
err = AudioQueueAddPropertyListener(audioQueue, kAudioQueueProperty_IsRunning, _audioQueueIsRunningCallback, self);
if (err) {
[self _reportError:kASAudioQueuePropertyListenerError];
goto bail;
}

// Allocate a queue buffers
for (int i=0; i<kAQNumBufs; i++) {
err = AudioQueueAllocateBuffer(audioQueue, kAQDefaultBufSize, &queueBuffer[i]);
if (err) {
[self _reportError:kASAudioQueueBufferAllocationError];
goto bail;
}
}

// Prime and start
err = AudioQueuePrime(audioQueue, 0, NULL);
if (err) {
printf("failed to prime audio queue %ld\n", err);
goto bail;
}

err = AudioQueueStart(audioQueue, NULL);
if (err) {
printf("failed to start audio queue %ld\n", err);
goto bail;
}

这些是音频文件流的格式标志

rate: 44100.000000
framesPerPacket: 1024
format: aac
bitsPerChannel: 0
reserved: 0
channelsPerFrame: 2
bytesPerFrame: 0
bytesPerPacket: 0
formatFlags: 0
cookieSize 39

最佳答案

AudioConverterNew returned -50
Prime failed (-50); will stop (11025/0 frames)

What's wrong here?

你做错了。

不,真的。这就是该错误的含义,这就是该错误的全部含义。

这就是为什么 paramErr (-50) 是一个如此烦人的错误代码:它并没有说明你(或任何其他人)做错了什么

对所提示的内容进行猜测的第一步是找出哪个函数返回了该错误。更改您的 _reportError: 方法,使您能够记录返回错误的函数的名称。然后,记录您传递给该函数的参数,并找出为什么认为该函数的这些参数没有意义。

我自己的大胆猜测是,这是因为您强制输入 ASBD 的值与示例缓冲区的特征不匹配。您问题中包含的日志输出显示“11025/0 帧”; 11025 是常见的采样率(但与 44100 不同)。我想你知道 0 代表什么。

关于objective-c - AudioQueue启动失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4117776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com