में चलाएं मेरे उद्देश्य के लिए, मैं कच्चे प्रारूप (केवल नमूने), 8kHz, 16 बिट (थोड़ा एंडियन) और 1 चैनल में ध्वनि रिकॉर्ड करना चाहता हूं। फिर, मैं उन नमूनों को खिड़कियों में स्थानांतरित करना चाहता हूं और इसे QAudioOutput के साथ खेलना चाहता हूं। तो मेरे पास दो अलग-अलग प्रोग्राम हैं: QAudioInput के साथ आवाज रिकॉर्ड करने के लिए, और दूसरा एक फ़ाइल देता है जिसमें कुछ नमूने होते हैं, फिर मैं इसे QAudioOutput के साथ चलाता हूं। QAudioInput और QAudioOutput बनाने के लिए नीचे मेरा स्रोत कोड है।QAudioInput के साथ लिनक्स में रिकॉर्ड करें और इसे विंडोज
//Initialize audio
void AudioBuffer::initializeAudio()
{
m_format.setFrequency(8000); //set frequency to 8000
m_format.setChannels(1); //set channels to mono
m_format.setSampleSize(16); //set sample sze to 16 bit
m_format.setSampleType(QAudioFormat::UnSignedInt); //Sample type as usigned integer sample
m_format.setByteOrder(QAudioFormat::LittleEndian); //Byte order
m_format.setCodec("audio/pcm"); //set codec as simple audio/pcm
QAudioDeviceInfo infoIn(QAudioDeviceInfo::defaultInputDevice());
if (!infoIn.isFormatSupported(m_format))
{
//Default format not supported - trying to use nearest
m_format = infoIn.nearestFormat(m_format);
}
QAudioDeviceInfo infoOut(QAudioDeviceInfo::defaultOutputDevice());
if (!infoOut.isFormatSupported(m_format))
{
//Default format not supported - trying to use nearest
m_format = infoOut.nearestFormat(m_format);
}
createAudioInput();
createAudioOutput();
}
void AudioBuffer::createAudioOutput()
{
m_audioOutput = new QAudioOutput(m_Outputdevice, m_format, this);
}
void AudioBuffer::createAudioInput()
{
if (m_input != 0) {
disconnect(m_input, 0, this, 0);
m_input = 0;
}
m_audioInput = new QAudioInput(m_Inputdevice, m_format, this);
}
ये प्रोग्राम अलग-अलग विंडोज़ और लिनक्स में अच्छी तरह से काम करते हैं। हालांकि, जब मैं लिनक्स में एक आवाज रिकॉर्ड करता हूं और इसे विंडोज़ में चलाता हूं तो इसमें बहुत शोर होता है।
मुझे लगता है कि खिड़कियों और लिनक्स में कब्जे वाले नमूने अलग हैं। पहली तस्वीर लिनक्स में कैप्चर की गई ध्वनि से जुड़ी है और विंडोज़ के लिए दूसरा है। लिनक्स में
कब्जा कर लिया ध्वनि: विंडोज में
एक थोड़ा और अधिक विवरण पर कि विंडोज और लिनक्स में चुप्पी अलग है। मैंने बाइट्स को स्वैप करने सहित कई चीजों की कोशिश की, भले ही मैंने दोनों प्लेटफार्मों में थोड़ा एंडियन सेट किया हो।
अब, मुझे अल्सा कॉन्फ़िगरेशन के बारे में संदेह है। क्या कोई चूक गई सेटिंग्स हैं?
क्या आपको लगता है कि अगर मैं QAudioInput का उपयोग किए बिना सीधे आवाज रिकॉर्ड करता हूं तो बेहतर होगा?
क्या आप दोनों मामलों में 'isFormatSupported' सच देख सकते हैं? – UmNyobe
दोनों इनपुट और आउट सत्य हैं! – Ari
'निकटतमफॉर्मैट' कोड की गणना करने वाली दोनों पंक्तियों को निकालें और इसके बजाय 'abort() 'डालें, फिर लिनक्स पर एक नई फ़ाइल रिकॉर्ड करें, फ़ाइल को विंडोज़ पर ले जाएं, और फिर से प्रयास करें। सुनिश्चित करें कि आप लागू परिवर्तन के साथ दोनों पर ताजा निर्माण का उपयोग करें, और आप लिनक्स मशीन से स्थानांतरित नई कैप्चर की गई फ़ाइल चला रहे हैं। –