public int ToggleMute() { int hr = 0; if ((graphBuilder == null) || (basicAudio == null)) { return(0); } // Read current volume hr = basicAudio.get_Volume(out currentVolume); if (hr == -1) //E_NOTIMPL { // Fail quietly if this is a video-only media file return(0); } else if (hr < 0) { return(hr); } // Switch volume levels if (currentVolume == VolumeFull) { currentVolume = VolumeSilence; } else { currentVolume = VolumeFull; } // Set new volume hr = basicAudio.put_Volume(currentVolume); return(hr); }
private int ToggleMute() { var hr = 0; if ((graphBuilder == null) || (basicAudio == null)) { return(0); } hr = basicAudio.get_Volume(out currentVolume); if (hr == -1) //E_NOTIMPL { return(0); } else if (hr < 0) { return(hr); } if (currentVolume == VolumeFull) { currentVolume = VolumeSilence; } else { currentVolume = VolumeFull; } hr = basicAudio.put_Volume(currentVolume); return(hr); }
void Network_VolumeDown() { if (this.InvokeRequired) { Network.SimpleEvent d = new Network.SimpleEvent(Network_VolumeDown); this.Invoke(d); } else { if (audio_mixer != null) { audio_mixer.put_Volume(volume - 500); audio_mixer.get_Volume(out volume); Network.SendStatus(channel, volume, (this.currentState == PlayState.Running)); } } }
public void SetVolume(int percentage) { // convert to logarithmic scale (-10000 to 0 , i.e.: -100db to -0db) int volume = -10000 + (int)(10 * Math.Log(1.0d + percentage / 100.0d) * 3333.3); IBasicAudio iba = fg as IBasicAudio; if (iba != null) { iba.put_Volume(volume); } }
protected void CheckAudio() { int volume = _isMuted ? 0 : _volume; IBasicAudio audio = _graphBuilder as IBasicAudio; if (audio != null) { // Our volume range is from 0 to 100, IBasicAudio volume range is from -10000 to 0 (in hundredth decibel). // See http://msdn.microsoft.com/en-us/library/dd389538(VS.85).aspx (IBasicAudio::put_Volume method) audio.put_Volume(VolumeToHundredthDeciBel(volume)); } }
protected void InitAudioAndVideo() { try { //ResetVolumeLevels(); //int val = 0; int w = 0; int hr = basicVideo.get_VideoWidth(out w); isVideoAvailable = (hr >= 0 && w > 0); // Setup the video window SetupVideoWindow(); FitVideoInPanel(); renderRegion.Visible = true; renderRegion.Resize -= new EventHandler(renderPanel_Resize); renderRegion.Resize += new EventHandler(renderPanel_Resize); } catch { isVideoAvailable = false; } try { int hr = basicAudio.put_Volume((int)VolumeRange.Minimum); isAudioAvailable = (hr >= 0); } catch { isAudioAvailable = false; } }
private void SetVolume(int _volume) { if (m_BasicAudio == null) { if (m_GraphBuilder == null) { return; } else { m_BasicAudio = (IBasicAudio)m_GraphBuilder; } } m_BasicAudio.put_Volume(_volume); }
internal void trackBarVolume_ValueChanged(object sender, EventArgs e) { MainForm.Settings.Volume = this.trackBarVolume.Value; if (this.MainForm.GraphBuilder != null) { IBasicAudio basicAudio = this.MainForm.GraphBuilder.FilterGraph as IBasicAudio; if (basicAudio != null) { basicAudio.put_Volume(this.trackBarVolume.Value); int volume = 0; basicAudio.get_Volume(out volume); this.labelVolumeLevel.Text = volume.ToString(); return; } } this.labelVolumeLevel.Text = this.trackBarVolume.Value.ToString(); }
public void SetVolume(double volume) { IBasicAudio audio = _graphBuilder as IBasicAudio; if (audio != null) { int iVolume; if (volume <= -100) { iVolume = -10000; } else { iVolume = (int)(volume * 100); } audio.put_Volume(iVolume); } }
/// <summary> /// Mute or unmute the sound. /// </summary> public void Mute() { int hr = 0; // Stop and reset postion to beginning if ((_currentState == PlayState.Paused) || (_currentState == PlayState.Running)) { // Read current volume hr = _basicAudio.get_Volume(out _currentVolume); //E_NOTIMPL if (hr == -1) { // Fail quietly if this is a video-only media file return; } else if (hr < 0) { return; } // Switch volume levels if (_currentVolume == VolumeFull) { _currentVolume = VolumeSilence; } else { _currentVolume = VolumeFull; } // Set new volume hr = _basicAudio.put_Volume(_currentVolume); DsError.ThrowExceptionForHR(hr); } }
public override void Init() { if (!isPlaying) { string Filename = ""; float size = 0; double Max = 0; int volume = 0; graph = new FilterGraph() as IFilterGraph; media = graph as IMediaControl; eventEx = media as IMediaEventEx; igb = media as IGraphBuilder; imp = igb as IMediaPosition; master.form.Invoke((MethodInvoker)delegate() { Filename = master.form.M_Filename.Text; media.RenderFile(Filename); size = (float)master.form.M_PrevSize.Value; master.form.M_PrevSize.Enabled = false; imp.get_Duration(out Max); master.form.M_Seek.Maximum = (int)(Max); master.form.M_Seek.Value = 0; volume = master.form.M_Volume.Value; span = (uint)(1000000.0f / master.form.M_CollectFPS); }); graph.FindFilterByName("Video Renderer", out render); if (render != null) { window = render as IVideoWindow; window.put_WindowStyle( WindowStyle.Caption | WindowStyle.Child ); window.put_WindowStyleEx( WindowStyleEx.ToolWindow ); window.put_Caption("ElectronicBoard - VideoPrev -"); int Width, Height, Left, Top; window.get_Width(out Width); window.get_Height(out Height); window.get_Left(out Left); window.get_Top(out Top); renderSize.Width = (int)(Width * size); renderSize.Height = (int)(Height * size); Aspect = (float)renderSize.Height / (float)renderSize.Width; window.SetWindowPosition(Left, Top, renderSize.Width, renderSize.Height); eventEx = media as IMediaEventEx; eventEx.SetNotifyWindow(master.form.Handle, WM_DirectShow, IntPtr.Zero); media.Run(); foreach (Process p in Process.GetProcesses()) { if (p.MainWindowTitle == "ElectronicBoard - VideoPrev -") { renderwindow = p.MainWindowHandle; break; } } isPlaying = true; iba = media as IBasicAudio; iba.put_Volume(volume); //master.form.checkBox3_CheckedChanged(null, null); master.Start(); } } }
private void PlayMovieInWindow(string filename) { fps = 0; int hr = 0; this.graphBuilder = (IGraphBuilder)new FilterGraph(); //Добавляем в граф нужный рендерер (Auto - graphBuilder сам выберет рендерер) Settings.VRenderers renderer = Settings.VideoRenderer; if (renderer == Settings.VRenderers.Overlay) { IBaseFilter add_vr = (IBaseFilter)new VideoRenderer(); hr = graphBuilder.AddFilter(add_vr, "Video Renderer"); DsError.ThrowExceptionForHR(hr); } else if (renderer == Settings.VRenderers.VMR7) { IBaseFilter add_vmr = (IBaseFilter)new VideoMixingRenderer(); hr = graphBuilder.AddFilter(add_vmr, "Video Renderer"); DsError.ThrowExceptionForHR(hr); } else if (renderer == Settings.VRenderers.VMR9) { IBaseFilter add_vmr9 = (IBaseFilter)new VideoMixingRenderer9(); hr = graphBuilder.AddFilter(add_vmr9, "Video Mixing Renderer 9"); DsError.ThrowExceptionForHR(hr); } else if (renderer == Settings.VRenderers.EVR) { //Создаём Win32-окно, т.к. использовать WPF-поверхность не получится VHost = new VideoHwndHost(); VHost.RepaintRequired += new EventHandler(VHost_RepaintRequired); VHostElement.Visibility = Visibility.Visible; VHostElement.Child = VHost; VHandle = VHost.Handle; //Добавляем и настраиваем EVR IBaseFilter add_evr = (IBaseFilter)new EnhancedVideoRenderer(); hr = graphBuilder.AddFilter(add_evr, "Enhanced Video Renderer"); DsError.ThrowExceptionForHR(hr); object obj; IMFGetService pGetService = null; pGetService = (IMFGetService)add_evr; hr = pGetService.GetService(MFServices.MR_VIDEO_RENDER_SERVICE, typeof(IMFVideoDisplayControl).GUID, out obj); MFError.ThrowExceptionForHR(hr); try { EVRControl = (IMFVideoDisplayControl)obj; } catch { Marshal.ReleaseComObject(obj); throw; } //Указываем поверхность hr = EVRControl.SetVideoWindow(VHandle); MFError.ThrowExceptionForHR(hr); //Отключаем сохранение аспекта hr = EVRControl.SetAspectRatioMode(MFVideoAspectRatioMode.None); MFError.ThrowExceptionForHR(hr); } // Have the graph builder construct its the appropriate graph automatically hr = this.graphBuilder.RenderFile(filename, null); DsError.ThrowExceptionForHR(hr); if (EVRControl == null) { //Ищем рендерер и отключаем соблюдение аспекта (аспект будет определяться размерами видео-окна) IBaseFilter filter = null; graphBuilder.FindFilterByName("Video Renderer", out filter); if (filter != null) { IVMRAspectRatioControl vmr = filter as IVMRAspectRatioControl; if (vmr != null) DsError.ThrowExceptionForHR(vmr.SetAspectRatioMode(VMRAspectRatioMode.None)); } else { graphBuilder.FindFilterByName("Video Mixing Renderer 9", out filter); if (filter != null) { IVMRAspectRatioControl9 vmr9 = filter as IVMRAspectRatioControl9; if (vmr9 != null) DsError.ThrowExceptionForHR(vmr9.SetAspectRatioMode(VMRAspectRatioMode.None)); } } } // QueryInterface for DirectShow interfaces this.mediaControl = (IMediaControl)this.graphBuilder; this.mediaEventEx = (IMediaEventEx)this.graphBuilder; this.mediaSeeking = (IMediaSeeking)this.graphBuilder; this.mediaPosition = (IMediaPosition)this.graphBuilder; // Query for video interfaces, which may not be relevant for audio files this.videoWindow = (EVRControl == null) ? this.graphBuilder as IVideoWindow : null; this.basicVideo = (EVRControl == null) ? this.graphBuilder as IBasicVideo : null; // Query for audio interfaces, which may not be relevant for video-only files this.basicAudio = this.graphBuilder as IBasicAudio; basicAudio.put_Volume(VolumeSet); //Ввод в ДиректШоу значения VolumeSet для установки громкости // Is this an audio-only file (no video component)? CheckIsAudioOnly(); if (!this.IsAudioOnly) { if (videoWindow != null) { // Setup the video window hr = this.videoWindow.put_Owner(this.source.Handle); DsError.ThrowExceptionForHR(hr); hr = this.videoWindow.put_MessageDrain(this.source.Handle); DsError.ThrowExceptionForHR(hr); hr = this.videoWindow.put_WindowStyle(DirectShowLib.WindowStyle.Child | DirectShowLib.WindowStyle.ClipSiblings | DirectShowLib.WindowStyle.ClipChildren); DsError.ThrowExceptionForHR(hr); //Определяем fps double AvgTimePerFrame; hr = basicVideo.get_AvgTimePerFrame(out AvgTimePerFrame); DsError.ThrowExceptionForHR(hr); fps = (1.0 / AvgTimePerFrame); } else if (EVRControl != null) { //Определяем fps DetermineEVRFPS(); } //Ловим ошибку Ависинта IsAviSynthError = false; if (NaturalDuration.TotalMilliseconds == 10000.0) { //Признаки ошибки: duration=10000.0 и fps=24 (округлённо) if ((int)fps == 24 || fps == 0) IsAviSynthError = true; } MoveVideoWindow(); } else { if (VHost != null) { VHost.Dispose(); VHost = null; VHandle = IntPtr.Zero; VHostElement.Child = null; VHostElement.Visibility = Visibility.Collapsed; VHostElement.Width = VHostElement.Height = 0; VHostElement.Margin = new Thickness(0); } //Ловим ошибку Ависинта 2 (когда нет видео окна) IsAviSynthError = (NaturalDuration.TotalMilliseconds == 10000.0); if (m.isvideo) { //Видео должно было быть.. PreviewError("NO VIDEO", Brushes.Gainsboro); } } //Если выше не удалось определить fps - берём значение из массива if (fps == 0) fps = Calculate.ConvertStringToDouble(m.outframerate); // Have the graph signal event via window callbacks for performance hr = this.mediaEventEx.SetNotifyWindow(this.source.Handle, WMGraphNotify, IntPtr.Zero); DsError.ThrowExceptionForHR(hr); if (mediaload == MediaLoad.update) //Перенесено из HandleGraphEvent, теперь позиция устанавливается до начала воспроизведения, т.е. за один заход, а не за два { if (NaturalDuration >= oldpos) //Позиционируем только если нужная позиция укладывается в допустимый диапазон mediaPosition.put_CurrentPosition(oldpos.TotalSeconds); //else // mediaPosition.put_CurrentPosition(NaturalDuration.TotalSeconds); //Ограничиваем позицию длиной клипа } // Run the graph to play the media file if (currentState == PlayState.Running) { //Продолжение воспроизведения, если статус до обновления был Running DsError.ThrowExceptionForHR(this.mediaControl.Run()); SetPauseIcon(); } else { //Запуск с паузы, если была пауза или это новое открытие файла DsError.ThrowExceptionForHR(this.mediaControl.Pause()); this.currentState = PlayState.Paused; SetPlayIcon(); } }
public bool SetVolume(int volume) { return(_basicAudio.put_Volume(volume) == DsHlp.S_OK); }
private void PlayMovieInWindow(string filename) { if (filename == string.Empty) return; int hr = 0; this.graphBuilder = (IGraphBuilder)new FilterGraph(); //Добавляем в граф нужный рендерер (Auto - graphBuilder сам выберет рендерер) Settings.VRenderers renderer = Settings.VideoRenderer; if (renderer == Settings.VRenderers.Overlay) { IBaseFilter add_vr = (IBaseFilter)new VideoRenderer(); hr = graphBuilder.AddFilter(add_vr, "Video Renderer"); DsError.ThrowExceptionForHR(hr); } else if (renderer == Settings.VRenderers.VMR7) { IBaseFilter add_vmr = (IBaseFilter)new VideoMixingRenderer(); hr = graphBuilder.AddFilter(add_vmr, "Video Renderer"); DsError.ThrowExceptionForHR(hr); } else if (renderer == Settings.VRenderers.VMR9) { IBaseFilter add_vmr9 = (IBaseFilter)new VideoMixingRenderer9(); hr = graphBuilder.AddFilter(add_vmr9, "Video Mixing Renderer 9"); DsError.ThrowExceptionForHR(hr); } else if (renderer == Settings.VRenderers.EVR) { //Создаём Win32-окно, т.к. использовать WPF-поверхность не получится VHost = new VideoHwndHost(); VHost.RepaintRequired += new EventHandler(VHost_RepaintRequired); VHostElement.Child = VHost; VHandle = VHost.Handle; //Добавляем и настраиваем EVR IBaseFilter add_evr = (IBaseFilter)new EnhancedVideoRenderer(); hr = graphBuilder.AddFilter(add_evr, "Enhanced Video Renderer"); DsError.ThrowExceptionForHR(hr); object obj; IMFGetService pGetService = null; pGetService = (IMFGetService)add_evr; hr = pGetService.GetService(MFServices.MR_VIDEO_RENDER_SERVICE, typeof(IMFVideoDisplayControl).GUID, out obj); MFError.ThrowExceptionForHR(hr); try { EVRControl = (IMFVideoDisplayControl)obj; } catch { Marshal.ReleaseComObject(obj); throw; } //Указываем поверхность hr = EVRControl.SetVideoWindow(VHandle); MFError.ThrowExceptionForHR(hr); //Отключаем сохранение аспекта hr = EVRControl.SetAspectRatioMode(MFVideoAspectRatioMode.None); MFError.ThrowExceptionForHR(hr); } // Have the graph builder construct its the appropriate graph automatically hr = this.graphBuilder.RenderFile(filename, null); DsError.ThrowExceptionForHR(hr); if (EVRControl == null) { //Ищем рендерер и отключаем соблюдение аспекта (аспект будет определяться размерами видео-окна) IBaseFilter filter = null; graphBuilder.FindFilterByName("Video Renderer", out filter); if (filter != null) { IVMRAspectRatioControl vmr = filter as IVMRAspectRatioControl; if (vmr != null) DsError.ThrowExceptionForHR(vmr.SetAspectRatioMode(VMRAspectRatioMode.None)); } else { graphBuilder.FindFilterByName("Video Mixing Renderer 9", out filter); if (filter != null) { IVMRAspectRatioControl9 vmr9 = filter as IVMRAspectRatioControl9; if (vmr9 != null) DsError.ThrowExceptionForHR(vmr9.SetAspectRatioMode(VMRAspectRatioMode.None)); } } } // QueryInterface for DirectShow interfaces this.mediaControl = (IMediaControl)this.graphBuilder; this.mediaEventEx = (IMediaEventEx)this.graphBuilder; this.mediaSeeking = (IMediaSeeking)this.graphBuilder; this.mediaPosition = (IMediaPosition)this.graphBuilder; // Query for video interfaces, which may not be relevant for audio files this.videoWindow = (EVRControl == null) ? this.graphBuilder as IVideoWindow : null; this.basicVideo = (EVRControl == null) ? this.graphBuilder as IBasicVideo : null; // Query for audio interfaces, which may not be relevant for video-only files this.basicAudio = this.graphBuilder as IBasicAudio; basicAudio.put_Volume(-(int)(10000 - Math.Pow(Settings.VolumeLevel, 1.0 / 5) * 10000)); //Громкость для ДиректШоу // Is this an audio-only file (no video component)? CheckIsAudioOnly(); if (!this.isAudioOnly) { //Определяем аспект, если он нам не известен if (in_ar == 0) { MediaInfoWrapper media = new MediaInfoWrapper(); media.Open(filepath); in_ar = media.Aspect; media.Close(); } if (videoWindow != null) { // Setup the video window hr = this.videoWindow.put_Owner(this.source.Handle); DsError.ThrowExceptionForHR(hr); hr = this.videoWindow.put_WindowStyle(DirectShowLib.WindowStyle.Child | DirectShowLib.WindowStyle.ClipSiblings | DirectShowLib.WindowStyle.ClipChildren); DsError.ThrowExceptionForHR(hr); } MoveVideoWindow(); } else { if (VHost != null) { VHost.Dispose(); VHost = null; VHandle = IntPtr.Zero; VHostElement.Child = null; } } // Have the graph signal event via window callbacks for performance hr = this.mediaEventEx.SetNotifyWindow(this.source.Handle, WMGraphNotify, IntPtr.Zero); DsError.ThrowExceptionForHR(hr); this.Focus(); // Run the graph to play the media file hr = this.mediaControl.Run(); DsError.ThrowExceptionForHR(hr); this.currentState = PlayState.Running; SetPauseIcon(); double duration = 0.0; hr = mediaPosition.get_Duration(out duration); DsError.ThrowExceptionForHR(hr); slider_pos.Maximum = duration; //Запускаем таймер обновления позиции if (timer != null) timer.Start(); }