2013-05-10 1 views
3

같은 getStereoVolume() 또는안드로이드에서 AudioTrack의 볼륨을 얻는 방법은 무엇입니까?

setOnVolumeChangedHandler(...) 어떻게 내가 볼륨 레벨을 추적 할 수 있습니다, 나는 track.setStereoVolume(a,b);

를 사용하여 audioTrack의 볼륨을 설정할 수 있습니다하지만 난 볼륨을 얻을 수있는 방법을 찾을 수 없습니다?

+0

AudioManager를 사용하는 것이 해결책 일 수 있다고 생각합니다. getStreamVolume (int streamType) 메소드가 있습니다. – Opiatefuchs

+0

일반 오버 라이더 기능이라고 생각합니다. 따라서 AudioTrack의 볼륨도 0.0f입니다. AudioManager는 getStreamVolume에 대해 1.0f를 반환 할 수 있습니다. 그렇지 않니? – frankish

답변

1

실제 답변이 아니라 단지 가정입니다. 지금까지 테스트하지는 않았지만 제대로 작동합니다. 나는이 방법을 오버라이드해야한다고 생각하지 않는다. 사용해보기

AudioManager audioManager = (AudioManager) 
      getSystemService(AUDIO_SERVICE); 

     float volume = (float) audioManager. 
      getStreamVolume(AudioManager.STREAM_MUSIC); 
+3

문제는 내가 단지 audiotrack의 볼륨을 줄입니다. 그래서 다른 audiotrack은 1.0 (full)의 볼륨을 가질 수 있습니다. 따라서 AudioManager의 getStreamvolume은 이러한 값과 관계없이 1.0 또는 0.5로 설정 될 수 있습니다. – frankish

2

오디오 트랙의 왼쪽 및 오른쪽 볼륨 레벨을 가져올 수 없습니다.

그래서 나는 AudioTrack을 나타내는 클래스를 만들 것을 제안합니다.

public class AudioPlayer{ 
    AudioTrack track; 
    float leftVolume; 
    float rightVolume; 
    public AudioPlayer(){ 
     //create audio track. 
     leftVolume = 1; 
     rightVolume = 1; 
    } 
    public void setStereoVolume(float left, float right){ 
     this.leftVolume = left; 
     this.rightVolume = right; 
     track.setStereoVolume(left, right); 
    } 
} 

당신이 당신의 AudioTrack 스테레오 볼륨을 만드는 두 채널 모두 1.0이다. 볼륨을 AudioPlayer으로 설정하면 새 레벨을 추적합니다.

AudioPlayerAudioTrack이 완전히 캡슐화되어 있으면 작동합니다.

편집 :

AudioTrack 다른 트랙의 자체 볼륨 레벨이 독립적 있습니다. AudioTrack이 재생되는 스트림 (STREAM_MUSIC, STREAM_SYSTEM 등)도 최종 볼륨 레벨에 영향을줍니다.

따라서 AudioTrack이 왼쪽 및 오른쪽 채널의 경우 .5, .5, STREAM_MUSIC에서 재생되는 경우를 말합니다. 그 스트림이 0.5 볼륨에있는 경우 일부 자동 볼륨 조정으로 인해이 스트림 레벨에서 발생 (또는 어딘가에 그 이상 숨겨져한다 무엇 이건, 전력 절감 또는 헤드폰 -에 발생하는 경우, 최종 오디오 레벨은

.5*.5 = .25 //for the left and right channels. 

될 것입니다) 여전히 볼륨을 조정하지 않아야합니다. AudioTrack

+0

답변 해 주셔서 감사합니다. Android OS에서 트랙 볼륨을 변경하면 (예 : 헤드폰을 연결할 때 삼성 기기의 자동 볼륨 변경과 같은)이 값은 동기화되지 않습니다. – frankish

+0

나는 그렇게 생각하지 않는다. 여러 볼륨 수준이 있습니다. 오디오 트랙의 볼륨 레벨은 다른 레벨과는 독립적입니다. 최종 레벨은 출력되는 스트림 유형에 의해 곱해집니다. 나는 답을 다듬을 것이다. –

관련 문제