openwrt+Linkit7688+wm8960:粗略实现wm8960耳麦和喇叭音频输出

news/2024/11/29 4:43:48/

引言:
本文只是介绍怎么使用linkit7688开发板上的wm8960的输出喇叭声音和耳机声音,主要是怎么输出喇叭声音,默认的音频驱动是只有耳麦的音频输出而没有喇叭音频输出的。别人指导我,有点成果也给大家参考一下。

感谢huangkj-henan的博客:http://blog.csdn.net/hnhkj/article/details/50930483#reply
相信有玩linkit7688的同学应该都是有搜索到这篇博客的。

1、在操作台中我们使用命令来操作:

madplay xxx.mp3 &
madplay xxx.mp3 -r &
killall -9 madplay
killall -STOP madplay &
killall -CONT madplay &

2、在驱动代码中我们使用system()来调用播放声音;

system("madplay xxx.mp3 &");//利用system函数调用madplay播放器播放*.mp3音乐
system("madplay xxx.mp3 -r &");//循环播放:参数-r
system("killall -9 madplay");//利用system函数调用killall命令将madplay终止掉 
system("killall -STOP madplay &");//利用system函数调用killall命令将madplay暂停
system("killall -CONT madplay &");//利用system函数调用killall命令恢复madplay的播放

所以在程序里面直接调用system(“madplay xxx.mp3 &”);就会有声音输出了。

如果用耳麦,直接就有输出,可以听到声音输出。但是喇叭却一直都没有声音输出。把喇叭贴到耳朵上听就会发现有很小的,微弱的声音。这样个人认为基本上就是喇叭的音量太小了。

路径:

.../linux-x-xx-xx/sound/soc/mtk/i2c_wm8960.c

函数

audiohw_set_lineout_vol(int Aout, int vol_l, int vol_r)

这个函数是修改声音的大小的。

Aout=1:设置耳机声音大小 
Aout=2:设置喇叭声音大小 
vol_l vol_r:范围48-127

追根溯源过,但是没有发现有效的调用,主要是没有发现有设置喇叭声音大小的地方。所以就在初始化里面添加了这个函数

audiohw_set_lineout_vol(2, 126, 126);

这个有个小插曲:
内核模块初始化的时候会打印调试信息,如果你找到这个函数就会发现这个函数是有打印调试信息的,

MSG("audiohw_set_lineout_vol_\n");

所以有打印这个信息,就是有被调用了。不过后面发现还是不能用。还好在内核每一次调用声音的执行函数里面我也调用了一次。然后就有声音从喇叭上输出了。

用户程序里面调用

system("madplay xxx.mp3 &");

串口调试界面就会输出

############## MMAP ##############

等一些相关调试信息。
根据调试信息找到相应文件:
路径:

.../linux-x-xx-xx/sound/soc/mtk/mt76xx_pcm.c

函数

static int mt76xx_pcm_allocate_dma_buffer(struct snd_pcm_substream *substream,
int stream)

我在里面对声音进行了设置,就是

#include "i2c_wm8960.h"
audiohw_set_lineout_vol(2, 126, 126);

理论上初始化调用一遍就应该可以了,但是估计在哪里给复位了或者初始化的时候没有把wm8960设置好,所以在mt76xx_pcm_allocate_dma_buffer函数里设置一下就可以了。

这个应该不是wm8960的正确打开方式,只是一个参考。


http://www.ppmy.cn/news/380323.html

相关文章

耳麦浅度DIY

作为一个伪音乐爱好者,自己DIY一个耳麦肯定是必须的。 抽时间做一次非深度DIY。 在马云爸爸的淘宝上选了些东西, 喇叭单元,做工还可以,买不起高端货,150左右RMB凑合用吧: 对于一个小白来说,焊…

【转载】Android音频(7)——项目实战——耳麦插拔

Android音频(7)——项目实战——耳麦插拔 7.4.3 声音路由切换实例分析 深入理解Android:卷1 看云 一、驱动程序上报耳麦拔插事件 1. 在有些Android版本中并不会在状态栏上显示耳麦图标。切换声道也不在系统中实现,而是在驱动中实现的。 2. headset …

8.5.1耳麦拔插_驱动程序上报耳麦拔插事件

目录 分析+概念 驱动框架​ 输入系统流程 编写驱动程序如下 switch dev驱动的流程

USB耳麦_从无到有(一)

我想做一个基于STM32F1芯片的USB耳麦。不确定能不能搞出来,简单记录一下这个过程。 首先,这个项目需要先学USB,再学音频。 那就先学USB。 USB 我对USB有一点了解,但忘得差不多了。我复习一下基本的USB协议,再开始学音…

08.音频系统:第005课_项目实战1_耳麦拔插:第001节_驱动程序上报耳麦拔插事件

在接下来的几个小节中,会讲解几个音频的项目,现在想讲解第一个项目:对 耳麦拔插事件的处理,一起分为四个小节左右: 5.1 驱动程序上报耳麦拔插事件 5.2 在状态栏显示耳麦图标 5.3 耳麦拔插事件调用流程分析 5.4 切换声音…

8.5.3耳麦拔插事件调用流程分析

目录 回顾 input系统方法 回顾 在前面的小节中,我们编写了一个驱动程序,模拟耳机的插拔事件,其可以上报耳机的拔插事件,并且修改了android的源代码,可以根据耳机的拔插事件,在状态栏上现实或者消除耳麦的图标,这节视频我们讲解耳麦插拔事件导致的程序调用流程。 …

耳麦有杂音(电流声)的解决方法

耳麦有杂音(电流声)的解决方法 耳麦有杂音(电流声)主要原因: 1,电脑没有及时清理,堆积系统垃圾太多,电脑反映缓慢,应及时清理电脑的系统垃圾和杀毒。2,耳麦损…

Linux教程——Linux cd命令:切换目录 + Linux pwd命令:显示当前路径

Linux cd命令:切换目录 cd 命令,是 Change Directory 的缩写,用来切换工作目录。 Linux 命令按照来源方式,可分为两种,分别是 Shell 内置命令和外部命令。所谓 Shell 内置命令,就是 Shell 自带的命令&…