音频文件的音量分析

当声源环境不同时,采取不同的声音处理策略。

总共使用了两种计算声音分贝的方法

  • 算法1:绝对值的平均值
  • 算法2:平方和的对数

代码

import wave
import numpy as np
import matplotlib.pyplot as plt

# 分析音量、分贝的图形
def analyze_db():
    # 开发wav音频文件
    wf = wave.open(‘./record_test.wav‘, ‘r‘)

    # 设置每次读取块的大小
    chunk = 1024

    # 用来添加音量的数组
    value1 = []  # 绝对值的平均值
    value2 = []  # 对数

    # 对每1024块的声音进行分析
    while True:

        # 每次读取1024
        stream_data = wf.readframes(chunk)
        print(stream_data)

        # 当数据为空的时候,退出
        if stream_data == b‘‘:
            break

        # 每块对应的声音分贝
        data = np.fromstring(stream_data, dtype=np.int16)
        # print(data)  # [ 11   8  15 ... -39  -5  12] 是这种数据

        # 算法1
        db1 = np.average(np.abs(data)) * 2
        # 算法2
        db2 = 10 * np.log10(np.sum(data * data))

        # 只取整数
        value1.append(int(str(db1).strip().split(‘.‘)[0]))
        value2.append(int(str(db2).strip().split(‘.‘)[0]))

    # 关闭
    wf.close()

    length1 = len(value1)
    x1 = np.arange(0, length1)
    y1 = np.array(value1)
    # print(x, y)

    length2 = len(value2)
    x2 = np.arange(0, length2)
    y2 = np.array(value2)
    # print(x, y)

    # 绘制波形图
    plt.subplot(2, 1, 1)
    plt.xlabel(‘length1‘)
    plt.ylabel(‘value1‘)
    plt.plot(x1, y1, c=‘r‘)

    # 绘制波形图
    plt.subplot(2, 1, 2)
    plt.xlabel(‘length2‘)
    plt.ylabel(‘value2‘)
    plt.plot(x2, y2, c=‘r‘)

    plt.subplots_adjust(hspace=0.5)
    plt.show()

if __name__ == ‘__main__‘:
    analyze_db()

再有其他算法的话,再继续加。

参考1

原文地址:https://blog.51cto.com/feature09/2421804

时间: 2024-08-30 00:27:53

音频文件的音量分析的相关文章

分享python分析wave, pcm音频文件

最近研究的,我用的是python3.3, 用matplotlib画图, 下面代码演示分析pcm文件,如果是wave文件,把wave的文件头去掉就是pcm文件了. 代码如下 1 # -*- coding:utf-8 -*- 2 3 import array 4 import os 5 from matplotlib import pyplot 6 7 fileName = 'e:/music/qianqian.pcm' # 2 channel, 16 bit per sample 8 file =

深度分析:Android4.3下MMS发送到附件为音频文件(音频为系统内置音频)的彩信给自己,添加音频-发送彩信-接收彩信-下载音频附件-预览-播放(二,发送彩信<1>)

当准备工作(添加附件,输入文本内容)完成之后,我们这里开始进行该流程分析的第二阶段,也就是发送彩信.这里我们从ComposeMessageActivity类的点击发送按钮(mSendButtonMms)的点击事件开始:<TAG 1-1> @Override public void onClick(View v) { if (mShowTwoButtons && (v == mSendButtonSmsViewSec || v == mSendButtonMmsViewSec)

MediaInfo用来分析视频和音频文件的编码和内容信息的超好用工具

转载:http://blog.csdn.net/ameyume/article/details/6718705 MediaInfo简介 MediaInfo 用来分析视频和音频文件的编码和内容信息. MediaInfo 是自由软件 (免费使用.免费获得源代码,许可协议:GNU GPL/LGPL) 下载地址: windows版: http://mediainfo.sourceforge.net/zh-CN ubuntu版: http://mediainfo.sourceforge.net/zh-CN

DirectX 因素:在 Windows 8 中流式载入和处理音频文件

Charles Petzold 下载代码示例 如今,许多 Windows 用户的硬盘中都有一个音乐库,其中包含多达数千甚至上万个 MP3 和 WMA 文件. 若要在电脑上播放此音乐,这类用户一般运行 Windows Media Player 或 Windows 8 Music 应用程序. 但对于程序员来说,知道我们可以编写自己的程序来播放这些文件再好不过了. Windows 8 提供编程接口,用来访问音乐库,获取各个音乐文件的信息(如艺术家.标题和播放时长)以及用 MediaElement 播放

Nubia Z5S官方4.4 UI2.0音频Audio部分简单分析(也适用于其他8974/8064机型)以及减少破音出现几率的方法

转载请注明出处和网址链接: http://blog.csdn.net/syhost/article/details/31419749 此篇本是在Z5S的官方4.4内测版出来时写的, 主要是看到其在audio的配置文件里没有es325的相关配置, 因此断定不支持z5sn的一些audio特性,本想喷一下, 结果第二天官方自己写了.. 本人先前在安智论坛也发过一篇通过修改snd_soc_msm的audio配置文件来调整一些音量的方法, 但本人4月之后编译的Z5S的Android4.4的ROM已经采用了

Android 4.4 Kitkat 音频实现及简要分析

在 Android 4.4 上实现录放音 背景 Android 自 ICS 开始,音频系统就有了很大的变化,先是抛弃了 alsalib,然后是采用了 AIO,各级框架上,都有了自己的特色,与 Linux 的音频应用渐行渐远,形成了自己独特的音频管理和音频配置功能.总的来说改进还是非常大,至少在用户体验上已经大大的超越了之前的版本.我们就从 4.4 的音频实现上来分析其中的一些变化和实现机制. 要求 首先是硬件功能正常,这个不表. Linux 支持 alsa 驱动,生成 alsa 子系统,最好是能

VC++中MCI播放音频文件 【转】

MCI播放mp3音频文件例程 源文件中需要包含头文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入库 Winmm.lib.或添加代码#pragma   comment(lib, "winmm.lib") MCI_OPEN_PARMS op; void CMCIDlg::OnPlay() {  // TODO: Add your control notification handler code

【Unity】3.5 导入音频文件

分类:Unity.C#.VS2015 创建日期:2016-04-05 一.简介 音频文件 (Audio File) 资源的选择原则应该以无故障地流畅运行为宗旨.下面列出了常用的音频文件. .AIFF 在导入时转换为未压缩的音频,最适合短音效. .WAV 在导入时转换为未压缩的音频,最适合短音效. .MP3 在导入时转换为 Ogg Vorbis,最适合较长的音乐曲目. .OGG 压缩的音频格式,最适合较长的音乐曲目. 导入音频文件到Unity中时,可以选择其最终格式并将其推入立体声道或单声道. 要

android开发:把一个byte数组转换成wav音频文件,并且播放

============问题描述============ 如题,byte数组转换成wav音频文件,并且播放,下面代码能生成data/data/com.example.playwav/cache/temp.wav 但是在播放的时候报异常. 我把代码和Log贴在下面了. 我分析,原因应该是wav文件格式的编解码问题,不能这么随随便便把任意的一个byte数组就转化为了wav 希望了解wav编解码开发的童鞋给点解决办法 byte[] a = { 52, 51, 48, 28, 58, 64, 98,-1