オーディオ録音のコーパス内の音節の数を検出する方法を見つけようとしています。良いプロキシは、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()
関数です。返されるものの1つは、各発声の持続時間です。この関数は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)。
これが最善のアプローチかどうかはわかりません。結果は、thresholdパラメーターの値に敏感であり、大量のファイルを処理する必要があります。これをコード化して音節を表すピークを検出する方法についてのより良いアイデアはありますか?
changepoint
ます。簡単に言えば、変化点分析は変化の検出に焦点を当てており、リンクされた例は貿易データに関するものですが、この手法をサウンドデータに適用することは興味深いかもしれません。