zoukankan      html  css  js  c++  java
  • 音频数据波形图

    音频知识

    1) 通道数

    又称声道数。是在采集(录制)声音时引入的概念,即用几个通道去录制声音。一般来说,单声道和双声道的音频文件较为常见。例如在声源的不同位置放置通道去录制,则可以获得多通道的音频数据。

    2) 采样率

    即每秒钟内采集的样本个数,每个通道分别采集。音频文件的采样率通常较高,例如44100Hz、32000Hz等。

    3) 位深

    又称之为 量化精度、位宽,表示一个杨本值采用多少bit来表示,用的bit越多则越接近样本的原值。例如若用3个bit表示,则只有2的3次方,也就是8个不同的值,而若用16bit、24bit或更多的bit去量化样本值,则表示的不同指就越多,从而音频听起来就更逼真。

    4) 帧数

    帧数也就是样本个数。对于“总帧数”要根据上下文来判断,可以是一个通道(声道)的总帧数,也可以是所有通道的总帧数。计算公式为:样本个数=文件的大小/位深精度/通道数。

    5) 波形图

    又称振幅图,是音频的振幅(或能量)这个维度的图形表达。波形图的横坐标一般为时间,纵坐标一般为dB(即分贝)来表示;有的时候只关心振幅的趋势,那就对振幅进行归一化为[-1,1]范围内。

    python 代码

    import wave
    from pydub import AudioSegment
    import numpy as np
    import matplotlib.pyplot as plt
    
    AudioSegment.converter = r"C:Usersv-yunhguDesktopVoiceTestFFmpegffmpeg.exe"
    AudioSegment.ffprobe = r"C:Usersv-yunhguDesktopVoiceTestFFmpegffprobe.exe"
    
    
    def ConvertAudio2Wav(path):
        # 将mp3 音频转为wav,因为mp3格式经过了压缩,导致失去了很多信息
        audio = AudioSegment.from_mp3(path)
        audio.export('temp.wav', format='wav')
    
    def DrawWav():
        f = wave.open(r"temp.wav", "rb")
        # 读取音频数据,并把数据转化为字符串形式
        params = f.getparams()
        nchannels, sampwidth, framerate, nframes = params[:4]
        print(f"nchannels: {nchannels},samp {sampwidth},framerate: {framerate},nframes: {nframes}")
        str_data = f.readframes(nframes)
        f.close()
        # 字符串转化为整数
        wave_data = np.fromstring(str_data, dtype=np.int16)
        # 归一化数据
        wave_data = wave_data*1.0/(max(abs(wave_data)))
        # 将数据转化为二维向量
        wave_data = np.reshape(wave_data, [nframes, nchannels*2])
        print(wave_data.shape)
        # 通过取样点数和取样频率计算出每个取样的时间。
        time = np.arange(0, nframes)/framerate
    
        print(f"time_len:{len(time)} time:{time} shape:{time.shape}")
        plt.figure(1)
        plt.plot(time, wave_data)
        plt.xlabel("time/s")
        plt.title('Wave')
        plt.show()
    
    
    if __name__ == "__main__":
        wavPath = r"C:Usersv-yunhguDesktopVoiceTestvoice-Task000000007.wav"
        ConvertAudio2Wav(wavPath)
        DrawWav()

     

    不论你在什么时候开始,重要的是开始之后就不要停止。 不论你在什么时候结束,重要的是结束之后就不要悔恨。
  • 相关阅读:
    MVC中单用户登录
    用CheckBox做删除时请不要使用@Html.CheckBoxFor
    MVC3"不允许启动新事务,因为有其他线程正在该会话中运行"错误解决方法
    下拉菜单DropDwon实现方法
    MVC3中Ajax.ActionLink用法
    删除时显示确认对话框
    民航指令学习(一)
    CentOS常用命令
    CentOS手动分区步骤
    CentOS下安装JDK和Tomcat
  • 原文地址:https://www.cnblogs.com/yunhgu/p/14048309.html
Copyright © 2011-2022 走看看