从Powershell更改音频电平?

移位

如何使用Powershell设置扬声器音量?我在这里和网上其他地方挖来的东西根本找不到真正的答案。

我想我必须用C#编写包装Win32 API的内容,然后从我的powershell脚本中调用它。Win32 API就是其中之一

[DllImport("winmm.dll")]
public static extern int waveOutGetVolume(IntPtr hwo, out uint dwVolume);

[DllImport("winmm.dll")]
public static extern int waveOutSetVolume(IntPtr hwo, uint dwVolume);
维姆斯

SendKeys在Windows 10中停止为我工作(它实际上键入我的插入符号所在的数字)。我发现此博客帖子具有非常方便的实现方式。

首先,运行此命令以访问音频API:

Add-Type -TypeDefinition @'
using System.Runtime.InteropServices;
[Guid("5CDF2C82-841E-4546-9722-0CF74078229A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IAudioEndpointVolume
{
    // f(), g(), ... are unused COM method slots. Define these if you care
    int f(); int g(); int h(); int i();
    int SetMasterVolumeLevelScalar(float fLevel, System.Guid pguidEventContext);
    int j();
    int GetMasterVolumeLevelScalar(out float pfLevel);
    int k(); int l(); int m(); int n();
    int SetMute([MarshalAs(UnmanagedType.Bool)] bool bMute, System.Guid pguidEventContext);
    int GetMute(out bool pbMute);
}
[Guid("D666063F-1587-4E43-81F1-B948E807363F"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDevice
{
    int Activate(ref System.Guid id, int clsCtx, int activationParams, out IAudioEndpointVolume aev);
}
[Guid("A95664D2-9614-4F35-A746-DE8DB63617E6"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
interface IMMDeviceEnumerator
{
    int f(); // Unused
    int GetDefaultAudioEndpoint(int dataFlow, int role, out IMMDevice endpoint);
}
[ComImport, Guid("BCDE0395-E52F-467C-8E3D-C4579291692E")] class MMDeviceEnumeratorComObject { }
public class Audio
{
    static IAudioEndpointVolume Vol()
    {
        var enumerator = new MMDeviceEnumeratorComObject() as IMMDeviceEnumerator;
        IMMDevice dev = null;
        Marshal.ThrowExceptionForHR(enumerator.GetDefaultAudioEndpoint(/*eRender*/ 0, /*eMultimedia*/ 1, out dev));
        IAudioEndpointVolume epv = null;
        var epvid = typeof(IAudioEndpointVolume).GUID;
        Marshal.ThrowExceptionForHR(dev.Activate(ref epvid, /*CLSCTX_ALL*/ 23, 0, out epv));
        return epv;
    }
    public static float Volume
    {
        get { float v = -1; Marshal.ThrowExceptionForHR(Vol().GetMasterVolumeLevelScalar(out v)); return v; }
        set { Marshal.ThrowExceptionForHR(Vol().SetMasterVolumeLevelScalar(value, System.Guid.Empty)); }
    }
    public static bool Mute
    {
        get { bool mute; Marshal.ThrowExceptionForHR(Vol().GetMute(out mute)); return mute; }
        set { Marshal.ThrowExceptionForHR(Vol().SetMute(value, System.Guid.Empty)); }
    }
}
'@

然后像这样控制音量:

[audio]::Volume  = 0.2 # 0.2 = 20%, etc.

并像这样静音/取消静音:

[audio]::Mute = $true  # Set to $false to un-mute

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从Powershell更改音频电平?

来自分类Dev

使用portaudio设置音频输入电平

来自分类Dev

Web RTC流的音频电平表

来自分类Dev

检查当前的实时音频输出电平

来自分类Dev

使用 gnuplot 创建移动音频电平的动画

来自分类Dev

核心音频:音频单元可增强信号电平

来自分类Dev

核心音频:音频单元可增强信号电平

来自分类Dev

创建音频电平表-信号归一化

来自分类Dev

在iOS中通过音频电平反馈进行录音

来自分类Dev

开始播放WAV音频电平作为输出

来自分类Dev

如何选择“线路输入”音频输入并设置输入“音量”电平

来自分类Dev

如何使音频电平指示器可访问?

来自分类Dev

iPhone 4,录音后出现音频电平问题

来自分类Dev

在不同设备上从AudioRecord获得统一的音频电平

来自分类Dev

文本模式工具可查看音频输入电平

来自分类Dev

WebRTC:*无需播放音频即可获取mediaStream的音频电平

来自分类Dev

Windows 更新更改电压电平导致硬件损坏?

来自分类Dev

从iOS设备上当前正在播放的音乐中获取音频功率电平

来自分类Dev

如何在Java中计算音频信号的电平/幅度/ db?

来自分类Dev

不同计算机的音频输出电平是否一致?

来自分类Dev

更改音频片段的音量

来自分类Dev

AngularJS:更改音频结束类

来自分类Dev

在SKMaps中更改音频建议

来自分类Dev

在SKMaps中更改音频建议

来自分类Dev

.bat脚本更改音频输出?

来自分类Dev

从物理输入更改音频流

来自分类Dev

更改音频端的源 [多个音频] JS & jQuery

来自分类Dev

更改录制音频的音高和频率

来自分类Dev

使用ffmpeg更改复杂的音频音量