/// <summary> /// 关闭麦克风,释放资源 /// </summary> public void CloseMircoPhone() { if (microphoneCapturer != null) { microphoneCapturer.Stop(); microphoneCapturer.Dispose(); microphoneCapturer = null; } if (videoFileMaker != null) { videoFileMaker.Close(true); videoFileMaker.Dispose(); videoFileMaker = null; } }
/// <summary> /// 初始化声音收集器 /// </summary> /// <param name="outFileName">输出MP3文件名</param> /// <param name="microphoneIndex">第几个麦克风,默认为第一个(0)</param> public void InitialCapturer(string outFileName, int microphoneIndex = 0) { microphoneCapturer = CapturerFactory.CreateMicrophoneCapturer(microphoneIndex); microphoneCapturer.AudioCaptured += new ESBasic.CbGeneric <byte[]>( delegate(byte[] audioData) { //收集数据 videoFileMaker.AddAudioFrame(audioData); } ); // audioPlayer = PlayerFactory.CreateAudioPlayer(0, 16000, 1, 16, 2); if (videoFileMaker == null) { videoFileMaker = new AudioFileMaker(); Console.WriteLine(outFileName); videoFileMaker.Initialize(outFileName, 16000, 1);//初始化 } }
private void button_Start_Click(object sender, RoutedEventArgs e) { //TODO 开始录制桌面,依据 声音复选框 来选择使用 声卡 麦克风 还是混合录制 //TODO label 中显示实际录制的时间,需要考虑暂停和恢复这种情况。 格式为 hh:mm:ss if (string.IsNullOrEmpty(this.filePath.Text) || string.IsNullOrEmpty(this.fileNmae.Text)) { MessageBox.Show("文件路径和文件名!"); return; } else if (File.Exists(System.IO.Path.Combine(this.filePath.Text, this.fileNmae.Text))) { MessageBox.Show("文件已经存在"); return; } try { int audioSampleRate = 16000; int channelCount = 1; seconds = 0; System.Drawing.Size videoSize = Screen.PrimaryScreen.Bounds.Size; this.justRecordAudio = this.radioButton_justAudio.IsChecked.Value; if (this.justRecordAudio && this.checkBox_micro.IsChecked == false && this.checkBox_soundCard.IsChecked == false) { MessageBox.Show("一定要选择一个声音的采集源!"); return; } #region 设置采集器 if (this.radioButton_desktop.IsChecked == true) { //桌面采集器 //如果需要录制鼠标的操作,第二个参数请设置为true this.desktopCapturer = CapturerFactory.CreateDesktopCapturer(frameRate, false); this.desktopCapturer.ImageCaptured += ImageCaptured; videoSize = this.desktopCapturer.VideoSize; } else if (this.radioButton_camera.IsChecked == true) { //摄像头采集器 videoSize = new System.Drawing.Size(int.Parse(this.textBox_width.Text), int.Parse(this.textBox_height.Text)); this.cameraCapturer = CapturerFactory.CreateCameraCapturer(0, videoSize, frameRate); this.cameraCapturer.ImageCaptured += new CbGeneric <Bitmap>(ImageCaptured); } if (this.checkBox_micro.IsChecked == true) { //麦克风采集器 this.microphoneCapturer = CapturerFactory.CreateMicrophoneCapturer(0); this.microphoneCapturer.CaptureError += capturer_CaptureError; } if (this.checkBox_soundCard.IsChecked == true) { //声卡采集器 【目前声卡采集仅支持vista以及以上系统】 this.soundcardCapturer = CapturerFactory.CreateSoundcardCapturer(); this.soundcardCapturer.CaptureError += capturer_CaptureError; audioSampleRate = this.soundcardCapturer.SampleRate; channelCount = this.soundcardCapturer.ChannelCount; } if (this.checkBox_micro.IsChecked == true && this.checkBox_soundCard.IsChecked == true) { //混音器 this.audioMixter = CapturerFactory.CreateAudioMixter(this.microphoneCapturer, this.soundcardCapturer, SoundcardMode4Mix.DoubleChannel, true); this.audioMixter.AudioMixed += audioMixter_AudioMixed; //如果是混音,则不再需要预订microphoneCapturer和soundcardCapturer的AudioCaptured事件 audioSampleRate = this.audioMixter.SampleRate; channelCount = this.audioMixter.ChannelCount; } else if (this.checkBox_micro.IsChecked == true) { this.microphoneCapturer.AudioCaptured += audioMixter_AudioMixed; } else if (this.checkBox_soundCard.IsChecked == true) { this.soundcardCapturer.AudioCaptured += audioMixter_AudioMixed; } #endregion #region 开始采集 if (this.checkBox_micro.IsChecked == true) { this.microphoneCapturer.Start(); } if (this.checkBox_soundCard.IsChecked == true) { this.soundcardCapturer.Start(); } if (this.radioButton_camera.IsChecked == true) { this.cameraCapturer.Start(); } else if (this.radioButton_desktop.IsChecked == true) { this.desktopCapturer.Start(); } #endregion #region 录制组件 if (this.justRecordAudio) //仅仅录制声音 { this.audioFileMaker = new AudioFileMaker(); this.audioFileMaker.Initialize("test.mp3", audioSampleRate, channelCount); } else { //宽和高修正为4的倍数 this.sizeRevised = (videoSize.Width % 4 != 0) || (videoSize.Height % 4 != 0); if (this.sizeRevised) { videoSize = new System.Drawing.Size(videoSize.Width / 4 * 4, videoSize.Height / 4 * 4); } if (this.checkBox_micro.IsChecked == false && this.checkBox_soundCard.IsChecked == false) //仅仅录制图像 { this.justRecordVideo = true; this.silenceVideoFileMaker = new SilenceVideoFileMaker(); this.silenceVideoFileMaker.Initialize(System.IO.Path.Combine(this.filePath.Text, this.fileNmae.Text) + ".mp4", VideoCodecType.H264, videoSize.Width, videoSize.Height, frameRate, VideoQuality.Middle); } else //录制声音+图像 { this.justRecordVideo = false; this.videoFileMaker = new VideoFileMaker(); this.videoFileMaker.Initialize(System.IO.Path.Combine(this.filePath.Text, this.fileNmae.Text) + ".mp4", VideoCodecType.H264, videoSize.Width, videoSize.Height, frameRate, VideoQuality.High, AudioCodecType.AAC, audioSampleRate, channelCount, true); } } #endregion this.isRecording = true; this.isParsing = false; this.timer.Start(); this.checkBox_micro.IsEnabled = false; this.checkBox_soundCard.IsEnabled = false; this.radioButton_desktop.IsEnabled = false; this.radioButton_camera.IsEnabled = false; this.radioButton_justAudio.IsEnabled = false; this.button_Start.IsEnabled = false; } catch (Exception ee) { MessageBox.Show(ee.Message); } }