2017-09-21 17 views
0

iPhone7plus에서 콜백을 통해 스트림을 재생할 때 AUMixer로 AUGraph를 작성했으며 오디오 재생이 끔찍하게 들립니다. 당신은 오디오를들을 수 있고 말하고있는 것이지만 그것은 매우 까다 롭습니다. 내 iPhone6에서 빌드하고 실행하면 괜찮은 것 같습니다.aac-> pcm 변환 된 오디오 스트림의 AUGraph 재생이 iPhone7plus에서는 고르지 만, iPhone6에서는 재생되지 않습니다.

나는 또한 믹서없이 하나의 AudioUnit으로 구현 된 설정을 가지고 있으며, iPhone7과 iPhone6에서 괜찮은 소리가 나지만 물론 믹서의 필수 기능을 잃어 버리게됩니다. 두 설정에 동일한 AudioStreamBasicDescription을 사용 중입니다 (믹서가있는 그래프 및 단일 audiounit).

내 iPhone7 Plus의 그래프와 관련해서 왜 그렇게 나쁠 지에 대한 아이디어는 무엇입니까?

My current ASBD: 
_pcmASBD AudioStreamBasicDescription 
mSampleRate Float64 44100 
mFormatID AudioFormatID 1819304813 
mFormatFlags AudioFormatFlags 12 
mBytesPerPacket UInt32 4 
mFramesPerPacket UInt32 1 
mBytesPerFrame UInt32 4 
mChannelsPerFrame UInt32 2 
mBitsPerChannel UInt32 16 
mReserved UInt32 0 

나는 PCM 변환 AAC를하고 다음 공급하고 그 AURenderCallback에 데이터를 다음 마지막의 AudioUnit 아키텍처에 의해 재생되는 pendingBufferList합니다.

믹서를 사용하여 볼륨을 제어하고 싶습니다. 오디오를 변조하지 않기를 원하므로 단일 AudioUnit 접근법 (이 오류를 표시하지 않지만 같은 콜백과 모든 것을 사용함)은 나에게 적합하지 않습니다. 원시 데이터 스트림에 영향을줌으로써

편집 : 잘하면 문제를 해결하기 위해이 몇 가지 더 많은 코드 및 의견을 추가 할가는

.

AudioConverter를 사용하여 AAC의 들어오는 스트림을 처리합니다. 그러면 LPCM으로 변환 된 다음 audiounit 그래프 렌더링 프로세스 중에 채워지는 AudioBufferList로 공급됩니다.

내가 48kHz의 가면 (인코딩 후 스트리밍) 것으로 나타났습니다 -> 48kHz의는 좋은 소리 (스트림 디코드, 재생 수신) 내 오디오 I는 44.1kHz로 갈 경우 PROC 1024

의 inNumberFrames을 보여줍니다 렌더링 -> 48khz 소리가 들리지 않습니다 (내 오디오 유닛 그래프는 내가 넣은 샘플 속도 변환기 때문에 소리가 맞습니다.)하지만 오디오 렌더링 proc은 inNumberFrames를 941 또는 940으로 표시합니다.

hotpaw2에 대해 이야기하고 있었지만 AudioBufferList의 크기를 4 * inNumberFrames의 배수로 설정했을 때 AudioBufferList의 크기는 여전히 들리지 않습니다.

@ hotpaw2?

답변

0

하드웨어 샘플 속도를 확인하십시오. 대부분의 최신 iOS 장치에서 하드웨어 오디오 샘플 속도는 플러그 된 오디오 또는 이전에 오디오를 재생 한 것에 따라 44100이 아닌 48000으로 기본 설정 될 수 있습니다. 그렇다면 원하는 형식이 44100입니다. 리샘플링자는 가변 길이 버퍼와 홀수 길이 버퍼를 제공합니다. 고정 또는 길이 버퍼를 예상하는 Audio Unit 콜백은 이상이 생길 수 있습니다.

해결 방법은 하드웨어 샘플 속도를 확인하는 것일 수 있습니다. 48000이면 형식을 동일하게 설정하여 리샘플링을 수행 할 필요가 없습니다. 또한 모든 오디오 컨텍스트 콜백 블록이 AudioBufferList 버퍼의 가변 및 홀수 길이/frameCounts를 처리 할 수 ​​있는지 확인하십시오.

+0

의견을 보내 주셔서 감사 드리며 하드웨어 샘플 속도를 확인한 후 지원되는 하드웨어 (실제로 48000)를 사용하고 있는지 확인하기 위해 계속 문제가 있습니다. 내가 PCM으로 오디오 변환을 한 다음 AUGraph를 통해 재생하는 AAC 스트림을 받고 있습니다. 단 하나의 AudioUnitComponent를 사용하면 두 개의 pendingBufferList를 채우는 데 사용하는 것과 동일한 콜백 논리를 사용하여 찾을 수 있지만 Graph 만 문제를 표시하는 것 같습니다.단 하나의 AudioUnitComponent 만 사용 하겠지만 그래프를 사용하여 볼륨 믹싱을해야합니다. – theprojectabot

+0

원래 질문을 업데이트 했습니까? 이견있는 사람? – theprojectabot