gpt4 book ai didi

c# - 使用naudio获取1秒音频文件的分贝

转载 作者:行者123 更新时间:2023-11-30 15:25:46 24 4
gpt4 key购买 nike

我想使用 naudio 计算任何 .wav 文件的 1 秒分贝。这是我的代码:

WaveFileReader reader = new WaveFileReader(@"C:\Users\Admin\Desktop\result.wav");
int bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000;
//byte[] buffer = new byte[reader.Length];
//int read = reader.Read(buffer, 0, (int)reader.Length);
TimeSpan time = new TimeSpan(0, 0, 1);

int bytesPerSecond = (int)time.TotalMilliseconds * bytesPerMillisecond;
byte[] oneSecondBuffer = new byte[bytesPerSecond];
int read = reader.Read(oneSecondBuffer, 0, bytesPerSecond);

short sample16Bit = BitConverter.ToInt16(oneSecondBuffer, 1);
double volume = Math.Abs(sample16Bit / 32768.0);
double decibels = 20 * Math.Log10(volume);

这一行:

short sample16Bit = BitConverter.ToInt16(oneSecondBuffer, 1);

返回 0。我做错了什么?

最佳答案

我已经用另一种方式解决了这个任务。这是一段代码,可能对其他人有帮助:

var silenceDict = new Dictionary<int, bool>();
using (NAudio.Wave.AudioFileReader wave = new NAudio.Wave.AudioFileReader(filePath))
{
var samplesPerSecond = wave.WaveFormat.SampleRate * wave.WaveFormat.Channels;
var readBuffer = new float[samplesPerSecond];
int samplesRead;
int i = 1;
do
{
samplesRead = wave.Read(readBuffer, 0, samplesPerSecond);
if (samplesRead == 0) break;
var max = readBuffer.Take(samplesRead).Max();

if ((int)(max * 100) != 0)
silenceDict.Add(i, false);
else
silenceDict.Add(i, true);

i++;
} while (samplesRead > 0);
}

关于c# - 使用naudio获取1秒音频文件的分贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30548899/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com