之前一直使用一款叫bettersleep的软件,资源非常好,支持混合播放,使用效果也特别好,支持web版,我对它是如何实现播放特别有兴趣,于是认真“研究”了一番,然后发现了“新天地”。
一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
首先,大家应该尊重知识版权,尤其是音乐的制作尤其不易,有条件一定要购买正版软件。
分析资源的加载和解密
打开网站播放其中一条音频:
可以看到网络tab栏多一条对应的ogg资源的请求,响应内容为类似base64格式的字符串:
对于这串数据,我认为可能被做过加密,直接拿过来没什么用,必须到主代码里找到相应的解密方法。
分析后推测主代码文件为mainjs:
打开检索ogg,最终定位到了下面代码并打了断点:
进入下一个函数栈:
onDataDownloaded(data) {
this.encryptedData = data; // ready for decryption
this.changeState(SoundTrackState.DECRYPTING);
}
一番分析后定位到了解密的方法:
//注释是个好东西啊,生产环境还是需要去掉的
decrypt() {
// for now bypass deciphering, we received the sound in base64 directly
//之前的解密方法,现在注释了,也就是不需要解密了!!!!
//this.cipher.decrypt(this.encryptedData, (decryptedData) => { this.onDataDecrypted(decryptedData); });
//这里直接把base64数据传入了onDataDecrypted
this.onDataDecrypted(this.encryptedData);
}
onDataDecrypted(decryptedData) {
this.decryptedData = decryptedData;
this.changeState(SoundTrackState.LOADING);
}
继续定位,来到了loadSound方法:
loadSound() {
//var audioExtension = this.soundData.isBrainwave ? 'wav' : this.utils.getBestAudioFormatMimeType();
var audioExtension = this.utils.getBestAudioFormatMimeType();
//这不是资源的拼接嘛
var howlSource = ['data:audio/' + audioExtension + ';base64,' + this.decryptedData];
//....
}
由上我推测一个名为Birds的音频的DataUrl为:data:audio/ogg;base64,${返回的base64字符串}。
拼接好用浏览器打开,果然可以播放了:
当然,下载也是可以的:
ok,基本搞明白了,理论上,我们只要知道音频的名字,就可以直接下载音频了。
获取所有的音频名称
我们继续到主代码mainjs里查询音频名如Birds:
一下子就发现了好多的音频名字,有免费的,也有付费的。我们拷贝出来即可。
ok,音频名字搞定。
写个下载脚本
一个个地手动下载肯定是不行的,因为文件太多(几百个),所以还是得写个脚本,读取文件名,拼接并保存为mp3格式。
脚本在 这里
最后
本文仅供学习研究之用,请勿盗取、传播、售卖付费资源。