【发布时间】:2011-05-06 06:57:45
【问题描述】:
我在以下步骤中创建了一个 AudioQueue。
- 使用
AudioQueueNewOutput创建一个新输出 - 为
kAudioQueueProperty_IsRunning属性添加属性侦听器 - 用
AudioQueueAllocateBuffer分配我的缓冲区 - 致电
AudioQueuePrime - 致电
AudioQueueStart
问题是,当我调用AudioQueuePrime 时,它会在控制台上输出以下错误
AudioConverterNew returned -50
Prime failed (-50); will stop (11025/0 frames)
这里有什么问题?
PS:
- 我在 iOS(设备和模拟器)上收到此错误
- 调用
AudioQueueNewOutput时安装的输出回调永远不会被调用! - 文件有效,
AudioStreamBasicDescription与格式 (AAC) 匹配 - 我用 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
【问题讨论】:
-
你能提供给我们代码吗?谢谢。
-
@Jacob 真的不多,不过我现在附上
标签: objective-c cocoa cocoa-touch core-audio audio-streaming