如何在Linux中创buildMP3的波形图像?

给定一个MP3,我想从文件中提取波形到一个图像(.png)

有没有可以做我需要的软件

Solutions Collecting From Web of "如何在Linux中创buildMP3的波形图像?"

使用soxgnuplot你可以创建基本的波形图像:

 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上的“光谱图”功能

“频谱图以便携式网络图形(PNG)文件格式显示,并在X轴上显示时间,在Y轴上显示频率,在Z轴上显示音频信号大小。Z轴值由颜色(或可选的强度),如果音频信号包含多个通道,则从通道1(这是立体声音频的左声道)开始,从上到下显示这些通道。

如果您有一个GUI环境,则可以使用大胆音频编辑器加载mp3,然后使用print命令生成波形的pdf。 然后将PDF转换为PNG。

我会做这样的事情:

  • 找到一个工具将mp3转换为PCM,即每个采样具有一个8位或16位值的二进制数据。 我想mplayer可以做到这一点

  • 将结果传递给一个将二进制数据转换为十进制格式的数字的ascii表示的实用程序

  • 使用gnuplot将这个值列表转换成png图。

瞧,unix工具之间的管道的力量。 现在,如果gnuplot能够从二进制格式读取数据,则此列表中的第2步可能是选项。

你可能要考虑BBC的音频波形。

audiowaveform是一个C ++命令行应用程序,可以从MP3,WAV或FLAC格式的音频文件中生成波形数据。 波形数据可用于产生音频的可视化呈现,在外观上类似于音频编辑应用程序。

波形数据文件以二进制格式(.dat)或JSON(.json)保存。 给定一个输入波形数据文件,audiowaveform还可以在给定的时间偏移和缩放级别将音频波形呈现为PNG图像。

通过首先组合左声道和右声道从输入立体声音频信号产生波形数据以产生单声道信号。 下一阶段是计算N个输入样本组的最小和最大样本值(其中N由–zoom命令行选项控制),使得每个N个输入样本产生一组最小点和最大点输出。

https://github.com/bbcrd/audiowaveform