Учитывая MP3, я хотел бы извлечь форму волны из файла в изображение (.png)
Есть ли пакет, который может делать то, что мне нужно?
Учитывая MP3, я хотел бы извлечь форму волны из файла в изображение (.png)
Есть ли пакет, который может делать то, что мне нужно?
Используя sox
и gnuplot
, вы можете создавать основные изображения осциллограмм:
sox audio.mp3 audio.dat #create plaintext file of amplitude values
tail -n+3 audio.dat > audio_only.dat #remove comments
# write script file for gnuplot
echo set term png size 320,180 > audio.gpi #set output format
echo set output \"audio.png\" >> audio.gpi #set output file
echo plot \"audio_only.dat\" with lines >> audio.gpi #plot data
gnuplot audio.gpi #run script
Чтобы создать что-то более простое/красивое, используйте в качестве шаблона следующий файл GNU Plot (сохраните его как audio.gpi):
#set output format and size
set term png size 320,180
#set output file
set output "audio.png"
# set y range
set yr [-1:1]
# we want just the data
unset key
unset tics
unset border
set lmargin 0
set rmargin 0
set tmargin 0
set bmargin 0
# draw rectangle to change background color
set obj 1 rectangle behind from screen 0,0 to screen 1,1
set obj 1 fillstyle solid 1.0 fillcolor rgbcolor "#222222"
# draw data with foreground color
plot "audio_only.dat" with lines lt rgb 'white'
и просто запустите:
sox audio.mp3 audio.dat #create plaintext file of amplitude values
tail -n+3 audio.dat > audio_only.dat #remove comments
gnuplot audio.gpi #run script
Основываясь на этом ответе на аналогичный вопрос, который более общий в отношении формата файла, но менее общий в отношении используемого программного обеспечения.
Это стандартная функция в SoX (инструмент командной строки для звука, Windows и Linux) Проверьте функцию "спектрограмма" на http://sox.sourceforge.net/sox.html
"Спектрограмма отображается в файле Portable Network Graphic (PNG) и показывает время по оси X, частоту по оси Y и величину аудиосигнала по оси Z. Представлены значения оси Z по цвету (или, необязательно, интенсивности) пикселей в плоскости XY.Если аудиосигнал содержит несколько каналов, то они отображаются сверху вниз, начиная с канала 1 (который является левым каналом для стереозвука).
Если у вас есть среда GUI, вы можете использовать звуковой редактор audacity для загрузки mp3 и затем использовать команду печати для создания pdf формы волны. Затем преобразуйте pdf в png.
Я бы сделал что-то вроде этого:
найти инструмент для преобразования mp3 в PCM, то есть двоичные данные с одним 8 или 16-битным значением на образец. Я думаю, что mplayer может это сделать
передать результат утилите, преобразующей двоичные данные в ascii представление чисел в десятичном формате
используйте gnuplot для преобразования этого списка значений в график png.
И voilà, мощность трубопроводов между инструментами unix. Теперь шаг 2 в этом списке может быть optionnal, если gnuplot способен читать данные из двоичного формата.
Возможно, вы захотите рассмотреть аудиоформат из BBC.
audiowaveform - это приложение командной строки С++, которое генерирует данные осциллограммы из аудиофайлов формата MP3, WAV или FLAC. Данные формы волны могут использоваться для визуального воспроизведения звука, аналогичного по внешнему виду приложениям для редактирования звука.
Файлы данных формы данных сохраняются либо в двоичном формате (.dat), либо в JSON (.json). Учитывая входной файл данных формы сигнала, аудиоформат также может отображать звуковую форму в виде изображения PNG при заданном смещении по времени и уровне масштабирования.
Данные осциллограммы формируются из входного стереофонического аудиосигнала, сначала комбинируя левый и правый каналы для получения монофонического сигнала. Следующий этап - вычисление минимальных и максимальных значений выборки по группам из N входных выборок (где N контролируется опцией командной строки --zoom), так что каждый N входных выборок создает одну пару минимальных и максимальных точек в выход.