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打碟
相关推荐
linux_cfan11 小时前
videojs v10 源代码系列解读:14 · 谓词守卫:在运行时安全地调用能力
前端·javascript·音视频
赛博仓鼠13 小时前
秋叶ComfyUI 3.2整合包实测:Python 3.13+Torch 2.13全栈升级,一键跑通MiniMax H3(附完整部署)
ai·ai作画·aigc·音视频
乐橙开放平台15 小时前
从「多套客户端」到一套开放能力:乐橙视频监控能力复盘
笔记·物联网·自动化·音视频·智能家居
linux_cfan20 小时前
videojs v10 源代码系列解读:13 · 能力型媒体契约:`Media` 的组合接口
前端·javascript·音视频
勤劳X码农21 小时前
2026年TTS工具技术测评:7款方案实测,从免费额度到API集成全解析
人工智能·音视频·实时音视频
m0_6145235521 小时前
Log视频导入发灰,先查颜色链
音视频·视频编辑
linux_cfan1 天前
17 · 引擎适配器全景:HLS/DASH/Vimeo/Mux/Cast
前端·javascript·音视频
音视频牛哥2 天前
视频编码的终局不是“更省码率”:从 H.266、AV2 到 AI 编解码的下一场竞争
音视频·h.266·rtsp h.266·h.266编解码·rtp h.266·rtp vvc·ai编解码
程序员老陆2 天前
WHIP 与 WHEP:WebRTC 直播的标准化入口与出口
ffmpeg·音视频·webrtc·whip·whep
linux_cfan2 天前
16 · `custom-media-element`:属性拦截与转发
前端·javascript·音视频