क्लाइंट साइड पर, मैं एक ब्लॉब ऑडियो (wav) फाइल भेज रहा हूं। सर्वर की तरफ, मैं ब्लॉब फ़ाइल को ऑडियो WAV फ़ाइल में कनवर्ट करने का प्रयास कर रहा हूं। मैंने निम्नलिखित किया:

blob = request.FILES['file']
name = "TEST.wav"
audio = wave.open(name, 'wb')
audio.setnchannels(1)
audio.writeframes(blob.read())

मैंने सोचा था कि बूँद को परिवर्तित करना एक बूँद छवि को एक jpeg फ़ाइल में बदलने के समान होगा, लेकिन उस धारणा में बहुत गलत था। वह काम नहीं किया; मुझे एक त्रुटि मिलती है - "त्रुटि: नमूना चौड़ाई निर्दिष्ट नहीं है।" मैंने तब setampwidth() का उपयोग किया और 1 और 4 के बीच एक मनमानी संख्या में फेंक दिया (wave.py स्रोत फ़ाइल को देखने के बाद ... मुझे नहीं पता कि बाइट 1 और 4 के बीच क्यों होना चाहिए)। उसके बाद एक और त्रुटि फेंकी जाती है - "त्रुटि: नमूना दर निर्दिष्ट नहीं है।" मैं नमूना दर कैसे निर्दिष्ट करूं?

सेटनचैनल्स (), सेट्सम्पविड्थ () विधियाँ क्या करती हैं? क्या ब्लॉब से WAV फ़ाइल उत्पन्न करने का कोई "आसान" तरीका है?

0
alienboy 17 फरवरी 2017, 05:57
क्या यह django से संबंधित है?
 – 
Alexander Tyapkov
17 फरवरी 2017, 06:29
हां। मैं ऑडियो ब्लॉब को WAV फ़ाइल में बदलने के लिए django 1.9 का उपयोग कर रहा हूं।
 – 
alienboy
17 फरवरी 2017, 08:47

2 जवाब

सबसे बढ़िया उत्तर

पहले, मैं इसे पहले कभी नहीं करता .. लेकिन, मेरे परीक्षण में नीचे दी गई यह स्क्रिप्ट मेरे लिए अच्छी तरह से काम करती है .. (लेकिन ऑडियो आउटपुट मूल फ़ाइल की तरह नहीं है).

>>> nchannels = 2
>>> sampwidth = 2
>>> framerate = 8000
>>> nframes = 100
>>> 
>>> import wave
>>> 
>>> name = 'output.wav'
>>> audio = wave.open(name, 'wb')
>>> audio.setnchannels(nchannels)
>>> audio.setsampwidth(sampwidth)
>>> audio.setframerate(framerate)
>>> audio.setnframes(nframes)
>>> 
>>> blob = open("original.wav").read() # such as `blob.read()`
>>> audio.writeframes(blob)
>>> 

मुझे यह तरीका https://stackoverflow.com/a/3637480/6396981 पर मिला।

अंत में, nchannels और sampwidth के मान को 1 से बदलकर। और मुझे एक ऑडियो मिला जो मूल फ़ाइल के साथ था।

nchannels = 1
sampwidth = 1
framerate = 8000
nframes = 1

Python2 के तहत परीक्षण किया गया, और Python3 पर UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 4: invalid start byte त्रुटि मिली।

1
Community 23 मई 2017, 15:09
मैंने कोशिश की है लेकिन वही मूल ऑडियो नहीं मिल सकता है: /
 – 
Brad Figueroa
9 नवम्बर 2020, 01:34

मुझे भी इसी समस्या का सामना करना पड़ा है। मेरी समस्या मूल की तुलना में कम पिच वाला आउटपुट था। मैं nframes, नमूना, और sampwidth प्राप्त करने के लिए getnframes() का उपयोग करके मूल ऑडियो को रिवर्स इंजीनियर करने का प्रबंधन करता हूं, क्रमशः getframerate(), और getsampwidth()। अंत में, मैं किसी भी तरह से सही टोन लाने के लिए नमूना आवृत्ति / फ्रेम दर को मोड़ने में कामयाब रहा।

मूल की तुलना में एक निश्चित ऑफ़सेट आवृत्ति पर सुधार सही हो गया। मेरा मूल नमूना के सोलहवें के ऑफसेट योग पर ठीक काम करता है।

अर्थात।

OffsetFrequency = OriginalFrequency/16

Frequency = OriginalFrequency + OffsetFrequency

0
Dereje T 23 पद 2020, 10:48