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 ...
随机推荐
- <div>标签仿<textarea>。contentEditable=‘true’,赋予非表单标签内容可以编辑
需求:web页面需要一个文本输入框.1.该文本输入框默认状态下有个仿‘placeholder’的默认文本提示信息,2.文本框输入状态下其高度会随文本内容自动撑开. 方案选择:1.使用<texta ...
- (双指针) leetcode 485. Max Consecutive Ones
Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...
- 05--STL序列容器(List)
一:List双向链表简介 list是一个双向链表容器,可高效地进行插入删除元素. list不可以随机存取元素,所以不支持at.(pos)函数与[]操作符.It++(ok) it+5(err)list不 ...
- ACM-ICPC 2018 沈阳赛区网络预赛 F Fantastic Graph(贪心或有源汇上下界网络流)
https://nanti.jisuanke.com/t/31447 题意 一个二分图,左边N个点,右边M个点,中间K条边,问你是否可以删掉边使得所有点的度数在[L,R]之间 分析 最大流不太会.. ...
- ccf 201712-4 行车路线(30分超时)
问题描述 小明和小芳出去乡村玩,小明负责开车,小芳来导航. 小芳将可能的道路分为大道和小道.大道比较好走,每走1公里小明会增加1的疲劳度.小道不好走,如果连续走小道,小明的疲劳值会快速增加,连续走s公 ...
- linux 性能分析
1.系统状态工具:sysstat, 包含很多监控linux系统状态的工具,pidstat 安装方法: sudo apt-get install sysstat 2.性能优化工具: perf 安装方法: ...
- python数字常量
数学常量 pi 数学常量 pi(圆周率,一般以π来表示) e 数学常量 e,e即自然常数(自然常数).
- 2018-2019-2 20165231《网络对抗技术》Exp0 Kali安装 Week1
下载Kali Linux系统 进入官网进入下载页面,因为我们是在虚拟机内使用,而官网已经为我们提供了VM版的所以我就直接下载了这个版本的. 根据官网提示使用管理员帐号root(密码为toor)登录,创 ...
- anylogic 常用模块及术语的使用
1.1 存量 创建存量变量 1. 在调色板视图下的Model页面中选择Stock 元素. 2. 在图形化编辑器中您所期望的位置点击鼠标,放置该存量. 3. 在属性视图下的Equation部分中,定义该 ...
- 24 Game
You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated ...