2016-04-15 2 views
0

Как отключить звук затвора камеры программно, он всегда создает звук при съемке, я вызываю метод Dispose из MediaCapture, который делает этот звук. Есть ли способ отключить этот звук?Как удалить MediaCapture без воспроизведения звука затвора

Ниже приведен код инициализации:

private async Task InitializeQrCode(CaptureElement captureElement) 
    { 
     string error = null; 
     try 
     { 
      if (mediaCapture == null) 
      { 
       mediaCapture = new MediaCapture(); 

       var _deviceInformation = await GetCameraDeviceInfoAsync(Windows.Devices.Enumeration.Panel.Back); 

       var settings = new MediaCaptureInitializationSettings(); 
       settings.StreamingCaptureMode = StreamingCaptureMode.Video; 
       settings.PhotoCaptureSource = PhotoCaptureSource.VideoPreview; 
       settings.AudioDeviceId = ""; 
       if (_deviceInformation != null) 
        settings.VideoDeviceId = _deviceInformation.Id; 

       await mediaCapture.InitializeAsync(settings); 

       var maxResolution = mediaCapture.VideoDeviceController.GetAvailableMediaStreamProperties(MediaStreamType.Photo).Aggregate((i1, i2) => (i1 as VideoEncodingProperties).Width > (i2 as VideoEncodingProperties).Width ? i1 : i2); 
       await mediaCapture.VideoDeviceController.SetMediaStreamPropertiesAsync(MediaStreamType.Photo, maxResolution); 

       if (mediaCapture.VideoDeviceController.FocusControl.FocusChangedSupported) 
       { 
        var focusSettings = new FocusSettings(); 
        focusSettings.AutoFocusRange = AutoFocusRange.FullRange; 
        focusSettings.Mode = FocusMode.Auto; 
        focusSettings.WaitForFocus = true; 
        focusSettings.DisableDriverFallback = false; 

        mediaCapture.VideoDeviceController.FocusControl.Configure(focusSettings); 
       } 

       await mediaCapture.VideoDeviceController.ExposureControl.SetAutoAsync(true); 

       mediaCapture.SetPreviewRotation(VideoRotation.Clockwise90Degrees); 
       mediaCapture.SetRecordRotation(VideoRotation.Clockwise90Degrees); 
      } 

      captureElement.Source = mediaCapture; 
      await mediaCapture.StartPreviewAsync(); 
     } 
     catch (Exception ex) 
     { 
      DialogBox.ShowOkMessage(this, "Error:" + ex.Message); 
     } 
    } 

А вот код для захвата изображения, на CapturePhotoToStreamAsync звук затвора становится сыграна:

var stream = new InMemoryRandomAccessStream(); 
      await mediaCapture.CapturePhotoToStreamAsync(imgProp, stream); 


      stream.Seek(0); 
      var wbm = new WriteableBitmap(WPAppConstants.Dimension.ImageEncodingWidth, WPAppConstants.Dimension.ImageEncodingHeight); 
      await wbm.SetSourceAsync(stream); 
      var result = bcReader.Decode(wbm); 


      if (result != null) 
      { 
       var torch = mediaCapture.VideoDeviceController.TorchControl; 
       if (torch.Supported) torch.Enabled = false; 
       await StopQrCodeScan(); 

       var resultEvent = Result; 
       if (resultEvent != null) 
       { 
        resultEvent(null, new CameraClickedEventArgs { EncodedData = result.Text }); 
       } 
      } 

Demo Project Onedrive Link

+0

Вызов Dispose на MediaCapture не приведет к срабатыванию звука затвора при нормальных условиях. Вы должны опубликовать самый маленький фрагмент кода, который показывает эти симптомы, и мы сможем помочь вам намного лучше. – Mike

ответ

0

Постарайся mediaCaptureElement.Source = null; затем await capture.StopPreviewAsync();, а затем capture.Dispose();

+0

Пробовал это, но все еще играл звук затвора. –

+0

Попробуйте отключить звук затвора, доступный в системных настройках. Существует образец для открытия страницы настроек https://code.msdn.microsoft.com/windowsapps/How-to-Launch-settings-6d68c5ba – Elektryczny

+0

Спасибо, но в магазине есть несколько приложений, которые не воспроизводят звук с затвором, если звук затвора включен, например #Scan и Comment. –

1

Вопрос, как вы позировали это:

Как избавиться MediaCapture без воспроизведения звука затвора

Ответ на этот вопрос заключается в вызове (если вы работаете предварительный просмотр, так как вы должны почти всегда запускается при захвате):

await mediaCapture.StopPreviewAsync(); 
captureElement.Source = null; 
mediaCapture.Dispose(); 

Выполнение этого кода не будет воспроизводить звук затвора. Для справки см. UWP CameraStarterKit SDK sample, который будет воспроизводить звук затвора только при запуске или остановке захвата.

Это, как говорится, я заметил, что некоторые противоречия в вашем вопросе, где вы сказали:

он всегда делает звук, когда я фотографирую, я вызываю Dispose метод MediaCapture, который делает, что звуковой

Предполагая, что оба захвата и утилизацию запускают звук. Возможно, вы немного смущаете эти понятия. Dispose method of the MediaCapture освобождает неуправляемые ресурсы. Вызов Dispose не вызывает звук затвора сам по себе, и он не имеет ничего общего с звуком затвора, который вы слышите при съемке или захвате видео. Звуки воспроизводятся при вызове методов, таких как CapturePhotoToStorageFileAsync или StartRecordToStorageFileAsync, чтобы уведомить пользователя (и людей вокруг них) о том, что камера активна.

Я не знаю, как отключить звук затвора для вашего приложения. Есть ли что-то, что вы пытаетесь сделать, это требует бесшумного захвата?

PS: Это немного не по теме, но вы отправили намного больше кода, чем это необходимо для воспроизведения звука затвора, включая код, который, как представляется, выполняет поворот. Я хотел бы направить вас на страницу MSDN, где рассказывается о detecting screen/device rotation and setting the preview rotation. Далее вы также узнаете рекомендованный способ: rotate a captured video.

+0

Спасибо за подробную информацию, я пробовал все, что мог, но все еще имею проблему. Пожалуйста, проверьте мой отредактированный пост. Я загрузил демонстрационный проект для вас. В этом проекте, когда вы снимаете любое изображение и пытаетесь уничтожить ресурсы, он генерирует звук затвора. –

+0

Любая помощь при загрузке образцов PLS? –

+0

Какое устройство вы используете, и какая версия ОС установлена? Он работает, когда я описываю его на своей Windows 10 Lumia 950, звук затвора воспроизводится только при нажатии кнопки Capture, а не кнопки Dispose. – Mike

Смежные вопросы