android - 如何在 Android 中使用 AudioTrack 将采样率设置为 100KHz?

标签 android

我正在开发一款可以播放特定音频的 Android 应用。此音频由代码生成。我的问题是我需要高达 100KHz 的采样率,但我收到如下错误消息。谁能知道如何使用 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

最佳答案

100kHz 是非标准采样率,大多数 Android 平台仅支持标准采样率 ( ref. Wikipedia: Sampling Rate )。

最接近的标准速率是 96kHz(专业音频),但大多数手机不支持这么高的速率。 CD 质量 (44.1kHz) 得到广泛支持,您可能会幸运地获得 48kHz(例如 Nexus S)。

关于android - 如何在 Android 中使用 AudioTrack 将采样率设置为 100KHz?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8336701/

相关文章:

android - 如何在 Eclipse 中创建 Android 模拟器

android - 解析推送通知仅适用于模拟器

android - Robolectric buildActivity() 与 Mockito spy ?

android - 自定义字体错误

android - 从 Realm.io android 中删除单个对象(如果它仍然存在)

java - 了解泛型 : Incompatible types when class has generic type and implements one of its parametrised superclass

android - 在 Android 中执行添加 2 个 LARGE float 数组的快速方法。可选的 JNI 或 Opengl ES

java - 主题未保存在共享首选项中

android - 如何从调用的电话代码(例如#120)开始一个 Activity

java - 模拟器崩溃 "Invalid int"