AudioStateMonitorSoundLevel 列舉
指定擷取或轉譯串流的音量層級。語法
typedef enum _AudioStateMonitorSoundLevel {
Full = 0,
Low = 1,
Muted = 2
} AudioStateMonitorSoundLevel;
常數
| 常數 | 描述 |
|---|---|
| Full | 音量層級為完整音量。 |
| Low | 音量層級為低。 |
| Muted | 音量層級為靜音。 |
備註
此列舉由 IAudioStateMonitor::GetSoundLevel 方法使用。 請考慮下列案例:遊戲選擇只有在已知音訊不會因原則而遭作業系統靜音時,才播放 GameMedia 音訊。為了達成此目標,遊戲會在預設主機端點上,針對 AudioCategory_GameMedia 串流類別註冊 SoundLevel 通知。如果此類別的 SoundLevel 設定為 ‘Muted’,遊戲將停止播放其 GameMedia 串流。如果 SoundLevel 設定為其他任何值,遊戲會選擇播放其 GameMedia 串流。// global variables
winrt::com_ptr<IAudioStateMonitor> g_audioStateMonitor;
AudioStateMonitorRegistrationHandle g_registration = 0;
// Returns true if the GameMedia stream should be disabled, false if it should be
// enabled.
bool IsSoundLevelMuted(_In_ IAudioStateMonitor* audioStateMonitor)
{
return (audioStateMonitor->GetSoundLevel() == AudioStateMonitorSoundLevel::Muted);
}
HRESULT StartTrackingSoundLevel()
{
// Create an AudioStateMonitor and register for callbacks from it.
HRESULT hr = RegisterForSoundLevelChanges();
if (SUCCEEDED(hr))
{
// Check the current sound level and determine if the GameMedia stream should
// be enabled.
bool disableGameMediaStream = IsSoundLevelMuted(g_audioStateMonitor.get());
// Add code here that enables or disables the GameMedia stream based on the
// value of the boolean.
}
return hr;
}
HRESULT RegisterForSoundLevelChanges()
{
HRESULT hr = S_OK;
// Create a new AudioStateMonitor for the GameMedia category, if needed, and
// register for callbacks.
if (m_audioStateMonitor == nullptr)
{
hr = CreateRenderAudioStateMonitorForCategoryAndDeviceRole(
AudioCategory_GameMedia, ERole::eConsole, g_audioStateMonitor.put());
if (SUCCEEDED(hr))
{
// Optional "context" parameter is not used in this example,
// and is set to nullptr.
hr = g_audioStateMonitor->RegisterCallback(OnAudioStateMonitorCallback, nullptr, &g_registration);
}
}
if (FAILED(hr))
{
// g_audioStateMonitor is a smart pointer, so if an IAudioStateMonitor was
// allocated, setting the smart pointer to null invokes the Release method
// which will decrement its usage count and ensure that the object is properly
// destroyed.
g_audioStateMonitor = nullptr;
}
return hr;
}
// Unregister callbacks on program shutdown
void UnregisterForSoundLevelChanges()
{
if (g_audioStateMonitor != nullptr)
{
if (g_registration)
{
g_audioStateMonitor->UnregisterCallback(g_registration);
}
// g_audioStateMonitor is a smart pointer, so setting it to null
// invokes the Release method to decrement its usage count.
g_audioStateMonitor = nullptr;
}
}
void OnAudioStateMonitorCallback(_In_ IAudioStateMonitor* audioStateMonitor, _In_opt_ void* context)
{ bool disableGameMediaStream = IsSoundLevelMuted(audioStateMonitor);
// Add code here that enables or disables the GameMedia stream based on the value
// of the boolean.
}
