android - 多音轨,单线程还是多线程?

标签 android multithreading audio threadpool

在我的应用程序中,我将创建多个音轨,其中一些需要同时播放。我将使用 MODE_STREAM 并在应用程序运行时写入数据。声音将动态生成,这就是我使用 Audio Track 而不是其他任何东西的原因。 我相信我有 4 个选择:

  1. 异步任务
  2. 一个 UI 线程和一个管理所有 AudioTrack 播放的线程
  3. 每个 AudioTrack 一个 UI 线程和一个线程
  4. 一个 UI 线程和一个 Thread Pool

四种方法中哪一种是管理多个 AudioTrack 的最佳方式?

我认为线程池是可行的方法,但我并不肯定,因为我还没有实际使用过它。

任何建议将不胜感激

最佳答案

为简单起见,我只是在每次播放 AudioTrack 时创建一个新线程。

但是,不管它真的没关系。我发现当尝试一次播放多个 AudioTrack 时,会发出噼啪声/断断续续的声音。我相信这只是 Android 系统的问题,而不是我的应用程序的问题。

从 API 级别 9( Gingerbread )开始,我可以将 session ID 应用于音轨,我相信这可以让我使用 SoundPool 播放它,这将使同时播放多个 AudioTrack 更加流畅。

现在,由于有很多用户仍在使用 2.2,而且我没有 Gingerbread 设备,我将把这个项目搁置到稍后。

关于android - 多音轨,单线程还是多线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7509232/

相关文章:

multithreading - Clojure 实现多线程的最佳方式?

Java打印和多线程

android - 无法启动Gradle守护程序。而且由于非ASCII字符而无法加载Project

android - Android 4.1+ 中的 MP4 文件编写器

java - 如何以编程方式动态创建所有 Android ui 组件的列表?例如 TextView 、 ImageView 等

multithreading - 当我使用 x86_64 CAS 指令时,仅锁定一个缓存行或完全锁定 L3 缓存?

macos - 播放声音的基本 OpenAL 代码

c++ - Windows 媒体基础 : getting AAC decoded data

c# - 将输入设置为默认音频设备 ( SetInputToDefaultAudioDevice() )

android - BLE 通知订阅获得 133