Saya ingin menganalisis intensiti (kenyaringan) pertuturan melalui sepotong ucapan.
Oleh kerana saya anjing kejuruteraan dan bukannya anjing sains, dan saya orang luar dalam analisis isyarat audio, saya hanya melihat FFT secara ringkas, jadi saya berasa tidak selamat tentang kaedah saya sendiri untuk menganalisis keamatan suara. Saya harap pakar dalam bidang ini dapat memberi tunjuk ajar. Terima kasih banyak-banyak! ! !
Berikut ialah proses saya mendapatkan data isyarat suara. Fail suara 123.wav berasal daripada transkoding mp3 yang disintesis oleh Baidu, jadi walaupun terdapat bunyi bising dalam suara ini, ia sepatutnya minimum. Tidak perlu menapisnya di sini (walaupun ia ditapis, saya tidak tahu apakah pekali penapis yang sepatutnya). Saya rasa sepatutnya tiada masalah pada ketika ini?
# -*- coding: utf-8 -*-
import numpy as np
import pylab as pl
import wave
f = wave.open("/home/dyan/123.wav", "rb")
# 读取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
# 读取波形数据
str_data = f.readframes(nframes)
f.close()
wave_data = np.fromstring(str_data, dtype=np.short)
# 在时间轴上画波形图
# 以上nchannels=1, sampwidth=2, framerate=16000
lenth=len(wave_data)
ti=lenth/16000.0
t = np.arange(0, ti, ti/lenth)
pl.plot(t,wave_data)
pl.show()
Graf gelombang (panjang masa ialah kira-kira 1.8s)
Saya berharap untuk memberitahu keamatan suara semasa memainkan suara ini, tetapi jelas kekerapannya terlalu cepat, dan ia tidak sepatutnya begitu pantas, contohnya, statistik sekali setiap 0.2s mungkin lebih sesuai.
Saya ada 2 idea, tetapi saya tidak pasti dan rasa tidak selamat:
1、每0.2s求振幅绝对值平均值。
2、每0.2s取振幅绝对值最大值。
Saya tidak faham pemprosesan isyarat audio, jadi saya tidak tahu sama ada salah satu daripada dua penyelesaian ini boleh mewakili keamatan pertuturan. Atau perlu menggunakan kaedah lain.
Ringkasnya, 2 soalan:
1、这样获取波形数据wav_data是否正确?
2、怎样表达这段语音的强度(响度)?
Bunyi ialah gelombang getaran mekanikal
Keamatannya ialah amplitud
Treble dan bass ialah kekerapan