Parselmouth пакетный полный голосовой отчет

Мне было интересно, есть ли способ пакетной обработки аудиофайлов и генерации полных голосовых отчетов с использованием parselmouth или другой pythonic реализации praat. До сих пор мне удавалось получить только среднюю высоту звука, но я должен уметь рассчитывать общее количество импульсов и периодов, степень прерывистости голоса и мерцание. Если это невозможно с помощью Python, можно ли будет использовать скрипт Praat? сгенерированный голосовой отчет

2 ответа

[Отказ от ответственности: я являюсь автором упомянутой библиотеки Parselmouth]

Этот вопрос был задан и решен в чате Gitter для Parselmouth, но для дальнейшего использования это решение я предложил там:

Подобный вопрос был задан ранее в Stackru: как автоматизировать голосовые отчеты для Praat, объясняя, как получить голосовой отчет без окна Praat "Просмотр и редактирование" (т. Е. С помощью Sound, Pitch, а также PointProcess объект).

Итак, сначала вы получите эти три объекта: звук Sound, Pitch pitch и PointProcess, возможно, изменяющие параметры, которые вы хотите иметь по-разному:

import parselmouth
sound = parselmouth.Sound("the_north_wind_and_the_sun.wav")
pitch = sound.to_pitch()
pulses = parselmouth.praat.call([sound, pitch], "To PointProcess (cc)")

После этого вы можете запросить различные количества, которые вы хотите извлечь по-разному. Например, количество импульсов в PointProcess можно извлечь с помощью:

n_pulses = parselmouth.praat.call(pulses, "Get number of points")

И др:

n_periods = parselmouth.praat.call(pulses, "Get number of periods", 0.0, 0.0, 0.0001, 0.02, 1.3)
shimmer_local = parselmouth.praat.call([sound, pulses], "Get shimmer (local)...", 0.0, 0.0, 0.0001, 0.02, 1.3, 1.6)

Получить степень разрыва голоса как-то сложнее. Понятия не имею, почему у Праата нет команды получить это.

Быстрый способ получить это в Python:

max_voiced_period = 0.02  # This is the "longest period" parameter in some of the other queries
periods = [parselmouth.praat.call(pulses, "Get time from index", i+1) -
           parselmouth.praat.call(pulses, "Get time from index", i)
           for i in range(1, n_pulses)]

deg_of_voice_breaks = sum(период для периода в периодах, если period > max_voiced_period) / sound.duration

Вы также можете найти строку, сообщающую этот процент, в выходной строке "Голосовой отчет"; см. /questions/46815471/kak-avtomatizirovat-golosovyie-otchetyi-dlya-praat/46815498#46815498

Если вы посмотрите на пользовательский интерфейс Praat, то кнопки "Получить медиану" действительно нет, поэтому эта строка не работает. Однако в Praat есть команда "Получить квантиль", поэтому я бы предложил

parselmouth.praat.call(pitch, "Get quantile", 0.0, 0.0, 0.5, "Hertz")

(То, что 0,5 - это тогда 50% квантиль, то есть медиана)

Я использую parselmouth для извлечения большого количества функций из некоторых аудиофайлов. В общем, я в конечном итоге использую что-то в этом роде:

      import parselmouth
from parselmouth.praat import call

sound = parselmouth.Sound(filename)
pitch = call(sound, "To Pitch", 0.0, F0min, F0max)
pulse = call([sound, pitch], "To PointProcess (cc)")

voice_report = call([sound, pitch, pulse], "Voice report", 0.0, 0.0, 75, 600, 1.3, 1.6, 0.03, 0.45).split(chr(10))

Из отчета можно извлечь такие коэффициенты, как отношение гармоник к шуму (HNR), дрожание, мерцание и классическую статистику высоты тона.

Другие вопросы по тегам