最近几年 Electron 很火,公司也正好有个项目想做跨平台客户端,大家研究了一下就选择了 Electron,第一次做 js 的项目遇到了不少坑,不过也都一点点解决了。

因为项目中需要对用户录音,HTML5 中的 API 又不支持调整麦克风音量,所以就对 Node js 操作 osx 系统麦克风、扬声器音量了解了一下,一开始在 npm 中找了很多包都是只能操作扬声器音量的,无法操作麦克风的音量,本来已经打算放弃了,缺无意间在网上看到 osx 系统下有自己的脚本——AppleScript,查看了官方文档之后发现 AppleScript 确实可以控制系统的音量,由于自己完全不懂 AppleScript,只能在 npm 寻找是否有现成的解决方案,终于在 npm 中搜索一番找到了 osx-volume-controls 这个包,经过改造终于实现了这个功能。

在 OS X 系统中测试一下设置扬声器和麦克风音量:

set volume output volume %s --100%
set volume input volume %s --100%

获取系统的音量信息:

input volume of (get volume settings) & output volume of (get volume settings) & output muted of (get volume settings)

osx-volume-controls 要依赖到 applescript 这个包,执行下面的命令安装到项目中:

 npm i -save applescript

具体类实现代码如下:

var applescript = require("applescript");

var scripts = {
state: "input volume of (get volume settings) & output volume of (get volume settings) & output muted of (get volume settings)",
volumeState: "output volume of (get volume settings)",
inputState: "input volume of (get volume settings)",
outputState: "output volume of (get volume settings)",
muteState: "output muted of (get volume settings)",
setOutput: "set volume output volume %s --100%",
setInput: "set volume input volume %s --100%",
increase: "set volume output volume (output volume of (get volume settings) + 10) --100%",
decrease: "set volume output volume (output volume of (get volume settings) - 10) --100%",
mute: "set volume with output muted",
unmute: "set volume without output muted"
}; var exec = function (script, callback) {
if (!callback) callback = function () {};
applescript.execString(script, callback);
}; var getScript = function (scriptName, param) {
var script = scripts[scriptName];
if (typeof param !== "undefined") script = script.replace("%s", param);
return script;
}; exports.state = function (callback) {
return exec(getScript("state"), callback);
}; exports.volumeState = function (callback) {
return exec(getScript("volumeState"), callback);
}; exports.inputState = function (callback) {
return exec(getScript("inputState"), callback);
}; exports.outputState = function (callback) {
return exec(getScript("outputState"), callback);
}; exports.muteState = function (callback) {
return exec(getScript("muteState"), callback);
}; exports.setOutput = function (volume, callback) {
return exec(getScript("setOutput", volume), callback);
}; exports.setInput = function (volume, callback) {
return exec(getScript("setInput", volume), callback);
}; exports.increase = function (callback) {
return exec(getScript("increase"), callback);
}; exports.decrease = function (callback) {
return exec(getScript("decrease"), callback);
}; exports.mute = function (callback) {
return exec(getScript("mute"), callback);
}; exports.unmute = function (callback) {
return exec(getScript("unmute"), callback);
};

使用方法(可以参照 osx-volume-controls 的文档):

    import volume from "../../utils/osxVolume.js";
volume.setInput(volumecontrol);

Node.js 操作 OSX 系统麦克风、扬声器音量的更多相关文章

  1. Node.js 操作Mongodb

    Node.js 操作Mongodb1.简介官网英文文档  https://docs.mongodb.com/manual/  这里几乎什么都有了MongoDB is open-source docum ...

  2. 在centos7中安装redis,并通过node.js操作redis

    引言 最近在学习node.js 连接redis的模块,所以尝试了一下在虚拟机中安装cent OS7,并安装redis,并使用node.js 操作redis.所以顺便做个笔记. 如有不对的地方,欢迎大家 ...

  3. node.js操作数据库之MongoDB+mongoose篇

    前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件 ...

  4. 使用node js 操作 Mysql 数据库

    使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...

  5. node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装

    第七章 建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  6. [Node.js]操作mysql

    摘要 上篇文章介绍了node.js操作redis的简单实例,这里介绍如何操作mysql. 安装 安装mysql模块 cnpm install mysql 一个例子 新建一个mysql.js的文件,代码 ...

  7. node.js操作Cookie

    node.js操作Cookie http://www.tuicool.com/articles/F3UF7n

  8. node.js安装——Windows7系统下的安装及其环境部署——特别详细

    作为一个前端的菜鸟同学,之间也没学过什么框架,目前公司做项目,所用到的webpack+node.js+vue. 首先,关于node的环境部署方面,建议官网安装node.js,最好不要安装非稳定版的版本 ...

  9. Node.js的模块系统

    编写稍大一点的程序时一般都会将代码模块化.Node.js提供了一个简单的模块系统.模块既可能是一个文件,也可能是包含一个或多个文件的目录. 模块的创建  如果模块是个文件,一般将代码合理拆分到不同的J ...

随机推荐

  1. 为什么天线的回波损耗以-10dB大小来衡量?

    传送门:http://www.eeworld.com.cn/Test_and_measurement/2014/0610/article_9152.html i:对于2端口无损耗网络,可以根据S11的 ...

  2. kms访问数据库的方式(该篇只是作为个人笔记,不具有任何公共参考意图)

    项目类型:winform 语言:C# 服务程序:webservice(webservice我本人也不了解,在下一章中会总结一下对它的概念的简单理解) 情景描述:简单创建一个窗体,实现学生信息(姓名.性 ...

  3. js中获取时间new date()的用法

    获取时间: var myDate = new Date();//获取系统当前时间 获取特定格式的时间: myDate.getYear(); //获取当前年份(2位) myDate.getFullYea ...

  4. IDEA 常用配置

    调节代码字体大小 设置:File --- Settings... --- Editor --- General --- 勾选Change font size(Zoom) with Ctrl + Mou ...

  5. crm 一级菜单排序,二级菜单选中并且展开,非菜单权限的归属,权限粒度控制到按钮级别

    排序 /rbac/templatetags/rbac.py from django import template from django.conf import settings import re ...

  6. day16,模块 , 用户管理系统 , 购物车程序 , 分页显示.

    #!/usr/bin/env python# -*- coding:utf-8 -*- # 1.列举你常见的内置函数."""强制转换:int() / str() / li ...

  7. BZOJ 5093[Lydsy1711月赛]图的价值 线性做法

    博主曾更过一篇复杂度为$O( k· \log k)$的多项式做法在这里 惊闻本题有$ O(k)$的神仙做法,说起神仙我就想起了于是就去学习了一波 幂与第二类斯特林数 推导看这里 $$ x^k=\sum ...

  8. flask学习(一)

    特点: 短小精悍,可扩展性强 依赖wsgi:werkzurg werkzurg示例: from werkzeug.wrappers import Request, Response from werk ...

  9. 2018-2019 网络对抗技术 20165231 Exp4 恶意代码分析

    实验目标 1.是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2.是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,systrac ...

  10. 支持向量机SVM——专治线性不可分

    SVM原理 线性可分与线性不可分 线性可分 线性不可分-------[无论用哪条直线都无法将女生情绪正确分类] SVM的核函数可以帮助我们: 假设‘开心’是轻飘飘的,“不开心”是沉重的 将三维视图还原 ...