Что я пытаюсь сделать: получать данные с микрофона (IWaveIn) => понижать амплитуду звука (уменьшать громкость) (проблема) => воспроизводить его на динамики (IWaveProvider)
Проблема в том, что всякий раз, когда я пытаюсь умножить выборку на x! = 1.0f, я получаю очень шумные отзывы. Я думаю, что это может быть формат байтов, но я не знаю, как это проверить. Любая помощь / предложение будет оценено.
Количество = 17640; Смещение = 0;
public int Read(byte[] buffer, int offset, int count)
{
int read = bufferedWaveProvider.Read(buffer, offset, count);
/*
waveIn.WaveFormat.Channels; //2
waveIn.WaveFormat.BlockAlign;//4
waveIn.WaveFormat.BitsPerSample;//16
waveIn.WaveFormat.SampleRate;//44100
*/
for (int i = 0; i < read / 4; i++)
{
int firstByte = i * 4;
float sample = BitConverter.ToSingle(buffer, firstByte);
sample = sample * 1.0f;
byte[] bytes = BitConverter.GetBytes(sample);
buffer[firstByte + 0] = bytes[0];
buffer[firstByte + 1] = bytes[1];
buffer[firstByte + 2] = bytes[2];
buffer[firstByte + 3] = bytes[3];
}
return read;
}
private void OnDataAvailable(object sender, WaveInEventArgs e)
{
bufferedWaveProvider.AddSamples(e.Buffer, 0, e.BytesRecorded);
}