第16章_HarmonyOs开发图解之 音频
第16章 HarmonyOs开发图解之 音频HarmonyOS 学习系统 | 阶段三高级深耕期学习目标序号能力1理解音频采样的基本原理采样率、位深度、声道2掌握 AudioRenderer音频播放和 AudioCapturer音频采集的使用3能够使用 SoundPlayer 播放短音效核心图解内容讲解16.1 音频基础概念生活化类比音频采样就像电影胶片的帧声音是连续的声波就像连续的河流。我们无法记录整条河流所以每隔一小段距离取一个水样——这就是采样。采样率如 44100Hz就像每秒拍 44100 张照片的帧率帧率越高还原越精确。44100Hz 意味着每秒从声波中取 44100 个快照。人耳能听到 20Hz~20kHz 的声音根据奈奎斯特定理采样率至少要是最高频率的 2 倍所以 44100Hz 能完美还原 22.05kHz 以下的声音。PCM脉冲编码调制就是把这些快照转换成数字的过程。16.2 音频播放 AudioRendererAudioRenderer 是 HarmonyOS 音频播放的核心类支持流式播放模式边读边播和静态播放模式一次加载完整播放。// 初始化 AudioRendererAudioRendererInfoaudioRendererInfonewAudioRendererInfo.Builder().contentType(AudioRendererInfo.ContentType.CONTENT_TYPE_MUSIC).usage(AudioRendererInfo.StreamUsage.STREAM_USAGE_MUSIC).build();AudioRendereraudioRenderernewAudioRenderer(audioRendererInfo,PlayMode.MODE_STREAM);// 读取音频文件并播放在后台线程中执行getGlobalTaskDispatcher(TaskPriority.DEFAULT).asyncDispatch(()-{InputStreamisgetResourceManager().getResource(MediaTable.INPUT);byte[]datanewbyte[4096];while(is.available()0){intreadLenis.read(data);audioRenderer.write(data,0,readLen);}audioRenderer.release();});// 控制播放audioRenderer.start();audioRenderer.pause();audioRenderer.stop();16.3 音频采集 AudioCapturerAudioCapturer 用于从麦克风采集音频数据适合录音、语音识别等场景。// 初始化 AudioCapturerAudioCapturerInfocapturerInfonewAudioCapturerInfo.Builder().contentType(AudioCapturerInfo.ContentType.CONTENT_TYPE_SPEECH).usage(AudioCapturerInfo.StreamUsage.STREAM_USAGE_VOICE_COMMUNICATION).build();AudioCaptureraudioCapturernewAudioCapturer(capturerInfo);// 读取音频数据audioCapturer.start();byte[]buffernewbyte[4096];while(isRecording){intreadLenaudioCapturer.read(buffer,0,buffer.length);// 处理采集到的音频数据...}audioCapturer.release();16.4 短音效播放 SoundPlayerSoundPlayer 适合播放简短的音效如按钮点击声、通知声资源占用更少。// 加载短音资源SoundPlayersoundPlayernewSoundPlayer(context);intsoundIdsoundPlayer.createSound(ResourceTable.Media_button_click);// 播放soundPlayer.play(soundId);// 释放soundPlayer.release();代码速查卡API功能示例new AudioRenderer(info, mode)创建音频播放器new AudioRenderer(info, MODE_STREAM)write(byte[], offset, size)写入音频数据renderer.write(data, 0, len)start() / pause() / stop()控制播放状态renderer.start()new AudioCapturer(info)创建音频采集器new AudioCapturer(info)read(byte[], offset, size)读取音频数据capturer.read(buf, 0, buf.length)SoundPlayer.createSound(id)加载短音资源player.createSound(soundId)soundPlayer.play(soundId)播放短音player.play(soundId)getMinBufferSize(rate, fmt, mask)获取最小缓冲区大小AudioRenderer.getMinBufferSize(44100, ...)与 Android/iOS 对比特性HarmonyOSAndroidiOS音频播放AudioRendererAudioTrack / MediaPlayerAVAudioPlayer音频采集AudioCapturerAudioRecordAVAudioEngine短音效SoundPlayerSoundPoolAudioServicesPlaySystemSound音频焦点AudioManagerAudioManagerAVAudioSession采样率配置AudioRendererInfo 中设置AudioFormat.BuilderAVAudioFormat⚠️ 踩坑回忆录为什么播放出来的声音像滋滋电流声因为采样率不匹配我设置了 48000Hz 的 AudioRenderer但音频文件本身是 44100Hz 的结果播放出来就像快进的磁带——声音又快又尖。解决方案播放前先查询音频文件的实际采样率然后让 AudioRenderer 的采样率与之匹配。可以用AudioManager.getDevices()查询设备支持的格式和采样率。另外AudioRenderer用完必须release()否则音频焦点会被一直占用其他 App 就播放不了声音了。我曾在调试时忘记 release结果整个手机的音效系统都哑了重启才恢复。必做实操任务序号任务难度1实现一个简单的音频播放器支持播放/暂停/停止中2使用 AudioCapturer 录制音频并保存为 PCM 文件高3使用 SoundPlayer 为按钮添加点击音效低4查询设备支持的音频采样率和格式低5实现一个录音 回放的 Demo高学习检查清单能解释采样率、位深度、声道数的基本概念能使用 AudioRenderer 播放音频文件能使用 AudioCapturer 录制音频知道为什么 AudioRenderer 采样率必须与音频文件匹配能使用 SoundPlayer 播放短音效能在后台线程中执行音频读写操作知道为什么必须手动 release 音频资源理解 MODE_STREAM 和 MODE_STATIC 的区别进阶方向结合第 17 章媒体会话实现后台音乐播放并显示系统通知栏控制学习音频编解码AAC、MP3实现格式转换探索音频可视化将音频数据转换为频谱图必须手动 release 音频资源理解 MODE_STREAM 和 MODE_STATIC 的区别进阶方向结合第 17 章媒体会话实现后台音乐播放并显示系统通知栏控制学习音频编解码AAC、MP3实现格式转换探索音频可视化将音频数据转换为频谱图

相关新闻

免费开源!支持 Markdown 和 HTML 的最佳记事本 Hubble.md 来袭

免费开源!支持 Markdown 和 HTML 的最佳记事本 Hubble.md 来袭

【导语:Hubble.md 是一款免费开源的记事本,支持 Markdown 和 HTML,为用户和助手提供了便捷的笔记记录方式。它具有丰富的功能和良好的用户体验,在笔记应用领域具有一定的竞争力。】免费开源的多功能记事本Hubble.md 是一款免费且开…

2026/7/30 8:30:30 阅读更多 →
生物样本检测中QC样本的制备、分析与质控管理全流程详解

生物样本检测中QC样本的制备、分析与质控管理全流程详解

1. 项目概述:从“样品”到“标尺”的质控核心 在任何一个涉及生物样本检测的实验室里,无论是做基因组测序、蛋白质组学分析,还是临床生化检验,你总会听到一个词——“QC样本”。QC,即Quality Control,质量控…

2026/7/30 8:30:30 阅读更多 →
一种FreeSWITCH流量镜像WebSocket音频推流方案

一种FreeSWITCH流量镜像WebSocket音频推流方案

一种FreeSWITCH流量镜像WebSocket音频推流方案 引言嘿,各位音频流媒体开发的小伙伴们!今天我们来聊一个有点硬核但非常实用的话题——如何在FreeSWITCH中实现流量镜像,并通过WebSocket实时推送音频流。想象一下,你正在做一个智能语…

2026/7/30 8:30:30 阅读更多 →

最新新闻

Python Pillow图像批量处理:格式转换、尺寸调整与自动化实践

Python Pillow图像批量处理:格式转换、尺寸调整与自动化实践

在实际图像处理项目中,我们经常需要处理批量图像,进行格式转换、尺寸调整、质量优化等操作。手动处理不仅效率低下,而且容易出错。本文将围绕一个典型的图像批量处理项目,介绍如何使用 Python 和 Pillow 库实现自动化图像处理流程…

2026/7/30 8:44:35 阅读更多 →
Unity Visual Scripting实战:从节点图到高效游戏开发工作流

Unity Visual Scripting实战:从节点图到高效游戏开发工作流

1. 项目概述:为什么要在Unity项目中使用Visual Scripting? 如果你是一个Unity开发者,无论是刚入门的新手,还是已经写了几年C#代码的老手,可能都听说过或者见过Unity的Visual Scripting(可视化脚本&#xff…

2026/7/30 8:44:35 阅读更多 →
杰里AC695N蓝牙音频SoC开发实战:从环境搭建到Soundbox应用

杰里AC695N蓝牙音频SoC开发实战:从环境搭建到Soundbox应用

1. 项目概述:初识杰里695N与Soundbox 如果你正在寻找一款高性价比、开发便捷且功能强大的蓝牙音频SoC(片上系统)来打造你的智能音箱、便携式蓝牙音箱或者任何需要高品质音频处理与无线连接的产品,那么杰里科技的AC695N系列绝对是一…

2026/7/30 8:44:35 阅读更多 →
冷热电联供系统多目标优化与MATLAB实现

冷热电联供系统多目标优化与MATLAB实现

1. 冷热电联供系统优化背景与挑战 现代能源系统正面临效率提升与碳排放降低的双重压力。冷热电联供(CCHP)系统通过能源梯级利用,将发电余热用于制冷或供热,综合能效可达70%以上。但实际运行中常遇到三个核心矛盾: 设备…

2026/7/30 8:44:35 阅读更多 →
H1标题:如何快速优化飞行控制系统?终极PIDtoolbox实战指南

H1标题:如何快速优化飞行控制系统?终极PIDtoolbox实战指南

H1标题:如何快速优化飞行控制系统?终极PIDtoolbox实战指南 【免费下载链接】PIDtoolbox PIDtoolbox is a set of graphical tools for analyzing blackbox log data 项目地址: https://gitcode.com/gh_mirrors/pi/PIDtoolbox 飞行控制系统优化、黑…

2026/7/30 8:44:35 阅读更多 →
亚马逊CLI工具定价实测:免费额度、包月与年付对比

亚马逊CLI工具定价实测:免费额度、包月与年付对比

💡 阅读提示:亚马逊CLI(跨境电商语境)是给亚马逊卖家用的命令行数据工具,不是亚马逊云科技的 AWS CLI。我用公开价格与自定义调用量做预算演算,重点拆开免费额度、包月、年付、API 权益和隐性维护成本&…

2026/7/30 8:43:34 阅读更多 →

日新闻

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南

Windows驱动存储终极清理工具:DriverStoreExplorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否遇到过设…

2026/7/30 0:00:13 阅读更多 →
如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南

如何3步掌握Video Download Helper:网页视频下载的完整实战指南 【免费下载链接】VideoDownloadHelper Chrome Extension to Help Download Video for Some Video Sites. 项目地址: https://gitcode.com/gh_mirrors/vi/VideoDownloadHelper 你是否曾经在浏览…

2026/7/30 0:00:13 阅读更多 →
“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

“双减”后首个AI备课压力测试报告:覆盖32所中小学的176节AI辅助课,暴露4大隐性增负节点

更多请点击: https://intelliparadigm.com 第一章:AI 教师备课辅助 AI 教师备课辅助系统正逐步成为教育数字化转型的核心支撑工具,它并非替代教师,而是通过语义理解、知识图谱与多模态生成能力,将教师从重复性劳动中解…

2026/7/30 0:00:13 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/29 22:18:20 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/29 15:00:03 阅读更多 →

月新闻