这可能是一个过于宽泛的问题,但 soundcloud 是如何实际编程的?
更加具体,
用什么语言来编程它?
它如何显示频率数据?
如果用户以不同于 MP3 的格式上传文件,它是转换为 MP3 还是按原样播放?如果是前者,转换是如何工作的?
它是如何“以图形方式”出现在浏览器上的?它也是我一无所知的HTML 5吗?
我是 soundcloud 的忠实粉丝,我一直想知道所有这些是如何工作的!请帮帮我:)
这可能是一个过于宽泛的问题,但 soundcloud 是如何实际编程的?
更加具体,
用什么语言来编程它?
它如何显示频率数据?
如果用户以不同于 MP3 的格式上传文件,它是转换为 MP3 还是按原样播放?如果是前者,转换是如何工作的?
它是如何“以图形方式”出现在浏览器上的?它也是我一无所知的HTML 5吗?
我是 soundcloud 的忠实粉丝,我一直想知道所有这些是如何工作的!请帮帮我:)
SoundCloud 开发者在这里,
API 和当前网站是使用 Rails 构建的。有关架构/基础架构及其在过去 5 年中如何演变的信息,请查看SoundCloud 架构的演变。该网站的“下一个”版本(仍处于私有测试阶段)完全使用 Javascript 构建,并且仅使用 API 来获取其数据。Building The Next SoundCloud中提供了更多详细信息。
我不确定究竟使用什么语言/库来处理音频,但许多音频库确实提供了频率数据,我们只是将其提取出来。
用户可以上传AIFF、WAVE (WAV)、FLAC、OGG、MP2、MP3、AAC、AMR 或 WMA 文件。原件与下载选项完全相同,但对于网站上的流媒体,它们被转换为 128kbps MP3 文件。同样,我不确定软件/库,但我很确定它会是 ffmpeg。
为了显示波形,在后端处理音频文件上传时,将波形数据保存为PNG文件。在当前版本的网站上,我们只需加载该文件。在 Next 上,处理 png 以获取原始数据,然后以所需的确切尺寸将其绘制到画布上(以保持图像清晰)。我们目前正在尝试以 JSON 格式获取波形数据以加快此过程。
我正在复制 David Noël在 2010 年在其他地方发布的以下信息。
Web 层:varnish、nginx、haproxy、thin
数据管理:Cassandra、MongoDB、mySQL 主/从集群、memcached
Web 框架:Ruby on Rails
CDN:Akamai 和 Edgecast
转码/存储:AWS EC2/S3