From 2a0bdba0846bd0db58dd199d74b37cbe35d627de Mon Sep 17 00:00:00 2001 From: Peter Tanner Date: Thu, 25 Jul 2024 02:42:27 +0800 Subject: [PATCH] New posts: _posts/2024-07-25-Echo360-Super-Speed-Userscript-released.md --- ...Echo360-Super-Speed-Userscript-released.md | 34 ++++++++++++++++++ .../superspeed.png | Bin 0 -> 15468 bytes 2 files changed, 34 insertions(+) create mode 100644 _posts/2024-07-25-Echo360-Super-Speed-Userscript-released.md create mode 100644 assets/img/2024-07-25-Echo360-Super-Speed-/superspeed.png diff --git a/_posts/2024-07-25-Echo360-Super-Speed-Userscript-released.md b/_posts/2024-07-25-Echo360-Super-Speed-Userscript-released.md new file mode 100644 index 0000000..9323b03 --- /dev/null +++ b/_posts/2024-07-25-Echo360-Super-Speed-Userscript-released.md @@ -0,0 +1,34 @@ +--- +title: Echo360 Super Speed Userscript released! +author: peter +date: 2024-07-25 02:35:04 +0800 +categories: [Programming] # Blogging | Electronics | Programming | Mechanical | SelfHosting +tags: [extension, userscript, browser] # systems | embedded | rf | microwave | electronics | solidworks | automation | tip +image: /assets/img/2024-07-25-Echo360-Super-Speed-/superspeed.png +--- + +I've just made a userscript which allows you to set the speed of the Echo360 lecture player over the 2x maximum. By default, the script lets you set the player speed to 4x and 3x in addition to the default set of speeds, but you may customize the dropdown to have any speed you want (subject to browser limits). + +![superspeed](/assets/img/2024-07-25-Echo360-Super-Speed-/superspeed.png) + +**Install the script from [GitHub](https://github.com/peter-tanner/Echo360-Super-Speed/raw/master/echo360-super-speed.user.js) or [Greasyfork](https://greasyfork.org/en/scripts/501694-echo360-super-speed)** + +Note that you need to be using firefox since this script uses the `beforescriptexecute` hook. If there's a way to do this without the hook do get in touch, but since I use firefox and this looks like the easiest way to do the script, this is what I've used. + +In short, the script works by intercepting the `echoPlayerV2FullApp.react-bundle.js` file, modifying it to contain the new list of speeds, then calls the modified code by putting the modified code in a script tag in the head. + +## Adding your own speeds + +Open the userscript file, then modify the `selected_speeds` and/or `speed_hotkey_increment` constants which are in the `USER CUSTOMIZATION` section. + +For example, if I wanted only 4x, 3x and 2x options, I can replace the `selected_speeds` constant with the following: + +```js +const selected_speeds = [4, 3, 2]; +``` + +⚠ Note that there is a browser set limit of 16x, and speeds above 4x are muted, according to [these constants in the firefox source code](https://searchfox.org/mozilla-central/rev/f1c881ba5603410dacbe52874053af38bd825c3b/dom/html/HTMLMediaElement.cpp#179-183) + +## Current issues + +- When setting `selected_speeds` to a list of speeds which does not include 1x, the player by default loads with 1x speed when the page is loaded. Once the speed is changed manually by clicking on a speed from the dropdown this is not an issue anymore, but it would be nice if the default speed was valid. diff --git a/assets/img/2024-07-25-Echo360-Super-Speed-/superspeed.png b/assets/img/2024-07-25-Echo360-Super-Speed-/superspeed.png new file mode 100644 index 0000000000000000000000000000000000000000..e2046eca1c02f7f6b35a5326ddbb940a9d813361 GIT binary patch literal 15468 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