2014-12-11 85 views
0

我正在尝试制作SHOUTcast音频流的实况频谱图。我发现这个页面http://www.aerodynes.fr/2014/04/14/a-pure-javascript-audio-waterfall/的人几乎正是我想要的,但从声卡的音频。我如何以和他一样的方式打开SHOUTcast流进行处理?我似乎无法在Web Audio API中找到相关信息。Javascript中的Shoutcast流频谱图

// Open the microphone 
function init() { 
    var audioConstraints = { 
     audio: true 
    }; 
    getUserMedia(audioConstraints, gotStream); 
} 
... 

感谢您的任何建议/信息。

回答

0

你不能直接。你必须得到MacGyver一些解决方案。

您遇到的第一个问题是您无法直接连接到大多数浏览器的SHOUTcast流。虽然SHOUTcast本质上是HTTP,但是有一个小小的差异会破坏兼容性,特别是对于更现代的客户端。一个正常的HTTP服务器在这样的响应中返回一个状态行:

HTTP/1.1 200 OK 

Shoutcast一样的服务器返回此:

ICY 200 OK 

解决这个问题的方式(假设你需要仍然使用Shoutcast一样)是在重写响应状态行时代理数据服务器端。

下一个问题是SHOUTcast/Icecast流使用ADTS中的编解码器(通常是MP3或AAC)将音频压缩为适合于网络流传输的带宽。 Web Audio API处理浮点PCM样本。您将不得不解码音频流。虽然这通常可以在浏览器中完成,但这取决于您使用的编解码器。否则,您必须在服务器端进行,您不妨在频谱分析服务器端和数据流频段值。

我认为处理这个问题的最好方法是让音乐元素或对象播放流,并将其用作Web Audio API节点,然后将其连接到分析仪节点以获取频谱。您需要将Icecast用于您的服务器,并且您将不得不将流转码为一对编解码器才能获得更广泛的浏览器支持。