2016-01-02 2 views
4

В этом названии говорится, что я хотел бы получить и установить уровень громкости звука для приложения Universal Windows (iot).Как получить и установить уровень громкости звука для приложения Universal Windows

Это может быть либо уровень звука, связанный с моим конкретным приложением - который был бы идеальным; или это может быть уровень звука в системе - если это необходимо/возможно.

Я использую Visual Studio 2015

Я искал примеры/образцы, но придумали сухой.

Любая помощь будет оценена по достоинству.

(обратите внимание, что это не дублирующий вопрос - я хочу получить и установить уровень громкости звука для приложения Universal Windows - это невозможно сделать с помощью COM-объекта в uwp - и не для приложений UWP использовать VBScript или JScript)

+0

невозможно получить доступ к произвольным объектам COM из приложения Universal Windows - ref: http://stackoverflow.com/questions/32042324/how-to-create-a-com-object-in-a-uwp -application-c – Rob

+0

@ Rob-Ответ, который вы связали, верен. – WiredPrairie

+0

@Codexer - приложения UWP не используют VBScript или JScript. – WiredPrairie

ответ

0

Посмотрите на исходный код этого: https://github.com/File-New-Project/EarTrumpet

Он будет содержать то, что вы ищете.

+1

Я пробовал глубоко вникать в это, но не смог найти нужный код - когда я опустился глубоко, я нашел код, который соответствует тому, что делает naudio; но я не могу заставить naudio работать на платформе windows iot - не хочет перечислять звуковые устройства. Я не могу поверить, что так просто, как изменить громкость звука так сложно. Rob

0

Вы можете управлять громкостью звука для собственного приложения с помощью свойства тома MediaPlayer. Он не контролирует общий объем системы, но позволяет вам установить свой собственный объем приложений.

https://msdn.microsoft.com/en-us/library/windows/apps/windows.media.playback.mediaplayer.volume.aspx

Например, у меня есть модель представления, где я выставить следующее свойство и к которому у меня есть значение свойства элемента управления ползунка связаны. (Мой ползунок Min равен 0, а его Макс равен 100, поэтому я преобразовываю значение 0-1 значения объема материала MediaPlayer в диапазон 0-100.)

(ПРИМЕЧАНИЕ. У меня также есть «BackgroundAudioService» "синглтон обернуть ссылку на фоне аудио MediaPlayer, как на образец фона аудио проекта UWP на GitHub демонстрирует, но его просто ссылка на MediaPlayer.)

public double Volume 
    { 
     get 
     { 
      this.volume = (BackgroundAudioService.Instance.CurrentPlayer.Volume * 100); 
      return this.volume; 
     } 

     set 
     { 
      this.volume = value; 
      BackgroundAudioService.Instance.CurrentPlayer.Volume = (this.volume/100); 
      this.RaisePropertyChanged(); 
     } 
    } 

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

0

Я искал то же самое, и я нашел то, что искал. Итак, я чувствовал себя обязанным публиковать (и делиться) своими выводами здесь.

Чтобы контролировать весь объем системы, вы можете сделать это, используя Sound Global API.

ElementSoundPlayer.Volume = 0.5f; 

Все звуки в пределах приложения могут быть затемнены с регулятором громкости. Однако звуки в приложении не могут стать громче, чем системный том.

0

На самом деле это задокументировано.

Вы можете установить или установить громкость аудиоустройства так же, как мы это делали в настольных приложениях, используя IAudioEndpointVolume, в документации указано, что оно поддерживается в приложениях Windows Store.

Чтобы активировать этот интерфейс для определенного устройства в приложении UWP, вам необходимо использовать функцию ActivateAudioInterfaceAsync.Есть UWP sample codes, где показано, как использовать эту функцию для активации интерфейса IAudioClient. Вы можете сделать то же самое, но для интерфейса IAudioEndpointVolume.

Наконец, на данный момент этот API доступен только на C++. если вы хотите сделать это из приложения CW или VB UWP, вы можете создать RuntimeComponent в C++ CX, который предоставит эту функцию вашему приложению.

-1

Я нашел рабочее решение (в C#). См. Мой ответ в this topic. (Я не думаю, что это дублированный вопрос, хотя мой ответ тот же)

Here вы можете найти мой код.

Вам не нужно создавать компонент WinRT. Вместо этого вы можете использовать P/Invoke для доступа к интерфейсам win32.

+0

Лучше отметить вопрос как дубликат. –

+0

Вопрос, к которому я привязан, относится к более конкретному сценарию. Я не уверен, что вопрос повторяется, хотя ответ есть. ;) И какой смысл заключить рабочее решение, заставляя других думать, что само решение не так? –

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