Интеграция Praat в Python 2/3

Я работал над Praat для анализа звука. Однако я нашел несколько библиотек, которые используют Praat в Python, и хотел бы сделать то же самое.

Этот сайт предлагает множество функций, которые можно извлечь при использовании праата. Я следовал инструкциям по «интеграции» его в python. http://homepage.univie.ac.at/christian.herbst//python/index.html Однако мне не удалось заставить его работать. Он возвращает ошибку:\ OSError: [Errno 2] Нет такого файла или каталога

Я также нашел другую библиотеку: https://pypi.python.org/pypi/python-praat-scripts. Это также возвращает ошибку (когда я запускаю код ниже): OSError: [Errno 13] Отказано в доступе

from praatinterface import PraatLoader
pl = PraatLoader(praatpath ='/Users/user/Downloads/praat6015_mac64.dmg')
text = pl.run_script('formants.praat', 'sample.wav', 5, 5500)
formants = pl.read_praat_out(text)

Было бы здорово, если бы кто-нибудь помог мне правильно интегрировать праат в python. Спасибо.


person Mark Esperida    schedule 14.04.2016    source источник


Ответы (2)


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

Если вы не против попробовать еще одну библиотеку, Parselmouth интегрирует Praat в Python без необходимости использования внешнего Praat. бинарный:

import parselmouth
resulting_objects = parselmouth.praat.run_file('formants.praat', 'sample.wav', 5, 5500)

Переменная resulting_objects будет содержать список выбранных объектов Praat, поэтому, если вы обязательно выберете объект Formant, он будет возвращен. В качестве альтернативы, если вы хотите захватить окно вывода, запустите

import parselmouth
output_string = parselmouth.praat.run_file('formants.praat', 'sample.wav', 5, 5500, capture_output=True)

Еще одна альтернатива — вызвать анализ из самого Python и сделать что-то вроде этого:

import parselmouth
sound = parselmouth.Sound("sample.wav")
formant = sound.to_formant_burg(max_number_of_formants=5, maximum_formant=5500)
formant.get_value_at_time(3, 0.5) # For the value of formant 3 at 0.5 seconds
person Yannick Jadoul    schedule 07.08.2018
comment
Привет, Янник, я использую это: objects = parselmouth.praat.run_file('crosscorelate.praat', wav_filename1, wav_filename2, capture_output=True), но получаю сообщение об ошибке parselmouth.PraatError: Found 2 arguments but expected more. Script not completed., хотя оно работает с двоичным исполняемым файлом: Praat.exe crosscorelate.praat one.wav two/wav что я делаю неправильно? - person Narthe; 01.09.2018
comment
Здравствуйте, Нарт. Трудно увидеть из этой одной строки (без сценария). Ошибка возникает где-то внутри Praat, но ошибка может быть в моем коде, связывающем Python с Praat. Я был бы очень рад изучить это и решить это, хотя! Не могли бы вы как-нибудь достать мне дополнительную информацию или сценарий? Если проще, вы можете открыть задачу на GitHub (github.com/YannickJadoul/Parselmouth/issues ) или продолжить обсуждение в Gitter (gitter.im/PraatParselmouth/Lobby) - person Yannick Jadoul; 01.09.2018
comment
@Narthe Думаю, я понимаю проблему. Parselmouth проверяет количество параметров вашего скрипта, в то время как Praat этого не делает и оставляет их неопределенными или пустыми, если вы не указываете достаточное количество параметров. Решение состоит в том, чтобы либо передать дополнительные параметры, необходимые сценарию Praat (см. конструкцию «форма» в сценарии), либо удалить ненужные параметры из «формы» в сценарии. - person Yannick Jadoul; 02.09.2018
comment
Янник спасибо за ответ! Это было действительно глупо с моей стороны, я не проверял скрипт praat, и у него есть 2 дополнительных параметра со значением по умолчанию, поэтому он работал с исполняемым файлом. - person Narthe; 04.09.2018
comment
@Narthe Приятно слышать, что это работает! :-) Это не совсем вы, однако: Praat не будет проверять количество аргументов из командной строки, и, насколько я проверял, он также не будет вставлять параметры по умолчанию. (Если вы используете тот же 'crosscorelate.praat', который я нашел в Интернете, два последних параметра не используются, и поэтому их значение undefined не вызывает никаких проблем.) - person Yannick Jadoul; 04.09.2018

Я не использовал ни один из ваших инструментов, но, похоже, проблема может быть в вашей переменной praatpath. На страницах, на которые вы ссылаетесь, они должны указывать на двоичный файл Praat, тогда как в вашем примере они указывают на архив Praat с 64-разрядной версией Mac.

Сначала вам нужно установить Praat. Инструкции довольно стандартны, но цитируются с веб-сайта Praat:

После загрузки ваш веб-браузер может напрямую открыть файл .dmg; вы увидите программу Praat или Praat.app. Если ваш браузер не открыл файл .dmg, вам следует дважды щелкнуть файл .dmg в окне «Загрузки» (или в папке «Загрузки» в вашем домашнем каталоге); после двойного щелчка вы можете увидеть программу Praat или Praat.app напрямую, или вы можете увидеть значок диска с именем Praat6016, который при открытии покажет вам программу Praat или Praat.app. Чтобы установить Praat, просто перетащите программу Praat или Praat.app в папку Приложения (или куда-нибудь еще).

Как только это будет сделано, переменная praatpath должна указывать на этот исполняемый файл.

Это относится ко второму вашему примеру, но я подозреваю, что проблема может быть аналогичной для первого (т.е. он не знает, где находится Praat, потому что он либо не установлен, либо не находится в PATH).

person jja    schedule 14.04.2016
comment
Я установил praat, но команда praatath по-прежнему возвращает ту же ошибку. - person Mark Esperida; 18.04.2016
comment
praatpath команда? Вы имеете в виду опцию в вашем сценарии? Какой путь вы указали? - person jja; 18.04.2016
comment
я установил его в каталог praat или там, где находится программа praat - person Mark Esperida; 07.07.2016
comment
Он должен указывать на двоичный файл Praat, а не на его каталог. Посмотрите, работает ли это. - person jja; 07.07.2016
comment
как найти двоичный файл praat? - person Mark Esperida; 08.07.2016
comment
Бинарный файл — это исполняемый файл. Когда вы запускаете Praat, вам нужно выполнить этот файл. Итак, если вы говорите, что программа praat находится, скажем, в /home/user/bin, и это каталог, то путь к исполняемому файлу будет примерно таким, как /home/user/bin/praat. - person jja; 08.07.2016