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打碟
相关推荐
微帧Visionular6 小时前
AI视频单帧清晰,播放时却闪烁,原因是什么?
人工智能·深度学习·音视频
辰辰观影8 小时前
Windows网盘视频播放器推荐:无广告4K HDR怎么选
音视频
2601_9668274510 小时前
电视端云盘在线播放怎么选?支持4K HDR的应用推荐
音视频
开开心心就好11 小时前
音频降噪剪辑工具,音量裁剪一键处理
运维·服务器·前端·spring·ocr·音视频·1024程序员节
AI视频工具指南14 小时前
AI视频的声音和画面怎么配合?先分清谁在传递信息
人工智能·aigc·音视频
辰辰观影16 小时前
无广告播放器推荐来啦
音视频
TrueDei16 小时前
GStreamer 使用 valve 分别控制音视频流的暂停与恢复
音视频
一条破秋裤18 小时前
基于 Hi3516CV610 的立定跳远视频测量系统调研与实施方案
arm开发·音视频
2601_9668274518 小时前
视频里的特效字幕怎么翻译?外挂字幕与AI字幕一键处理教程
音视频
八月的雨季 最後的冰吻19 小时前
音视频面试--延迟优化
面试·职场和发展·音视频