Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Как определить тип аудиофайла: музыка или записанный разговор?  (Прочитано 1740 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн screamn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Здравствуйте всем.
Уже довольно долго пытаюсь решить одну единственную задачу - необходимо каким либо образом разделить имеющиеся аудиофайлы на две группы: музыка и разговоры(диктофонные записи, телефонные разговоры).

До сегодняшнего дня была такая идея: через sox смотреть параметр аудиозаписи Mean delta. У телефонных записей он оказывался <0,03, а у музыки больше. Однако была проблема - дикторские записи определялись как музыка.

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

В общем, если кто-то решал подобные проблемы - подскажите как и с помощью каких программных продуктов можно решить мою задачу.

Всем заранее благодарен.

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 629
    • Просмотр профиля
Решения не предлагаю, но так, навскидку.
Может быть как-нибудь посмотреть на битрейт? Полагаю, у телефонных разговоров он должен быть значительно ниже.
Linux is only free if your time has no value (c) Jamie Zawinski

Оффлайн screamn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Это все очень косвенные признаки, аналогично тому что смотреть на длительность файла и считать что песня длится 2-5 минут. Но ведь может и попасться какой нибудь часовой кусок записи радиоэфира. А битрейт может быть самым разным. Если, допустим, качать примеры дикторских записей, так там качество будь здоров, в то время как песни, например, Высоцкого, высоким качеством не отличаются.

Сейчас вот пришла на ум идея - при помощи Voice Activity Detection определять участки записи, в которых нет голоса. И дальше уже выдрать эти участки без голоса и анализировать их. Например, в телефонном разговоре шум примерно одинаковый все время, плюс количество пауз заметно больше чем в музыке должно быть. Как вариант - использовать библиотеку машинного обучения, в которую запихать все отрезки телефонных записей, в которых нет голоса, т.е. приемущественно шум на линии. И далее производить детектирование отталкиваясь от анализа сопровождающего голос шума..

Оффлайн Чистый

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3474
  • nix - вот оно счастье...
    • Просмотр профиля
нейронные сети ? По образам? Обучить сеть на нескольких экземплярах композиций и  разговоров. На самом деле если подходить серьезно и пытаться достичь высокой точности определения того или иного типа аудио-записи это не такая уж и тривиальная задача:)
Тестовый репозиторий kdeNeur ppa:devcode/kdeneur
各々が死ぬことをどのように決定する

Оффлайн screamn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
нейронные сети ? По образам? Обучить сеть на нескольких экземплярах композиций и  разговоров. На самом деле если подходить серьезно и пытаться достичь высокой точности определения того или иного типа аудио-записи это не такая уж и тривиальная задача:)
Т.е. мою последнюю выдумку лишенной смысла не считаете?) Просто не хочется в очередной раз убить кучу времени на исследование еще одного подхода, который толком ничего не даст.

Оффлайн Jack Sparrow

  • Активист
  • *
  • Сообщений: 629
    • Просмотр профиля
Нейронные сети, искусственный интеллект и т.п. это, конечно, хорошо, но это то же самое, что и говорить о волшебной палочке: да, хорошо, если она есть, все проблемы сразу решаются; но если ее нет?

Если есть приемлемые решения, то почему бы и нет? Обучаем сеть и вперед. Но, возможно, есть и более простые решения, или менее ресурсоемкие. Например, думаю, что спектр частот в музыке и голосе должен быть разным (в музыке больше высоких частот). Может быть еще ритм, правда, не во всякой музыке он одинаково выражен. Помню, в свое время цветомузыка была популярна. Сам делал. Тоже фильтры на низкие, средние и высокие частоты. Так красные лампочки для низких частот довольно точно мигали в такт с барабанами.

Допустим, анализируем спектр сигнала. Если преобладают средние частоты в голосовом диапазоне, то, очевидно, это и есть голос. А если разброс значительный, то, вероятно, это музыка.
Linux is only free if your time has no value (c) Jamie Zawinski

Оффлайн screamn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Ну как вариант я рассматриваю возможность анализа параметров аудиозаписи с фоновыми шумами. И, возможно, найдется такой параметр, который решит мои проблемы.
Цитировать
Допустим, анализируем спектр сигнала. Если преобладают средние частоты в голосовом диапазоне, то, очевидно, это и есть голос. А если разброс значительный, то, вероятно, это музыка.
Это я уже все исследовал.. В общем случае - да, но вот Вам нехарактерный пример:





Как Вы уже поняли - именно первая спектрограмма пренадлежит музыкальной композиции Высоцкого, а вторая - дикторской записи, хотя интуитивно выглядит все наоборот)

Цитировать
Может быть еще ритм, правда, не во всякой музыке он одинаково выражен.
А как анализировать ритм?
« Последнее редактирование: 11 Июнь 2013, 02:02:59 от screamn »

Оффлайн viktand

  • Участник
  • *
  • Сообщений: 190
    • Просмотр профиля
Я тоже думаю, что надо сделать программу-цифровой фильтр. В записи речи выше примерно 4-5 кГц должно быть мало что, а в музыке много. И чем качественнее запись, тем выше будут уровни частот за пределами разговорного спектра.

Т.е. проанализировать запись в диапазоне 10..15 кГц, если обнаружатся часто встречающиеся пики частот, то это скорее всего музыка. В примере с Высоцким есть шансы, что гитара "засветится" на высокой частоте.

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

Ритм - это тоже частота, только низкая. Ее можно попытаться выделить фильтром. Но мне кажется, что это ненадежно.

Еще можно просто сравнить левый и правый канал. Музыка наверняка даст более значительную разницу по каналам чем речь.
« Последнее редактирование: 11 Июнь 2013, 04:03:00 от viktand »

Оффлайн screamn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Вроде как добился приемлимого результата путем комбинированного применения сравнений значений Mean delta и Mean norm.

Музыка: 2 ошибки на 40 файлов.
Телефонные записи: 0 ошибок на 12 записей
Дикторские записи: 1 ошибка на 20 записей

Хочу попытаться улучшить результат путем сравнения разницы по каналам.. Есть какой нибудь простенький инструмент для этого?

Пользователь решил продолжить мысль 13 Июнь 2013, 02:24:00:
Облом) На песнях почему-то нет разницы между каналами)) Видимо, повысить точность уже нет за счет чего.
« Последнее редактирование: 13 Июнь 2013, 02:24:00 от screamn »

Оффлайн MuadDlb

  • Участник
  • *
  • Сообщений: 147
  • The Dune Messiah
    • Просмотр профиля
В такие дебри не лез но задача сделать минусовку разочек стояла. Дак вот: голос практически всегда записан на центральном канале. Соответственно я бы опробовал сложить левый и инвертированный правый каналы и проанализировать то, что осталось. Полагаю что у любой речевой записи остаться не должно ничего практически.

Оффлайн Dixi257

  • Активист
  • *
  • Сообщений: 284
    • Просмотр профиля
Как дополнительная проверка моно/стерео, т.е. разницу между каналами. Диктофонные записи, как правило, монофонические.

Оффлайн MuadDlb

  • Участник
  • *
  • Сообщений: 147
  • The Dune Messiah
    • Просмотр профиля
диктофонные - да, дикторов - нет

Оффлайн Rosik

  • Активист
  • *
  • Сообщений: 255
  • по жизни Rosik
    • Просмотр профиля
А можете в студию представить еще картинок, с комментариями кто есть кто.
А там коллективный разум уж увидит особенности.

Вообще подход, я думаю, должен быть такой:
Отсортируйте для себя библиотеку по двум папкам, и смотрите на разные характеристики каждого файла.
Если увидите какую-то особенность (например в mean delta, или на спектрограмме) то сразу поймете, в какую сторону копать.

Получится самая настоящая нейронная сеть - человек :-)

Оффлайн screamn

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Вот таким подходом и сделал все) Без разницы по каналам. Процент успешного определения нормальный - не менее 90%.

 

Страница сгенерирована за 0.119 секунд. Запросов: 24.