WedX - журнал о программировании и компьютерных науках

Как узнать, в какое время часть аудио начинается и заканчивается в другом аудио?

У меня есть два аудиофайла, в которых предложение читается (как пение песни) двумя разными людьми. Поэтому они имеют разную длину. Это просто вокал, без инструментов.

A1: Аудиофайл 1
A2: Аудиофайл 2
Пример предложения: "Lorem ipsum dolor sit amet, ..."

структура образцов аудиофайлов

Я знаю время, когда каждое слово начинается и заканчивается на A1. И мне нужно автоматически найти, во сколько каждое слово начинается и заканчивается в A2. (любой язык, предпочтительно Python или C#)

Время сохраняется в формате XML. Итак, я могу разделить файл A1 по словам. Итак, как найти звук слова в другом аудио с другой длительностью (слова) и другим голосом?


Ответы:


1

Итак, из того, что я прочитал, кажется, что вы хотели бы использовать Динамическое искажение времени (DTW). Конечно, я оставлю объяснение для википедии, но она обычно используется для распознавания речевых паттернов без получения шума от различного произношения.

К сожалению, я лучше разбираюсь в C, Java и Python. Поэтому я буду предлагать библиотеки Python.

  1. fastdtw
  2. pydtw
  3. mlpy
  4. rpy2

С rpy2 вы действительно можете использовать библиотеку R и использовать их реализацию DTW в ваш код на питоне. К сожалению, я не смог найти хороших руководств по этому вопросу, но есть хорошие примеры, если вы решите использовать R.

Пожалуйста, дайте мне знать, если это не поможет, Ура!

31.03.2018

2

Мой подход к этому заключается в том, чтобы записывать громкость дБ с постоянным интервалом (например, каждые 100 миллисекунд) и сохранять эту громкость в списке или массиве. Я нашел способ сделать это на java здесь: значения децибел в определенных точках в wav-файле. Можно на других языках. Между тем, обратите внимание на максимальную громкость:

max = 0;
currentVolume = f(x)
if currentVolume > max
{
  max = currentVolume
}

Затем разделите максимальную громкость на редактируемый порог, в моем примере я выбрал 7. Допустим, максимальная громкость равна 21, 21/7 = 3 дБ, назовем эту меру X.

Мы используем второе пороговое значение, например 1, и умножаем его на X. Всякий раз, когда громкость превышает это новое значение (1 * x), мы считаем, что это начало слова. Когда оно меньше заданного значения, мы считаем, что это конец слова.

Наглядное объяснение

29.03.2018
  • Это произвольные слова. Обычно между большинством слов нет пробелов. Таким образом, слова трудно отличить друг от друга с помощью дБ. 30.03.2018

  • 3

    Не зная, насколько сложно вы понимаете проблемное пространство, нелегко понять, следует ли указать вам направление или предоставить подробные сведения о том, почему эта проблема нетривиальна. Я предлагаю вам начать с чего-то вроде https://cloud.google.com/speech/ и попытайтесь преобразовать речевые блоки в текст, а затем выполните сравнение их сходства. Если вы действительно хотите попробовать выполнить обработку самостоятельно, вы можете заняться спектрографическим анализом. Возьмите данные формы сигнала и выполните БПФ, чтобы получить частотные распределения и найти шаблоны маркеров, которые выравнивают ваши образцы. Со сравнением только одного слова разных говорящих вы, вероятно, не сможете применить какую-либо нейронную сеть, если только вы не сможете обучить их всему набору речи двух говорящих и использовать сеть, чтобы затем попытаться сравнить отдельные фрагменты слов. . Прошло несколько лет с тех пор, как я делал что-либо из этого, так что, может быть, в наши дни это проще, но я помню, что, хотя это звучит концептуально просто, это может оказаться сложнее, чем вы думаете. Динамическое искривление времени выглядит наиболее многообещающим предложением.

    31.03.2018
  • Я подумал об этом. Но слова не на английском и запись не речь. Итак, преобразование в текст не подходит для моей проблемы. Я думаю, что для этого нужно снимать отпечатки звуковых частей и искать их в другом аудио. Но другая проблема в том, что читатели разные. DTW может помочь решить проблему. Я попытаюсь. 31.03.2018

  • 4

    секретный соус ниже: точка A-pointB равна нулю, если обе точки имеют одинаковое значение ... ниже использует это, чтобы определить, в каком смещении индекса байта файла дает нам это нулевое значение при сравнении необработанных аудиокривых из пары входных файлов

    Подход заключается в том, чтобы открыть оба файла и извлечь кривую необработанного звука из каждого файла... определить две переменные bestSum и currentSum, установить обе в MAX_INT_VALUE (любое произвольное высокое значение)... выполнить итерацию по обоим файлам одновременно и получить целочисленное значение текущего уровня необработанной звуковой кривой файла A, сделайте то же самое с другим файлом B... для каждого такого целого числа просто вычтите целое число из файла A из целого числа из файла B... продолжайте этот цикл, пока не дойдете до конца одного файла. .. внутри приведенного выше цикла добавьте к переменной currentSum текущее значение вышеупомянутого вычитания ... в нижней части приведенного выше цикла обновите bestSum, чтобы он стал currentSum, если currentSum ‹ bestSum также сохранит текущее смещение индекса файла ...
    создайте внешний цикл, который повторяет все вышеперечисленное, вводя смещение во времени одного файла, а затем перезапускает выше внутреннего цикла ... ваш общий звук - это когда вы используете смещение, которое имеет минимальное значение общей суммы ... это смещение, когда вы столкнулись с лучшим Su м

    не начинайте программировать, пока не разовьете интуицию, которая имеет смысл вышеизложенного

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

    13.04.2021
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]