Как я могу создать изображение формы волны MP3 в Linux? - PullRequest
14 голосов
/ 17 декабря 2010

Учитывая MP3, я хотел бы извлечь сигнал из файла в изображение (.png)

Есть ли пакет, который может делать то, что мне нужно?

Ответы [ 5 ]

15 голосов
/ 15 августа 2014

Используя 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

enter image description here

Чтобы создать что-то более простое / красивее, используйте следующий файл графика GNU какшаблон (сохраните его как 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

enter image description here

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

2 голосов
/ 17 декабря 2010

Я бы сделал что-то вроде этого:

  • найдите инструмент для преобразования mp3 в PCM, то есть двоичные данные с одним 8 или 16-битным значением за образец. Я думаю, что mplayer может сделать это

  • передать результат в утилиту, конвертирующую двоичные данные в ascii представление чисел в десятичном формате

  • используйте gnuplot для преобразования этого списка значений в граф png.

И вуаля, сила связи между инструментами Unix. Теперь шаг 2 в этом списке может быть дополнительным, если gnuplot может читать свои данные из двоичного формата.

2 голосов
/ 17 декабря 2010

Если у вас есть среда графического интерфейса, вы можете использовать аудиоредактор audacity , чтобы загрузить mp3, а затем использовать команду печати, чтобы сгенерировать pdf сигнала.Затем преобразовать PDF в PNG.

1 голос
/ 26 июля 2016

Возможно, вы захотите рассмотреть аудиоволновую форму с BBC.

audiowaveform - это приложение командной строки C ++, которое генерирует данные формы сигнала из аудиофайлов формата MP3, WAV или FLAC. Данные осциллограммы могут использоваться для визуальной визуализации звука, по внешнему виду аналогичного приложениям для редактирования звука.

Файлы данных формы волны сохраняются в двоичном формате (.dat) или в формате JSON (.json). При наличии файла данных формы входного сигнала аудиоволна может также визуализировать форму звукового сигнала в виде изображения PNG с заданным временным сдвигом и уровнем масштабирования.

Данные формы сигнала получают из входного стереофонического аудиосигнала, сначала объединяя левый и правый каналы для получения монофонического сигнала. Следующим этапом является вычисление минимального и максимального значений выборки по группам из N входных выборок (где N контролируется параметром командной строки --zoom), так что каждый N входных выборок создает одну пару точек минимума и максимума в выход.

https://github.com/bbcrd/audiowaveform

1 голос
/ 25 мая 2011

Это стандартная функция в SoX (инструмент командной строки для звука, Windows и Linux). Проверьте функцию 'спектрограммы' на http://sox.sourceforge.net/sox.html

"Спектрограмма отображается в Portable Network Graphic (PNG)файл и показывает время по оси X, частоту по оси Y и величину аудиосигнала по оси Z. Значения по оси Z представлены цветом (или, возможно, интенсивностью) пикселей в плоскости XY. Если аудиосигнал содержит несколько каналов, они отображаются сверху вниз, начиная с канала 1 (который является левым каналом для стереофонического звука). "

...