Android16音频之设置播放速率AudioTrack.setPlaybackRate:用法实例(一百三十三)

简介: CSDN博客专家、《Android系统多媒体进阶实战》作者

博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏地址:Audio工程师进阶系列原创干货持续更新中...... 】🚀
Android多媒体专栏地址:多媒体系统工程师系列原创干货持续更新中...... 】🚀
推荐1:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
推荐2:Android14 Binder之HIDL与AIDL通信实战课 🚀
推荐3:Android15快速自定义与集成音效实战课 🚀
推荐4:Android15音频策略实战课 🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
更多原创,欢迎关注:Android系统攻城狮

🍉🍉🍉文章目录🍉🍉🍉

      • [🌻1. 前言](#🌻1. 前言)
      • [🌻2. Android16进阶之设置播放速率AudioTrack.setPlaybackRate介绍](#🌻2. Android16进阶之设置播放速率AudioTrack.setPlaybackRate介绍)
      • [🌻3. 代码实例](#🌻3. 代码实例)
        • [🌻3.1 完整流程:音乐慢放0.8x](#🌻3.1 完整流程:音乐慢放0.8x)
        • [🌻3.2 完整流程:语言学习1.2x快放](#🌻3.2 完整流程:语言学习1.2x快放)
        • [🌻3.3 完整流程:DJ打碟实时变速](#🌻3.3 完整流程:DJ打碟实时变速)
      • [🌻3.4 用法总结](#🌻3.4 用法总结)

🌻1. 前言

本篇目的:Android16进阶之设置播放速率AudioTrack.setPlaybackRate:用法实例

🌻2. Android16进阶之设置播放速率AudioTrack.setPlaybackRate介绍

  1. 基本概念

    setPlaybackRate通过AudioTrack动态改变音频输出采样率,实现变速不变调或变调不变速效果,用于快进、慢放、DJ打碟、语言学习等场景。

  2. 功能

    支持0.5x-2.0x速率;与原始采样率联动;无需重启播放;与音高、时间拉伸独立;无需权限;立即生效。

  3. 使用限制

    需在play()后调用;范围受硬件限制;与缓冲区大小联动;变速模式需配合时间拉伸算法;部分ROM限制范围。

  4. 性能特性

    内存位立即更新;延迟低于10毫秒;无JNI阻塞;与硬件时钟同步;内存恒定。

  5. 使用场景

    音乐慢放、语言学习、DJ打碟、视频同步。

🌻3. 代码实例

🌻3.1 完整流程:音乐慢放0.8x
java 复制代码
AudioTrack track = new AudioTrack.Builder()
        .setAudioFormat(new AudioFormat.Builder()
                .setSampleRate(44100)
                .setChannelMask(AudioFormat.CHANNEL_OUT_STEREO)
                .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                .build())
        .setBufferSizeInBytes(65536)
        .build();
track.play();
track.setPlaybackRate((int)(44100 * 0.8f));
track.write(pcmData, 0, pcmData.length);

代码功能:将44.1 kHz速率降至35.28 kHz输出,实现0.8倍慢放。

🌻3.2 完整流程:语言学习1.2x快放
java 复制代码
AudioTrack voice = new AudioTrack.Builder()
        .setAudioFormat(new AudioFormat.Builder()
                .setSampleRate(16000)
                .setChannelMask(AudioFormat.CHANNEL_OUT_MONO)
                .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
                .build())
        .setBufferSizeInBytes(3200)
        .build();
voice.play();
voice.setPlaybackRate((int)(16000 * 1.2f));
voice.write(voiceBuf, 0, voiceBuf.length);

代码功能:16 kHz升高至19.2 kHz,语音快放1.2倍,节省时间。

🌻3.3 完整流程:DJ打碟实时变速
java 复制代码
AudioTrack djTrack = new AudioTrack.Builder()
        .setAudioFormat(new AudioFormat.Builder()
                .setSampleRate(48000)
                .setChannelMask(AudioFormat.CHANNEL_OUT_STEREO)
                .setEncoding(AudioFormat.ENCODING_PCM_FLOAT)
                .build())
        .setBufferSizeInBytes(4096)
        .build();
djTrack.play();
// 触摸滑动实时变速 0.5-2.0
float rate = 0.5f + (seek.getProgress() / 100f) * 1.5f;
djTrack.setPlaybackRate((int)(48000 * rate));
djTrack.write(floatPcm, 0, floatPcm.length);

代码功能:滑动条实时改变速率,实现DJ搓碟效果。

🌻3.4 用法总结

代码关键字 功能描述 典型应用
setPlaybackRate 44100*0.8 速率减慢 音乐慢放
setPlaybackRate 16000*1.2 速率加快 语言快放
setPlaybackRate 48000*rate 实时变速 DJ打碟
相关推荐
水上冰石7 小时前
ComfyUI 如何生成视频,demo
音视频
阿里巴巴淘系技术团队官网博客8 小时前
TLiveOmni 1.0: 直播视频多模态理解大模型
音视频
Wilbert Lee12 小时前
关于 Adobe Audition CC 2018 多轨音频 VBR 格式导出时长的问题
adobe·音视频
开开心心就好17 小时前
用户推荐的文件解锁与强制操作工具
安全·智能手机·pdf·scala·音视频·symfony·1024程序员节
luoqice17 小时前
linux下安装rtsp流媒体服务器
linux·音视频
searchforAI18 小时前
5款AI笔记工具实测:导入体验、结构化输出、后续能力逐项对比
人工智能·笔记·学习·ai·chatgpt·aigc·音视频
nashane19 小时前
HarmonyOS 6学习:SoundPool音频防抖与Web长截图时序重构
学习·音视频·harmonyos·harmonyos 5
ACP广源盛1392462567319 小时前
OpenAI 推出的 GPT-5.5 大模型,倒逼接口芯片升级迭代@ACP#IX8024应用迭代
网络·人工智能·嵌入式硬件·电脑·音视频
ACP广源盛1392462567319 小时前
OpenAI 推出的 GPT-5.5 大模型,倒逼接口芯片升级迭代@ACP#IX8012应用迭代
大数据·网络·人工智能·嵌入式硬件·电脑·音视频
java小吕布20 小时前
HyperFrames:写 HTML 就能渲染视频,专为 AI 智能体打造的开源渲染框架
人工智能·html·音视频