0
A
回答
0
我認爲你需要FFT。
以下方法可用於FFT。 (平時)
/* Calculate normal power
NumSamples : Number of sample
pReal : Real coefficient buffer
pImag : Imaginary coefficient buffer
pAmpl : Working buffer to hold amplitude Xps(m) = | X(m)^2 | = Xreal(m)^2 + Ximag(m)^2</param>
*/
public static void NormalPower(UInt32 NumSamples, Double[] pReal, Double[] pImag, Double[] pAmpl)
{
// Calculate amplitude values in the buffer provided
for (UInt32 i = 0; i < NumSamples; i++)
{
pAmpl[i] = pReal[i]*pReal[i] + pImag[i]*pImag[i];
}
}
/* Find Peak frequency in Hz
NumSamples : Number of samples
pAmpl : Current amplitude
samplingRate : Sampling rate in samples/second (Hz)
index : Frequency index
<returns>Peak frequency in Hz</returns>
* */
public static Double PeakFrequency(UInt32 NumSamples, Double[] pAmpl, Double samplingRate, ref UInt32 index)
{
UInt32 N = NumSamples >> 1; // number of positive frequencies. (numSamples/2)
double maxAmpl = -1.0;
double peakFreq = -1.0;
index = 0;
for (UInt32 i = 0; i < N; i++)
{
if (pAmpl[i] > maxAmpl)
{
maxAmpl = (double)pAmpl[i];
index = i;
peakFreq = (double)(i);
}
}
return samplingRate * peakFreq/(double)(NumSamples);
}
而且你可以使用它們像這樣:
FFT.Compute(_numSamples, RealIn, null, RealOut, ImagOut, false);
FFT.NormalPower(_numSamples/2, RealOut, ImagOut, AmplOut);
double maxAmpl = (32767.0 * 32767.0); //Max power used for 16 bit audio
int centerFreq = (Rate/2);
for (int i = 0; i < NUM_FREQUENCY; ++i)
{
if (METER_FREQUENCY[i] > centerFreq)
_meterData[i] = 0;
else
{
var indice = (int)(METER_FREQUENCY[i] * _numSamples/Rate);
var metervalue = (int)(20.0 * Math.Log10(AmplOut[indice]/maxAmpl));
_meterData[i] = metervalue;
}
}
注意:要獲得分貝的聲音強度用以下公式:
水平= 20日誌(P2/P1)
P1 =最大功率
P2 =電流功率
相關問題
- 1. 檢測原始音頻(PCM)中的特定頻率/音調
- 2. 在.NET上播放PCM音頻流CF
- 3. 轉換音頻流頻率
- 4. PCM音頻流的SDP文件?
- 5. 將音頻流轉換爲PCM
- 6. C/C++ PCM開源音頻分析器
- 7. 無法找到音頻流
- 8. 用於錄製聲音和測量聲音頻率和功率的iPhone API(db)
- 9. 如何混合PCM音頻源(Java)?
- 10. 在Silverlight中錄製PCM音頻4
- 11. linux中的音頻流採樣率
- 12. 合併pcm音頻文件
- 13. 如何用PCM音頻中的IMediaSample檢測靜音
- 14. C#音頻和視頻流
- 15. 如何在iphone中錄製語音時查找頻率?
- 16. 節點 - 找不到音頻流
- 17. C#壓縮WAV PCM到Microsoft GSM 6.10音頻編解碼器
- 18. 如何找到吉他絃音的基本頻率?
- 19. 如何使用Skype4Com找到麥克風音頻的採樣率?
- 20. 如何找到音頻暫停或完成在jquery,Html5音頻
- 21. 如何使用PCM音頻轉換爲TRUESPEECH n音訊
- 22. 如何在JsSIP中處理音頻流?
- 23. 如何在iPhone中查找流媒體音頻?
- 24. 用於流式傳輸的PCM/RAW音頻容器
- 25. 在音頻信號中尋找峯值頻率?
- 26. 從PCM數據獲取頻率信息
- 27. 如何在iOS上錄製PCM音頻文件?
- 28. 如何更改C#MediaElement的音頻頻率
- 29. 如何在C#中實現鋼琴鍵頻率功能?
- 30. 如何在C#中創建音頻流? (general)
[C#How to Audio Decibel values with time span。](http://stackoverflow.com/questions/6196939/c-how-to-get-audio-decibel-values-with-time- span) – jgauffin 2011-06-12 07:54:22
我看到了這個,但我想知道最簡單的方法,不一定NAudio。任何想法都會幫助我。 – Maya 2011-06-12 08:04:51
naudio可能是最簡單的方法 – jgauffin 2011-06-12 08:22:43