读取音频文件并将该信号进行可视化展现
实验内容
读取音频文件并将该信号进行可视化展现。
原理
(1) 音频信号的基本结构,即音频信号的数字化形式是复杂的连续波形。
(2) 为了将其保存成数字化形式,需要对音频信号进行采样并将其转换成数字。在进行采样时,语音语音通常以44100 Hz的频率进行采样,这也意味着每秒钟信号被分解成44,100份,然后这些抽样值被保存。
(3) 如果采样率很高, 用媒体播放器收听音频时,会感觉到信号是连续的。
实验过程
详细步骤:
(1) 创建一个Python文件,并导入以下程序包:
(2) 使用wavfile包从input_read.wav中读取音频文件:
(3) 打印这个信号的相关参数:
(4) 音频信号被存储在一个16位有符号整型数据中,并标准化:
(5) 提取前30个值,并将其画出:
(6) X轴为时间轴。创建这个轴,并且X轴应该按照采样频率因子进行缩放:
(7) 将单位转换为秒:
(8)将其画出:
实验结果
实验结论
1.一段完整的音频在数字化之后,会变成一条类似于三角函数的变换图形。由图可知,随着时间的推移,一段音频在不同时间点的幅值是不同的,并且随着音频复杂性的提高,幅值变化的次数会越来越快,同时,图像会变得十分复杂。
2.本例中只是提取了前30个值进行画图,如果提取前50,图像的复杂程度又会升高,可见图像的复杂程度与提取值得个数成正比
3.如果采样率很高,用媒体播放器收听音频时,会感觉信号是连续的
源代码
# -*- coding: utf-8 -*-
"""
Created on Sun Sep 20 10:41:01 2020
@author: h'p
"""
import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
# 读取输入文件
sampling_freq, audio = wavfile.read(r"C:\Users\h'p\Desktop\speaker_test_sound.wav")
#r"C:\Users\h'p\Desktop\complete.wav"
# 打印参数
print('\nShape:', audio.shape)
print('Datatype:', audio.dtype)
print('Duration:', round(audio.shape[0] / float(sampling_freq), 3), 'seconds')
# 标准化数值
audio = audio / (2.**15)
# 提取前30个值画图
audio = audio[:50]
print(audio)
# 建立时间轴
x_values = np.arange(0, len(audio), 1) / float(sampling_freq)
# 将单位转换为秒
x_values *= 1000
# 画出声音信号图形
plt.plot(x_values, audio, color='black')
plt.xlabel('Time (ms)')
plt.ylabel('Amplitude')
plt.title('Audio signal')
plt.show()
程序中用到的音频文件可以选择任意一个,但最好不要太长,否则一般的笔记本会卡住,这一点尤为重要!!!!!!