如何找出字节格式? NAudio

问题描述 投票:0回答:1

[我想做的:从麦克风(IWaveIn)接收数据=>降低声音的振幅(降低音量)(问题)=>播放到扬声器(IWaveProvider)

问题是:每当我尝试将样本乘以x!= 1.0f时,都会得到非常嘈杂的反馈。我认为这可能是字节格式,但我不知道如何检查它。任何帮助/建议将不胜感激。

Count = 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);
    }
c# audio naudio
1个回答
0
投票

您正在以WaveIn.WaveFormat中指定的格式接收音频。您的注释显示每个样本16位,这意味着您将以签名的16位样本形式接收音频。因此您可以使用BitConverter.ToInt16

但是有更简单的方法可以做到这一点。如果您在ToSampleProvider()上调用BufferedWaveProvider,则可以将其传递到VolumeSampleProvider,这样您就可以直接调节音量,而无需自己打开样品包装。

© www.soinside.com 2019 - 2024. All rights reserved.