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
    +关注

    关注

    134

    文章

    8651

    浏览量

    361815
  • 嵌入式
    +关注

    关注

    4982

    文章

    18281

    浏览量

    288459
  • Linux
    +关注

    关注

    87

    文章

    10991

    浏览量

    206736
收藏 人收藏

    评论

    相关推荐

    使用 PREEMPT_RT 在 Ubuntu 中构建实时 Linux 内核

    盟通技术干货构建实时Linux内核简介盟通技术干货Motrotech如果需要在Linux中实现实
    的头像 发表于 04-12 08:36 132次阅读
    使用 PREEMPT_RT 在 Ubuntu 中构建实时 <b class='flag-5'>Linux</b> 内核

    Linux系统CPU占用率100%的排查思路

    今天浩道跟大家分享linux硬核干货,工作中当你服务器CPU达到100%时,干着急是没有用的,该查问题还得自己去查。本文将给大家罗列排查异常故障思路,并且文末附上相关shell脚本,去实际一番,你会发现原来解决问题的方法
    的头像 发表于 01-23 10:26 1947次阅读
    <b class='flag-5'>Linux</b>系统CPU占用率100%的排查思路

    WT2003H MP3语音芯片方案:强大、灵活且易于集成的音频解决方案

    在当今的数字化时代,音频技术的普遍性已不容忽视。从简单的音乐播放,到复杂的语音交互,音频技术的身影无处不在。在这个背景下,WT2003HMP
    的头像 发表于 12-02 09:39 162次阅读
    WT2003H MP3语音芯片<b class='flag-5'>方案</b>:强大、灵活且易于集成的<b class='flag-5'>音频</b>解决<b class='flag-5'>方案</b>

    技术干货 | 了解3种静态电流的规格

    技术干货 | 了解3种静态电流的规格
    的头像 发表于 10-26 15:56 470次阅读
    <b class='flag-5'>技术</b><b class='flag-5'>干货</b> | 了解3种静态电流的规格

    基于ARM Linux和S3C2440的嵌入式Linux内核设计

    电子发烧友网站提供《基于ARM Linux和S3C2440的嵌入式Linux内核设计.pdf》资料免费下载
    发表于 10-12 10:37 2次下载
    基于<b class='flag-5'>ARM</b> <b class='flag-5'>Linux</b>和S3C2440的嵌入式<b class='flag-5'>Linux</b>内核设计

    基于ARMLinux系统移植

    电子发烧友网站提供《基于ARMLinux系统移植.pdf》资料免费下载
    发表于 10-11 10:57 0次下载
    基于<b class='flag-5'>ARM</b>的<b class='flag-5'>Linux</b>系统移植

    基于LinuxARM和单片机的串口通信设计

    电子发烧友网站提供《基于LinuxARM和单片机的串口通信设计.pdf》资料免费下载
    发表于 10-11 10:35 0次下载
    基于<b class='flag-5'>Linux</b>的<b class='flag-5'>ARM</b>和单片机的串口通信设计

    pcb钉头产生的原因,原来如此

    pcb钉头产生的原因,原来如此
    的头像 发表于 10-08 09:51 806次阅读

    看懂EMC整改知识:原来竟然如此简单!(下)

    看懂EMC整改知识:原来竟然如此简单(下)?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下!
    的头像 发表于 09-08 11:02 446次阅读
    看懂EMC整改知识:<b class='flag-5'>原来</b>竟然<b class='flag-5'>如此</b><b class='flag-5'>简单</b>!(下)

    看懂EMC整改知识:原来竟然如此简单!|深圳比创达EMC(下)

    看懂EMC整改知识:原来竟然如此简单(下)?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下! EMC领域的三个重要规律和EMC问题三个要素EMC三个重要规律规律一: RE
    发表于 09-08 11:01

    看懂EMC整改知识:原来竟然如此简单!|深圳比创达EMC(中)

    看懂EMC整改知识:原来竟然如此简单(中)?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下! EMC整改方法EMC(Electromagnetic Compatibility
    发表于 09-07 10:51

    看懂EMC整改知识:原来竟然如此简单!(上)

    看懂EMC整改知识:原来竟然如此简单!|深圳比创达EMC(上)
    的头像 发表于 09-06 11:10 705次阅读

    看懂EMC整改知识:原来竟然如此简单!|深圳比创达EMC(上)

    看懂EMC整改知识:原来竟然如此简单(上)?相信不少人是有疑问的,今天深圳市比创达电子科技有限公司就跟大家解答一下! 电磁兼容性EMC(Electro Magnetic Compatibility
    发表于 09-06 11:09

    Linux常用命令总结

    不少Linux运维初级同学,一到面试环节,就会在基础上掉链子,比如一些简单的命令都会不知道,今天浩道跟大家分享这篇硬核干货,可以帮助大家几分钟回顾掌握Linux常用命令!!!
    发表于 09-04 17:14 330次阅读

    创建一个简单Hello World Linux应用程序的过程

    本教程将向您介绍创建一个简单的Hello World Linux应用程序的过程,然后将该应用程序加载到运行ARM嵌入式Linux的Cortex-A9固定虚拟平台(FVP)模型上。 Co
    发表于 08-28 06:32