欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

深度数字语音处理

程序员文章站 2022-05-30 13:22:40
...

深度数字语音处理

引言|有用的工具|知识体系|数学|传统特征

深度数字语音处理 深度数字语音处理 深度数字语音处理 

引言

TODO

有用的工具

语音数据集|奇怪的网站|开发环境|第三方库

语音数据集

数据集 描述
ESC-50 dataset 该数据集由2000条语音组成,每条语音5秒,共分为50个语义类别(每个语义类别40条)

奇怪的网站

shields.io : 一个用来生成各种markdown小图标的网站

开发环境

Software Description
Anaconda pythong环境管理
PyCharm python最好用的IDE之一,community即可
VS Code 万金油IDE+Text Editor,PyCharm coomunity无法使用版本控制后的github最佳选择之一
Xshell/Xftp 远程服务器管理工具,可以支持本地tensorboard

第三方库

soundfile|LibROSA|Sounddevice

soundfile

跨平台的音频读写包

Installration: pip/conda install soundfile, Linux可能需要 apt-get install libsndfile1

Read/Write: soundfile.read(filename), soundfile.write(filename, data, samplerate) (WAV, FLAC, OGG, MAT)

Blocking: soundfile.blocks(filename, blocksize, overlap)

SoundFile: soundfile.SoundFile(filaname, I/O mode) / soundfile.close()
RAW files: 需要指定读入声音文件的类型

import soundfile as sf

data, samplerate = sf.read('myfile.raw', channels=1, samperate=44100, subtype='FLOAT')

x86机器默认endian='LITTLE',老机器上可能需要指定endian='BIG'

Virtual IO

import io
import soundfile as sf
from urllib.request import urlopen

url = "http://tinyurl.com/shepard-risset"
data, samplerate = sf.read(io.BytesIO(urlopen(url).read()))

有可能出现写OGG文件为空的情况

LibROSA

深度数字语音处理
深度数字语音处理
音乐和音频分析python包

Install:pip conda install librosa or conda install -c conda-forge librosa

Windows需要另外安装ffmpeg来支持更多的音频格式

Note:LibROSA有很大一部分module和function是为music processing and analysis服务的

CoreIO and DSP:包括音频处理(load,resample,zero_crossings),谱表示(stft,istft,cqt,icqt),幅度变换(amplitude_to_db,db_to_power),时域与频域转换(frames_to_samples,frames_to_time,samples_to_frames),音高与调音

Display:可视化功率谱、波形图等(specshow,waveplot)

Feature extraction:梅尔功率谱图(melspectrogram)、mfcc(mfcc)、过零率(zero_crossing_rate)、特征转换(inverse.mel_to_stft,inverse.mfcc_to_mel)等

TODO待补完

Example for LibROSA

Sounddevice

深度数字语音处理
sounddevice是一个与Numpy兼容的录音以及播放声音的包

主要功能是播放和录音,以及一些交互式控制音频设备的方法

Example for Sounddevice

~悠久之风~

知识体系

音频格式|

音频格式

采样频率:1秒钟采样次数,大部分采样频率是44.1KHz
采样位数(位深,精度,比特):类似图像的位数,CD音频是16bit
比特率(音频位速,码率):单位时间内传送的比特数bps

CD音频比特率 = 44.1KHz * 16bit * 2 channels = 1411.2Kbps

16bit/44.1KHz是CD音频的采样

24bit/48KHz是DVD音频的采样

24bit/192KHz是蓝光中音频的采样

数学

STFT|CQT

传统特征

色度特征|mfcc|chroma|Mel|Contrast|Tonnetz

色度特征

色度特征是色度向量(Chroma vector)和色度谱(Chromagram)的统称。色度向量是一个含有12个元素的向量,这些元素分别代表一段时间(如1帧)内12个音级中的能量,不同八度(音高,pitch)的同一音级能量累加,色度图谱则是色度向量的序列(时间扩展)。

import librosa
import numpy as np
# chroma
# 沿着分帧的维度取均值,最终向量是12维
chroma = np.mean(librosa.feature.chroma_stft(S=stft, sr=sample_rate).T, axis=0)

mfcc

TODO

mfccs = np.mean(librosa.feature.mfcc(y=X, sr=sample_rate, n_mfcc=40).T, axis=0)

Mel

梅尔频谱

mel = np.mean(librosa.feature.melspectrogram(X, sr=sample_rate).T, axis=0)

Contrast

计算谱对比度(spectral contrast)[1]

声谱图(spectrogram)S对应的每个分帧被分为子带(sub-bands)。对每个子带,比较top quantile(peak energy)的mean energyt与bottom quantile(valley energy)的平均能量。High contrast值一般对应clear,narrow-band信号,low contrast值对应broad-band噪声。

Spectral contrast相较MFCC,保留了更多子带信息(MFCC是roughly的平均)

  • 原始Spectral Contrast特征估计

对原始音频分帧,每个分帧做STFT,然后分为若干子带(一般是6个,对应librosa里面的n_bands=6)。在每个子带内,估计Peak和Valley(一般是把FFT幅值排序,然后选择最大的几个(这个通过一个比例因子来确定从总数为N的FFT幅值中选α×N\alpha \times N个,α\alpha对应librosa里面的quantile=0.02),取log均值作为Peak值;类似得到Valley值),然后计算差值SCk=PeakkValleykSC_{k}=Peak_{k}-Valley_{k}。最后将{SCk,Valleyk}\{SC_{k}, Valley_{k}\}作为原始Spectral Contrast特征。

  • Karhunen-Loeve Transform

KL变换的目的是去掉不同维度之间的相关性。通过在训练集上找到一个正交基,将提取的Spectral Constrast特征投影,得到不相关的特征向量。


[1] Jiang, Dan-Ning, Lie Lu, Hong-Jiang Zhang, Jian-Hua Tao, and Lian-Hong Cai. “Music type classification by spectral contrast feature.” In Multimedia and Expo, 2002. ICME‘02. Proceedings. 2002 IEEE International Conference on, vol. 1, pp. 113-116. IEEE, 2002.

librosa.feature.spectral_contrast(y=None, sr=22050, S=None, n_fft=2048,
hop_length=512, win_length=None, window='hann', center=True, pad_mode='reflect',
freq=None, fmin=200.0, n_bands=6, quantile=0.02, linear=False)

# Return: contrast.ndarray[shape=(n_band+1, t)]

Tonnetz