在iOS中写入随机值AudioBuffer时无法听到'noise'



我正在使用 EZAudio 并尝试将我的软件意识生成的一些样本写入该库提供的 AudioBuffer,https://github.com/syedhali/EZAudio 如示例"手动覆盖播放"所示。

我的代码看起来像这样...

// Completely override the output callback function
- (void)
                 output:(EZOutput *)output
callbackWithActionFlags:(AudioUnitRenderActionFlags *)ioActionFlags
            inTimeStamp:(const AudioTimeStamp *)inTimeStamp
            inBusNumber:(UInt32)inBusNumber
         inNumberFrames:(UInt32)inNumberFrames
                 ioData:(AudioBufferList *)ioData {
    //grab latest sample from sample queue
    if (currentAudioPiece == nil || currentAudioPiece.duration >= currentAudioPieceIndex) {
        self.currentAudioPiece = sampleQueue.dequeue;
    }
    AudioBuffer audioBuffer = ioData->mBuffers[0];

    if (true) {
        for (int i = 0; i < audioBuffer.mDataByteSize; i++) {
            uint8_t rofl[2048];
            arc4random_buf(&rofl, 2048);
            audioBuffer.mData = rofl;
        }
        return;
    }
    //... more code that I'll debug later...'

从本质上讲,我无法进行健全性检查,随机播放的内存应该会发出一些噪音。 我认为问题出在"audioBuffer.mData = rofl;"上。 我对在void*中使用内存感到相当困惑。

jn_pdx是正确的,您需要复制/填充mData而不是重新分配它。

- (void)
                 output:(EZOutput *)output
callbackWithActionFlags:(AudioUnitRenderActionFlags *)ioActionFlags
            inTimeStamp:(const AudioTimeStamp *)inTimeStamp
            inBusNumber:(UInt32)inBusNumber
         inNumberFrames:(UInt32)inNumberFrames
                 ioData:(AudioBufferList *)ioData {
    //grab latest sample from sample queue
    if (currentAudioPiece == nil || currentAudioPiece.duration >= currentAudioPieceIndex) {
        self.currentAudioPiece = sampleQueue.dequeue;
    }
    AudioBuffer audioBuffer = ioData->mBuffers[0];

    if (true) {
        arc4random_buf(audioBuffer.mData, audioBuffer.mDataByteSize);
        return;
    }

最新更新