我正在用 C#/Asp.net/JavaScript 编写音频可视化工具(作为网站)。由于我的动画应该随着音乐平稳移动,我认为在后面的代码中预处理 MP3、将值/频率写入文本文件或其他文件,然后使用 javascript 读取值并相应地修改动画会更有意义。基本上我想做这样的事情:https://lh4.ggpht.com/Qhm4EeDUgVlvLcX4MiZ1idGDUo5cD5PmLAIZIfnJlilzU789OPXAUK_emJSOT3CK4Vs=h900 我需要某种数值来用作条形的高度,并且它应该随着音乐的继续而改变。 我正在使用 Naudio 来实现此目的。这是我的代码:
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using NAudio;
using System.IO;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
MP3toWAV(MapPath("~/Music/UctfnI6yUPM.mp3"), MapPath("~/Music/UctfnI6yUPM.wav"));
Strip(MapPath("~/Music/UctfnI6yUPM.wav"));
}
public void MP3toWAV(string file,string output)
{
using (NAudio.Wave.Mp3FileReader reader = new NAudio.Wave.Mp3FileReader(file))
{
NAudio.Wave.WaveFileWriter.CreateWaveFile(output, reader);
}
}
public void Strip(string path)
{
NAudio.Wave.WaveChannel32 wave = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(path));
byte[] buffer = new byte[8192];
int read = 0;
StreamWriter writer = new StreamWriter(MapPath("~/Result.txt"));
while (wave.Position < wave.Length)
{
read = wave.Read(buffer, 0, 8192);
for (int i = 0; i < read / 4; i++)
{
writer.Write(BitConverter.ToSingle(buffer, i * 4));
}
}
}
}
以下是 Pastebin 上的部分输出:http://pastebin.com/Ve5tym20 我无法复制整个内容,因为它是一个约 90mb 的文本文件。 我不太确定应该如何使用这些数据以及这是否是正确的数据。 过去几天我一直在寻找如何做到这一点。我看过 Mark Heath 关于自动调谐的文章,也看过 BandedSpectrumAnalyzer 项目。我从文章中得到了很多代码,但 BandedSpectrumAnalyzer 项目对我来说有点困惑(我不知道它的哪一部分做了什么) 请帮忙???
最佳答案
由于您想在浏览器中构建 EQ 可视化,我建议使用 WebAudio HTML5 API 而不是服务器端方法。您可以使用 WebAudio api 轻松操作 mp3 和其他文件类型
您可以在线找到许多如何使用 API 的示例。这里列出了一些很好的例子: http://webaudio.github.io/demo-list/
该 API 目前仅在 Chrome、Firefox 和 Safari 中受支持。我相信 IE 很快也会跟进。 http://caniuse.com/#feat=audio-api
这是一个对您的情况有帮助并支持所有浏览器的示例: http://www.smartjava.org/content/exploring-html5-web-audio-visualizing-sound
关于c# - 音频可视化工具 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25949530/