首页 > 其他分享 >如何修改音频的音量增益

如何修改音频的音量增益

时间:2024-09-24 20:23:29浏览次数:14  
标签:音频 dB 修改 增益 音量 软件 数据

一、前言

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

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左右,说明修改成功了。

标签:音频,dB,修改,增益,音量,软件,数据
From: https://blog.csdn.net/weixin_48344581/article/details/142499343

相关文章

  • Android15音频进阶之新播放器HwAudioSource(八十六)
    简介:CSDN博客专家、《Android系统多媒体进阶实战》一书作者新书发布:《Android系统多媒体进阶实战》......
  • 解决QFC810.exe运行时错误:soundplayer.dll文件丢失,恢复音频播放的实用指南
    当遇到QFC810.exe运行时错误,提示soundplayer.dll文件丢失时,这通常意味着你的系统或应用程序目录中缺少了必要的动态链接库文件(DLL),导致音频播放功能无法正常工作。以下是一份恢复音频播放的实用指南:一、确认问题首先,确认错误消息确实是由于soundplayer.dll文件丢失引起的。这......
  • 将双通道音频转换为两条单通道音频的解决方案
    方案一代码在Python中,可以使用wave模块来读取双通道(立体声)音频文件,并将每个通道分别保存为独立的音频文件。以下是一个简单的示例,演示了如何实现这一过程:importwave#打开双通道音频文件withwave.open('stereo_audio.wav','rb')asstereo_wave:#获取音频文件的参......
  • .NET 音频播放器 界面优雅,体验流畅
    目录前言项目介绍项目页面用户界面与动画效果音频格式支持与封面模式任务栏模式歌词功能更多功能探索项目源码项目地址前言本文介绍一款使用C#与WPF开发的音频播放器,其界面简洁大方,操作体验流畅。该播放器支持多种音频格式(如MP4、WMA、OGG、FLAC等),并具备......
  • 推荐4个音频处理相关的.Net开源项目
    推荐4个音频处理相关的.Net开源项目,包括开发库、播放器、录屏工具。1、Captura全屏录制,还提供区域录制、游戏录制和摄像头录制等多种模式。不管是录制软件操作、游戏、直播、网络教学、课件制作还是在线视频,都可以满足你的需求。此外该工具还可以录制多种屏幕内容,如鼠标......
  • C# + WPF 音频播放器 界面优雅,体验良好mL
    合集-.NET开源工具(17)1..NET开源快捷的数据库文档查询和生成工具07-312..NET结果与错误处理利器FluentResults08-013..NET+WPF桌面快速启动工具GeekDesk08-194.Gradio.NET支持.NET8简化Web应用开发08-265..NET开源实时监控系统-WatchDog08-276.实用接地气的.NE......
  • 器件:PT2258音量控制器
    1序  PT2258为台湾普诚电子于2000年7月开发出的由iic总线控制的音量控制IC;音量调节范围[-79,0]dB,调节步长1dB;2工作原理  2.1工作原理    PT2258内部集成了可编程电阻网络,通过对Vin进行分压处理后输出Vout,实现音量控制;    当音量放大倍数为0dB时,Vin=Vout音量最......
  • Android14音频进阶之如何集成音效(八十五)
    简介:CSDN博客专家、《Android系统多媒体进阶实战》一书作者新书发布:《Android系统多媒体进阶实战》......
  • 音频播放器
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>AudioPlayer</title>......
  • 音频转换芯片DP7344兼容CS4344双通道24位DA转换器
    产品简介DP7344是一款完整的2通道输出数模转换芯片,内含插值滤波器、Multi-Bit数模转换器、输出模拟滤波器,并支持大部分的音频数据格式。DP7344基于一个带线性模拟低通滤波器的四阶Multi-BitΔ∑调制器,自动检测信号频率和主时钟频率,在2KHz和200KHz之间自动调节采样率。DP......