2011-12-01 171 views
1

我正在開發一個將播放特定音頻的Android應用程序。該音頻由代碼生成。我的問題是我需要的採樣率高達100KHz,但我收到如下錯誤信息。誰能知道如何設置採樣率爲100KHz與AudioTrack。謝謝。如何在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是非標準採樣率,大多數Android平臺僅支持標準速率(ref. Wikipedia: Sampling Rate)。

最接近的標準速率是96kHz(專業音頻),但大多數手機不支持這種高速率。 CD質量(44.1kHz)得到廣泛支持,您可能會很幸運並獲得48kHz(如Nexus S)。

0

在Audiotrack中檢查此方法,audiotrack.setPlaybackRate(int sampleRateInHertz)