Я намагаюся розібратися, як виявити кількість складів у корпусі аудіозаписів. Я думаю, що хороший проксі може бути піками у файлі хвиль.
Ось що я спробував із файлом про мене, що розмовляв англійською мовою (мій фактичний випадок використання - у 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).
Я не впевнений, що це найкращий підхід. Результат буде чутливим до значення порогового параметра, і я повинен обробити велику партію файлів. Будь-які кращі ідеї щодо того, як кодувати це для виявлення піків, які представляють склади?
changepoint
пакета. Простіше кажучи, аналіз точки зміни зосереджується на виявленні змін, пов'язаний приклад стосується торгових даних, але це може бути цікаво застосувати цю техніку до надійних даних.