如何在 SoundCloud 上使用 setVolume()

How to use setVolume() on SoundCloud

我想在 SoundCloud 上使用 setVolume(0.01),因为它对我来说太吵了。 作为临时解决方案,我让整个 Chrome 浏览器更安静,但是 Youtube 和其他网站太安静了。

我发现 SoundCloud 的音量可以通过 "SC.Widget method" 控制,但我不知道那是什么。

谁能解释一下我如何使用它来将 SoundCloud 的音量设置为 0.01?

我已经尝试将它放在 Chrome 控制台中,但这给了我以下信息:VM1394:1 Uncaught ReferenceError: setVolume is not defined(…)

要使用脚本在 Soundcloud 网站 上更改音量,您无法使用真正的 API,也没有官方方法可以这样做。这应该有效:

webpackJsonp([], {
    0: function(a, b, require) {
        var modules = require.c;
        modules[54].exports.broadcast("volume:set", 0.1);
    }
});

因为 Soundcloude 代码被缩小并且不能被其他脚本使用,所以上述解决方案可能会因如下错误而中断:

Uncaught TypeError: modules[54].exports.broadcast is not a function(…)

一个 hacky 解决方案是遍历所有模块并执行 volume:set 广播:

webpackJsonp([], {
    0: function(a, b, require) {
        var modules = require.c;
        for(var x in modules){
            if(modules[x].exports.broadcast){
                modules[x].exports.broadcast("volume:set", 1.0);
            }
        }
    }
});

要在 Soundcloud 小部件 上更改音量:

HTML5 小部件 API 解释 here. What you need to do first is include Soundcloud's API script, you can use this code which I borrowed from here:

var scapi = document.createElement('script');
scapi.src = "https://w.soundcloud.com/player/api.js";
document.getElementsByTagName('head')[0].appendChild(scapi);

下一步是找到 Soundcloud 小部件并使用 API 脚本来获取我们需要的功能,即 setVolume():

var sciframe = document.querySelector("iframe");
var widget = SC.Widget(sciframe);
widget.setVolume(0.1); // goes from 0 to 1

您可以将其用作 Greasemonkey 或 Tampermonkey 的用户脚本,并且 运行 它会自动:

var scapi = document.createElement('script');
scapi.src = "https://w.soundcloud.com/player/api.js";
document.getElementsByTagName('head')[0].appendChild(scapi);

function waitAndRegister() {
    window.setTimeout(function(){ 
    if(typeof(SC) == 'undefined') { 
            waitAndRegister();
        } else {
            quiet();
        }
    }, 100);
};
waitAndRegister();

function quiet() {
    var scWidgets = document.querySelectorAll('iframe[src^="https://w.soundcloud.com/player"]');
    if(scWidgets.length > 0) {
      for (var i = 0; i < scWidgets.length; ++i) {
        var widget = SC.Widget(scWidgets[i]);
        widget.bind(SC.Widget.Events.PLAY, function() {
          widget.setVolume(0.1);
        });
      }
    }
}

Chrome > ctrl+shift+i > 应用程序选项卡 > 存储 > 本地存储 > V2::local::settings

并设置您需要的音量(例如:音量":0.05,")

对我来说就像一个魅力。