2016-10-10 3 views
0

오디오 채널을 분리하려고하는 스테레오 오디오 파일이 있습니다. 왼쪽 오디오가있는 버스와 오른쪽 오디오 신호가있는 버스가 생성됩니다. 이 채널에서는 몇 가지 작업을 수행 한 다음 다시 단일 스테레오 신호에 병합하려고합니다.AVAudioEngine 별도 채널

오디오 파일을 읽고 버스에서 작업을 수행하고 단일 신호로 병합해도 아무런 문제가 없습니다. (이 신호가 스테레오인지 테스트하지는 않았지만 이전 채널에 따라 다름).

왼쪽 채널과 오른쪽 채널을 분리 할 때 문제가 있으므로 개별적으로 수정할 수 있습니다. 내 아이디어

하나는 왼쪽/오른쪽 신호를 가지고 AVAudioPlayerNodepan 속성을 사용했지만, 그것은 (문서에 언급 된)이 속성은 아직에도 모두 비록합니다 (AVAudioPlayerNode에서 구현되지 않은 것 같아 사용 된 WWDC 비디오의 예).

다른 해결책은 this입니다. memcpy을 사용하여 새 버퍼를 만듭니다. 나는 이것이 꽤 시간이 걸리고 정상적인 선수에게 적당하지 않다고 생각하기 때문에 이것을 아직 시도하지 않았다.

세 번째 프레임에는 audiokit이라는 프레임 워크가 있습니다. 스트림을 모노 왼쪽/오른쪽 채널로 변환 한 다음 AKStereoOperation을 생성하여 신호를 다시 병합하는 옵션을 제공합니다. 이 솔루션의 문제점은 꽤 간단한 사용 사례입니다. 오디오 채널 분리. 이를 위해 아마도 거대한 프레임 워크를 포함하여 그것을 정당화하기가 어려울 것입니다.

채널을 분리하는 간단한 방법이 있습니까?

감사합니다.

+0

2 개의 모노 스트림을 하나의 스테레오 스트림으로 다시 결합 할 수 있었습니까? – A21

+0

슬프게도 avaudioengine이 없습니다. audiokit이 가능합니다. – Jan

+0

불행히도 저는 객관적인 C 프로젝트를 사용하고 있으며, AudioKit은 Swift만을위한 것이라고 생각합니다. – A21

답변

0

AudioConverterNew을 사용하고 AudioStreamBasicDescription을 사용하여 AudioConverter을 생성하고 스테레오 채널을 디 인터리브 할 수 있습니다. 이것에 의해, 최초로 1 개의 채널이 연속 해, 2 번째의 채널이 버퍼의 후반에있는 1 개의 버퍼가됩니다.

+0

파일 형식을 변경하지 않고 AudioConverter를 사용할 수 있습니까? 필자는 동일한 샘플 속도와 길이의 모노 CAF 파일 2 개를 단일 스테레오 파일에 결합하려고합니다. 포맷을 설정하는 방법을 보여주는 AudioConverterNew 용 샘플 코드가 있습니까? – A21

+0

예. 'AudioConverter' 문서는 그것이 지원하는 변환을 나열합니다. 나는 그것을 사용하는 방법을 보여주는 애플 샘플이 있다고 믿지만, 나는 편리한 링크가 없다. – Tim

+0

AudioConverterNew에 대한 설명서는 https://developer.apple.com/reference/audiotoolbox/1502936-audioconverternew?language=objc에서 볼 수 있습니다. 이 함수에는 3 개의 매개 변수가 있지만 inSourceFormat은 단 하나의 소스 파일 만 가져 오는 것을 제안하는 것 같습니다. 그러나 제 경우에는 고유 한 모노 스트림이있는 2 개의 별도 오디오 파일이 있습니다. 분명히 여기서 뭔가를 놓치고 있습니다. 불행히도 Apple 사이트에는 많은 문서가 없습니다. – A21