2

ネットワーク経由でADPCMデータを再生するために、1つのキューで3つのバッファーを使用します。データは私のアプリからデコードされ、デコードされたデータ(非圧縮のpcmデータ)はAudacityから再生することで正しく検証されます。ただし、AudioQueueを使用してアプリから再生すると音が聞こえません。すべてのAudioQueueAPIの戻り値はnoErr(0)です。私はAudioQueueをフォローしようとしていますが、 3つのバッファを割り当ててもサウンドが出力されません。それは私にはうまくいきませんでした!誰かがAudioQueueログをもっと公開する方法を知っているので、障害点を見つけることができますか、それともコードに問題がありますか?ありがとう!



    ...
    aq->mDataFormat.mSampleRate = format->nSamplesPerSec; // 44100
    aq->mDataFormat.mChannelsPerFrame = format->nChannels; // 1
    aq->mDataFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger |
                                   kAudioFormatFlagIsPacked;
    aq->mDataFormat.mFramesPerPacket = 1;
    aq->mDataFormat.mBitsPerChannel = 16;
    aq->mDataFormat.mFormatID = kAudioFormatLinearPCM;

    ...

    // Fill data before starting                                                                                                                        
    for (i = 0; i bufferByteSize >= size) {
            aq->mBuffers[i]->mAudioDataByteSize =
                size - (kNumberBuffers - 1 - i) * chunkSize;
            memcpy(aq->mBuffers[i]->mAudioData,
                   src + aq->mBuffers[i]->mAudioDataByteSize,
                   aq->mBuffers[i]->mAudioDataByteSize);
            status = AudioQueueEnqueueBuffer(aq->mQueue, aq->mBuffers[i], 0, NULL);
            printf("%s: %d/%d bytes to enqueue - %d\n", __func__,
                   aq->mBuffers[i]->mAudioDataByteSize, size, status);
            size -= aq->mBuffers[i]->mAudioDataByteSize;
            src += aq->mBuffers[i]->mAudioDataByteSize;
        } else {
            aq->mBuffers[i]->mAudioDataByteSize = aq->bufferByteSize;
            memcpy(aq->mBuffers[i]->mAudioData, src, aq->bufferByteSize);
            status = AudioQueueEnqueueBuffer(aq->mQueue, aq->mBuffers[i], 0, NULL);
            printf("%s: enqueue a full buffer[%d]\n - %d\n", __func__, i, status);
                size -= aq->bufferByteSize;
                src += aq->bufferByteSize;
            }
        }
    }


    ...
    status = AudioQueueSetParameter(aq->mQueue, kAudioQueueParam_Volume, 1.0);
    printf("%s: set AudioQueue volume %d\n", __func__, status);
    status = AudioQueueStart(aq->mQueue, NULL);
    printf("%s: start AudioQueue [%d] %d\n", __func__, aq->bufferByteSize, status);

4

0 に答える 0