zedboard adau1761之capture录音调试(五)

今天在进行zedboard开发板adau1761之录音调试,尝试从mic口录取声音再播放出来,调试卡了好久,竟然卡在mic口的三段式口不兼容四段式口的接头,好吧,孤陋寡闻了,汗!!!!!
下面开始说说调试的过程。

adau1761.state文件配置

首先进行adau1761.state 配置文件的加载,这个是从ez.analog.com网站上找的lars大神(adau1761驱动的编写者)已经配置好的文件,可以直接用的。文件我上传到csdn了,adau1761.state
然后使用如下命令进行配置:

alsactl restore -c 0 -f adau1761.state

查看alsactl指令的使用方法:
这里写图片描述
-c设置声卡设备的编号,我是设备编号0,设成0,如果你要是加载7511的驱动,声卡设备编号是1,就设成1;
-f配置state文件,选择adau1761.state文件。

硬件电路与音频接头

接下来进行录音操作,在介绍录音之前,先说下adau1761的硬件电路及相关知识,还有那个三段式和四段式接头。
这里写图片描述
这里写图片描述
原始图纸在:资料与图纸
从上面的图纸可以看到AUDIO 有四个接头,蓝、粉、绿、黑四个颜色。

  1. line in 蓝色,主要用于连接电吉他、电子琴等外界设备的输出信号,这些设备本身的输出功率较大。
  2. MIC in 粉色,麦克风录音使用的接头,需要有前置放大器。
  3. line out 绿色,非功率输出的标准模拟输出,不能直接驱动耳机,中间需要加功放才能接耳机。
  4. headphone 黑色,耳机输出,可以直接接耳机。
    下面说下三段式接头和四段式接头:
    (1)名称
    耳机插头有3个环的,也就是插头被分割成3段,这种插头叫“三段线式插头”;那么插头有4个环的则被称为“四段线式插头”。
    这里写图片描述
    这里写图片描述
    (2)作用不同
    三段线插头决定了耳机只能有左、右两个喇叭,原因如下图:
    这里写图片描述
    四段线插头除了可以连接左右连个喇叭外,还可以连接麦克风。如图:
    这里写图片描述
    (3)接线定义不同
    三段线式接线定义:
    这里写图片描述
    四段线接线定义(有两种,如下两图):
    这里写图片描述
    这里写图片描述
    我在调试的时候就是用四段氏耳机直接插在了mic口,录音然后播放一直没声音,还以为是amixer的设置有问题,原来是zedboard的mic口是三段式的,查的四段式的不兼容。现在新出的笔记本都只有一个耳机口,和手机的耳机口一样,是四段式的,可以兼容三段式的。

录音

搞明白了这些,就可以开始录音了。录音使用arecord命令:
查看arecord命令的使用方法:
这里写图片描述

arecord -Dhw:ADAU1761 -fS32_LE -d10 -c2 -r48000 s32_le.wav

-D是选择ADAU1761设备;
-f是采样格式;
-d是采集10后停止;
-c是选择通道2;
通道2是什么通道?在alsa-utils库中aplay.c源码中有一段源码:

static void header(int rtype, char *name)
{
        if (!quiet_mode) {
                if (! name)
                        name = (stream == SND_PCM_STREAM_PLAYBACK) ? "stdout" : "stdin";
                fprintf(stderr, "%s %s '%s' : ",
                        (stream == SND_PCM_STREAM_PLAYBACK) ? _("Playing") : _("Recording"),
                        gettext(fmt_rec_table[rtype].what),
                        name);
                fprintf(stderr, "%s, ", snd_pcm_format_description(hwparams.format));
                fprintf(stderr, _("Rate %d Hz, "), hwparams.rate);
                if (hwparams.channels == 1)
                        fprintf(stderr, _("Mono"));
                else if (hwparams.channels == 2)
                        fprintf(stderr, _("Stereo"));
                else
                        fprintf(stderr, _("Channels %i"), hwparams.channels);
                fprintf(stderr, "\n");
        }
}

即通道1是mono,单声道;通道2是stereo,立体声;
-r是设置采样速率48000hz。
使用上述命令即可录音。

播放

播放使用aplay命令:

aplay -Dhw:ADAU1761 -fS32_LE -c2 -r48000 s32_le.wav

相关参数参考上述arecord命令的介绍,把耳机接在黑色接头就可以听见声音了。

猜你喜欢

转载自blog.csdn.net/u014470361/article/details/80816897