A music player written in electron that allows storing lyrics with songs and searching by lyrics.
A simple music player in electron
Music is loaded from ~/Music/***.mp3 by default.
Supports linux and maybe other operating systems if you're lucky.
# Clone this repository git clone https://github.com/pfgithub/electron-music-player # Go into the repository cd electron-music-player # Install dependencies yarn install # Build the app yarn build # Run the app yarn start
Edit lyrics and album art
- a writable
/tmpdir for setting album art (TODO fix)
- a scroll wheel (the scrollbar is broken, TODO fix)
Choose whether to copy from a local file or download from youtube-dl.
ffmpegif used on a youtube video
soxif tempo is not set to 1.0
- coreutils (
Supports linux and maybe mac and probably not windows.
Start a search with
! to match exact text. Start a search with
/ to match regex (slow).
Music list sidebar
Click the thing to skip to the end of the queue and play immediately, press the
+ button to add to the end of the
Configure a global hotkey manager, eg
- mac: skhd
- windows: google.com
- linux: idk, I'm using ckb-next for single keys and i3 for hotkeys
Then, bind keys of your choosing to:
node /path/to/electron-music-player/src/ipc.js [command]
command can be any of:
I have scroll lock/pause break bound to prev/next, page up bound to playpause, and page down bound to randomfiltertoggle.
Additionally, there is
musicplayer-msg listall/listqueue/playsong/queue. Usage example (fish shell + rofi command)
node …/src/ipc.js playsong (node …/src/ipc.js listall | rofi -dmenu -i)
node …/src/ipc.js queue (node …/src/ipc.js listall | rofi -dmenu -i)
Switching next modes:
musicplayer-msg setnextmode (musicplayer-msg listnextmodes | rofi -dmenu -i)
yarn build-watch to automatically build when you change a file. Use an editor plugin to see typescript errors
(also don't use atom because it will run at <15fps)
Likely the only file you have to edit is
src/player.ts. The window is created in
src/main.ts, so edit that if you
need to create new windows or adjust hotkeys.
things that might be done in the future if I ever get too tired of not having them:
- switch to webpack because the current build process is a mess
- option to load album art from a local file
- option to load album art from the clipboard
- sort the sidebar
- highlight search match locations in the lyrics display
- add the ability to trim audio files (interactive editor - pick start and end location, test that start and end locations are correct, trim by running ffmpeg)
- ui improvements, especially for the edit and add pages so they don't look so disorganized.
- full keyboard control (eg tab+enter works to select things from the list, ctrl+s to save and close the edit screen, escape to cancel, tab works to select the plus button on things, …)
- option to associate time codes with lyrics (using the edit button) and then the reverse, clicking a lyric to jump to the time code
- resize images to like at most 128x128 or 256x256 or something so there aren't images that are literally 5mb
things that would be good to do but I probably won't ever need:
- use mktempdir instead of
/tmpfor writing album art
- update metadata on play to prevent outdated things from showing
- show the duration and a scrubber for playing things
- support non-mp3 files
- ability to choose the folder it loads things from
- tagging and stuff (manual text tags are good enough for now, I would want real tagging to use a seperate data file/database so adding a tag does not rewrite the mp3 file)
- shuffle weighting and ability to set a shuffle target or something. oh and don't play the same thing twice in a row.