현재 iPhone의 마이크에서 오디오를 읽은 다음 일부 처리 및 비주얼을 수행하는 응용 프로그램을 작성하는 중입니다. 물론 나는 처음으로 오디오로 시작하지만 사소한 문제가 하나 있습니다.AudioQueue 오디오 샘플 녹음
샘플링 속도를 44100Hz로 정의하고 4096 개의 샘플을 저장하도록 버퍼를 정의했습니다. 그게 뭐야. 그러나이 데이터를 출력 할 때 MATLAB에 복사하여 정확성을 다시 확인합니다. 사용해야하는 샘플 속도는 올바른 iPhone 아이폰 정의 속도 또는 22050 Hz의 절반입니다.
다음 코드와 관련이 있으며 패킷 당 2 바이트를 넣는 방법과 버퍼가 반복 될 때 버퍼가 전체 패킷을 뱉어 내 코드가 단일 패킷이라고 가정합니다. 번호. 그래서 내가 궁금해하는 것은 패킷을 분리하여 개별 번호로 읽는 방법입니다.
- (void)setupAudioFormat {
memset(&dataFormat, 0, sizeof(dataFormat));
dataFormat.mSampleRate = kSampleRate;
dataFormat.mFormatID = kAudioFormatLinearPCM;
dataFormat.mFramesPerPacket = 1;
dataFormat.mChannelsPerFrame = 1;
// dataFormat.mBytesPerFrame = 2;
// dataFormat.mBytesPerPacket = 2;
dataFormat.mBitsPerChannel = 16;
dataFormat.mReserved = 0;
dataFormat.mBytesPerPacket = dataFormat.mBytesPerFrame = (dataFormat.mBitsPerChannel/8) * dataFormat.mChannelsPerFrame;
dataFormat.mFormatFlags =
kLinearPCMFormatFlagIsSignedInteger |
kLinearPCMFormatFlagIsPacked;
}
내가 설명한 내용이 분명하지 않은 경우 알려 주시기 바랍니다. 감사!
편집
내가 데이터
float *audioFloat = (float *)malloc(numBytes * sizeof(float));
int *temp = (int*)inBuffer->mAudioData;
int i;
float power = pow(2, 31);
for (i = 0;i<numBytes;i++) {
audioFloat[i] = temp[i]/power;
printf("%f ",audioFloat[i]);
}
어떻게 버퍼링을 반복하고 각 샘플을 인쇄합니까? 문제가 있는지 코드를 게시하십시오. – hotpaw2
내 생각에 스테레오 데이터 스트림을 수신하고 있습니다. 왼쪽 채널에서 16 비트, 오른쪽 채널에서 16 비트. – Davyd
일부 인쇄 코드가 추가되었습니다. 이것이 무엇이든 지우면 알려 주시겠습니까 – MZimmerman6