¿Cómo convertir un archivo blob a un formato específico?

Aug 19 2020

Estoy construyendo una aplicación web con ReactJS y el marco Django.

En esta aplicación web, hay una parte en la que grabo un archivo de audio y lo envío al backend para guardarlo.

Estos son los datos de blob de ReactJS que envío:

Blob {
size: 29535, 
type: "audio/wav; codecs=0"
}

Y este es el código que estoy usando en el backend:

@api_view(['POST'])
@csrf_exempt
def AudioModel(request):
    try:
        audio = request.FILES.get('audio')
    except KeyError:
        return Response({'audio': ['no audio ?']}, status=HTTP_400_BAD_REQUEST)

    destination = open('audio_name.wav', 'wb')
    for chunk in audio.chunks():
        destination.write(chunk)
    destination.close()  # closing the file

    return Response("Done!", status=HTTP_200_OK) 

Cuando reproduzco el archivo que guardé, reproduce un sonido, pero se bloquea cuando llega al final.

Este problema me hace buscar información sobre el archivo que guardé (extensión, ...).

Por esta razón utilicé la fleepbiblioteca:

import fleep

with open("audio_name.wav", "rb") as file:
    info = fleep.get(file.read(128))

print(info.type)
print(info.extension)
print(info.mime)

SALIDA:

['video']
['webm']
['video/webm']

¡Pero obteniendo video en la salida!

  • ¿Estoy haciendo algo mal?
  • ¿Cómo puedo solucionar este problema?
  • ¿Hay algo que pueda usar para guardar mi archivo en el formato deseado?

Se agradece cualquier ayuda.

EDITAR:

Salida de los primeros 128 bytes del archivo guardado:

b'\x1aE\xdf\xa3\x9fB\x86\x81\x01B\xf7\x81\x01B\xf2\x81\x04B\xf3\x81\x08B\x82\x84webmB\x87\x81\x04B\x85\x81\x02\x18S\x80g\x01\xff\xff\xff\xff\xff\xff\xff\x15I\xa9f\x99*\xd7\xb1\x83\x0fB@M\x80\x86ChromeWA\x86Chrome\x16T\xaek\xbf\xae\xbd\xd7\x81\x01s\xc5\x87\xbd\x8d\xc0\xd5\xc6\xaf\xd0\x83\x81\x02\x86\x86A_OPUSc\xa2\x93OpusHead\x01\x01\x00\x00\x80\xbb\x00\x00'

Respuestas

Benny Aug 28 2020 at 16:19

Utilice SciPy para leer y escribir datos en una variedad de formatos de archivo.

Ejemplos de uso:

  • Escribir un archivo wav en Python con wavfile.write desde SciPy
  • scipy.io.wavfile.write