失真(机器人)的音频使用AudioQueue
问题描述:
的iOS我使用AudioQueue
iOS中实现记录到网络的数据流记录。失真(机器人)的音频使用AudioQueue
问题是,它通常工作得很好,但有时(〜20%的尝试)声音可怕地扭曲 - 这听起来是机器人。
编辑: 我能够重现它很容易在iOS6的和ios6.1模拟器 - 但我无法重现它真正的手机上(ios6.1.3)。
试图调试它我将PCM数据保存到文件。 PCM文件中出现相同的失真,所以这在编码或上传代码中不是问题。我也尝试过使用缓冲区的数量和缓冲区的大小 - 没有任何帮助。
的问题是我不知道如何进一步调试它 - 它出现在缓冲区被扭曲为输入回调 - 被激活(除了音频队列配置)我的代码之前。
- 你有什么想法可能是什么问题?
- 或如何进一步调试呢?
队列设置代码:
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mSampleRate = SAMPLE_RATE; //16000.0;
audioFormat.mChannelsPerFrame = CHANNELS; //1;
audioFormat.mBitsPerChannel = 16;
audioFormat.mFramesPerPacket = 1;
audioFormat.mBytesPerFrame = audioFormat.mChannelsPerFrame * sizeof(SInt16);
audioFormat.mBytesPerPacket = audioFormat.mBytesPerFrame * audioFormat.mFramesPerPacket;
audioFormat.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger
| kLinearPCMFormatFlagIsPacked;
AudioQueueNewInput(
&audioFormat,
recordCallback,
self, // userData
CFRunLoopGetMain(), // run loop
NULL, // run loop mode
0, // flags
&recordQueue);
UInt32 trueValue = true;
AudioQueueSetProperty(recordQueue,kAudioQueueProperty_EnableLevelMetering,&trueValue,sizeof (UInt32));
for (int t = 0; t < NUMBER_AUDIO_DATA_BUFFERS; ++t)
{
AudioQueueAllocateBuffer(
recordQueue,
bufferByteSize,
&recordQueueBuffers[t]);
}
for (int t = 0; t < NUMBER_AUDIO_DATA_BUFFERS; ++t)
{
AudioQueueEnqueueBuffer(
recordQueue,
recordQueueBuffers[t],
0,
NULL);
}
开始录制功能:
pcmFile = [[NSOutputStream alloc] initToFileAtPath:pcmFilePath append:YES];
[pcmFile scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
[pcmFile open];
setupQueue(); // see above
AudioQueueStart(recordQueue, NULL);
回调代码:
static void recordCallback(
void* inUserData,
AudioQueueRef inAudioQueue,
AudioQueueBufferRef inBuffer,
const AudioTimeStamp* inStartTime,
UInt32 inNumPackets,
const AudioStreamPacketDescription* inPacketDesc)
Recorder* recorder = (Recorder*) inUserData;
if (!recorder.recording)
return;
[recorder.pcmFile write:inBuffer->mAudioData maxLength:inBuffer->mAudioDataByteSize];
AudioQueueEnqueueBuffer(inAudioQueue, inBuffer, 0, NULL);
}
答
我们在SoundJS网络音频iOS上完全一样的问题,每当一个视频元素的存在,以及缓存是空的。一旦缓存,问题就消失了。我们无法找到解决方法或解决此问题的方法。
您可以在我们的社区论坛上阅读的细节:
http://community.createjs.com/discussions/soundjs/162-ios-audio-distortion-when-video-element-exists
希望有所帮助。这里
同样的问题... – Idan