2010-06-15 3 views
3

확장 오디오 파일 서비스를 사용하는 iPhone 앱을 개발하고 있습니다. ExtAudioFileRead를 사용하여 오디오 파일을 읽고 AudioBufferList 구조에 데이터를 저장하려고합니다. * 나는 mData를 조작 할iPhone SDK 용 ExtAudioFileRead 및 AudioBuffer에 대한 질문

struct AudioBuffer { 
    UInt32 mNumberChannels; 
    UInt32 mDataByteSize; 
    void* mData; 
}; 
typedef struct AudioBuffer AudioBuffer; 

으로 정의된다

struct AudioBufferList { 
UInt32  mNumberBuffers; 
AudioBuffer mBuffers[1]; 
}; 
typedef struct AudioBufferList AudioBufferList; 

오디오 버퍼을하지만 난 공백을 무엇을 궁금해 :로

AudioBufferList 정의된다 평균. 왜 그것은 무효 *? mData에 실제로 저장된 데이터 유형을 어떻게 결정할 수 있습니까?

답변

1

다른 오디오 포맷의 저장 요구 사항이 다르므로 mData 필드는 void로 표시됩니다.

기본적으로 C에서 void 포인터는 아무 것도 가리킬 수 없습니다.

그래서 당신은

mData = (SInt32 *)malloc(sizeof(Sint32) * numElements); 

하고 말할 수있는 당신은 당신이 원하는 데이터 형식으로 캐스팅 사용하고자 할 때.

Sint32 *myBuffer = (SInt32 *)mData; 
1

당신은 그런 당신이 할 수있는 프레임 당 보통 4 바이트 (같은 크기와 어떤 서명 유형으로 해석 할 수

AudioStreamBasicDescription inputFileFormat; 
UInt32 dataSize = (UInt32)sizeof(inputFileFormat); 
ExtAudioFileGetProperty(inputFile, kExtAudioFileProperty_FileDataFormat, &dataSize, &inputFileFormat); 
size_t sizeOfFrame = inputFileFormat.mBytesPerFrame; 

와 mData 배열 (프레임의 크기) 요소의 크기를 결정할 수 있습니다 Sint32 또는 Float32).