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打碟
相关推荐
高远-临客2 小时前
unity IL2CPP模式下中使用UMP插件打包后无法播放视频监控报错问题解决方案
android·unity·音视频
EasyDSS2 小时前
视频直播点播平台EasyDSS在游戏比赛直播场景的应用实践
游戏·音视频
xingqing87y3 小时前
影视解说制作教程:如何去除视频原音,添加配音和字幕
音视频
忠实米线3 小时前
使用JSMpeg实现移动端播放自动视频
音视频
LeeZhao@3 小时前
【狂飙全模态】狂飙AGI-智能视频生成助手
人工智能·redis·语言模型·音视频·agi
kkk_皮蛋3 小时前
深入理解 WebRTC 视频质量降级机制
网络·音视频·webrtc
CoookeCola4 小时前
离线视频水印清除工具:手动选定位置(ROI)与强制修复功能详解,支持命令行ROI定位
网络·图像处理·opencv·计算机视觉·开源·github·音视频
办公知识分享小能手5 小时前
怎么把mp4转为mp3呢?分享五个视频转换软件
音视频
一点晖光6 小时前
ffmpeg处理视频命令整理
ffmpeg·音视频