首先,确保您已经建立好WebSocket连接,并在适当的地方初始化WebSocket对象。然后在获取到音频数据后,将数据通过WebSocket发送给另一端,接收端将收到音频数据并进行播放。
window.navigator.getUserMedia( { audio: true }, function(stream) { var audioContext = new (window.AudioContext || window.webkitAudioContext)(); var analyser = audioContext.createAnalyser(); analyser.smoothingTimeConstant = 0.8; analyser.fftSize = 2048; var bufferLength = analyser.frequencyBinCount; var microphone = audioContext.createMediaStreamSource(stream); microphone.connect(analyser); var processor = audioContext.createScriptProcessor(2048, 1, 1); processor.connect(audioContext.destination); // WebSocket初始化 var ws = new WebSocket('ws://your_websocket_server_address'); processor.onaudioprocess = function(event) { var array = new Uint8Array(analyser.frequencyBinCount); analyser.getByteFrequencyData(array); var average = getAverageVolume(array); // 发送音频数据到WebSocket服务器 ws.send(JSON.stringify({ type: 'audioData', data: array })); SW.setAmplitude(average / 140); }; }, function() { console.log(1); } );然后在另一端,您可以使用WebSocket来接收音频数据并进行实时播放与录音。以下是一个示例的接收和播放代码:
var ws = new WebSocket('ws://your_websocket_server_address'); var audioChunks = []; // 用于存储录音数据块 ws.onmessage = function(event) { var data = JSON.parse(event.data); if (data.type === 'audioData') { var audioContext = new (window.AudioContext || window.webkitAudioContext)(); var source = audioContext.createBufferSource(); var buffer = audioContext.createBuffer(1, data.data.length, audioContext.sampleRate); var channelData = buffer.getChannelData(0); for (var i = 0; i < data.data.length; i++) { channelData[i] = data.data[i] / 128.0 - 1.0; } source.buffer = buffer; source.connect(audioContext.destination); source.start(); audioChunks.push(new Float32Array(data.data)); } }; // 开始录音 function startRecording() { audioChunks = []; // 清空之前的录音数据 var mediaRecorder = new MediaRecorder(stream); mediaRecorder.ondataavailable = function(event) { if (event.data.size > 0) { audioChunks.push(event.data); } }; mediaRecorder.onstop = function() { var audioBlob = new Blob(audioChunks, { type: 'audio/wav' }); var audioUrl = URL.createObjectURL(audioBlob); var audio = new Audio(audioUrl); audio.play(); }; mediaRecorder.start(); } // 停止录音 function stopRecording() { mediaRecorder.stop(); }
网友回复