Heim > Fragen und Antworten > Hauptteil
Ich möchte die Intensität (Lautstärke) der Sprache anhand einer Rede analysieren.
Da ich eher ein Ingenieurshund als ein Wissenschaftshund bin und ein Außenseiter in der Audiosignalanalyse bin, habe ich mir FFT nur kurz angesehen, daher fühle ich mich unsicher, was meine eigene Methode zur Analyse der Stimmintensität angeht. Ich hoffe, ein Experte auf diesem Gebiet kann Ihnen Rat geben. Vielen Dank! ! !
Das Folgende ist mein Prozess zum Erhalten von Sprachsignaldaten. Die 123.wav-Sprachdatei stammt aus der von Baidu synthetisierten MP3-Transkodierung. Selbst wenn diese Stimme Rauschen enthält, sollte sie hier nicht gefiltert werden (selbst wenn sie gefiltert ist, weiß ich nicht). wie hoch der Filterkoeffizient sein sollte). Ich denke, dass es an dieser Stelle kein Problem geben sollte?
# -*- 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()
Wellenformdiagramm (Zeitdauer ca. 1,8 Sekunden)
Ich hoffe, die Intensität der Stimme beim Abspielen dieser Stimme anzuzeigen, aber offensichtlich ist die Frequenz zu schnell und sollte nicht so schnell sein, zum Beispiel einmal Alle 0,2 Sekunden sind möglicherweise angemessener.
Ich habe 2 Ideen, bin mir aber nicht sicher und fühle mich nicht sicher:
1、每0.2s求振幅绝对值平均值。
2、每0.2s取振幅绝对值最大值。
Ich verstehe die Audiosignalverarbeitung nicht und habe daher keine Ahnung, ob eine dieser beiden Lösungen die Sprachintensität darstellen kann. Oder sollte andere Methoden verwenden.
Zusammenfassend 2 Fragen:
1、这样获取波形数据wav_data是否正确?
2、怎样表达这段语音的强度(响度)?