2015-01-03 3 views
0

메모리에서 AudioBuffer로 16 비트 PCM 샘플을 작성해야하는 코드가 있습니다.어떻게 Core Audio의 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 { 
    for (int i = 0; i < ioData->mNumberBuffers; i++) { 
     AudioBuffer audioBuffer = ioData->mBuffers[i]; 
     for (int j = 0; j < audioBuffer.mDataByteSize; j++) { 
      audioBuffer.mData[j]; //void* how do I know what this expects?? 
     } 
    } 
    // Fill the ioData with your audio data from anywhere 
} 

나는 내가 properietary 메커니즘을 사용하여 다운로드 일부 PCM 오디오 데이터를 재생하기 위해 https://github.com/syedhali/EZAudio에서 EZAUdio 프레임 워크를 사용하고 있습니다.

void * 유형의 버퍼를 어떻게 작성해야합니까? 그것은 임의의 위치에 대한 포인터가 아닙니다.

답변

0

버퍼가 예상하는 데이터의 형식은 -audioStreamBasicDescription에서 EZOutput입니다. 채널 수, 채널 당 비트 수 등을 결정할 수있는 AudioStreamBasicDescription 구조체를 반환합니다.

void *에 글을 쓰려면 글을 쓰기 전에 적절한 유형으로 캐스팅하거나 개별 샘플을 처리하거나 오디오가 이미 준비된 경우 memcpy으로 전화하십시오.