开发者

Increase (youtube flash) video's sound volume by means of JavaScript

Background story: many users (including me) browse the web from notebooks that are not constructed for sound performance. 开发者_运维知识库That means (besides other things) that the sound volume for most videos is too low, especially if the video itself is recorded at low volume.

Therefore...

I was wondering if there is any way of increasing the volume of such a video (especially Youtube, but could be extended to other types), because I'm interested in doing it and even publishing it as Firefox/Chrome/other browser plug-in.

Or, alternatively, if you know such a plug-in do not hesitate to post the link here.


If you want to control system volume then JavaScript has no direct access to it, you would need to write NPAPI (C++ dll) plugin.

If you want to just adjust video player's own volume (you won't be able to increase it beyond 100%) then JavaScript can do it, perhaps.

If video player is HTML5 <video> tag then controlling volume is easy. For YouTube it would be:

document.getElementsByClassName("video-stream")[0].volume = 0.5; //50%

If it is a custom made flash player then you need to rely on its JavaScript interface, if any. Youtube player happens to support controlling volume with JavaScript:

document.getElementById("movie_player").setVolume(50);

In order for this to work you would need to break out of extension sandbox first by injecting <script> tag on the page with this code.

There is no universal solution, you would need to deal with each site individually.


Use VLC Media Player. You can copy and paste links into it. Increase sound to up to 250%


You can use js-ctypes to change system's volume level. Here is an example that sets volume to 12.5%:

Components.utils.import("resource://gre/modules/ctypes.jsm");
var lib = ctypes.open("winmm.dll");
var waveOutSetVolume = lib.declare("waveOutSetVolume", ctypes.default_abi,
                                   ctypes.uint32_t,
                                   ctypes.int32_t, ctypes.uint32_t);
waveOutSetVolume(-1, 0x20002000);
lib.close();

However, this only changes the volume for the Firefox process. It won't have any effect on Flash because it runs in a different process now. I'm not even sure whether winmm has some way to change the global volume at all, you might need the new MMDevice API for that - and then it gets complicated because doing COM calls via js-ctypes IMHO isn't possible. Only option is creating your own library to be distributed along with your extension. That should do the COM messaging and export a plain API that can be called via js-ctypes.


You can use Sound Booster software by Letasoft, but there are some things you might encounter like crash, we are using netbooks so the built-in sound card has limit. So try to buff first before playing that's the best advice that I can give. The max volume output will be 500%.


I found this

javascript:((v,a=new AudioContext(),g=a.createGain())=>(window._g??(c=>(a.createMediaElementSource(document.querySelector('video'))[c](g),g[c](a.destination),window._g=g))("connect")).gain.value=v??1)(parseFloat(prompt("Enter gain level",window._g?.gain.value)));

If you are using Chrome, then you can:

  • Right-click and choose Inspect. Or simply press F12.
  • Go to Console.
  • Paste this code.
  • Press Enter.
  • A message will appear, type what level you want (0.5 - 1 - 2 - 3 - ...), and press Enter.

For more about AudioContext.createGain(): Go Here

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜