asp.net从mp3创建波形图像

Pau*_*ett 2 asp.net mp3 waveform

我正在寻找一种方法来创建上传到服务器的mp3文件的图形波形.从一点研究我相信mp3将需要首先转换为原始格式...但我不知道如何为此声音文件创建波形的.gif格式.

90%的声音文件长度超过60分钟.

我知道这不能在上传后立即完成,需要将其放入队列并进行处理.

我看过几个像lame这样的图书馆,但似乎没有人能够实现我想要的.

任何指向正确方向的指针都将非常感激!

非常感谢你!保罗

dma*_*oni 11

第一步是解压缩mp3.只要您将其作为批处理作业,而不是使用LAME作为库,只需使用现有的命令行程序将mp3转换为临时WAV文件,这将更容易.然后找一个库来读取WAV文件 - 这是一个相对简单的格式,你应该在网上找到很多示例代码,或者你可以在下午编写自己的代码.

假设您的歌曲长达60分钟:60分钟*60秒/分钟*44100个样本/秒= 158,760,000个样本.(如果它是立体声歌曲,则两次.)如果您的图像宽度为1000像素,则您只需要为每158,760个样本显示一个样本.

(顺便说一句,你不会在那个分辨率上看到太多细节.也许更好的解决方案是显示前5分钟的波形,或渲染用户可以滚动的更大的图像?)

无论如何,您想要读取158,760个样本的每个块的音频样本(在此示例中),并将其渲染为垂直线,表示该部分音频上的信号强度.有两种方法可以做到这一点:

  1. 该区域的最大值
  2. 根均方过该区域(RMS)值

最大值将显示峰值,而RMS将显示整体感知响度.两者都易于实施; 尝试两者,看看哪一个看起来最好.

然后你只需要将生成的图像转换为gif.因为这是一个批处理作业,如果我是你,我会写出一个BMP文件(一种非常简单的文件格式),然后使用命令行程序,如ImageMagick的"转换"将其转换为GIF.

最后,最后一点说明:如果你真的很棘手,你可以读取MP3帧并直接从比特流中提取增益,而无需解码整个事物.这就是我在这里所做的,欢迎你使用它 - 但它不适合胆小的人.它比解码整个MP3大约快100倍,但你得到的波形将是一个粗略的近似值.

  • 不要粗鲁,但如果你喜欢我的回答,我会很感激你,如果你愿意接受或至少赞成它.你知道,这就是这个网站的工作方式. (2认同)
  • 这个答案比公认的答案更有用.+1 (2认同)