数字音频的基本知识

1.声音

声音是一种波形。
1)频率(音调):声音1秒内周期性变化的次数。人耳的听觉频率范围在20Hz-20kHz。 低频的声音沉闷厚重,高频的声音尖锐刺耳。
2)振幅(响度):声音的大小。通常使用分贝(dB)形容声音大小。dB是一个比值,是一个数值,没有任何单位标注。

2.声音的采集和存储

1)采样:将连续量转化成离散量的过程。对声音的采样常用麦克风等设备将声音信号转换成电信号,再用模/数转换器将电信号转换成二进制表示的数字信号。每秒对声音采样上万次,获得上万个按照时间顺序排列的二进制数字。于是,我们就将连续变化不断的声音转化成了计算机可储存并识别的二进制数字。
2)采样频率:采样频率指录音设备在一秒钟内对声音信号的采样次数。采样频率越高,声音的还原就越真实越自然。
3)量化位数:量化位数指用几位二进制数来存储采样获得的数据。量化位数越大,声音的质量越高。采样后的声音越接近原始声音。
4)声道数:声道分为单声道与双声道。单声道即为左右耳听到的声音相同。双声道两耳听到的信息不同。

3.绘制时域波形图代码

# 绘制波形图
import wave
import matplotlib.pyplot as plt
import numpy as np
import os


s_path = 'F:\\libsoralearning\\music\\'
file = []
for files in os.listdir(s_path):
    if files.endswith('.wav'):
         file.append(files)
for i in range(len(file)):
    f = wave.open(s_path + file[i], 'rb')
    params = f.getparams()
    nchannels, sampwidth, framerate, nframes = params[:4]
    # nchannels:声道数,sampwidth:量化位数,framerate:采样率,nframes:采样点数
    str_data = f.readframes(nframes)    # 读取音频
    wave_data = np.frombuffer(str_data, dtype = np.int16)
    wave_data = wave_data * 1.0/max(abs(wave_data))  # 幅值归一化
    wave_data =np.reshape(wave_data, [nframes, nchannels]).T
    f.close()
    
    time = np.arange(0, nframes) * (1.0 / framerate)
    time = np.reshape(time, [nframes, 1]).T
    plt.plot(time[0, :nframes], wave_data[0, :nframes], c="b")
    plt.xlabel("time(seconds)")
    plt.ylabel("amplitude")
    plt.title("Original wave")
    plt.show()

4.参考

https://zhuanlan.zhihu.com/p/53475069

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值