如何通过castv2-client设置Google Home的播放音量?
解决Google Home播放音频音量过大且被程序覆盖的问题
问题根源
你的代码里明确写了client.setVolume({ level: 1 }),这里的level取值范围是0(静音)到1(最大音量),每次运行程序都会强制把设备音量设为最大值,这就是手动调低后又被恢复的原因。
解决方案
有两种处理方式,根据你的需求选择:
方式1:固定设置一个低音量
直接修改setVolume中的level值为0到1之间的小数,比如设置为0.3(对应30%音量):
// 替换原来的setVolume代码 client.setVolume({ level: 0.3 }, function (err, volume) { console.log("VOLUME", volume); if (err) { console.log("Error on setVolume:", err); } else { console.log("Sending new alert"); } });
你可以根据实际需求调整level的数值,比如0.2是20%,0.5是50%。
方式2:保留设备当前的音量
如果希望程序不修改设备的音量,直接使用用户手动设置的音量播放,删除整个client.setVolume代码块即可,这样程序就不会再强制覆盖设备的音量设置。
修改后的完整代码示例(以方式1为例)
var Client = require("castv2-client").Client; var DefaultMediaReceiver = require("castv2-client").DefaultMediaReceiver; const googleTTS = require("google-tts-api"); var cron = require("node-cron"); function broadcastMessage(message) { var App = { playin: false, DeviceIp: "", Player: null, GoogleHome: function (host, url) { var client = new Client(); client.connect(host, function () { client.launch(DefaultMediaReceiver, function (err, player) { // 修改这里的level值为你需要的音量 client.setVolume({ level: 0.3 }, function (err, volume) { console.log("VOLUME", volume); if (err) { console.log("Error on setVolume:", err); } else { console.log("Sending new alert"); } }); var media = { contentId: url, contentType: "audio/mp3", streamType: "BUFFERED", }; App.Player = player; App.Player.load(media, { autoplay: true }, function (err, status) { App.Player.on("status", function (status) { if (status.playerState === "IDLE" && App.playin === false) { client.close(); } }); }); }); }); client.on("error", function (err) { console.log("Error: %s", err.message); client.close(); }); }, run: function (ip, text) { App.DeviceIp = ip; const url = googleTTS.getAudioUrl(text, { lang: "en-US", slow: false, host: "https://translate.google.com", }); App.GoogleHome(App.DeviceIp, url, function (res) { console.log(res); }); }, broadcast: function (text) { const ip = "192.168.0.17"; App.run(ip, text); }, }; App.broadcast(message); setTimeout(() => { App.broadcast(message); }, 4000); } module.exports = { broadcastMessage, }; broadcastMessage("Incoming message");
内容的提问来源于stack exchange,提问作者user6680
相关产品推荐
相关产品推荐

