Bagaimana cara mengonversi file blob ke format tertentu?

Aug 19 2020

Saya membangun aplikasi web dengan kerangka kerja ReactJS dan Django.

Dalam aplikasi web ini, ada bagian dimana saya merekam file audio dan mengirimkannya ke backend untuk menyimpannya.

Ini adalah data blob dari ReactJS yang saya kirim:

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

Dan ini adalah kode yang saya gunakan di 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) 

Ketika saya memutar file yang saya simpan, itu memainkan beberapa suara tetapi macet ketika mencapai akhir.

Masalah ini membuat saya mencari beberapa informasi tentang file yang saya simpan (ekstensi, ...).

Untuk alasan ini saya menggunakan fleepperpustakaan:

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)

KELUARAN:

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

Tapi mendapatkan video dalam keluaran!

  • Apakah saya melakukan sesuatu yang salah?
  • Bagaimana cara memperbaiki masalah ini?
  • Apakah ada yang dapat saya gunakan untuk menyimpan file saya dalam format yang diinginkan?

Setiap bantuan dihargai.

EDIT:

Output 128 byte pertama dari file yang disimpan:

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'

Jawaban

Benny Aug 28 2020 at 16:19

Gunakan SciPy untuk membaca data dari dan menulis data ke berbagai format file.

Contoh penggunaan:

  • Menulis file wav dengan Python dengan wavfile.write dari SciPy
  • scipy.io.wavfile.write