gpt4 book ai didi

.net - HTML5音频记录器流并上传到MVC服务器-为什么会有噪音?

转载 作者:行者123 更新时间:2023-12-03 01:43:45 31 4
gpt4 key购买 nike

我正在尝试使用getUserMedia和.NET MVC制作Web录音机。

我可以记录下来并将数据块发送到服务器。问题是我无法播放结果。下面的代码与我正确播放声音的距离越来越近,我可以在录音中录音并听到自己的声音,但是其中有很多白噪声。我可能在弄乱数据的编码或解析。以下是一些代码:

chan = e.inputBuffer.getChannelData(channel);
buffer.push(chan);
var conv_buffer = convertFloat32ToInt16(chan);
uploadAudio(conv_buffer);

function convertFloat32ToInt16(buffer) {
l = buffer.length;
buf = new Int16Array(l);
while (l--) {
buf[l] = Math.min(1, buffer[l]) * 0x7FFF;
}
return buf;
}

在服务器端,我将大块及其顺序存储到 session 中(不知道我是否应该在这里使用其他任何东西。 session 对我来说听起来不正确):
 if (Session["wave"] == null)
Session["wave"] = new Dictionary<string, string>();
if (Request.Files.Count == 0)
((Dictionary<string, string>)Session["wave"]).Add(Request.Form[0], Request.Form[1]);

录制结束后,我只是解析流到float数组的字符串,使用NAudio编码并保存到磁盘:
 List<float> list = new List<float>();
foreach (var item in ((Dictionary<string, string>)Session["wave"]).OrderBy(c => c.Key))
{
list.AddRange(StringToFloatArray(item.Value).ToList());
}
Random rand = new Random();

WaveFormat waveFormat = new WaveFormat(48000, 16, 1);
string fileName = "teste" + rand.Next(0, 999999).ToString() + ".wav";

WaveFileWriter writer = new WaveFileWriter("c:\\" + fileName, waveFormat);

writer.WriteSamples(list.ToArray(), 0, list.Count());

writer.Close();

解析:
        private float[] StringToFloatArray(string input)
{
var strs = input.Split(',');
float[] arr = new float[strs.Length];
for (int i = 0; i < (strs.Length - 1)/2; i++)
{
arr[i] = float.Parse(strs[i]);
}
return arr;
}

如果有人可以帮助我或指向任何方向,那会让我非常高兴。我已经尝试过以多种方式改变结果,但没有成功...

最佳答案

后来很多次我意识到我需要做的事。问题是我需要从int16转换回float以将其传递给NAudio。

buffer[k] = float.Parse(strs[k].Replace(".", ",")) / 32767.5f;

关于.net - HTML5音频记录器流并上传到MVC服务器-为什么会有噪音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45123790/

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