У меня есть куча аудиофайлов о телефонном разговоре. Я хочу попытаться разделить аудиофайл на два, каждый из которых содержит только одну речь спикера. Может быть, мне нужно использовать диаризацию речи. Но как я могу это сделать? Кто-нибудь может дать мне несколько подсказок? Спасибо. PS: Linux OS.C / C ++
Хотя разделение отдельных динамиков является довольно сложной проблемой, вы можете автоматически разделить звук там, где есть паузы. Это приведет к созданию ряда файлов, которыми, вероятно, будет легче управлять, поскольку ораторы часто чередуются между паузами.
Этот подход требует пакета декодера распознавания речи с открытым исходным кодом Julius. Это доступно во многих репозиториях пакетов Linux. Я использую мультивселенное хранилище Ubuntu.
Вот сайт: http://julius.sourceforge.jp/en_index.php
Шаг 0: установите Юлиуса
sudo apt-get install julius
Шаг 1: Сегментируйте аудио
adintool -in file -out file -filename myRecording.wav -startid 0 -freq 44100 -lv 2048 -zc 30 -headmargin 600 -tailmargin 600
-startid номер начального сегмента, который будет добавлен к имени файла
-частота частота дискретизации исходного аудиофайла
-лв уровень звука, выше которого будет активировано распознавание голоса
-гс пересечение нуля, выше которого будет активировано распознавание голоса
-headmargin а также -tailmargin количество молчания до и после каждого звукового сегмента
Обратите внимание, что -lv и -zc должны быть скорректированы для атрибутов вашей конкретной аудиозаписи, в то время как -headmargin и -tailmargin должны быть скорректированы для стилей вашего конкретного докладчика. Но значения, приведенные выше, хорошо работали для моих записей голоса в прошлом.
Вот документация: http://julius.sourceforge.jp/juliusbook/en/adintool.html
По моему опыту предварительная обработка аудио с использованием сжатия и нормализации дает лучшие результаты и требует меньше корректировки аргументов Юлиуса. Эти начальные шаги рекомендуются, но не обязательны.
Этот подход требует пакета аудиоинструмента SoX с открытым исходным кодом. Это также доступно во многих репозиториях пакетов Linux. Я использую хранилище вселенной Ubuntu.
Вот сайт: http://sox.sourceforge.net
Шаг -2: Установите SoX
sudo apt-get install sox
Шаг -1: Предварительная обработка аудио
sox myOriginalRecording.wav myRecording.wav gain -b -n -8 compand 0.2,0.6 4:-48,-32,-24 0 -64 0.2 gain -b -n -2
получить -b -n балансирует и нормализует звук до заданного уровня
COMPAND сжимает (в данном случае) аудио на основе параметров
Обратите внимание, что compand может потребоваться некоторое время, чтобы полностью понять параметры. Но значения, приведенные выше, хорошо работали для моих записей голоса в прошлом.
Вот документация: http://sox.sourceforge.net/sox.html
Хотя это не даст вам идентификации каждого говорящего, это значительно упростит задачу сделать это на слух, что может в конечном итоге стать единственным вариантом на некоторое время. Но я надеюсь, что вы найдете практическое решение, если оно уже доступно.
Да, диаризация это то, что вы хотите.
Есть несколько инструментов, на которые вы можете посмотреть, оба являются GPL. Один LIUM spkdiarization (Java), другой SHOUT инструментарий (C ++). LIUM хорошо документирован и рядом с ним есть скрипт, SHoUT немного более загадочный, поэтому вы должны следовать инструкциям автора Вот.
Хотя, может быть, я немного опоздал. 😉