17 июл. 2009 г.

Мой workflow для high quality car audio

Последнее время я коллекционирую и слушаю только lossless музыку (в формате APE или FLAC), при этом предпочитаю рипать аудио диск целиком, получая в результате два файла (*.APE и *.CUE). Конвертация звука в APE делается автоматически, на лету во время рипа, если в системе установлен Monkey's Audio и Exact Audio Copy должным образом настроен.
Вот в таком виде я и слушаю музыку на компьютере:
используя для этого Winamp с плагином CUE Player, который, для целей отображения в трек-листе Winamp-а, разбивает этот имадж диска на треки согласно информации в CUE файле. Очень удобно.

Но, когда дело доходит до прослушивания музыки не на компьютере, а в машине, на обычной CD-MP3 автомагнитоле, то приходится специально для магнитолы делать mp3-шки из этих lossless рипов. Вот как я их делаю:

1) Распаковываю APE файл в WAV, используя консольную утилиту от Monkey's Audio, потом редактирую CUE файл, заменяя в нем подстроку "ape" на "wav". Эти действия делаются автоматически при запуске вот этого батничка в каталоге, показанном на скриншоте выше.

--- файл ape2wav.bat ---

@echo off

if "%1%" == "GO" (

FOR /F "usebackq tokens=*" %%j IN (%2) DO (
FOR /F "usebackq tokens=1,2 delims=." %%k IN ('%%j') DO (
FOR /F "usebackq tokens=1,3 delims=" %%m IN ('%%k') DO (
FOR /F "usebackq tokens=1 delims=e" %%o IN ('%%l') DO (
if "%%o" == "ap" (
echo 1 > equal
echo %%m.wav" WAVE
)
)
)
)
if NOT EXIST equal (
echo %%j
) else del equal
)
) else (

IF EXIST unpacked del /Q unpacked
mkdir unpacked > nul 2>&1

FOR %%i IN (*.ape) do (
mac "%%i" "unpacked\%%~ni.wav" -d
copy "%%~ni.cue" "unpacked\" > nul 2>&1
)

cd unpacked

FOR %%i IN (*.cue) do (
call ape2wav.bat GO "%%i" > "%%~pni.tmp"
del "%%i"
ren "%%~pni.tmp" "%%i"
)
)
--- end ---

В этом коде есть бага, которую пока руки не доходят пофиксить: если в имени файла, упомянутом внутри CUE файла, есть точка (не считая точки перед расширением), то этот алгоритм не может заменить расширение ape на wav. Если ее зафиксить, то объем кода возрастет еще, хотя и сейчас видно, какое это извращение - писать на чистом batch языке алгоритмы поиска и замены подстрок в файлах.

2) В Exact Audio Copy выбираю меню "разделить WAV-файл согласно Cue Sheet"->"с зазорами"
3) Ну и собственно финал: кодирую в MP3 с максимальным качеством:

-- wav2mp3.bat --

for /R %%i in (*.wav) do (
cd "%%~di%%~pi"
lame --alt-preset extreme "%%~nxi" "%%~ni.mp3"
del "%%~nxi"
)
-- end --

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

P.S. Люблю программировать батнички под Windows :) Такие извращения порой получаются, особенно если делать какую-то нетривиальную задачу, изящно выглядящую на perl/sed/awk. В этом примере переменная "%%~di%%~pi" это цветочки :)

P.P.S. Для полного щастья осталось научиться из скрипта вызывать функцию разбития большого WAV на куски согласно информации в CUE файле - тогда вся операция будет состоять из запуска одного скрипта.

Комментариев нет:

Отправить комментарий