오디오 녹음 모음에서 음절 수를 감지하는 방법을 찾으려고합니다. 웨이브 파일에서 좋은 프록시가 최고라고 생각합니다.
다음은 영어로 말하는 파일로 시도한 것입니다 (실제 사용 사례는 Kiswahili입니다). 이 예제 녹음의 대본은 "이것은 타이머 기능을 사용하려고합니다. 나는 일시 정지, 발성 중입니다." 이 구절에는 총 22 개의 음절이 있습니다.
wav 파일 : https://www.dropbox.com/s/koqyfeaqge8t9iw/test.wav?dl=0
seewave
R 의 패키지는 훌륭하고 여러 가지 잠재적 기능이 있습니다. 먼저 웨이브 파일을 가져옵니다.
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).
이것이 최선의 방법인지 잘 모르겠습니다. 결과는 threshold 매개 변수의 값에 민감하므로 많은 파일을 처리해야합니다. 음절을 나타내는 피크를 감지하기 위해 이것을 코딩하는 방법에 대한 더 나은 아이디어가 있습니까?
changepoint
. 간단히 말해, 변화 점 분석은 변화 를 감지하는 데 중점을 두며, 연결된 예제는 거래 데이터와 관련이 있지만이 기술을 사운드 데이터에 적용하는 것은 흥미로울 수 있습니다.