2015-09-01 11 views
5

मैं माइक्रोफोन इनपुट कैप्चर करने के लिए nAudio लाइब्रेरी का उपयोग कर रहा हूं। लेकिन मैंने एक समस्या में भाग लिया है। मैं nAudio नमूना ऐप से कोड का उपयोग कर रहा हूं (जिसे मैंने थोड़ा संशोधित किया है)। कोड माइक इनपुट के आधार पर एक डब्ल्यूएवी फ़ाइल उत्पन्न करता है और इसे एक लहर के रूप में प्रस्तुत करता है। इसके लिए कोड यहाँ है।सी # - माइक्रोफोन शोर पहचान

private void RenderFile() 
{ 
     SampleAggregator.RaiseRestart(); 
     using (WaveFileReader reader = new WaveFileReader(this.voiceRecorderState.ActiveFile)) 
     { 
      this.samplesPerSecond = reader.WaveFormat.SampleRate; 
      SampleAggregator.NotificationCount = reader.WaveFormat.SampleRate/10; 
      //Sample rate is 44100 

      byte[] buffer = new byte[1024]; 
      WaveBuffer waveBuffer = new WaveBuffer(buffer); 
      waveBuffer.ByteBufferCount = buffer.Length; 
      int bytesRead; 
      do 
      { 
       bytesRead = reader.Read(waveBuffer, 0, buffer.Length); 
       int samples = bytesRead/2; 
       double sum = 0; 
       for (int sample = 0; sample < samples; sample++) 
       { 
        if (bytesRead > 0) 
        { 
         sampleAggregator.Add(waveBuffer.ShortBuffer[sample]/32768f); 
         double sample1 = waveBuffer.ShortBuffer[sample]/32768.0; 
         sum += (sample1 * sample1); 

        } 
       } 
       double rms = Math.Sqrt(sum/(SampleAggregator.NotificationCount)); 
       var decibel = 20 * Math.Log10(rms); 



       System.Diagnostics.Debug.WriteLine(decibel.ToString() + " in dB"); 
      } while (bytesRead > 0); 
      int totalSamples = (int)reader.Length/2; 
      TotalWaveFormSamples = totalSamples/sampleAggregator.NotificationCount; 
      SelectAll(); 
     } 
     audioPlayer.LoadFile(this.voiceRecorderState.ActiveFile); 
} 

नीचे कोई आवाज लेकिन केवल माइक शोर के साथ एक 2second WAV फ़ाइल का एक परिणाम से थोड़ा हिस्सा है।

डीबी में -५४.०८९१०२४५३८९३
डीबी में -51.9171950072361
डीबी में -53,3478098666891
-53,1845794096928 डीबी
में -53.8851764055102 डीबी में
डीबी में -57,5541358628342
-54,0121140454216 डीबी
में -55.5204248291508 डीबी में
-54.9डीबी
-53.6831017096011 डीबी
-52.8728852678309 डीबीमें -55.7021600863786 डीबी

जैसा कि हम देख सकते हैं, डीबी स्तर चारों ओर घूमता है जब कोई इनपुट ध्वनि नहीं होता है, केवल चुप्पी होती है। अगर मैं सामान्य स्वर में माइक में "हैलो" कहता हूं, तो डीबी मान मिल जाएगा -20 या तो। मैंने कहीं पढ़ा है कि औसत मानव बात लगभग 20 डीबी है और -3 डीबी से -6 डीबी माइक्रो के लिए शून्य मूल्य सीमा है।

प्रश्न: क्या मैं डीबी मूल्य की सही गणना कर रहा हूं? (मैंने किसी और द्वारा प्रस्तावित एक सूत्र का उपयोग किया) ... क्यों डीबी हमेशा नकारात्मक में आ रहा है? क्या मुझे एक महत्वपूर्ण अवधारणा या तंत्र याद आ रही है?

मैंने कोडप्लेक्स पर nAudio दस्तावेज़ीकरण की खोज की और मुझे कोई जवाब नहीं मिला। मेरे अवलोकन में, प्रलेखन वहाँ तो बस क्यू के एक झुंड & एक [कोई अपराध nAudio :)] कि

उत्तर

3

अगर मैं सही ढंग से समझ में आ सूत्र, वास्तविक मूल्य आप की गणना कर रहे हैं dBm है, और अधिक व्याख्यात्मक होने की जरूरत है बिल्कुल ठीक है क्योंकि डीबी एम्पलीफिकेशन को मापने के लिए सिर्फ एक इकाई है और सिग्नल शक्ति/आयाम को मापने के लिए इसका उपयोग नहीं किया जा सकता है (यानी आप कह सकते हैं कि मैंने सिग्नल को 3 डीबी तक बढ़ाया है, लेकिन यह नहीं कह सकता कि मेरी सिग्नल शक्ति 6 ​​डीबी है)।

नकारात्मक मूल्य सूत्र के लॉगरिदमिक रूपांतरण भाग (वाट/मिलीवाट्स को डीबी में कनवर्ट करने) के कारण हैं और चूंकि जिन संकेतों से आप काम कर रहे हैं वे बहुत ही कमजोर हैं।

तो निष्कर्ष में, ऐसा लगता है, जैसे आपने सबकुछ सही किया है। उम्मीद है कि यह मदद करता है।

संपादित करें: BTW, जैसा कि आप देख सकते हैं, वहाँ वास्तव में ~ चुप्पी और मानव भाषण

+2

https://en.wikipedia.org/wiki/DBFS –

+0

त्वरित प्रतिक्रिया के लिए धन्यवाद के बीच 23-25dbm अंतर है। @ फ़ेलिक्स एवी, मेरा असाइनमेंट कहता है कि यदि माइक्रो शोर <10 डीबी, एक "कम शोर" संदेश प्रदर्शित करता है, और यदि 10 डीबी से अधिक है, तो "उच्च शोर" संदेश प्रदर्शित करें। सिर्फ एक मूर्ख सवाल है, क्या असाइनमेंट रेंज मानव परिप्रेक्ष्य से दी गई है ??? .... क्योंकि मुझे अपने कार्यक्रम (माइक के परिप्रेक्ष्य) से नकारात्मक में सभी मूल्य मिल रहे हैं, मुझे दो डीबी श्रेणियों यानी मेरे कार्यक्रम से कैसे संबंधित होना चाहिए जनरेटिंग रेंज और असाइनमेंट रेंज? ... बहुत बहुत धन्यवाद – imran2155

+0

मुझे लगता है, अगर मौन स्तर एक्स है (मान लें कि माइक भी कनेक्ट नहीं है और सिग्नल -80 डीबी है, तो आपको शायद स्तर की जांच करनी चाहिए), तो कम शोर सब कुछ है < एक्स +10, उच्च शोर> एक्स +10। –

संबंधित मुद्दे