Работа со звуком

индекс
202,73

Конвертация музыки в формат FLAC с использованием CUDA

Недавно я наткнулся на энкодер, работающий с форматом FLAC и перекладывающий часть процесса кодирования на GPU, используя CUDA. Программа называется FlaCuda и взять её можно здесь. Несмотря на то, что написана с использованием .NET, она прекрасно работает при участии Mono. Во всяком случае, никаких трудностей с её использованием на Ubuntu 9.10 amd64 у меня не возникло.

Программка работает довольно шустро, при сжатии одного и того же аудиофайла flac, flake и flacuda показали следующие результаты (amd x2 4200+, geforce 9800 GT):

программа время кодирования размер конечного файла
flac 127 с. 425.3 Мб
flake 106 с. 425.9 Мб
flacuda 24 c. 424.1 Мб


Уровень сжатия у всех программ ставился 8. Получаем солидный пятикратный прирост в скорости. Правда, такого выигрыша можно добиться лишь на длинных файлах. На 3-6-минутных записях время кодирования сокращается примерно вдвое.

Программа умеет брать данные из стандартного ввода и выводить на стандартный вывод, что позволяет воткнуть её в конвейер. Например, я вполне успешно модифицировал cue2tracks для работы с flacuda.

Теперь о минусах.  Программа построена на основе кодека flake, поэтому 24-битный звук сжимать не умеет. Очень обидно. Больше недочётов не заметил.

Сам автор предупреждает, что программа всё ещё находится в стадии альфа, поэтому желательно перепроверять полученные файлы. Например, можно полученный .flac перегнать обратно в .wav и сравнить его с исходным, посчитав контрольную сумму того и другого. За развитием можно следить форуме www.hydrogenaudio.org, и там же можно связаться с автором.

Ну и напоследок — бонус для пользователей linux, изменённый скрипт cue2tracks, в который добавлена поддержка FlaCuda. Для работы скрипта нужно поместить исполняемый файл «CUETools.FlaCuda.exe» в "/usr/bin" под именем flacuda, а dll-библиотеки — в "/usr/lib".

Upd. Для пользователей Gentoo powerman добавил пакеты для flacuda и изменённого cue2tracks в оверлей powerman.

Скачать скрипт.
+54
10 февраля 2010, 21:23
38

комментарии (63)

НЛО прилетело и опубликовало эту надпись здесь
0
braintorch #
Можно и туда, конечно. Лишь бы в PATH было прописано. Я просто не привык туда что-то ставить.
НЛО прилетело и опубликовало эту надпись здесь
0
braintorch #
Дело житейское. Поправил на /usr/local
0
Antigluk #
Может глупый вопрос, но что тогда должно храниться в /usr/bin?
0
mechmind #
Отдайте эт и директории на растерзание пакетному менеджеру :)

Ну и man hier
НЛО прилетело и опубликовало эту надпись здесь
+8
mardy_bum #
Потестил у себя (-8, Core i7 920, GTX 285, Win 7 x64):
flac 26 с. 113.9 Мб
flacuda 2.5 с. 111.42 Мб

Сжимает примерно также, но вот выигрыш во времени просто огромен, примерно в 10 раз быстрее
Забрал, буду пользоваться
+3
TNK #
под «кодек» вы подразумеваете программу-энкодер? Или я чего-то не понял?
0
braintorch #
Да. Кодеком, пожалуй, называть её некорректно. Всё-таки, она не декодирует флак. Просто «кодек» короче. :)
+2
Frosty #
это называется кодер, букв столько же, но смысл на месте.
+2
braintorch #
Исправил на «энкодер». Всё-таки кодерами у нас часто называют программистов. Путаница будет.
0
twirpx #
Кодек (КОдировщик/ДЕКодировщик или COmpressor/DECompressor) — устройство или программа, способная выполнять преобразование данных или сигнала (с) К.О.

Одно другому не мешает.
0
TNK #
Всё-таки чтобы не запутаться: DivX — это кодек, который могут использовать программы-экнодеры, как, например, POcketDivXEncoder? Что в данном топике — кодек, а что — программа, способная его использовать?
0
twirpx #
DivX — проприетарный кодек стандарта MPEG4. Грубо говоря выпускается в двух видах — декодер (бесплатный), декодер+энкодер (Pro, платный). Не знаю, что такое, POcketDivXEncoder, но, скорее всего, это либо реализация алгоритмов кодека DivX, либо обертка над установленным кодеком DivX.

В данном топике FLAC — популярный свободный формат/кодек для сжатия аудио. Сравниваемые flac, flake, flacuda — различные реализации этого кодека.

Чтобы не путаться, можно сказать, что кодек — это библиотека и/или спецификация формата и алгоритма кодирования и декодирования.
0
bagzilla #
не сами себе ли вы перечите?

flacuda — кодеровщик, это не кодек ибо не умеет декодировать звук на аудиокарту.
+1
zivot_je_cudo #
Думал добавить в AUR, но по ссылке «Source code» с официального сайта исходники на самом деле недоступны, а в архиве FlaCuda09Linux.rar свалены exe и dll О.о
Ручное переименование в flacuda и свалка dll в /usr/local/lib это довольно странная прихоть разработчиков. Счастье, что хотя бы wine не требуется.
0
braintorch #
Ручное переименование в flacuda — это странная прихоть меня самого. Программа работает и так, распакуйте архив и запускайте. Распихивать файлы по папкам и переименовывать бинарник нужно только если вы хотите использовать изменённый мной cue2tracks.
0
braintorch #
А исходники ещё вчера-позавчера были на месте. Думаю, это временные какие-то глюки. Если хотите, могу исходники положить куда-нибудь, я их у себя сохранял.
0
zivot_je_cudo #
Не нужно, спасибо. В общем-то, это я зря придрался, можно частично стереть url и найти исходники =)
А синтаксис flac и flacuda совпадает? Было бы неплохо иметь симлинк с именем /usr/bin/flac на /usr/bin/flacuda и не переписывать скрипты.
+1
braintorch #
Синтаксис совпадает с flake, flacuda на нём основан. Так что, если у вас в скриптах для flac используется прямое указание имени конечного файла (опцией -o), то ничего не выйдет.
0
braintorch #
В принципе, можно написать скрипт-враппер, который будет смотреть, какие вы аргументы указываете при вызове flac и заменять их на flake-совместимые.
0
zivot_je_cudo #
Хм, да, если уж костылить, то это наиболее простой путь.
НЛО прилетело и опубликовало эту надпись здесь
0
mardy_bum #
Стоит перенести топик в тематический блог
сюда habrahabr.ru/blogs/sound_and_music/
или
сюда habrahabr.ru/blogs/CUDA/
0
braintorch #
Перенёс в «Звук и Музыка». Всё-таки в блоге «CUDA» больше про программирование.
0
garlic #
очень и очень хорошо, побольше бы cuda-приложений и скриптов
+1
braintorch #
На самом деле, приятней было бы распространение OpenCL-приложений. Они всё-таки универсальней. Но на безрыбье и такие подвижки радуют.
0
garlic #
не могу не согласиться, ага
0
Mercury13 #
Спасибо. Видяха есть — будет интересно испытать КУДу на реальных задачах — а не на тряпках в Mirror's Edge!
0
ABrandt #
«Во всяком случае, у меня не возникло никаких трудностей с её использованием на моей Ubuntu 9.10 amd64 не возникло.»

P.S. Простите за занудство.
+1
braintorch #
Ой. Спасибо. Сколько ни проверяй, а всё равно где-нибудь ляп останется.
0
Ozamodaz #
С большим нетерпением жду, когда видео-чип станет полноправным вычислительным ядром, на котором можно будет считать более-менее широкий спектр задач из ряда повседневных. Вот и еще одна ласточка! Выигрыш в скорости просто потрясающий! Класс!
0
makcumka #
современные видеочипы уже имеют сотни вычислительных ядер, но использовать их в широком спектре бытовых задачах пока не получиться.
но это пока :).
0
Chulup #
Так, никто и не упомянул — файл сжимается правильно? Оригинал и сжатый-расжатый файл совпадают?
0
braintorch #
У меня пока ошибок не было. Оригинал и сжатый-расжатый файл совпадали. Но я скачал новую версию где-то дня через 2 после её выхода, в ней была поправлена серьёзная ошибка, так что перепроверка не помешает.
–3
efoxxi #
Ура! Ну вот теперь можно будет быстро конвертнуть всю коллекцию mp3 во FLAC и наслаждаться тёплым ламповым звуком =)
+3
Stvad #
эм а какой смысл конвертировать во flac из формата с lossy сжатием?
0
itjobby #
Автор коммента изящно шутит.
Речь про «теплый ламповый звук»: пруфлинк: lurkmore.ru/%D0%A2%D0%9B%D0%97
0
efoxxi #
Вы видимо не совсем поняли моего сарказма ;-)
–2
juliv #
Высказаться успели, не поняв весь бред сказанного.
Вам надо расставить все точки на «и»:
www.foobar2000.ru/wiki/codecs/lossy
www.foobar2000.ru/wiki/codecs/lossless/start
0
igorr #
еще б кто нибудь плагин для sound forge сварганил, цены ему не было б.
0
ivlis #
А какую видеокарту программа требует? Любая Nvidia подойдёт или какая-то специальная? Дрова нужны какие-то что бы это всё работало?
+1
juliv #
ru.wikipedia.org/wiki/CUDA
раздел «Поддерживаемые видеокарты»
0
Shark #
А что за flake? В первый раз просто вижу.
+1
GreyCat #
А никто не знает, что ей нужно для запуска и работы? Иксы нужны? Загруженные проприетарные модули карточек? Соответствующие настройки Device в иксах? glx в иксах? Что-то ещё?

Есть мысль, что по идее нужно бы интегрировать такое счастье в качестве бенчмарка к нам — надо только понять минимальные prerequisites.
0
braintorch #
Только что пробовал. Иксы не нужны, загруженный модуль не нужен.
+1
GreyCat #
Эм… А через что она тогда работает-то? Через какой /dev обращается?
0
braintorch #
Знаете, это я затупил, прошу прощения. Забыл, что модуль может автоматически подгружаться. Получается, что модуль всё-таки нужен.
0
GreyCat #
Ну и, соответственно, через /dev/nvidia0 или /dev/nvidiactl?
+1
braintorch #
strace flacuda 1.wav | grep '/dev/':

open("/dev/urandom", O_RDONLY) = 3
open("/dev/shm/", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC) = 3
statfs("/dev/shm/", {f_type=0x1021994, f_bsize=4096, f_blocks=257095, f_bfree=257087, f_bavail=257087, f_files=257095, f_ffree=257090, f_fsid={0, 0}, f_namelen=255, f_frsize=4096}) = 0
unlink("/dev/shm/mono.6198") = 0
open("/dev/shm/mono.6245", O_RDWR|O_CREAT|O_EXCL|O_NOFOLLOW|O_CLOEXEC, 0640) = 3
open("/dev/null", O_RDWR) = 3
open("/dev/nvidiactl", O_RDWR) = 4
open("/dev/nvidia0", O_RDWR) = 5
open("/dev/nvidia0", O_RDWR) = 6
open("/dev/nvidia0", O_RDWR) = 7
open("/dev/nvidiactl", O_RDWR) = 8
open("/dev/nvidiactl", O_RDWR) = 9
unlink("/dev/shm/mono.6245") = 0


Как-то ещё можно определить?
+1
GreyCat #
В целом понятно, спасибо.
А так — можно ещё смотреть через lsof, fuser и подобные утилиты :)
0
braintorch #
А то я, если честно, минут 5 соображал, как определить, какие устройства может использовать процесс.
0
z0rg #
К сожалению являюсь обаладателем видюхи ATI (3870), для ATI Stream появится подобный софт? Так же хотелось бы и видео энкодить
0
ludenus #
вряд ли
CUDA — разработка nVidia
0
z0rg #
дык у AMD есть ATI stream… я интересуюсь под него есть ли софт подобный?
0
makcumka #
Это очень круто!
НЛО прилетело и опубликовало эту надпись здесь
0
Skilos #
Badaboomit

Только он платный :(
НЛО прилетело и опубликовало эту надпись здесь
0
Harris #
$ strace ./flacuda
execve("./flacuda", ["./flacuda"], [/* 43 vars */]) = -1 ENOEXEC (Exec format error)
dup(2)                                  = 3
fcntl(3, F_GETFL)                       = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 5), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f1fa2b1d000
lseek(3, 0, SEEK_CUR)                   = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Exec format error\n", 32strace: exec: Exec format error
) = 32
close(3)                                = 0
munmap(0x7f1fa2b1d000, 4096)            = 0
exit_group(1)                           = ?

брал здесь:
www.cuetools.net/install/FlaCuda09Linux.rar
0
powerman #
Я добавил в оверлей powerman для Gentoo пакеты для flacuda и cue2tracks с Вашим патчем.
0
braintorch #
Спасибо, добавил в топик.

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.