tdchang
tdchang

Reputation: 43

How to set sample rate as 100KHz using AudioTrack in Android?

I'm developing an Android app that will play a specific audio. This audio is generated by code. My problem is that I need the sample rate up to 100KHz, but I got the error message as below. Could anyone know how to set sample rate as 100KHz with AudioTrack. Thanks.

PS: As I know, only AudioTrack could modify audio data, that's why I use AudioTrack

---------------code start-------------------

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

---------------log start--------------------

> 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

Upvotes: 1

Views: 3030

Answers (2)

Bowie Chang
Bowie Chang

Reputation: 126

Do check out this method in Audiotrack, audiotrack.setPlaybackRate(int sampleRateInHertz)

Upvotes: 0

tonys
tonys

Reputation: 3984

100kHz is a non-standard sampling rate and most Android platforms only support the standard rates (ref. Wikipedia: Sampling Rate).

The closest standard rate is 96kHz (professional audio) but most phones don't support this high a rate. CD quality (44.1kHz) is widely supported and you might be lucky and get 48kHz (e.g. Nexus S).

Upvotes: 3

Related Questions