New Jan 4, 2025

Convert a uploaded audio chunk to be playable in server

Libraries, Frameworks, etc. All from Newest questions tagged vue.js - Stack Overflow View Convert a uploaded audio chunk to be playable in server on stackoverflow.com

I have a hour long audio streamed to backend with websockets. I need to start transcribing the audio and give back response in near realtime. atleast prevent users from waiting an hr long before checking transcriptions.

I have broken down the problem to below steps

The problem i face is when i try to play the second chunk of audio i get Invalid data found when processing input error. It is unplayable and dosent seem to have any audio information associated with it.

Is it possible to add audio information into the second chunk, since first chunk is plays fine.

Frontend

async startRecording() {
      this.isRecording = true;

// Start WebSocket connection this.websocket = new WebSocket("URL"); this.websocket.onopen = () => console.log("WebSocket connected"); this.websocket.onclose = () => console.log("WebSocket disconnected"); this.websocket.onstop = () => console.log("WebSocket onstop"); this.websocket.onerror = (error) => { console.error("WebSocket error:", error); this.stopRecording (); }; this.websocket.onmessage = (event) => { console.log(event.data) };

const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); this.mediaStream = stream this.mediaRecorder = new MediaRecorder(stream, { mimeType: "audio/webm" });

// Send audio chunks in real-time this.mediaRecorder.ondataavailable = (event) => { if (this.websocket && this.websocket.readyState === WebSocket.OPEN) { this.websocket.send(event.data); } };

this.mediaRecorder.start(30000); // Capture chunks every 30000ms },

Backend

async def receive(self, text_data=None, bytes_data=None):
        if bytes_data:

audio_filename = f"audio_{datetime.now().strftime('%Y%m%d%H%M%S')}.webm" self.audio_file_path = os.path.join("audio/", audio_filename) os.makedirs(os.path.dirname(self.audio_file_path), exist_ok=True) self.audio_file = open(self.audio_file_path, "wb")

self.audio_file.write(bytes_data) self.audio_file.close()

My assumption is, the second chunk would be working if we can add audio data into the chunk. ffmpeg, transcribe, pydub all fails to read the file with same error Invalid data found when processing input

pydub conversion

audio = AudioSegment.from_file(self.audio_file_path)
audio.export(mp3_file_path, format="mp3")
Scroll to top