लिनक्स पर माइक्रोफ़ोन नमूना दर को 16000 में कैसे बदलें?
मैं वर्तमान में एक ऐसी परियोजना पर काम कर रहा हूं जिसके लिए मैं माइक्रोफोन ऑडियो का उपयोग करते समय एक रास्पबेरी पाई पर डीपस्पी का उपयोग करने की कोशिश कर रहा हूं, लेकिन मुझे एक अमान्य नमूना दर त्रुटि मिलती रहती है। PyAudio का उपयोग करके मैं एक स्ट्रीम बनाता हूं जो मॉडल दर का उपयोग करता है जो मॉडल चाहता है, जो 16000 है, लेकिन मैं जिस माइक्रोफोन का उपयोग कर रहा हूं, उसका नमूना दर 44100 है। जब पायथन स्क्रिप्ट चल रही है तो कोई दर रूपांतरण नहीं होता है और माइक्रोफोन नमूना दर और अपेक्षित है मॉडल का नमूना दर एक अमान्य नमूना दर त्रुटि उत्पन्न करता है।
माइक्रोफोन की जानकारी pyaudio द्वारा इस तरह सूचीबद्ध की गई है:
{'index': 1, 'structVersion': 2, 'name': 'Logitech USB Microphone: Audio (hw:1,0)', 'hostApi': 0, 'maxInputChannels': 1, 'maxOutputChannels': 0, 'defaultLowInputLatency': 0.008684807256235827, 'defaultLowOutputLatency': -1.0, 'defaultHighInputLatency': 0.034829931972789115, 'defaultHighOutputLatency': -1.0, 'defaultSampleRate': 44100.0}
सबसे पहले मैंने कोशिश की थी कि pAAudio स्ट्रीम नमूना दर को 44100 पर सेट किया जाए और उस मॉडल को खिलाया जाए। लेकिन परीक्षण के बाद मुझे पता चला कि मॉडल तब अच्छी तरह से काम नहीं करता है जब उसे अपने अनुरोधित 16000 से अलग दर मिलती है।
मैं माइक्रोफोन बदलने की दर 16000 का तरीका खोजने की कोशिश कर रहा हूं, या कम से कम इसकी दर 16000 में परिवर्तित हो गई है जब इसका उपयोग अजगर लिपि में किया जाता है, लेकिन कोई फायदा नहीं हुआ।
मैंने जो नवीनतम चीज़ आज़माई है, वह .asoundrc फ़ाइल को बदलने के लिए दर बदलने के लिए खोज रही है, लेकिन मुझे नहीं पता कि क्या इस फ़ाइल के भीतर माइक्रोफ़ोन की दर को 16000 में बदलना संभव है। यह वर्तमान में कैसी दिखती है:
pcm.!default {
type asymd
playback.pcm
{
type plug
slave.pcm "dmix"
}
capture.pcm
{
type plug
slave.pcm "usb"
}
}
ctl.!default {
type hw
card 0
}
pcm.usb {
type hw
card 1
device 0
rate 16000
}
अजगर कोड मैंने खिड़कियों पर काम किया, जो मुझे लगता है कि क्योंकि विंडो इनपुट की दर को कोड में नमूना दर में परिवर्तित करता है। लेकिन लिनक्स ऐसा नहीं करता है।
tldr; माइक्रोफोन दर 44100 है, लेकिन प्रयोग करने योग्य होने के लिए इसे 16000 में बदलना होगा। आप लिनक्स पर यह कैसे करते हैं?
1 संपादित करें:
मैं इस तरह pyAudio स्ट्रीम बनाता हूं:
self.paStream = self.pa.open(rate = self.model.sampleRate(), channels = 1, format= pyaudio.paInt16, input=True, input_device_index = 1, frames_per_buffer= self.model.beamWidth())
यह मॉडल की दर और मॉडल के बीम एक्सपोजर, और माइक्रोफोन के चैनलों की संख्या और माइक्रोफोन के सूचकांक का उपयोग करता है।
मुझे अगला ऑडियो फ्रेम मिलता है और जिस मॉडल के साथ मैं यह करता हूं, उस धारा के साथ उपयोग करने के लिए इसे ठीक से प्रारूपित करना है
def __get_next_audio_frame__(self):
audio_frame = self.paStream.read(self.model.beamWidth(), exception_on_overflow= False)
audio_frame = struct.unpack_from("h" * self.model.beamWidth(), audio_frame)
return audio_frame
exception_on_overflow = False
44100 की इनपुट दर के साथ मॉडल का परीक्षण करने के लिए इस्तेमाल किया गया था, इस सेट के बिना उसी त्रुटि को गलत करने के लिए जैसा कि मैं वर्तमान में सौदा करूंगा। model.beamWidth
एक वैरिएबल है जो मॉडल की अपेक्षा चांस की मात्रा के लिए मूल्य रखता है। मैंने तब मॉडल की धारा को खिलाने से पहले उस राशि को पढ़ा और उन्हें पुन: स्वरूपित किया। जो इस तरह होता है:
modelStream.feedAudioContent(self.__get_next_audio_frame__())
जवाब
इसलिए कुछ और परीक्षण के बाद मैं पल्स के लिए कॉन्फिग फाइल को एडिट करके घाव करता हूं। इस फ़ाइल में आप ऐसी प्रविष्टियाँ दर्ज कर सकते हैं जो आपको डिफ़ॉल्ट और / या वैकल्पिक नमूने दर को संपादित करने की अनुमति देती हैं। 4800 से 16000 तक वैकल्पिक नमूना दर का संपादन मेरी समस्या को हल करने में सक्षम था।
फ़ाइल यहाँ स्थित है /etc/pulse/daemon.conf
:। हम रास्पबेरियन का उपयोग करके इस फ़ाइल को खोल और संपादित कर सकते हैं sudo vi daemon.conf
। फिर हमें उस लाइन को अनइंस्टॉल करने की जरूरत ; alternate-sample-rate = 48000
है, जिसे हटाकर ;
और के मान को बदलकर किया 48000
जाता है 16000
। फ़ाइल सहेजें और विम से बाहर निकलें। फिर पल्सेडियो का उपयोग करके pulseaudio -k
सुनिश्चित करें कि यह बदली हुई फ़ाइल को चलाता है।
आप vim के साथ अपरिचित हैं और लिनक्स तो यहाँ नमूना दर बदलने की प्रक्रिया के माध्यम से एक अधिक विस्तृत गाइड है।