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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: GPU DeClicker - автоматическое устранение кликов (щелчков) в аудио  (Прочитано 3696 раз)

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

Оффлайн Dimkins

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Здравстуйте!

Это программа написана для тренировки навыков программирования после прохождения курсов Digital Signal Processing и Heterogeneous Parallel Programming на Coursera.org

Описание программы
Существует одна проблема при захвате аудио со старых виниловых дисков. Многие из них имеют царапины, которые заставляют иглу звукоснимателя подпрыгивать и производить короткий резкий шум (клик). Цель моего проекта была в создании программы  которая могла бы удалять клики из такого аудио автоматически, обнаруживая поврежденные сэмплы и заменяя их экстраполированными. Что и было реализовано. Также программа умеет обрабатывать каталоги с аудио файлами в пакетном режиме.
Страница проекта http://sourceforge.net/projects/declicker/
GNU General Public License version 3.0 (GPLv3)

Требования
Для запуска программы вам нужны
- PC с установленной ОС Linux (протестировано на Ubuntu 13.10)
- CUDA-совместиамя видеокарта с  Compute Capability 3.0 или выше. Их список можно найти здесь https://developer.nvidia.com/cuda-gpus (протестировано на GeForce GTX 650 Ti)
- установленный проприетарный драйвер NVIDIA (протестировано с версией 319.60)

Аудио форматы
Программа использует библиотеку “libsndfile” для чтения и записи аудио файлов, так что  список поддерживаемых форматов можно увидеть здесь( http://www.mega-nerd.com/libsndfile ).
MPEG Layer 3 (mp3) не один из них, поэтому mp3-файлы должны быть сконвертированы в один из поддерживаемых форматов (например WAV) до обработки программой. Под Ubuntu это можно сделать с помощью программы Sound Converter ( http://soundconverter.org/ ) которая также умеет обрабатывать каталоги.
GPU DeClicker сохраняет обработанный файл в том же формате в каком был исходный аудио файл.

Обработка файлов
Когда программа заканчивает коррекцию аудио сигнала она сохраняет отредактированный файл в директорию OUTPUT оставляя имя файла прежним.
В директории SCAN программа  сохраняет файл в аудио формате содержащий временные метки на которых были сделаны исправления.

Обработка каталогов
Если программа получает имя каталога в качестве параметра она обрабатывает все аудио файлы содержащиеся в этом каталоге и всех вложенных каталогах.
Структура каталогов будет скопирована в каталоги OUTPUT и SCAN. Файлы не в аудио формате не будут обработаны и не копируются в новые директории создаваемые программой.

Установка
До запуска программы необходимо установить две библиотеки командой
  sudo apt-get install libsndfile1 libboost-filesystem1.53.0
Саму программы вы можете найти здесь http://sourceforge.net/projects/declicker/files/declicker/download
Поместите ее в домашнюю директорию. В свойствах файла на вкладке  Permissions необходимо поставить галку "Allow executing file as program".

Запуск программы
Программа запускается в терминале строкой
/home/declicker /home/Music_directory/audiofile.wav
Чтобы запустить обработку целой директории используйте строку
/home/declicker /home/Music_directory
Помните что вы можете использовать drag-n-drop из окна Nautilus в окно Terminal вместо того чтобы набирать имена с клавиатуры.
Если вы запустили обработку каталога и затем прервали этот процесс, вы можете продолжить с того же момента где остановилась работа той же терминальной командой. Файлы которые уже были обработаны не будут обрабатываться повторно.
Скорость обработки зависит от мощности вашей видеокарты. На моем компьютере с GeForce GTX 650 Ti обработка 3-х минутного файла заняла 24 минуты.

« Последнее редактирование: 08 Февраля 2014, 13:57:56 от Dimkins »

Оффлайн NickKolok

  • Новичок
  • *
  • Сообщений: 23
    • Просмотр профиля
    • Скачать Office бесплатно и легально. MS Office рядом не стоял!
За неподдержку проприетарного mp3 - респект.

Рекомендую подумать над ppa. Софт хороший, пригодится в условиях ужесточающейся борьбы с культурой.

Оффлайн sergey109

  • Активист
  • *
  • Сообщений: 619
    • Просмотр профиля
 Спасибо! Это действительно нужная программа.
Я знаю множество людей занимающихся оцифровкой винила.
(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 08 Февраля 2014, 16:26:41 от sergey109 »
SysV и dmix.

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Dimkins, посмотрим, что это такое. Не винил, но трещащий звук есть, как и CUDA карточка с блобом. А почему нет поддержки OpenCL для владельцев не Nvidia карточек? ИМХО в отдельный модуль вынести все функции с использованием GPU не помешает и реализовать его в двух вариантах, для CUDA и для всех. А вот где сорцы? Почитать охота.
При старте программы без аргументов выдаёт это:
Цитировать
declicker: /usr/include/boost/filesystem/path_traits.hpp:214: void boost::filesystem::path_traits::dispatch(T* const&, U&, const codecvt_type&) [with T = char; U = std::basic_string<char>; boost::filesystem::path_traits::codecvt_type = std::codecvt<wchar_t, char, __mbstate_t>]: Assertion `c_str' failed.
Аварийный останов (сделан дамп памяти)


Пользователь решил продолжить мысль 08 Февраля 2014, 17:52:58:
Не понимает пробелы в пути, также такая ошибка:
Error CUDA driver version is insufficient for CUDA runtime version at line 307 in file ../src/ppr.cu

Пользователь решил продолжить мысль 08 Февраля 2014, 17:55:11:
ТС давай сорцы, раз GPLv3 (желательно с комментариями) и рассказывай принцип работы, помогать буду, чем смогу и ошибки вылавливать в коде.
« Последнее редактирование: 08 Февраля 2014, 17:55:11 от peregrine »

Оффлайн Dimkins

  • Автор темы
  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
NickKolok,
Ну, не то чтобы я был борец против проприетарного mp3 :) Просто я придерживался бесплатного откытого ПО и оказался "в русле" решения принятого автором билиотеки (Erik de Castro Lopo).
Про ppa: можно подумать, почему нет. Сначала хотелось бы больше тестов.

sergey109,
Такой битрейт (192кГц), боюсь, катастрофически скажется на скорости работы программы :( т.к. использованный алгоритм довольно затратен с точки зрения вычислительных ресурсов. На моей видеокарте обработка 1 минуты звука требует 8 минут при битрейте 44,1 кГц. С ростом битрейта время работы программы увеличится пропорционально.

peregrine,
Теоретически программе все равно на природу искажения звука. Может сработать. Хотя я тестировал ее именно на кликах, т.е. довольно коротких (50-150 сэмплов) шумах.
CUDA использована только потому, что я ее уже изучал. Если кто-нибудь возьмется подстроить код под OpenCL, я обязательно помогу.
У меня самого скорее всего не хватит времени на это. Готовлюсь поступать в универ.

Пользователь решил продолжить мысль 08 Февраля 2014, 18:02:51:
peregrine,
исходник http://sourceforge.net/projects/declicker/files/declicker.cu/download

Пользователь решил продолжить мысль 08 Февраля 2014, 18:08:32:
Как работает опишу завтра. Рад, что у тебя есть желание помочь.

Пользователь решил продолжить мысль 08 Февраля 2014, 18:30:27:
"Error CUDA driver version is insufficient for CUDA runtime version "

Это похоже на несоответствие версий CUDA SDK (я брал последнюю версию - 5.5) и драйвера на твоем компьютере. Решения может быть два: перекомпилировать программу с более старой версией CUDA SDK или установить более позднюю версию драйвера.

Пользователь решил продолжить мысль 09 Февраля 2014, 07:38:19:
Описание работы программы начну с функций

burg_prediction_error(int * buf, int I, float * a_d, int * det3_sc, int rate, int channels, int bits, int buflen, int frames)

Входные параметры: buf - адрес массива аудио сэмплов в памяти видеокарты, I - номер исследуемого сэмпла
Выходной параметр: a_d - величина ошибки предсказания
Остальные параметры не используются.

Вычисляет ошибку (a_d) редсказания значения сэмпла номер I из буфера buf по методу Бурга.
Метод Бурга позволяет предсказать следующее значение в последовательности сэмплов. Предсказуемость у музыки выше чем у случайных помех (этим они и раздражают слух). Величина ошибки выше заданного порога будет указывать на на искажения.
Пороговое значение является плавающим и вычисляется в функции declick_file

Пользователь решил продолжить мысль 09 Февраля 2014, 07:47:36:
correction(int * buf, int I, int l)

Входные параметры: buf - адрес массива аудио сэмплов в памяти видеокарты,  I - номер первого сэмпла из цепочки подлежащей коррекции, l -длинна этой цепочки

Коррекция производится непосредственно в массиве buf. Новые значения также вычисляются по методу Бурга, но с больше точностью, чем при детектировании.

Пользователь решил продолжить мысль 09 Февраля 2014, 08:30:55:
declick_file(path * in_p, path * out_p, path * scan_p)

Входные параметры: in_p - путь к входному файлу, out_p - путь к выходному файлу с аудио, scan_p - путь к выходному файлу с временнЫми метками по которым была произведена коррекция аудио

Строки 239-290: программа читает из аудио файла данные и размещает их в buffer_32 (и buffer_32_2, если сигнал стерео) в оперативной памяти ПК.

Затем данные из buffer_32 размещаются в память видеокарты по адресу sound.

По адресу det3_scan в памяти видеокарты размещается массив (изначально заполнен нулями), который будет использован для сохранения значений ошибок в предсказаниях в функции burg_prediction_error. Этот массив (det3_scan) сейчас не используется, но может стать полезен при отладке алгоритма обработки аудио сигнала, если он будет сбоить на каких-то типах аудио (битрейт, тип помех и т.д.).

Строки 334-417 выполняется последовательный поиск дефектов (кликов) в аудио с использованием функции burg_prediction_error и коррекция найденных дефектов с помощью функции correction. Места коррекции отмечаются в массиве det3_scan_analize значениями 10000 (Decimal) для последующего сохранения в файле временнЫх меток в каталоге SCAN.

Обработанный аудио сигнал возвращается из памяти видеокарты в массив buffer_32 (buffer_32_2) после чего сохраняется в выходном файле.

Продолжу позже.



Пользователь решил продолжить мысль 09 Февраля 2014, 12:44:29:
declick_dir(path * curr_path, path * output_path, path * scan_path)

Входные параметры: curr_path - текущий каталог аудио файлов, output_path - каталог для обработанных аудио файлов, scan_path - каталог для файлов с временнЫми метками.

Последовательно проверяет все элементы текущего каталога curr_path. Запускает функцию declick_file для файлов или рекурсивно саму себя для каталогов. Формирует структуру каталогов в директориях OUTPUT и SCAN.

main(int argc, char **argv)

Обрабатывает параметры с которыми запущена программа. Формирует структуру каталогов в директориях OUTPUT и SCAN, если программа запущена для обработки каталога.
« Последнее редактирование: 09 Февраля 2014, 13:07:53 от Dimkins »

 

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