我正在尝试弄清楚如何检测一个录音语料库中的音节数。我认为一个好的代理可能是wave文件中的峰值。
这是我尝试用英语说的文件的内容(我的实际用例是斯瓦西里语)。该示例录音的记录是:“这是我试图使用计时器功能。我正在查看暂停和发声。” 此段落共有22个音节。
WAV文件:https://www.dropbox.com/s/koqyfeaqge8t9iw/test.wav? dl = 0
seewave
R中的程序包很棒,并且有多个潜在功能。首先,导入wave文件。
library(seewave)
library(tuneR)
w <- readWave("YOURPATHHERE/test.wav")
w
# Wave Object
# Number of Samples: 278528
# Duration (seconds): 6.32
# Samplingrate (Hertz): 44100
# Channels (Mono/Stereo): Stereo
# PCM (integer format): TRUE
# Bit (8/16/24/32/64): 16
我尝试的第一件事是timer()
功能。它返回的内容之一是每次发声的持续时间。此功能可识别7个发声,远远少于22个音节。快速浏览情节表明,发声不等于音节。
t <- timer(w, threshold=2, msmooth=c(400,90), dmin=0.1)
length(t$s)
# [1] 7
我还尝试了fpeaks函数,但未设置阈值。它返回了54个峰。
ms <- meanspec(w)
peaks <- fpeaks(ms)
这按频率而不是时间绘制幅度。添加等于0.005的阈值参数可以滤除噪声并将计数减少到23个峰值,这与实际音节的数量非常接近(22)。
我不确定这是最好的方法。结果将对阈值参数的值敏感,因此我必须处理一大批文件。关于如何对此进行编码以检测表示音节的峰值的任何更好的想法?
changepoint
。简而言之,变化点分析着重于检测变化,链接的示例涉及贸易数据,但是将这种技术应用于声音数据可能会很有趣。