2015-01-04 56 views
0

我正在使用EZAudio,並嘗試將一些由我的softaware生成的示例寫入此庫提供的AudioBuffer https://github.com/syedhali/EZAudio,如示例中的「通過手動覆蓋播放」 。寫入隨機值時無法聽到「噪音」iOS中的AudioBuffer

我的代碼看起來像這樣...

// 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 *的內存感到困惑。

+0

您是否在設備上測試過? – John

+0

假設一切設置正確(音頻初始化等),我懷疑你是對的問題線。而不是創建自己的變量('rofl'),然後嘗試將其分配給mData(最可能是問題),而是直接在'audioBuffer.mData'上調用'arc4random_buf',如果EZAudio應該已經初始化與iOS/OSX中的正常RemoteIO相同。 –

回答

2

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; 
    }