2015-01-04 6 views
0

EZAudio를 사용하고 "수동 재 지정에 의한 재생"예제와 같이이 라이브러리 https://github.com/syedhali/EZAudio에서 제공하는 AudioBuffer에 내 softaware로 생성 된 샘플을 쓰려고합니다. .임의 값을 쓸 때 '잡음'을들을 수 없음

내 코드

// 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...' 

는 기본적으로 I 메모리의 임의의 무리 약간의 소음을해야 재생하는 전성 검사를 얻을 수 없습니다입니다 ... 다음과 같습니다. 문제는 "audioBuffer.mData = rofl;"라고 생각합니다. 나는 void *에서의 메모리 작업에 대해 오히려 혼란 스럽습니다.

+0

기기로 테스트를 받았습니까? – John

+0

모든 것이 올바르게 설정되었다고 가정하면 (오디오 초기화 등), 문제의 라인에 대해 당신이 맞다고 생각합니다. 자신의 변수 ('rofl')를 만들고 mData에 할당하려고 시도하는 대신 (아마 가장 문제가되는) 대신'arc4random_buf'를'audioBuffer.mData'에서 직접 호출하십시오.이 경우 audioBuffer.mData는 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; 
    } 
관련 문제