asp.net 从 mp3 创建波形图像

Posted

技术标签:

【中文标题】asp.net 从 mp3 创建波形图像【英文标题】:asp.net create waveform image from mp3 【发布时间】:2009-12-19 04:28:55 【问题描述】:

我正在寻找一种方法来创建上传到服务器的 mp3 文件的图形波形。通过一些研究,我相信 mp3 需要先转换为原始格式……但我不知道如何为这个声音文件创建 .gif 格式的波形。

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

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

我查看了几个库,例如 lame,但似乎没有一个能够实现我想要的。

任何指向正确方向的指针将不胜感激!

非常感谢! 保罗

【问题讨论】:

【参考方案1】:

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

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

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

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

    该区域的最大值值 该区域的均方根 (RMS) 值

最大值会显示峰值,而 RMS 会显示整体感知响度。两者都很容易实现;两个都试一下,看看哪个最好看。

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

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

【讨论】:

感谢您的详细回答,简而言之解释了需要做什么来处理这个问题。我所追求的图像不一定是完美的,它只是 60 分钟 DJ 混音期间高峰和低点的粗略指南。您提供的代码看起来很有希望,但是它是我不知道的 java,但可能仍然能够从中破译一些信息。谢谢! 不要粗鲁,但如果您喜欢我的回答,如果您愿意接受或至少支持它,我将不胜感激。这就是这个网站的运作方式,你知道的。 对不起,我不知道我有这样做的特权...我刚刚加入,第一次尝试时说我没有足够的积分...投票添加为它是一个有用的资源!谢谢! @dmazzoni 你能解释一下你在做什么来估计 Ringdroid 的收益吗? (我看到您只是获取 2 个字节的值,将其移动并称之为增益 - 但其背后的逻辑是什么?) 我知道这已经很老了,但是我们如何计算样本区域的 RMS 值呢?我想通过计算得到一首歌的响度。【参考方案2】:

您可能会发现FMOD 或BASS 可以很容易地为您做到这一点。我相信 FMOD 下载附带了一个可视化示例,因此您可以从中推断。他们都读入 MP3 并执行必要的计算。

【讨论】:

我现在正在使用 BASS api 来创建我的波形,可以使用许多自定义选项绝对完美地工作。非常感谢,这对您有很大帮助! 不客气 :)。如果您要将其用于商业目的,请不要忘记查看其使用许可。 对于他的目的来说听起来有点矫枉过正......我的意思是 - 这些是一些重型音频库,而不是便宜的。 我刚刚发送了许可证费用...哇,是的,这些是一些重型库!我会尝试寻找更便宜/替代的版本,但它创建的波形非常完美,而且非常简单! 我同意许可费用可能相当昂贵(我猜你正在看的是 100 欧元的),但这确实假设这是用于商业目的。如果没有,那么它们可以免费使用。我想它可以作为一种临时措施来确保应用程序的所有部分都能正常工作。我刚看到这篇文章:***.com/questions/1215326/… 如果你能够将波形信息转换为字节数组,该链接将帮助你在 C# 中显示它。【参考方案3】:

您可以使用C#代码here生成波形图像。之后,您应该使用通用的System.Drawing 库将其保存为 GIF 文件。

【讨论】:

我查看了这段代码并试图让它工作,但是每次我尝试使用 16 位 WAV 文件对其进行测试时,它都会使应用程序崩溃。您以前是否曾使用过此代码? 不,我没有,但我认为值得您花时间解决这些错误。

以上是关于asp.net 从 mp3 创建波形图像的主要内容,如果未能解决你的问题,请参考以下文章

在 c# 中编辑从 asp.net 上传的文件的 mp3

如何从 ASP.NET MVC 控制器操作流式传输 MP3

新手轻松学会MVC

从 MP3 中提取原始音频/波形

从 Div 创建图像并使用 Javascript 和 ASP.net 将其保存到服务器

c#asp.net网站用MediaElement播放mp3文件