Unity3D - 메모장

quest3dkorea.com


통계 위젯 (화이트)

2128
170
137732


유니티에서 안드로이드 볼륨제어 Unity3D 스크립트

※ 유니티에서 호출하는건 이전 플러그인 포스트 참조하세요. 안드로이드 음성인식 시작할때 아래 코드로 볼륨 줄였다 풀면 
딩동소리 막을 수 있습니다.

AudioManager F_am = null;
// 유니티에서 볼륨값을 넣어서 호출합니다. 기본 범위는 0 ~ 10으로 해서 보내는 걸로 가정했습니다.
    public void setVolume(int vol){
F_am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int volint = vol;
// 유니티에서의 최고값을 넣었습니다.
int inputMax = 10;
// 기기 자체의 최고 볼륨값을 가져옵니다.
        int musicMaxVol = F_am.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float lastvolint = (float)volint / (float)inputMax;
// 기기 최고 볼륨값으로 보정을 해줍니다.
int lastSystemVolume = (int) (musicMaxVol * lastvolint);
Log.i("Unity", "Max - " + musicMaxVol + " / current : " + String.valueOf(musicMaxVol * lastvolint));
// 볼륨 설정하면 끝.

F_am.setStreamVolume(AudioManager.STREAM_MUSIC, lastSystemVolume, 0);

// 볼륨 바뀔때 소리내주는 부분인데 기기 제조사마다 조금씩 차이가 있는것 같습니다.
ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, lastSystemVolume);
toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 100);
}

// 기기의 현재 볼륨값을 얻어오는 것입니다. 유니티 시작할때 얻어와서 볼륨 제어 변수에 넣어주고 시작하면
// 깔끔합니다.
public void getVolume(){
AudioManager TmpAudioM = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int maxVol = TmpAudioM.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
int currentVol = TmpAudioM.getStreamVolume(AudioManager.STREAM_MUSIC);
// 0 ~ 10범위값으로 변환
int result = (int)(((float)currentVol/(float) maxVol) * 10);
UnityPlayer.UnitySendMessage(UnityObjName, "AndroidVolume", String.valueOf(result));

}

★ 매니페스트에는 <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 
퍼미션을 추가해줍니다.

★ 유니티에서 추가 시킨 부분
public delegate void delegateVolume(string vol);
public class pluginmanager : MonoBehaviour {
	delegateVolume _Volume;
	public void call_setSystemVol(int vol) {        	AJO.Call("setVolume", vol);	    }
	public void call_getSystemVol() {        	AJO.Call("getVolume");	    }
	public void AndroidVolume(string vol) {        	if (_Volume != null) {	            _Volume(vol);        	}	    }
	public void setcallbacAndroidVol(delegateVolume callback) { this._Volume = callback; }
}
G
M
T
음성 기능은 100자로 제한됨
G
M
T
음성 기능은 100자로 제한됨
G
M
T
음성 기능은 100자로 제한됨
G
M
T
음성 기능은 100자로 제한됨

덧글

  • 코딩초보 2016/09/26 05:04 # 삭제 답글

    안녕하세요 음성인식과 음성녹음을 동시에 하고 싶은데... 어떻게 안될까요?
    towert9@naver.com
  • 오 미니 오 미니 2016/09/26 11:55 # 답글

    녹음을 해서 보내는 거니 어디 버퍼에 있을거 같긴한데 그건 찾아봐야 할거 같네요.
댓글 입력 영역