菜鸟修炼笔记 您所在的位置:网站首页 调整音频文件音量 菜鸟修炼笔记

菜鸟修炼笔记

2024-03-02 16:19| 来源: 网络整理| 查看: 265

alsa-调节音频音量大小 前言一。方法一:直接放大缓存中的数据1. 基本原理2. 相关尝试和结果2.1 在播放前放大音频缓存数据2.2 在录制前放大缓存 二。方法二:在linux终端直接设置alsa的参数。1. 基本原理2. 过程2.1 获取可以设置的参数2.2 获取各个参数当前的值2.3 设置`播放音量参数`和`录音音量参数` 参考资料:

前言

将使用alsa的录制功能录制出来的音频文件播放后发现,声音音量太小了,所以希望将播放的音量增大。于是,我便在网上搜索了一些相关的资料,整理如下。

在网络上找到的相关问题和博客非常多,但主要只分为两种方式:

一种是通过将需要录制/播放的缓存,取出,并乘上一个放大倍数,再写入音频设备或者是录音文件中,从而达到放大音频音量的目的。一种是直接在Linux的终端使用相关的命令来直接设置alsa的录制音量和播放音量。

但实际上,我只成功使用了第二种方法,下面将简单介绍一下第一种方法的原理,和我的尝试,然后将重点放在第二种方法的介绍上。

一。方法一:直接放大缓存中的数据

由于我没有成功通过这个方法来放大音量,所以不详细介绍具体的过程。下面主要是简单介绍一下这个方法的原理和我做过的相关尝试。

1. 基本原理

将采样的数据乘上一个数字或者是除以一个数字,但要注意溢出处理。

具体的过程可阅览参考资料1。

2. 相关尝试和结果 2.1 在播放前放大音频缓存数据

下面是主要的代码(未全)

char *buf; FILE *fp; buf = (char*)malloc(size);//size为录音文件大小,int型 memset(buf, 0x00, size); //打开音频文件 fp = fopen(DEFAULT_PATH, "rb");//DEFAULT_PATH为音频文件路径 fread(buf , 1, size,fp); //取出缓存区的数据,放大30倍后放回缓存区 int count_value = 0; int size1 = frames * datablock;//size1为每次写入音频设备的数据大小, while(1) { int tmp; tmp = (*(buf + count_value)*30); *(buf + count_value) = tmp; //将缓存写入音频设备,进行播放 //其中handle为PIC设备句柄,frames为snd_pcm_uframes_t 型变量(此处设为256)。 snd_pcm_writei(handle, buf + count_value, frames); //移动到缓存中的下一个数据写入位置 count_value = count_value + size1; //如果读取完整个文件则退出 if( count_value > size) break; } snd_pcm_drop(handle); snd_pcm_close(handle);

结果是,并没有改变播放出来的音量大小,甚至当我把buf设为0时,音量也没有改变。

2.2 在录制前放大缓存

下面是起放大作用的主要代码:(主要的参数同2.1)

snd_pcm_readi(handle,buffer,frames);//读出录下的数据于缓存 int tmp; tmp = (*buffer)*40;//放大缓存 (*buffer) = tmp; fwrite(buffer, 1, size, fd);//将缓存写入音频文件。

结果也是没有将音量变大。

二。方法二:在linux终端直接设置alsa的参数。 1. 基本原理

直接在终端通过alsa的相关命令,先获取可以设置的参数,然后更改所需参数的值。

2. 过程 2.1 获取可以设置的参数

执行:

amixer controls

可得:

numid=3,iface=MIXER,name='Master Playback Volume' numid=2,iface=MIXER,name='Capture MIC Path' numid=1,iface=MIXER,name='Playback Path' numid=4,iface=MIXER,name='Digital Capture Volume'

由名字可知各个参数的含义。

2.2 获取各个参数当前的值

执行:

amixer contents

可得:

numid=3,iface=MIXER,name='Master Playback Volume' ; type=INTEGER,access=rw---RW-,values=2,min=0,max=255,step=0 : values=255,255 | dBscale-min=-20.00dB,step=0.03dB,mute=0 numid=4,iface=MIXER,name='Digital Capture Volume' ; type=INTEGER,access=rw---RW-,values=2,min=0,max=120,step=0 : values=67,67 | dBscale-min=-30.00dB,step=0.41dB,mute=0

由上可知:播放音量参数的取值范围为【0,255】,录音音量参数的取值范围为【0,120】.

2.3 设置播放音量参数和录音音量参数

执行:

amixer cset numid=3,iface=MIXER,name='Master Playback Volume' 255 amixer cset numid=4,iface=MIXER,name='Digital Capture Volume' 120

可得: 录制和播放的音量都设置到最大。

参考资料: PCM音频数据音量大小调节linux alsa 音量参数


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有