如何修改音频的音量增益

一、前言

在开发音频相关的功能(比如说语音通话、播放音乐)时,经常会遇到音量太小的问题,这时候就需要我们对原始数据进行处理。本文将介绍如何通过修改原始音频数据来增加增益,本文包含如下内容:

1.音频数据在软件上的形态

2.音频增益计算公式

3.修改音频增益的代码实现

二、音频数据在软件上的形态

声音在自然界是以模拟信号的形式存在的,为了便于传输和存储,电子设备通常会将声音转成电信号。每个采集到的电信号在软件上都会对应一个数值,软件上通过对这些数值进行处理,最终实现对音频的调整。

软件上通常使用十六进制来表示音频对应的电信号数值,如下图所示:

(2-1)

音频采样的频率越高、位深越大,就越音频能够还原原始的音频。位深越大,音频样本的分辨率就越高。常用的有8bit、16bit、24bit、32bit。

三、音频增益计算公式

声音的大小通常用分贝(dB)来衡量。

在软件上,可以通过同意提供每个采样点的值来增加音频的增益,不过这种方式不太好量化修改后的具体增益。

软件上常使用对原始音频数据进行移位的方式修改音频的增益,这种方式位移数和增益(dB)的数学关系如下:

Gain(dB)= 20 * log10 (2的n次方) (n为位移数)

= 6.02 * n

也就是说,原始数据左移一位,增加6.02个dB。(右移则减小)

四、修改音频增益的代码实现

假定系统中播放的音频数据是16位深小端存储的(低位在前,高位在后),且数据是2通道的,修改音频增益的代码实现应如下所示:

c 复制代码
void change_gain(char *buf, snd_pcm_uframes_t frames, int seek)
                    
{
        //1frame的数据大小为:通道数 * 16/8 = 2 * 2(Byte)            
        int length = frames * 4;
                                        
        for(int i = 0; i < length - 1; i += 2)
                    
        {
                //将两个8bit的数据组合成完整的16bit数据    
                unsigned short value = (buf[i] & 0xFF) | ((buf[i + 1] & 0xFF) << 8);
                //移位修改增益                        
                value <<= seek;
                //获取低8位数据                        
                buf[i] = (value & 0xFF);
                //获取高8为数据    
                buf[i + 1] = (value >> 8) & 0xFF;
                    
        }
                                        
}

这里取向左移动3位,理论上会增加18.06个dB,最后的测试数据如下:

修改前的数据:

(4-1)

修改后的数据:

(4-2)

修改前后数据相差也在18dB左右,说明修改成功了。

相关推荐
王家视频教程图书馆8 小时前
vue3从本地选择一个视频 展示到视频组件中
前端·javascript·音视频
新科技事物9 小时前
AI编曲软件帮原创音乐人,用清唱歌词的音频快速做出专业的歌曲编曲伴奏
人工智能·音视频
新科技事物10 小时前
AI编曲软件提升出歌效率,原创音乐人凭清唱歌词的音频快速作编曲伴奏成歌
人工智能·音视频
AI科技12 小时前
清唱歌词的音频直接用,原创音乐人用AI编曲软件直接生成完整歌曲的编曲伴奏
人工智能·音视频
wefly201713 小时前
M3U8 播放调试天花板!m3u8live.cn纯网页无广告,音视频开发效率直接拉满
java·前端·javascript·python·音视频
凉拌菜15 小时前
医用录像机在手术影像系统中的作用:视频采集与存储架构
音视频
WJSKad123515 小时前
[特殊字符] Mimi音频神经网络编解码器:高保真声音处理的突破
人工智能·神经网络·音视频
凉拌菜15 小时前
手术摄像系统的视频延迟是如何产生的?从采集到网络传输的技术解析
网络·音视频·医疗视频·4k视频·术野摄像机
ai产品老杨16 小时前
源码交付与异构算力破局:基于GB28181/RTSP的Docker化AI视频平台架构实战
人工智能·docker·音视频
Fleshy数模1 天前
玩转OpenCV:视频椒盐噪声处理与图像形态学操作实战
人工智能·opencv·音视频