Node.js 操作 OSX 系统麦克风、扬声器音量
最近几年 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 系统麦克风、扬声器音量的更多相关文章
- Node.js 操作Mongodb
Node.js 操作Mongodb1.简介官网英文文档 https://docs.mongodb.com/manual/ 这里几乎什么都有了MongoDB is open-source docum ...
- 在centos7中安装redis,并通过node.js操作redis
引言 最近在学习node.js 连接redis的模块,所以尝试了一下在虚拟机中安装cent OS7,并安装redis,并使用node.js 操作redis.所以顺便做个笔记. 如有不对的地方,欢迎大家 ...
- node.js操作数据库之MongoDB+mongoose篇
前言 node.js的出现,使得用前端语法(javascript)开发后台服务成为可能,越来越多的前端因此因此接触后端,甚至转向全栈发展.后端开发少不了数据库的操作.MongoDB是一个基于分布式文件 ...
- 使用node js 操作 Mysql 数据库
使用node js 操作 Mysql 数据库 http://www.nodejs.org/ //node js 数据库操作 MySQL //使用https://github.com/felixge/n ...
- node.js零基础详细教程(7):node.js操作mongodb,及操作方法的封装
第七章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- [Node.js]操作mysql
摘要 上篇文章介绍了node.js操作redis的简单实例,这里介绍如何操作mysql. 安装 安装mysql模块 cnpm install mysql 一个例子 新建一个mysql.js的文件,代码 ...
- node.js操作Cookie
node.js操作Cookie http://www.tuicool.com/articles/F3UF7n
- node.js安装——Windows7系统下的安装及其环境部署——特别详细
作为一个前端的菜鸟同学,之间也没学过什么框架,目前公司做项目,所用到的webpack+node.js+vue. 首先,关于node的环境部署方面,建议官网安装node.js,最好不要安装非稳定版的版本 ...
- Node.js的模块系统
编写稍大一点的程序时一般都会将代码模块化.Node.js提供了一个简单的模块系统.模块既可能是一个文件,也可能是包含一个或多个文件的目录. 模块的创建 如果模块是个文件,一般将代码合理拆分到不同的J ...
随机推荐
- cucumber学习笔记
来源于cucumber官网 学习完了之后全部整理一遍
- 四、docker-compose的编程模版
这里,我给大家提供一个我自己编写的docker-compose的模版,目前我用的是pycharm进行开发,那么可以自定义一个yaml格式的文件,方便今后开发使用. #https://blog.csdn ...
- woe_iv原理和python代码建模
python信用评分卡(附代码,博主录制) https://study.163.com/course/introduction.htm?courseId=1005214003&utm_camp ...
- MapReduce-CombineTextInputFormat 切片机制
MapReduce 框架默认的 TextInputFormat 切片机制是对任务按文件规划切片,如果有大量小文件,就会产生大量的 MapTask,处理小文件效率非常低. CombineTextInpu ...
- ConcurrentHashMap扩容
然后,说说精华的部分. Cmap 支持并发扩容,实现方式是,将表拆分,让每个线程处理自己的区间.如下图: 假设总长度是 64 ,每个线程可以分到 16 个桶,各自处理,不会互相影响. 而每个线 ...
- HDU - 3035 War(对偶图求最小割+最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3035 题意 给个图,求把s和t分开的最小割. 分析 实际顶点和边非常多,不能用最大流来求解.这道题要用 ...
- centos7通过nginx搭建SSL
今天给大家带来的是一篇关于通过nginx搭建HTTPS访问转跳后端HTTP的教程,部署方式如下: 安装基础组件yum -y isntall firewalldyum -y install gcc gc ...
- VS 测试printf 多参数 输出 i++ 和++i 结果
代码如截图: 总结: printf 多参数中有运算时 是从右到左执行的: i++ 和 ++i 优先级是大于 赋值 =运算的: i++ 和++i 是平级的: i++ 先用在算,++i 先算在用: 从右往 ...
- #20175204 张湲祯 2018-2019-2《Java程序设计》第五周学习总结
20175204 张湲祯 2018-2019-2<Java程序设计>第五周学习总结 教材学习内容总结 -第六章接口与实现要点: -接口: 1.使用关键字interface定义接口. 2.接 ...
- rsyncd启动脚本
#!/bin/bash ############################################################## # File Name: -.sh # Versi ...