AudioQueue aß mein Puffer (die ersten 15 Millisekunden es)

Ich bin Generierung von audio-programmgesteuert. Ich höre Lücken des Schweigens zwischen meinen Puffer. Wenn ich den Haken " mein Handy einen Bereich, sehe ich, dass die ersten paar Proben von jedem Puffer fehlen, und an Ihre Stelle ist die Stille. Die Länge dieses Schweigens variiert von fast nichts bis zu 20 ms.

Mein Erster Gedanke ist, dass meine original-callback-Funktion nimmt zu viel Zeit. Ich ersetzen Sie es mit der kürzesten möglich-es re-renqueues den gleichen Puffer über und über. Ich beobachte das gleiche Verhalten.

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 = AudioQueueNewOutput(&asbd, aq_callback, NULL, CFRunLoopGetCurrent(), kCFRunLoopCommonModes, 0, &aq);
    s = AudioQueueAllocateBuffer(aq, BUFFER_SIZE_BYTES, &aq_buffer);

    //put samples in the buffer
    buffer_data(my_data, aq_buffer);

    s = AudioQueueStart(aq, NULL);
    s = AudioQueueEnqueueBuffer(aq, aq_buffer, 0, NULL);
}
InformationsquelleAutor iter | 2010-04-02
Schreibe einen Kommentar