brestok's picture
Upload 29 files
c409a15 verified
raw
history blame
2.53 kB
async function startCall() {
const uuid = generateUUID()
const socket = new WebSocket(`ws://127.0.0.1:8000/ws/${uuid}`)
socket.onopen = () => {
startRecording()
}
socket.onclose = event => console.log('WebSocket disconnected', event)
socket.onerror = error => alert('Something was wrong. Try again later.')
socket.onmessage = event => playResponse(event.data)
const audioContext = new AudioContext()
await audioContext.audioWorklet.addModule('volume-meter-processor.js')
const node = new AudioWorkletNode(audioContext, 'volume-meter-processor')
navigator.mediaDevices.getUserMedia({audio: true}).then(stream => {
const source = audioContext.createMediaStreamSource(stream)
source.connect(node)
node.connect(audioContext.destination) // для отладки
})
node.port.onmessage = event => {
const audioData = event.data // предположим, что это уже Blob или MediaStream
const reader = new FileReader()
reader.readAsDataURL(audioData)
reader.onloadend = () => {
const base64Audio = reader.result.split(',')[1]
socket.send(JSON.stringify({audio: base64Audio}))
}
}
}
async function startRecording() {
try {
if (!window.audioContext) {
window.audioContext = new AudioContext()
await window.audioContext.audioWorklet.addModule('volume-meter-processor.js')
window.audioNode = new AudioWorkletNode(window.audioContext, 'volume-meter-processor')
window.audioNode.port.onmessage = event => {
const audioData = event.data
const blob = new Blob(audioData, { type: 'audio/webm' })
const reader = new FileReader()
reader.readAsDataURL(blob)
reader.onloadend = () => {
const base64Audio = reader.result.split(',')[1]
socket.send(JSON.stringify({ audio: base64Audio }))
}
}
}
const stream = await navigator.mediaDevices.getUserMedia({ audio: true })
const source = window.audioContext.createMediaStreamSource(stream)
source.connect(window.audioNode)
window.audioNode.connect(window.audioContext.destination)
console.log("Recording started")
} catch (error) {
console.error("Error accessing microphone:", error)
alert("Cannot access microphone. Please check permissions.")
}
}