android - 如何为android生成的音调设置播放速度

标签 android playback audio

我正在使用 AudioTrack 类并在我的 Android 应用程序中生成了我自己的音调。但是,我希望能够控制播放速度,但我不知道该怎么做。

我看到了 setLoopPoints 方法,但它似乎并没有达到我想要的效果(如果有人使用过它并且可以向我解释该方法那就太好了,api 文档对我帮助不大)。

我想做的事情:

随着一个点(此处为屏幕上的触摸)越来越接近屏幕上的目标,我想提高生成音调的速度。例如,在较远的地方,我会让音调在 1 秒内播放 1 次,但在离目标很近的地方,在 1 秒内播放 5 次。我正在努力寻找使用 Android 声音(生成的音调甚至保存到我的 res/raw 的 .wav 文件)执行此操作的最佳方法。

如有任何帮助,我们将不胜感激!

沙尼

最佳答案

你想为此使用 setPlaybackRate 方法:

http://developer.android.com/reference/android/media/AudioTrack.html

结合 setLoopPoints。但是,我认为可以加快文件“自然”播放速率的速度可能有一个限制,这个限制可能是 48 kHz(不过我不确定,这可能取决于设备)。

因此,如果您有一个以 8000 Hz 的频率录制的文件,要获得您想要的效果,您可以将循环计数设置为 4(以便它连续播放 5 次)并设置播放速率到 40,000 (5 * 8000)。

由于(可能)播放速率有上限,您最好的方法可能是以高频录制原始声音,并根据需要放慢播放速度以达到您想要的效果。

更新:setLoopPoints 允许您在文件中指定两个任意位置,这样当播放到达结束循环点时,音频引擎将返回到开始循环点。要循环整个文件,您可以将开始循环点设置为 0,将结束循环点设置为文件中的最后一帧(每个帧的大小取决于文件的格式 - 因此每个样本使用 2 个字节的立体声文件将具有帧大小为 4,因此最后一帧就是音频数据的字节大小除以 4)。

要让文件连续播放 5 次,您可以将循环计数设置为 4(循环计数为 0 表示文件播放一次;-1 表示它将永远循环播放)。

更新 2: 请多阅读文档 - setPlaybackRate 的上限记录为 getNativeOutputSampleRate 返回速率的两倍,它大多数设备可能是 44,100 或 48,000 Hz。这意味着标准 CD 质量的 WAV 文件只能以正常速度的两倍播放。一个 22,050 Hz 的文件最多可以以其正常速度的 4 倍播放,等等。

关于android - 如何为android生成的音调设置播放速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5083975/

相关文章:

c++ - 录制音频,存储在缓冲区中,然后通过 PulseAudio 将字节写入声卡

Android 音频 Remote

python - 播放.wav文件x秒

javascript - 创建多个<audio>元素以防止剪切

c# - 如何叠加两个视频

c++ - 如何在 C++ 中仅用一个扬声器播放声音?

Android - Firebase 按值排序

android - 不同行有不同列的 TableLayout

android - 生成 Proguarded 签名 APK 问题?

android - 在纵向中使用 recyclerview,在横向中使用表格布局