2012-01-08 4 views
5

먼저, 동일한 주파수이지만 반대 위상을 갖는 두 개의 사인파 톤을 즉석에서 생성해야하며 안드로이드에서 스테레오 모드의 오른쪽 및 왼쪽 채널로 분리하여 재생해야합니다. 왼쪽 채널과 오른쪽 채널의 사인이 "미러링"되도록 재생이 완벽하게 동기화되어야합니다 (왼쪽 채널의 경우 샘플 값 120, 오른쪽 채널의 값은 -120이어야 함).AudioTrack을 사용하여 왼쪽 및 오른쪽 채널을 개별적으로 재생하는 방법은 무엇입니까?

이런 종류의 설정이 어떻게 작동하는지 아무 증거도 발견하지 못했습니다. 왼쪽 채널과 오른쪽 채널을 별도로 동시에 재생하려면 AudioTrack에 2 개의 개별 톤/샘플 버퍼를 공급할 수 있습니까? 그렇지 않은 경우, 최종 결과를 달성하기위한 다른 해결책이 많이 있습니다.

하나의 옵션은 미리 생성 된 스테레오 웨이브 파일을 사용하고 AudioTrack을 사용하여 스트리밍하는 것이지만이 방법은 솔루션에서 너무 융통성이없는 것처럼 보입니다. 동시에, AudioTrack이 "실제"스테레오 모드로 미리 녹음 된 오디오 파일을 재생할 수 있다면 나는 생성 된 사운드에서도 이와 동일한 결과를 기대할 수 있습니다.

+2

안드로이드 개발자 사용자 그룹의 niko20에게 감사드립니다. "오른쪽 및 왼쪽에 별도의 버퍼가 필요하지 않습니다. 스테레오 오디오는 인터리브되었습니다. 스테레오를 출력하려면 왼쪽으로 오른쪽으로 왼쪽으로 버퍼를 채우십시오."이것은 실제로 효과가 있습니다. AudioTrack을 사용하여 테스트했습니다. – rar

답변

0

좋아요. 두 개의 샘플 만 있으므로이 방법을 사용할 수 있습니다.

먼저 SoundPool을 확인하십시오. 메모리에 완전히로드 될 때 좋은 성능이 필요한 트랙이있을 때 유용합니다. 그러나 이것은 메모리에 저장되는 트랙의 크기에 대한 제한 인 주요 단점을 가지고 있습니다. 내가 처음 이것을 사용했을 때 스트림에 2 x 4Mb 파일을 넣으려고했는데 이것은 좋은 생각이 아니 었습니다. 각 스트림의 왼쪽과 오른쪽의 볼륨을 설정하는 방법

setVolume(int streamID, float leftVolume, float rightVolume) 

주의 사항 :

SoundPool이 기능이? 스트림 1의 경우 최대 왼쪽 출력 볼륨을 가지며 스트림 2의 경우 최대 출력 볼륨을 가질 수 있습니다.

재생할 파일과 원하는 볼륨으로 스트림을 설정 한 다음 다시 재생합니다.

간단한 튜토리얼

http://www.vogella.de/articles/AndroidMedia/article.html

+0

OK 무슨 뜻인지는 알지만 SoundPool은 코드에서 사운드를 생성하고 AudioTrack 및 MODE_STREAM을 사용하여 재생중인 버퍼를 즉시 피드해야하므로 불행히도 도움이되지 않습니다. . AudioTrack은 CHANNEL_OUT_MONO 및 CHANNEL_OUT_STEREO 설정을 지원하지만 실제로 다른 코드 생성 사운드를 좌우 채널에 제공하는 옵션을 찾지 못했습니다. – rar

5

AudioTrack에서 발견 될 수있다 SoundPool과 같은 방법이있다. 서로 다른 데이터를 동시에 왼쪽/오른쪽 채널을 재생하려면 그것은

AudioTrack.setStereoVolume();

를 호출합니다. 이 목표를 달성하려면 데이터를 처리해야합니다. 16 비트 PCM으로 스테레오 모드를 선택하면 데이터는 왼쪽에는 1 바이트, 오른쪽에는 1 바이트입니다. 예를 들어

왼쪽 채널 재생할 : 12, 23, 34, 45

우측 채널 재생할 : 54, 43, 32, 좌측 채널과 동시에 21.

이어서 {12, 54, 23, 43, 34, 32, 45, 21}, AudioTrack.write (데이터)를 사용

데이터로서 생성한다. 그것은 당신을 완벽하게 만날 것입니다.

+0

이것이 맞습니까? 출력 버퍼를 따라 각 채널의 한 요소를 상호 교환해야합니까? –

+0

모노 오디오 용 단일 채널을 만들려고하고 있지만 이제는 public int setVolume (float gain) API 수준 21에 추가됨이 트랙의 모든 채널에서 지정된 출력 게인 값을 설정합니다. 이 API는 setStereoVolume (float, float)보다 선호됩니다. 모노로 스케일 업하고 스테레오 이상으로 멀티 채널 콘텐츠까지 확장 할 수 있기 때문입니다. 그럼 내가 어떻게 지금 제어 할 수 있니? – VMMF

관련 문제