windows 是否从powershell更改音频音量的平衡级别?

4jb9z9bj  于 2022-11-26  发布在  Windows
关注(0)|答案(1)|浏览(253)

虽然我已经阅读了几个解决方案,以改变音量使用Powershell:
如何从PowerShell静音/取消静音
Change audio level from powershell?
我找不到任何能改变平衡的东西,比如:

#Sets left channel volume to 20%
Set-Speaker -LeftChannel 20

#Sets right channel volume to 80%
Set-Speaker -RightChannel 80

只是为了清楚,我说的是修改这个:

我需要它来设置一个启动脚本,保持我的当前(或最后)音量,但保持左通道始终在20%
谢谢

kupeojn6

kupeojn61#

here所述,您需要调用IAudioEndpointVolumeSetChannelVolumeLevelSetChannelVolumeLevelScalar方法。this Gist中包含interop方法,但缺少一个方便的 Package 方法。
开始时,您需要使用Add-Type在PowerShell中包含C#代码:

Add-Type -TypeDefinition @'
-paste C# code here-
'@

将此方法添加到类AudioManager

/// <summary>
        /// Sets the channel volume to a specific level
        /// </summary>
        /// <param name="channelNumber">Channel number, which can be 0..(numberOfChannels-1)</param>
        /// <param name="newLevel">Value between 0 and 100 indicating the desired scalar value of the volume</param>
        public static void SetChannelVolumeLevel(uint channelNumber, float newLevel)
        {
            IAudioEndpointVolume masterVol = null;
            try
            {
                masterVol = GetMasterVolumeObject();
                if (masterVol == null)
                    return;

                masterVol.SetChannelVolumeLevelScalar(channelNumber, newLevel/100, Guid.Empty);
            }
            finally
            {
                if (masterVol != null)
                    Marshal.ReleaseComObject(masterVol);
            }
        }

我已经把它插在private static IAudioEndpointVolume GetMasterVolumeObject()行之前了,但是你把它放在类中的什么地方并不重要。
现在,您可以从PowerShell中调用它,如下所示:

[VideoPlayerController.AudioManager]::SetChannelVolumeLevelScalar(0, 60)
[VideoPlayerController.AudioManager]::SetChannelVolumeLevelScalar(1, 40)

在我的系统上,它移动左右音量相等,但我可能遭受锁定平衡。有一个注册表调整described here,这对我不起作用,虽然。

相关问题