【发布时间】:2014-09-19 14:18:27
【问题描述】:
我有一个使用 CoreAudio 录制音频的 Cordova 插件。它处理音频样本,并重放录制的音频,仍然使用 CoreAudio。该应用程序还使用网络音频播放一些音频。
在 ios 模拟器中一切正常,但在设备上,问题如下:录制/重播正常工作,直到对网络音频进行一次调用,在这种情况下,对 CoreAudio 的后续调用失败。
如果我重新使用 AudioQueue,并在它停止后尝试重新启动它(以及在使用网络音频播放一些音频之后),对 AudioQueueStart 的调用会返回 560034163,即“!aqs”。我找不到那是什么意思。
for (i = 0; i < kNumberBuffers; ++i) {
XThrowIfError(AudioQueueEnqueueBuffer(audioQueue, audioBuffers[i], 0, NULL),
"AudioQueueEnqueueBuffer failed");
}
// That returns !aqs
XThrowIfError(AudioQueueStart(audioQueue, NULL), "AudioQueueStart failed");
或者如果我在录制停止时处理队列,然后如果我重新创建一个新队列,对 AudioQueueStart 的调用将返回 -50,我读到这意味着某些参数无效。唯一的参数是显然创建成功的队列。同样,仅当我播放网络音频时才会出现此错误。
XThrowIfError(AudioQueueNewInput(&recordFormat, RecordingCallback,
this /* userData */, NULL /* run loop */, NULL /* run loop mode */,
0 /* flags */, &audioQueue), "AudioQueueNewInput failed");
int bufferByteSize = 2 * 1024;
int i;
for (i = 0; i < kNumberBuffers; ++i) {
XThrowIfError(AudioQueueAllocateBuffer(audioQueue, bufferByteSize, audioBuffers[i]),
"AudioQueueAllocateBuffer failed");
XThrowIfError(AudioQueueEnqueueBuffer(audioQueue, audioBuffers[i], 0, NULL),
"AudioQueueEnqueueBuffer failed");
}
XThrowIfError(AudioQueueStart(audioQueue, NULL), "AudioQueueStart failed");
正如我所说,所有这些都运行良好,除非我在设备上并且在我使用网络音频播放一些音频之后。另外,重播录制的音频,使用另一个 AudioQueue 进行播放,在使用网络音频播放音频后仍然可以正常工作。
知道发生了什么吗?或者关于如何进一步调试的任何想法?
【问题讨论】:
标签: ios cordova core-audio web-audio-api