将波转换为字节数组

本文关键字:字节数 数组 字节 转换 | 更新日期: 2023-09-27 18:15:48

我是c#新手,我想通过ip发送语音,但我在这里有一个问题。

private Byte[] arr;
private void send()
{
     arr = File.ReadAllBytes("wave path");
     con = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     // ...
     con.Send(arr, 0, arr.length, 0);
     con.Close();
}

现在可以通过

将wave转换为字节了
File.ReadAllBytes("wave path");

但实际上我想直接从麦克风发送wave(而不是从wave文件)

我使用NAudio.dll记录音频这是代码

private void button2_Click(object sender, EventArgs e)
{
    int devicenum = 0;
    sourcestream = new NAudio.Wave.WaveIn();
    sourcestream.DeviceNumber = devicenum;
    sourcestream.WaveFormat = new NAudio.Wave.WaveFormat(4410, NAudio.Wave.WaveIn.GetCapabilities(devicenum).Channels);
    NAudio.Wave.WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourcestream);
    waveOut = new NAudio.Wave.DirectSoundOut();
    waveOut.Init(waveIn);
    sourcestream.StartRecording();
    waveOut.Play();
}

,我测试它从麦克风播放音频

我如何将waveOut转换为数组字节,以便我可以发送它

 waveOut.Play();

我发现一些视频写入音频到波文件,并再次从文件中读取字节。任何方法转换音频直接到数组字节?

将波转换为字节数组

BufferedWaveProvider初始化WaveOut实例。这将允许您通过将它们写入BufferedWaveProvider来添加要播放的样本块,如下所示:

waveOut = new WaveOut())
var provider = new BufferedWaveProvider(waveFormat);
waveOut.Init(provider);
waveOut.Play();
provider.AddSamples(sampleBuffer, 0, sampleBuffer.Length);

因此,在您的网络接收器代码中,从远程发送者获取样本,您将缓冲区(解码后,当然)添加到BufferedWaveProvider中,它将播放。