我是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文件并再次从文件中读取字节。有没有什么方法可以将音频直接转换为数组字节?
答案 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
中,它将播放。