这篇文章主要是一个应用,使用udp传送语音和文本等信息。在这个系统中没有服务端和客户端,相互通讯都是直接相互联系的。能够很好的实现效果。
AD:
这篇文章主要是一个应用,使用udp传送语音和文本等信息。在这个系统中没有服务端和客户端,相互通讯都是直接相互联系的。能够很好的实现效果。
语音获取
要想发送语音信息,首先得获取语音,这里有几种方法,一种是使用DirectX的DirectXsound来录音,为了简便使用一个开源的插件NAudio来实现语音录取。 在项目中引用NAudio.dll
//------------------录音相关----------------------------- private IWaveIn waveIn; private WaveFileWriter writer; private void LoadWasapiDevicesCombo() { var deviceEnum = new MMDeviceEnumerator(); var devices = deviceEnum.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active).ToList(); comboBox1.DataSource = devices; comboBox1.DisplayMember = FriendlyName ; } private void CreateWaveInDevice() { waveIn = new WaveIn(); waveIn.WaveFormat = new WaveFormat(8000, 1); waveIn.DataAvailable += OnDataAvailable; waveIn.RecordingStopped += OnRecordingStopped; } void OnDataAvailable(object sender, WaveInEventArgs e) { if (this.InvokeRequired) { this.BeginInvoke(new EventHandler WaveInEventArgs (OnDataAvailable), sender, e); } else { writer.Write(e.Buffer, 0, e.BytesRecorded); int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond); if (secondsRecorded = 10)//最大10s { StopRecord(); } else { l_sound.Text = secondsRecorded + s ; } } } void OnRecordingStopped(object sender, StoppedEventArgs e) { if (InvokeRequired) { BeginInvoke(new EventHandler StoppedEventArgs (OnRecordingStopped), sender, e); } else { FinalizeWaveFile(); } } void StopRecord() { AllChangeBtn(btn_luyin, true); AllChangeBtn(btn_stop, false); AllChangeBtn(btn_sendsound, true); AllChangeBtn(btn_play, true); //btn_luyin.Enabled = true; //btn_stop.Enabled = false; //btn_sendsound.Enabled = true; //btn_play.Enabled = true; if (waveIn != null) waveIn.StopRecording(); //Cleanup(); } private void Cleanup() { if (waveIn != null) { waveIn.Dispose(); waveIn = null; } FinalizeWaveFile(); } private void FinalizeWaveFile() { if (writer != null) { writer.Dispose(); writer = null; } } //开始录音 private void btn_luyin_Click(object sender, EventArgs e) { btn_stop.Enabled = true; btn_luyin.Enabled = false; if (waveIn == null) { CreateWaveInDevice(); } if (File.Exists(soundfile)) { File.Delete(soundfile); } writer = new WaveFileWriter(soundfile, waveIn.WaveFormat); waveIn.StartRecording(); }
上面的代码实现了录音,并且写入文件p2psound_A.wav
1 2 下一页 查看全文
内容导航 第 1 页:语音获取 第 2 页:语音发送
Windows Server 2003网络管理员完全手册
本书综合介绍了微软的Windows Server 2003操作系统和微软其他常用应用软件提供的服务,同时融入了作者在Windows网络管理上的多年