2011-12-01 3 views
1

특정 오디오를 재생할 Android 앱을 개발 중입니다. 이 오디오는 코드에 의해 생성됩니다. 내 문제는 최대 100KHz까지 샘플 속도가 필요하지만 아래 오류 메시지가 나타납니다. 누구든지 AudioTrack으로 100KHz로 샘플 속도를 설정하는 방법을 알고있을 수 있습니다. 감사.Android에서 AudioTrack을 사용하여 샘플 속도를 100KHz로 설정하는 방법은 무엇입니까?

PS : 나는 AudioTrack

--------------- 코드의 시작을 사용하는 이유 내가 아는 한는 만 AudioTrack 오디오 데이터를 수정할 수, 즉 -----입니다 --------------

audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 
          100000, 
          AudioFormat.ENCODING_PCM_16BIT, 
          (int)minSize, 
          AudioTrack.MODE_STREAM); 

--------------- 시작 로그 --------- -----------

> D/AndroidRuntime(7952): Shutting down VM E/AndroidRuntime(7952): 
> FATAL EXCEPTION: main E/AndroidRuntime(7952): 
> java.lang.RuntimeException: Unable to start activity 
> ComponentInfo{com.examples.audiotracktest/com.examples.audiotracktest.AudioTrackTest}: 
> java.lang.IllegalArgumentException: 100000Hz is not a supported sample 
> rate. E/AndroidRuntime(7952): at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1830) 
> E/AndroidRuntime(7952): at 
> android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1851) 
> E/AndroidRuntime(7952): at 
> android.app.ActivityThread.access$1500(ActivityThread.java:132) 
> E/AndroidRuntime(7952): at 
> android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038) 
> E/AndroidRuntime(7952): at 
> android.os.Handler.dispatchMessage(Handler.java:99) E/AndroidRuntime(
> 7952): at android.os.Looper.loop(Looper.java:150) E/AndroidRuntime(
> 7952): at android.app.ActivityThread.main(ActivityThread.java:4293) 
> E/AndroidRuntime(7952): at 
> java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime(
> 7952): at java.lang.reflect.Method.invoke(Method.java:507) 
> E/AndroidRuntime(7952): at 
> com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:849) 
> E/AndroidRuntime(7952): at 
> com.android.internal.os.ZygoteInit.main(ZygoteInit.java:607) 
> E/AndroidRuntime(7952): at dalvik.system.NativeStart.main(Native 
> Method) E/AndroidRuntime(7952): Caused by: 
> java.lang.IllegalArgumentException: 100000Hz is not a supported sample 
> rate. E/AndroidRuntime(7952): at 
> android.media.AudioTrack.audioParamCheck(AudioTrack.java:369) 
> E/AndroidRuntime(7952): at 
> android.media.AudioTrack.<init>(AudioTrack.java:312) E/AndroidRuntime(
> 7952): at android.media.AudioTrack.<init>(AudioTrack.java:265) 
> E/AndroidRuntime(7952): at 
> com.examples.audiotracktest.AndroidAudioDevice.<init>(AndroidAudioDevice.java:21) 
> E/AndroidRuntime(7952): at 
> com.examples.audiotracktest.AudioThread.<init>(AudioThread.java:11) 
> E/AndroidRuntime(7952): at 
> com.examples.audiotracktest.AudioTrackTest.onCreate(AudioTrackTest.java:29) 
> E/AndroidRuntime(7952): at 
> android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072) 
> E/AndroidRuntime(7952): at 
> android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1794) 
> E/AndroidRuntime(7952): ... 11 more 

답변

3

100kHz는 비표준 샘플링 속도이며 대부분의 안드로이드 플랫폼은 표준 속도 (ref. Wikipedia: Sampling Rate) 만 지원합니다.

가장 가까운 표준 속도는 96kHz (전문 오디오)이지만 대부분의 전화는이 높은 속도를 지원하지 않습니다. CD 품질 (44.1kHz)이 널리 지원되며 운이 좋으면 48kHz (예 : Nexus S)가됩니다.

0

Audiotrack에서이 방법을 확인하십시오. audiotrack.setPlaybackRate(int sampleRateInHertz)

관련 문제