2013-11-01 25 views
2

我嘗試這樣做是爲了增加噪聲:我怎樣才能提高一個聲音從unhearable後(0分貝)音量大聲(60分貝)

public void maakgeluid() { 
    WaveOut waveOut = new WaveOut(); 

    SineWaveOscillator osc = new SineWaveOscillator(44100); 

    for (short amplitude = 1; amplitude <500; amplitude+=1) { 
     Console.WriteLine("amplitude:" + amplitude); 
     for (int i = 1; i < 10; i++) { 
      Console.WriteLine(i); 
      osc.Frequency = 500; 
      osc.Amplitude = amplitude; 
      try { 
       waveOut.Init(osc); 
      } catch (Exception) { Console.WriteLine("error"); } 

      waveOut.Play(); 
     } 
    } 
} 

目的是生成一種聲音,就像當你去聽耳專科醫生並進行聽力測試。所以它應該默默地開始,然後慢慢地裝上裝載機。

但我有不同的問題:

  • 我聽到聲音立即
  • 聲音增加快
  • 我用的是循環與我櫃檯,延長聲音的持續時間,但我不認爲這是正確的做法。
  • 循環增加聲音水平停止快速但我不明白爲什麼?

基於以下代碼 msdn.microsoft.com/en-us/magazine/ee309883.asp

+0

嘗試在你的'waveOut.Play()'之後放置'Thread.Sleep(N)',其中'N'是等待的毫秒數。 – CodeCaster

+0

@herman:請你提供一個有效的鏈接,鏈接被打破。 –

+0

我更換了鏈接。 – herman

回答

2

的BEL規模THx的

是對數,所以你需要做的數學運用到分貝,樣本比例因子之間的轉換。

在數字(浮點)音頻中,滿信號(即從+1到-1,峯到谷的波形)被認爲是0dB。

因此,你可能會想從-60dB變爲0dB。

轉換如下(假設無符號簽署音頻,與8位音頻)

double sampleValue = 1.0d; 
//every -3db represents an approximate halving of linear signal level 
double decibelValue = -3.0d; 
double linearScalingRatio = Math.Pow(10d, decibelValue/10d); 
var newSampleValue = sampleValue * linearScalingRatio; 

所以,現在newSampleValue是0.501187233627272

1

您當前的代碼保持再造waveout的設備是不一個好主意。打開聲卡一次,然後向它輸入一個信號,隨着時間的推移音量逐漸增大。你可以做到這一點的方法之一是使用SignalGenerator類,使正弦波,然後傳遞通過FadeInSampleProvider在逐漸淡化它:

var sg = new SignalGenerator(44100,1); 
sg.Frequency = 500; 
sg.Type = SignalGeneratorType.Sin; 
var fadeIn = new FadeInOutSampleProvider(sg, true); 
fadeIn.BeginFadeIn(20000); // fade in over 20 seconds 
waveOut.Init(fadein); 
waveOut.Play(); 

至於花錢正確地指出器,0dB是最大的,所以這是在淡入時間內從負無窮分貝上升至0dB。如果你想讓它從-60dB開始,或者爲了使乘法器的斜升不是線性的,那麼你需要使你自己的自定義ISampleProvider類似於FadeInOutSampleProvider並使用它。

+0

Mark,是NAudio的SignalGenerator類的一部分?我發現這些版本[鏈接](http://scharfrichter.googlecode.com/svn/trunk/NAudio/Wave/SampleProviders/SignalGenerator.cs)這是正確的嗎? – herman

+0

waveOut.init不會將fadIn作爲參數,它需要一個IWaveProvider,我該如何解決這個問題? – herman

+0

使用NAudio 1.7,請訪問naudio.codeplex.com –

相關問題