2011-09-04 6 views
4

iOS에서 오디오를 조작하는 방법을 배우려하고 있으며 Apple 개발자 페이지에서 많은 것을 읽었습니다. 그러나 AudioBuffer가있는 지점에 도달했으며 어떻게해야 할 지 잘 모르겠습니다. 나는 그것이 mData 버퍼를 포함하고 있다는 것을 알고 있지만 나는 그것이 무엇을 포함하고 있는지 전혀 모른다. 나는 "오디오 데이터의 버퍼"가 무엇인지를 둘러 보았습니다. 참고 문헌에서 설명했듯이, 나는 그것이 무엇인지 이해하지 못하는 것 같습니다.Core Audio AudioBuffer mData

또한 mData가 포함 된 특정 유형의 음성으로 간주되어 포함 된 특정 오디오의 유형으로 캐스팅 될 수 있습니다. 나는 이것을 어떻게 던지기 위해 어떻게해야 할지를 확신 할 수 없다고 생각한다.

답변

3

캐스팅 할 필요가 없습니다. 그것은 (공허 *)로 괜찮습니다. 여기에는 8.24 비트 고정 소수점 정수 값의 샘플이 포함됩니다. 나는 그것이 처음에 발굴일지도 모른다는 것을 안다. AudioBuffer의 다른 프로퍼티는, 복수의 채널이 존재하는 경우를 나타냅니다. 그렇다면 그들은 삽입됩니다.

당신이 할 수있는 일은 Audio Unit Hosting Guide에 설명 된대로 렌더링 콜백 함수를 작성하고 출력 버퍼에 프레임을 공급하여 오디오 재생을 시작하는 것입니다. 강력한 점은 출력으로 보내기 전에 버퍼 데이터를 조작 할 수 있으므로 재생 속도 변형, 피치 이동, 지연, 에코 등 특수 효과를 얻을 수 있다는 것입니다. 난 그냥 지금 내 머리의 상단에서 쓴,

OSStatus renderInput(void *inRefCon, 
    AudioUnitRenderActionFlags *ioActionFlags, 
    const AudioTimeStamp *inTimeStamp, 
    UInt32 inBusNumber, 
    UInt32 inNumberFrames, 
    AudioBufferList *ioData) 
{ 
    float *outA = (float*)ioData->mBuffers[0].mData; 
    float *outB = (float*)ioData->mBuffers[1].mData; 

    for (int i=0; i<inNumberFrames; i++) { 
     outA[i] = myBuffer.mData[i]; 
     outB[i] = myBuffer.mData[i]; 
    } 
} 

이 반드시 작업 코드 예제되지 않습니다 : 간단한 경우 렌더링 기능에

출력이 같은 것입니다. 그러나 그것은 기본적인 생각을 전달합니다.

+5

AudioBufferLists에 포함 된 데이터의 종류는 현재 사용중인 오디오 형식 (AudioStreamBasicDescription)에 따라 달라집니다. 현재 8.24를 사용하고 있다면 8.24에 불과합니다.SInt16 일 수도 있고 SInt24 일 수도 있고 float 일 수도 있습니다. –

+0

오케이. "myBuffer"는 무엇입니까? –

1
OSStatus callback(void *inRefCon,AudioUnitRenderActionFlags *ioActionFlags, 
const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, 
AudioBufferList *ioData); 

ioData에는 필요한 데이터가 들어 있습니다. 당신이 버퍼, 즉에서 추출 할 수 있습니다

:

AudioBuffer buffer = ioData->mBuffer[index]; 

채널의 수에 따라 mBuffers 수있을 것이다.

buffer.mData 

그리고 필요한 오디오의 크기 :의

buffer.mDataByteSize 

형식

AudioBuffer buffer = ioData->mBuffer[0]; 

그런 다음 버퍼에서, 당신은 "진짜"오디오 데이터를 추출 할 수 있습니다 : 모노의 경우 데이터는 오디오 구성에 따라 다릅니다. 그것은 주조 될 수 있지만, 무효로 작동 할 것이고, 그것은 당신이 그것으로하고 싶은 것에 의존 할 것입니다.

0

내 Github에서 AudioBuffer를 사용하는 application 샘플은 매우 쉽습니다. 그걸 가지고 놀면 AudioBuffer로 할 일에 대한 아이디어를 얻게 될 것입니다. (역시 discussion 참조).

관련 문제