0

my question is similar to Get .wav file length or duration.

  1. use MediaRecorder in js frontend to record audio
  2. send blob to backend

I want to apply a length limit of 30 seconds, but all I have is a blob, should be stored in django BinaryField.


the frontend blob format is in type: "audio/mp4"

since in backend I don't want to create a file in each request, I only want to access the length of the audio, I am grateful for your suggestions.

Weilory
  • 2,621
  • 19
  • 35

1 Answers1

1

You want to use the io package to give your in-memory data a file-like interface for other libraries (like wave).

An example below:

from io import BytesIO

with open("sample.wav", "rb") as f:
  blob = f.read()

data = BytesIO(blob)

data can then be treated like any wav file:

import wave
import contextlib

with contextlib.closing(wave.open(data,'r')) as f:
    frames = f.getnframes()
    rate = f.getframerate()
    duration = frames / float(rate)
    print(duration)
Seon
  • 3,332
  • 8
  • 27
  • cheers, the IO advice is very helpful, but it shows `wave.Error: file does not start with RIFF id` – Weilory Sep 09 '22 at 04:04