Python——语音处理基础

Python——语音处理基础

目标:

  • Python对音频文件的IO处理;
  • 语音中关于音量和音响的一些计算;

一、概述

声音物理意义:声音是一种纵波,纵波是质点的振动方向与传播方向同轴的波。如敲锣时,锣的振动方向与波的传播方向就是一致的,所以声波是纵波。纵波是波动的一种(波动分为横波和纵波);

通常对声音进行采样量化后,得到声音的"时间—振幅"信息;

下图是用Adobe Audition打开一段音频数据:
Python——语音处理基础_第1张图片

说明:图中上半部分为波形图,下半部分为频谱图;

频谱通过对波形的傅里叶变换,把波形中的每个频率拆开来,再在纵轴上展开,越往上频率越高。频谱是三维的,越亮表示在这个频率上越响,越暗表示越弱;

所以频谱相对于波形图是包含更多信息的,缺点就是无法整体显示音量总和的大小,所以配合查看最佳;

二、Python处理音频

用到Python处理wav文件的包wave,遍历wav信息:

import wave as we
WAVE = we.open('audio.wav')
for item in enumerate(WAVE.getparams()):
    print(item)

对于wave.getparams()的描述:

输出信息(声道,采样宽度,帧速率,帧数,唯一标识,无损)

上图打印信息如下:
Python——语音处理基础_第2张图片
表示采样点个数为27774,采样的频率为44100HZ;

三、绘制wav文件波形图

主要通过三个步骤实现:

导入WAV文件——设置参数——matplotlib绘制波形图

import wave as we
import matplotlib.pyplot as plt
import numpy as np
from scipy.io import wavfile

WAVE = we.open('audio.wav')
a = WAVE.getparams().nframes    # 帧总数
f = WAVE.getparams().framerate  # 采样频率
sample_time = 1/f               # 采样点的时间间隔
time = a/f                      # 声音信号的长度
sample_frequency, audio_sequence = wavfile.read('audio.wav')
print(audio_sequence)           # 声音信号每一帧的大小
x_seq = np.arange(0, time, sample_time)

plt.plot(x_seq, audio_sequence, 'red')
plt.xlabel("time(s)")
plt.show()

Python——语音处理基础_第3张图片

四、WAV文件存储格式:

通过绘制波形图,可以了解以下信息:

1、Python中wave包可以获取wav文件的几个基础信息,比如文件的声道、声音的采样宽度、帧速率、帧数、是否唯一标识、是否无损,这也是音频数据的基本信息;

2、WAV的文件时间,可以通过帧总数除以采样频率获得;

3、WAV文件将声音信号存储为一个n * 1或者n * 2的矩阵点,区分单声道和多声道;

参考文章:https://www.cnblogs.com/rynerlute/p/8487233.html

你可能感兴趣的:(语音合成TTS,python,语音识别,人工智能)