在这里,我想使用sox
将flac文件转换为Spectogram png文件。当我想转换.flac
文件时,我可以使用以下命令
sox output.flac -n spectrogram -r -o a.png
如果我想转换成N x 129像素的光谱图,我可以使用以下命令
sox output.flac -n spectrogram -Y 200 -X 50 -m -r -o spectogram.png
但是,我并不完全明白-Y 200
和-X 50
参数是什么意思,即有没有办法可以将这些参数转换为采样频率,时间段(以毫秒为单位)以及频率像在Matlab或Python中一样。如果有人可以在这里详细回答,那将是很好的,因为chirlu/sox中的文档没有明确说明它的含义(或者我没有明确地找到它)。
答案 0 :(得分:2)
官方sox manual完整地描述了参数,源代码在这里spectrogram.c。
但简单地说:
-X num:
X轴像素/秒;默认值是自动计算以适合给定的 或已知的X轴大小的音频持续时间,否则为100。如果给出 与-d一起使用时,此选项会影响。的宽度 频谱;否则,它会影响频谱图的持续时间。 num可以是1(低时间分辨率)到5000(高时间分辨率) 并且不必是整数。
和
-Y num:
设置光谱图的目标总高度。默认值为550 像素。使用此选项(默认情况下),SoX将 为一个光谱图通道选择一个高度 比一个2的幂,所以实际的总高度可能会低于 给定的数字。
对于-X 50
,水平时间分辨率为:
dt = 1000/50 = 20 ms/pixel
对于-Y 200
,小于200的最大功率为128.假设采样率为44.1 kHz,则频率分辨率为:
bin_size = 44100/128 = 344.5 Hz