gpt4 book ai didi

java - Android 上使用 java 的异步音频播放器

转载 作者:行者123 更新时间:2023-12-02 02:57:11 27 4
gpt4 key购买 nike

我创建了一个在 Android 中运行的 Java 应用程序。声音仅使用同步 MediaPlayer 类来准备和播放,涉及 50 到 80 毫秒的延迟,这对于实时产品来说太大了。

因此,为了提高 Android 中 Java 声音播放器的性能(通过最小化其延迟),我正在寻找一个异步音频播放器或媒体播放器。

异步,因为这样可以避免加载(准备)或播放声音时出现延迟

您知道 Android native 库或其他可以导入到 java 应用程序中的库吗?

例如,我已经看到该 URL,但我不知道如何将其“插入”Java 应用程序?

https://developer.android.com/reference/android/media/AsyncPlayer.html

谢谢

最佳答案

我在我的书中写了一个关于 Android 音频的相当完整的章节。这是我用来决定使用哪个 API 的流程图。您引用的旧 AsyncPlayer 已被弃用,在我看来并不能真正解决您的延迟问题。媒体播放器的启动延迟最差。根据您提供的信息,SoundPool 可能是最佳选择。AudioTrack 为您提供最大的灵 active 。

enter image description here

希望这有帮助。以下是使用 soundPool API 播放声音的代码摘录:

private void playSoundPool(int soundID) {
int MAX_STREAMS = 20;
int REPEAT = 0;
SoundPool soundPool = new SoundPool(MAX_STREAMS, AudioManager.STREAM_MUSIC, REPEAT);
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
@Override
public void onLoadComplete(SoundPool soundPool, int soundId, int status) {
int priority = 0;
int repeat = 0;
float rate = 1.f; // Frequency Rate can be from .5 to 2.0
// Set volume
AudioManager mgr = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
float streamVolumeCurrent =
mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
float streamVolumeMax =
mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
float volume = streamVolumeCurrent / streamVolumeMax;
// Play it
soundPool.play(soundId, volume, volume, priority, repeat, rate);
}
});
soundPool.load(this, soundID, 1);
}

关于java - Android 上使用 java 的异步音频播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42889136/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com