当前位置:   article > 正文

Python——语音处理基础_python语音处理简单项目

python语音处理简单项目

Python——语音处理基础

目标:

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

一、概述

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

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

下图是用Adobe Audition打开一段音频数据:
在这里插入图片描述

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

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

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

二、Python处理音频

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

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

对于wave.getparams()的描述:

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

上图打印信息如下:
在这里插入图片描述
表示采样点个数为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()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

在这里插入图片描述

四、WAV文件存储格式:

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

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

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

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/101304?site
推荐阅读
相关标签
  

闽ICP备14008679号