I am building a web application with ReactJS and Django framework.
In this web application, there is a part where I record an audio file and send it to the backend to save it.
This is the blob data from ReactJS that I send:
Blob {
size: 29535,
type: "audio/wav; codecs=0"
}
And this is the code I am using in the 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)
When I play the file I saved, it plays some sound but it crashes when it achieves the end.
This problem makes me look for some information about the file I saved (extension,...).
For this reason I used fleep
library:
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)
OUTPUT:
['video']
['webm']
['video/webm']
But getting video in output!
- Am I doing something wrong?
- How can I fix this issue?
- Is there anything I can use to save my file in the desired format?
Any help is appreciated.
EDIT:
Output of first 128 bytes of the saved file:
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'
react-voice-recorder
for this. – Zebecb'RIFF:\x10x00WAVEfmt \x10\x00\x00\x00\x01\x00\x02\x00@\x1f\x00\x00\x00}\x00\x00\x04\x00x10x00data4_\x1 ...
), fleep described your file correctly, and my guess is that python wrote your file correctly too(since you wrote the binary directly), so my guess is that you got the data in the wrong format. to double check print out the first chunk before you write it – Consensusreact-voice-recorder
a little, in their save method in their code comments they say that it first converts chunks into blob, then makes a video url from that blob, then// append videoURL to list of saved videos for rendering
– Consensus