相关疑难解决方法(0)

AudioQueue吃了我的缓冲区(前15毫秒)

我正在以编程方式生成音频.我听到缓冲区之间的沉默差距.当我将手机连接到示波器时,我发现每个缓冲区的前几个样本都丢失了,而它们的位置则是静音.这种沉默的长度从几乎没有变化到20毫秒.

我的第一个想法是我原来的回调函数需要花费太多时间.我用尽可能短的替换它 - 它反复重新排队相同的缓冲区.我观察到同样的行为.

AudioQueueRef aq;
AudioQueueBufferRef aq_buffer;
AudioStreamBasicDescription asbd;

void aq_callback (void *aqData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer) {
    OSStatus s = AudioQueueEnqueueBuffer(aq, aq_buffer, 0, NULL);
}

void aq_init(void) {
    OSStatus s;

    asbd.mSampleRate = AUDIO_SAMPLES_PER_S;
    asbd.mFormatID = kAudioFormatLinearPCM;
    asbd.mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked; 
    asbd.mBytesPerPacket = 1;
    asbd.mFramesPerPacket = 1; 
    asbd.mBytesPerFrame = 1;
    asbd.mChannelsPerFrame = 1;
    asbd.mBitsPerChannel = 8;
    asbd.mReserved = 0;


    int PPM_PACKETS_PER_SECOND = 50;
    // one buffer is as long as one PPM frame
    int BUFFER_SIZE_BYTES = asbd.mSampleRate/PPM_PACKETS_PER_SECOND*asbd.mBytesPerFrame;

    s …
Run Code Online (Sandbox Code Playgroud)

c iphone audio core-audio

4
推荐指数
1
解决办法
5302
查看次数

标签 统计

audio ×1

c ×1

core-audio ×1

iphone ×1