0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【技术干货】原来ARM+Linux音频方案如此简单!

武汉万象奥科 2022-07-13 11:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式产品开发中经常遇到音频的输入输出问题,如何为其添加“喇叭”、“麦克风”设备呢?本文将简单介绍ARM+Linux产品中的音频解决方案。

我们先认识下I2S(Inter-ICSound)总线。I2S又称集成电路内置音频总线,该总线专门用于音频设备之间的数据传输,广泛应用于各种多媒体系统。它采用了沿独立的导线传输时钟与数据信号的设计,通过将数据和时钟信号分离,有效避免因时差诱发的失真。

以HDG2L-IoT评估套件为例,RZ/G2L处理器提供至少一路I2S总线,通过该总线与音频编解码芯片(IC型号WM8960)连接,用于提供高质量的录音播音功能。音频模块的硬件部署如下所示。

HDG2L-IoT音频接口

图1HDG2L-IoT音频接口

G2L核心板与WM8960的音频通讯引脚如下所示:

音频通讯引脚

在Linux系统的音频编解码驱动中,通过I2C通讯接口与音频IC通讯,把音频IC内的各个功能寄存器抽象成音频控件,这样用户即可在User空间内直接调整IC内的参数。I2S音频引脚,则是数字信号发送、接收的通道。

播音时,音频IC接收到数字信号后则转换为模拟信号发送出去,录音时,音频IC把收到的音频模拟量转换为数字量,发送给处理器。

ALSA是linux的主流音频体系结构,它包含内核驱动集合,API库和工具对Linux声音进行支持,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。

Linux通过alsa库以及alsa工具管理音频IC的控件,通过“amixercontrols”列出当前系统内的音频控制项:

音频控制项

音频功能的关键控件信息如下所示。(录音通道、播音通道、耳机音量大小、喇叭音量大小)。

音频功能的关键控件信息

在开发板下,运行aplay程序可以对音频播放进行测试。在测试前,需要将耳机插入开发板的耳机插孔中。

为测试基于I2S的音频输出接口,在命令行下执行如下命令:

5.jpg

其中2.wav为需要播放的音频文件,且此处假定2.wav位于/home/root/audios目录下。

在进行音频播放时,对于基于I2S的音频输出接口,可以使用amixer程序对音量进行调节。使用amixer程序对耳机播放音量进行调节的命令行格式为:

6.jpg

其音量值取值范围在0~127之间,127表明最大音量。例如要将音量设置为100,可在命令行下执行如下命令:

7.jpg

将扬声器接入HDG2L-IOT开发板的左右声道插座中,在播放音频前可先设置扬声器播放音量以及总音量,然后播放音频文件:

8.jpg

录音功能需设置录音控件的参数,如下所示。

9.jpg

用arecord命令录音并保存为“/tmp/t.wav”,然后用aplay命令回放进行验证。

10.jpg

由于当前的麦克风输出信号仅接到了音频处理的Left端作为输入,所以播放录音文件时仅左声道有输出,若希望将麦克风输出信号同时记录在左右声道可做如下设置:

11.jpg

将“ADCDataOutputSelect”设定为1,其值含义为“LeftData=LeftADC;RightData=LeftADC”。

由上可知,音频编解码芯片在Linux系统中以控件的形式存在,内部的参数一般只记录在内存中,当系统掉电时,修改的参数就会消失,所以需要保存和恢复指令将上次的参数保存在配置文件中。

alsa的配置文件为:/var/lib/alsa/asound.state

控件修改后的写入操作如下所示。

12.jpg

控件恢复参数的操作如下所示(注:重启板子后会自动读取配置文件)。

13.jpg
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ARM
    ARM
    +关注

    关注

    135

    文章

    9635

    浏览量

    395273
  • 嵌入式
    +关注

    关注

    5213

    文章

    20862

    浏览量

    339648
  • Linux
    +关注

    关注

    88

    文章

    11893

    浏览量

    220211
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    【瑞迅技术干货】小白也能上手!Linux设备搭建可上网WiFi热点完整指南

    【瑞迅技术干货】小白也能上手!Linux设备搭建可上网WiFi热点完整指南在智能场景中,经常需要将工控机、嵌入式设备等Linux系统终端,搭建为可上网WiFi热点,实现手机、平板等移动
    的头像 发表于 05-22 16:43 763次阅读
    【瑞迅<b class='flag-5'>技术</b><b class='flag-5'>干货</b>】小白也能上手!<b class='flag-5'>Linux</b>设备搭建可上网WiFi热点完整指南

    openKylin受邀参加Linux内核领域顶级技术峰会

    近日,Linux内核领域顶级技术峰会——LSF/MM/BPF 2026在克罗地亚萨格勒布举行。大会聚焦Linux内核存储、文件系统、内存管理以及BPF等关键技术方向,吸引了来自全球开源
    的头像 发表于 05-14 11:08 626次阅读

    Adafruit Audio FX Mini Sound Board - 便捷音频解决方案

    Adafruit Audio FX Mini Sound Board - 便捷音频解决方案 引言 在电子项目中,添加音频或音效是一个常见的需求。但对于那些不想使用Arduino和扩展板,或者不太了解
    的头像 发表于 05-11 09:25 398次阅读

    多系统免驱接入:WX-0813 模块化音频方案实战价值

    技术探讨:为何“免驱”在音频方案如此关键?在嵌入式音频产品开发中,一个长期被低估却又频繁引发项目风险的环节,是操作系统的
    的头像 发表于 05-08 14:15 313次阅读

    音频IC与MCU+外部音频解决方案到底有什么区别?深度对比助你精准选型

    方案?两者表面上都能实现“设备发声”,但背后的技术架构、成本结构、开发流程和应用适配性却截然不同。方案一:专用音频IC(语音芯片)这是一种将音频
    的头像 发表于 05-08 09:14 318次阅读
    <b class='flag-5'>音频</b>IC与MCU+外部<b class='flag-5'>音频</b>解决<b class='flag-5'>方案</b>到底有什么区别?深度对比助你精准选型

    Arm SME2技术加速腾讯翻译大模型推理

    腾讯混元将翻译大模型 Hy-MT1.5 压缩至最小 440MB(1.25-bit 模型),轻轻松松装进手机。不仅如此,依托第二代 Arm 可伸缩矩阵扩展 (Arm SME2) 技术加持
    的头像 发表于 05-06 10:07 465次阅读
    <b class='flag-5'>Arm</b> SME2<b class='flag-5'>技术</b>加速腾讯翻译大模型推理

    Linux Kernel 6.1 tools目录全解析 | RK平台ARM64交叉编译实战指南

      在瑞芯微( RK ) ARM64 平台嵌入式 Linux 开发、内核调试与硬件外设测试中, Linux 内核源码自带的 tools 目录 是官方标配的工具集合,涵盖性能分析、设备调试、系统管理
    的头像 发表于 04-16 18:42 7887次阅读
    <b class='flag-5'>Linux</b> Kernel 6.1 tools目录全解析 | RK平台<b class='flag-5'>ARM</b>64交叉编译实战指南

    Linux音频开发必藏!这个官网藏着从驱动到应用的全套解决方案

    打开alsa-project.org,首先会被这句简介击中:"为 Linux 系统提供音频与 MIDI 功能的核心架构"。作为 2.6 版本后 Linux 内核默认的音频子系统
    的头像 发表于 02-06 16:56 3304次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>音频</b>开发必藏!这个官网藏着从驱动到应用的全套解决<b class='flag-5'>方案</b>

    深度解析ES8389/ES8390/音频芯片Linux驱动(Linux6.1内核)

          在嵌入式音频开发中,顺芯( Everest ) ES8389/ES8390 是一款高集成度的音频 Codec 芯片,广泛应用于智能音箱、车载终端、便携设备等场景。本文
    的头像 发表于 02-02 11:37 3204次阅读
    深度解析ES8389/ES8390/<b class='flag-5'>音频</b>芯片<b class='flag-5'>Linux</b>驱动(<b class='flag-5'>Linux</b>6.1内核)

    2025年国产音频传输模块产品选购全攻略与技术方案解析

    国产音频传输模块品牌在全球市场中崭露头角,2025年已成为值得关注的技术力量。本文基于权威数据平台的分析,详细解析国产音频传输模块厂商的实力、优势产品及其应用方案,为行业人士提供专业参
    的头像 发表于 02-01 10:49 866次阅读

    linux-arm开发环境的简单配置

    linux-arm开发环境简单配置 关于linux-arm开发环境简单配置是ARM学习的第一步,很多初学者会在这问题上纠结很久都不能配置好
    发表于 01-13 07:56

    LE Audio蓝牙模块方案:重塑无线音频新体验

    ​ 在无线音频技术日新月异的今天,蓝牙模块作为连接设备的核心组件,其性能与功能直接决定了用户体验的优劣。近期,基于LE Audio标准的新一代蓝牙模块方案横空出世,以其卓越的技术特性和
    的头像 发表于 01-06 17:42 1925次阅读

    分享一个Linux音频开发实用站:ALSA项目官网使用指南

    经常和Linux音频打交道的朋友,大概率听过ALSA(Advanced Linux Sound Architecture),它是Linux系统里负责
    的头像 发表于 12-10 07:03 1007次阅读
    分享一个<b class='flag-5'>Linux</b><b class='flag-5'>音频</b>开发实用站:ALSA项目官网使用指南

    学校做广播对讲系统干货分享

    。同时,考虑终端的音质、功率等参数,确保声音覆盖效果。 管理软件:选择界面友好、操作简单的管理软件,应具备音频文件统一管理、终端状态实时监控、远程设置与升级等功能,方便学校管理人员进行集中管理。 广播
    发表于 07-24 15:59