请问如何使用js在浏览器上录制在线音乐?就是用js录制电脑扬声器中播放的声音。
网友回复
一般录音都是通过麦克风来录制的,如果要录电脑自己播放的声音,我们可以通过js中分享屏幕音频来获取电脑扬声器播放的声音,代码如下:
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>MP3 Recorder</title> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/sprintf.min.js"></script> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/lame.all.js"></script> </head> <body> <p>本工具可以录制在线视频的音乐(电脑声卡播放的声音),直接浏览器生成,数据不会传服务器</p> <p>操作步骤:点击power,选择分享整个屏幕或者对应标签页(没有影响),勾选分享音频,然后点击start即可开始录制,点击stop结束录制,按文件名下载</p> <p>之后你可以修改文件名,然后上传到网易云音乐的云盘,这样你就可以在手机上听或者下载音乐了</p> <audio id="AudioPlayer" controls="controls"> <source type="audio/mpeg"> </audio><br> <button id="btnPower"BfwOnclick="onPower()">Power</button> <button id="btnRecord"BfwOnclick="onRecord()" disabled="">Record</button> <button id="btnStop"BfwOnclick="onStop()" disabled="">Stop</button> <p> <a id="DownloadLink" download="recorded.mp3">recorded.mp3</a> <span id="status"></span> </p> <div id="log" style="width:100%; border:solid thin; margin:8px; padding:4px;"> Waiting for scripts...<br> Window loaded.<br> </div> <script id="logger" type="text/javascript"> //printf-style console output. function log(fmt,args) { var text= this.sprintf.apply(this,arguments); var element= document.querySelector('#log'); element.innerHTML+= text+"<br>\n"; } //printf-style status line. function status(fmt,args) { var text= this.sprintf.apply(this,arguments); var element= document.getElementById('status'); element.innerHTML= text; } (function(window) { log("Window loaded."); })(window); </script> <script id="loadjs" type="text/javascript"> //Load a supplemental javascript on demand. //cb is the function that will be called when the script is ready. function loadScript(name,path,cb) { var node= document.createElement('SCRIPT'); node.type= 'text/javascript'; node.src= path; var head= document.getElementsByTagName('HEAD'); if(head[0]!=null) head[0].appendChild(node); if(cb!=null) { node.onreadystagechange= cb; node.onload= cb; } } </script> <script id="taskUI" type="text/javascript"> //(C)2016 nlited systems inc. http://nlited.org var gAudio= null; //Audio context var gAudioSrc= null; //Audio source var gNode= null; //The audio processor node var gIsLame= false; //Has lame.min.js been loaded? var gLame= null; //The LAME encoder library var gEncoder= null; //The MP3 encoder object var gStrmMp3= []; //Collection of MP3 buffers var gIsRecording= false; var gCfg= { //Encoder configuration chnlCt: 2, //1=mono, 2=stereo bufSz: 4096, //input buffer size (bytes), 16bit signed int. sampleRate: 44100,//Input sample rate (samples per second) bitRate: 128 //Output bit rate (9-128) }; var gPcmCt= 0; //Total input bytes var gMp3Ct= 0; //Total output bytes //Power button function onPower(btn) { if(!gAudio) { PowerOn(); } else { PowerOff(); } } async function startCapture() { let captureStream = null; try { captureStream = await navigator.mediaDevices.getDisplayMedia({audio: { autoGainControl:false,echoCancellation:false, googleAutoGainControl:false,noiseSuppression:false } ,video: true}); } catch(err) { console.error("Error: " + err); } return captureStream; } function PowerOn() { log("Powering up..."); var caps= { audio: true }; try { //Browser compatibility window.AudioContext= window.AudioContext || window.webkitAudioContext || AudioContex...
点击查看剩余70%