【问题标题】:Low-level audio API for AndroidAndroid 的低级音频 API
【发布时间】:2011-03-27 02:26:32
【问题描述】:

我正在寻找某种方式在 Android 中以类似于 Windows 编程中的 waveOutOpen 系列方法的方式播放内存中的音频。

waveOut... 方法本质上是让应用程序创建样本值数组(如内存中没有标题的 WAV 文件)并将它们转储到队列中以进行顺序播放。 Windows 无缝地从一个数组过渡到下一个数组,因此只要应用程序在播放之前不断将数组转储到队列中,程序就可以创建和播放任意长度的连续音频。 Windows API 还包含一个回调机制,应用程序可以使用该机制来指示进度和加载额外的缓冲区。

据我所知,Android 音频 API 允许应用程序从本地存储或 URL 或内存流中播放文件。有没有办法让Android“排队”MediaPlayer.start() 调用,以便一个玩家在播放完成后转换(没有故障)到下一个? Jet 似乎做了类似的事情,但只使用了它自己的内部合成引擎。

还有其他方法可以waveOutOpen 方式访问 Android 音频吗?

【问题讨论】:

    标签: android audio


    【解决方案1】:
    android.media.AudioTrack
    

    ... 是您可能正在寻找的课程。

    http://developer.android.com/reference/android/media/AudioTrack.html#AudioTrack%28int,%20int,%20int,%20int,%20int,%20int%29

    创建后,您只需使用以下方法向其提供具有给定格式的二进制数据:

    AudioTrack.writeTo(...)
    

    【讨论】:

    • 谢谢,这看起来正是我想要的。你知道这在模拟器中是否有效吗?在 Windows Mobile 中,waveOutWrite 方法只能在模拟器中工作(很多暂停和卡顿),而在真实设备中工作正常。
    • 我没有亲自尝试过,但我在寻找从流中播放 MP3 内容的方法时遇到了它。除非您连接了调试器,否则在模拟器中使用 MediaPlayer 可以正常工作。它可能与 AudioTrack 类似。
    • 我很确定 MediaPlayer 和 SoundPool(知道这个事实,今天早些时候正在研究它)在内部使用 AudioTrack,所以我会说它肯定会运行(尤其是。看看它是如何运行我的本机代码的)。
    猜你喜欢
    • 2011-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多