将wave转换为字节数组

时间:2015-10-04 02:05:09

标签: c# voip naudio

我是c#的新手,我想通过ip发送语音,但我在这里遇到了问题。

现在可以,我可以通过

将wave转换为字节
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(而不是来自wave文件)

所以我使用File.ReadAllBytes("wave path"); 来录制音频,这就是代码

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

我发现有些视频会将音频写入wave文件并再次从文件中读取字节。有没有什么方法可以将音频直接转换为数组字节?

1 个答案:

答案 0 :(得分:0)

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

waveOut = new WaveOut())
var provider = new BufferedWaveProvider(waveFormat);
waveOut.Init(provider);
waveOut.Play();

provider.AddSamples(sampleBuffer, 0, sampleBuffer.Length);

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