问题描述
我使用 Naudio 来同时录制和播放来自麦克风的输入。
当我处理输入信号,在ISTFT之后实现STFT并播放它,在'Buffer full'
中收到bufferedWaveProvider.AddSamples(e.Buffer,e.BytesRecorded)
时发生问题。
public partial class Form1 : Form
{
private WaveIn recorder;
private BufferedWaveProvider bufferedWaveProvider;
private SavingWaveProvider savingWaveProvider;
private WaveOutEvent player;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender,EventArgs e)
{
numericupdown1.Value = 1;
numericupdown1.DecimalPlaces = 1;
numericupdown1.Increment = 0.1M;
numericupdown1.Maximum = 1;
numericupdown1.Minimum = 0;
}
private void button1_Click(object sender,EventArgs e)
{
recorder = new WaveIn();
recorder.BufferMilliseconds = 50;
recorder.WaveFormat = new WaveFormat(44100,32,1);
recorder.DataAvailable += RecorderOnDataAvailable;
bufferedWaveProvider = new BufferedWaveProvider(recorder.WaveFormat);
savingWaveProvider = new SavingWaveProvider(bufferedWaveProvider,"temp.wav");
// set up playback
player = new WaveOutEvent();
var watch = new System.Diagnostics.Stopwatch(); //=============================do thoi gian=================
watch.Start();
stftxx nghexx = new stftxx();
IWaveProvider nghe = nghexx.trienkhaistft(bufferedWaveProvider);
watch.Stop();
long time2 = watch.ElapsedMilliseconds;//==============do thoi gian============
textBox1.Text = time2.ToString();
player.Init(nghe);
//Console.Write(player);
// begin playback & record
player.Volume = 1;
player.Play();
recorder.StartRecording();
}
private void RecorderOnDataAvailable(object sender,WaveInEventArgs e)
{
bufferedWaveProvider.AddSamples(e.Buffer,e.BytesRecorded);
}
private float AverageAllValuesInlistofTuplesOfArraysOfFloats(List<(float[],float[])> list)
{
// Create a new list which will contain the "flattened" list of tuples.
var allValuesInAllLists = new List<float>();
// Iterate over all the tuples of arrays
foreach (var tupleOfArrays in list)
{
// in each tuple of arrays,add the items from both
// arrays the the flattened list which contains all
// the values.
allValuesInAllLists.AddRange(tupleOfArrays.Item1);
allValuesInAllLists.AddRange(tupleOfArrays.Item2);
}
// Now we've got one big list of values. Average it.
return allValuesInAllLists.Average();
}
private void button3_Click(object sender,EventArgs e)
{
recorder.StopRecording();
player.Stop();
savingWaveProvider.dispose();
}
private void numericupdown1_ValueChanged(object sender,EventArgs e)
{
player.Volume = (float)numericupdown1.Value;
}
private void textBox1_TextChanged(object sender,EventArgs e)
{
}
}
我认为与其像这样处理:
我可以这样处理吗?:
我不知道这种处理方式叫什么。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)