Documentation
¶
Overview ¶
Command mixmusic is a desktop music player that brings Spotify and YouTube Music together in one customizable interface.
Package native draws MixMusic's native interface, a beta beside the web one: windows MyGo draws itself with its ui package, without a webview. They show what the web interface shows, from the same services, and play through the queue in Go (internal/player).
Source Files
¶
- accounts.go
- artwork.go
- capture.go
- cast.go
- collection.go
- color.go
- colorfile.go
- commands.go
- compacthead.go
- desktop.go
- dialog.go
- downloads.go
- downloadsync.go
- effects.go
- episodedetails.go
- explore.go
- fonts.go
- format.go
- globalkeys.go
- home.go
- icons.go
- layout.go
- library.go
- lyricsromaji.go
- lyricsromanize.go
- lyricstranslate.go
- lyricswords.go
- main.go
- marketplace.go
- material.go
- mini.go
- minivolume.go
- native.go
- notch.go
- notch_other.go
- notchclose.go
- notchplace.go
- nowplaying.go
- panel.go
- playerbar.go
- playlistread.go
- plugins.go
- pluginui.go
- podcasts.go
- pullrefresh.go
- rail.go
- refresh.go
- search.go
- settings.go
- settings_about.go
- settings_appearance.go
- settings_colorfile.go
- settings_crossfade.go
- settings_dislike.go
- settings_equalizer.go
- settings_loudness.go
- settings_notch.go
- settings_playback.go
- settings_podcastspeed.go
- settings_skipai.go
- settings_speed.go
- settings_surround.go
- settings_videos.go
- settingsfile.go
- settingsfind.go
- shell.go
- speed.go
- stats.go
- theme.go
- themefx.go
- tiles.go
- tools.go
- topbar.go
- tracks.go
- tracktools.go
- video.go
- volume.go
- widgets.go
- zoom.go
Directories
¶
| Path | Synopsis |
|---|---|
|
Package aac decodes AAC-LC audio (ISO/IEC 14496-3), such as the AAC YouTube serves in MP4 (itag 140): a pure Go decoder derived from SharpJaad, the C# port of JAAD, under the MIT license of LICENSE.sharpjaad.
|
Package aac decodes AAC-LC audio (ISO/IEC 14496-3), such as the AAC YouTube serves in MP4 (itag 140): a pure Go decoder derived from SharpJaad, the C# port of JAAD, under the MIT license of LICENSE.sharpjaad. |
|
Package ac3 decodes AC-3 and E-AC-3 audio, of ATSC A/52 and its Annex E, such as the 5.1 surround YouTube serves in MP4 (formats 380 and 328): a pure Go decoder written from the published standards, ATSC A/52:2012 and ETSI TS 102 366 V1.4.1.
|
Package ac3 decodes AC-3 and E-AC-3 audio, of ATSC A/52 and its Annex E, such as the 5.1 surround YouTube serves in MP4 (formats 380 and 328): a pure Go decoder written from the published standards, ATSC A/52:2012 and ETSI TS 102 366 V1.4.1. |
|
Package builtin holds the add-ons MixMusic ships with, laid out as the add-ons folder of the user: themes/<id>/theme.json and its files.
|
Package builtin holds the add-ons MixMusic ships with, laid out as the add-ons folder of the user: themes/<id>/theme.json and its files. |
|
internal
|
|
|
addons
Package addons manages themes and plugins: those MixMusic ships with, those the user installs from the community registry, and those they put in the add-ons folder themselves.
|
Package addons manages themes and plugins: those MixMusic ships with, those the user installs from the community registry, and those they put in the add-ons folder themselves. |
|
app
Package app wires MixMusic together: the services its windows call, the player, and its place on the desktop: windows, the tray, media keys and notifications.
|
Package app wires MixMusic together: the services its windows call, the player, and its place on the desktop: windows, the tray, media keys and notifications. |
|
artwork
Package artwork downloads artwork, keeps it on disk, and picks its color, which themes use as the accent of what plays.
|
Package artwork downloads artwork, keeps it on disk, and picks its color, which themes use as the accent of what plays. |
|
audio
Package audio is MixMusic's own audio engine: it plays the audio YouTube serves, Opus in WebM files and AAC-LC in MP4 ones, and the AAC-LC of the HLS packed audio of its live streams, on two decks, so that one track can fade into the next, each loud track turned down to an even loudness and each at its speed, at its own pitch, through the preamp, equalizer, levelling and analyser of the web player MixMusic had, whose Web Audio nodes it reproduces.
|
Package audio is MixMusic's own audio engine: it plays the audio YouTube serves, Opus in WebM files and AAC-LC in MP4 ones, and the AAC-LC of the HLS packed audio of its live streams, on two decks, so that one track can fade into the next, each loud track turned down to an even loudness and each at its speed, at its own pitch, through the preamp, equalizer, levelling and analyser of the web player MixMusic had, whose Web Audio nodes it reproduces. |
|
audio/output
Package output plays the native engine's audio on the system's default output device, as float32 stereo at 48 kHz, or 5.1 where the device has it, which the system converts to the device's own format, following the default device when the user changes it: through WASAPI on Windows, an Audio Queue on macOS, and PulseAudio, which PipeWire serves as well, or else ALSA on Linux.
|
Package output plays the native engine's audio on the system's default output device, as float32 stereo at 48 kHz, or 5.1 where the device has it, which the system converts to the device's own format, following the default device when the user changes it: through WASAPI on Windows, an Audio Queue on macOS, and PulseAudio, which PipeWire serves as well, or else ALSA on Linux. |
|
cast
Package cast plays on cast devices: Chromecasts, Google Home and Nest speakers, and TVs with Chromecast built in.
|
Package cast plays on cast devices: Chromecasts, Google Home and Nest speakers, and TVs with Chromecast built in. |
|
cast/casttest
Package casttest has a fake cast device for tests: a TLS server on the loopback address that speaks the Cast v2 protocol as a device does, with a default media receiver, and keeps the messages it gets; and an mDNS responder that answers for it.
|
Package casttest has a fake cast device for tests: a TLS server on the loopback address that speaks the Cast v2 protocol as a device does, with a default media receiver, and keeps the messages it gets; and an mDNS responder that answers for it. |
|
colorfile
Package colorfile reads the colours of a file that a tool makes of the wallpaper, for MixMusic to wear over the theme's: pywal's colors.json, matugen's JSON, and MixMusic's own tokens, as its matugen template and a theme.json write them.
|
Package colorfile reads the colours of a file that a tool makes of the wallpaper, for MixMusic to wear over the theme's: pywal's colors.json, matugen's JSON, and MixMusic's own tokens, as its matugen template and a theme.json write them. |
|
diag
Package diag keeps what helps tell what went wrong: a log file of what MixMusic reports, without the secrets it may hold, and the report Go writes when MixMusic crashes, which the next start offers to send.
|
Package diag keeps what helps tell what went wrong: a log file of what MixMusic reports, without the secrets it may hold, and the report Go writes when MixMusic crashes, which the next start offers to send. |
|
discord
Package discord shows what MixMusic plays on the user's Discord profile, as Rich Presence.
|
Package discord shows what MixMusic plays on the user's Discord profile, as Rich Presence. |
|
downloads
Package downloads keeps the tracks the user chooses to play without the network, apart from the offline cache, which keeps what played lately and drops it as it fills: a folder of their audio and covers, with an index of what it holds.
|
Package downloads keeps the tracks the user chooses to play without the network, apart from the offline cache, which keeps what played lately and drops it as it fills: a folder of their audio and covers, with an index of what it holds. |
|
hct
Package hct is Material's colour science: CAM16, the colour appearance model, and HCT, its hue and chroma with L*'s tone, in which Material makes tonal palettes and the colour roles of a scheme from one seed colour.
|
Package hct is Material's colour science: CAM16, the colour appearance model, and HCT, its hue and chroma with L*'s tone, in which Material makes tonal palettes and the colour roles of a scheme from one seed colour. |
|
keypad
Package keypad hands a window Ctrl and the keypad's + on Windows and Linux, which MyGo gives its windows as no key, as it has none for it (#251): Ctrl and the keypad's − reach them as Ctrl and −, which zoom out, while Ctrl and the keypad's + couldn't zoom in.
|
Package keypad hands a window Ctrl and the keypad's + on Windows and Linux, which MyGo gives its windows as no key, as it has none for it (#251): Ctrl and the keypad's − reach them as Ctrl and −, which zoom out, while Ctrl and the keypad's + couldn't zoom in. |
|
lastfm
Package lastfm scrobbles what MixMusic plays to Last.fm.
|
Package lastfm scrobbles what MixMusic plays to Last.fm. |
|
library
Package library keeps what the user collects in MixMusic itself, across services: liked and disliked tracks, playlists that mix tracks of every service, the history of what they played, their recent searches, the podcasts they follow and where they left their episodes.
|
Package library keeps what the user collects in MixMusic itself, across services: liked and disliked tracks, playlists that mix tracks of every service, the history of what they played, their recent searches, the podcasts they follow and where they left their episodes. |
|
match
Package match finds a Spotify track's recording on YouTube Music, so that Spotify tracks play through MixMusic's own player, with its equalizer, crossfade and visualizer, and without Spotify Premium.
|
Package match finds a Spotify track's recording on YouTube Music, so that Spotify tracks play through MixMusic's own player, with its equalizer, crossfade and visualizer, and without Spotify Premium. |
|
media
Package media defines the catalog that every music source shares: tracks, albums, artists and playlists, whichever service they come from.
|
Package media defines the catalog that every music source shares: tracks, albums, artists and playlists, whichever service they come from. |
|
nowplaying
Package nowplaying shows what MixMusic's own audio engine plays in the system's media controls, and passes on what they ask: macOS's Now Playing, which Control Center, the media keys and headphones reach, an MPRIS player on Linux, which desktops show and pass their media keys to, and Windows' media flyout, which the volume keys and Quick Settings show.
|
Package nowplaying shows what MixMusic's own audio engine plays in the system's media controls, and passes on what they ask: macOS's Now Playing, which Control Center, the media keys and headphones reach, an MPRIS player on Linux, which desktops show and pass their media keys to, and Windows' media flyout, which the volume keys and Quick Settings show. |
|
online
Package online tells whether the network answers: whether YouTube or Spotify do, as a check over HTTPS tells, or as audio arriving shows.
|
Package online tells whether the network answers: whether YouTube or Spotify do, as a check over HTTPS tells, or as audio arriving shows. |
|
player
Package player plays MixMusic's queue: one queue of tracks of every service, played by MixMusic's own audio engine, or on a Spotify device, a Spotify Connect device or MixMusic itself, as each track needs.
|
Package player plays MixMusic's queue: one queue of tracks of every service, played by MixMusic's own audio engine, or on a Spotify device, a Spotify Connect device or MixMusic itself, as each track needs. |
|
player/playertest
Package playertest holds doubles of the player's interfaces that do nothing, for tests, as net/http/httptest holds HTTP's: Services, Stream and Device.
|
Package playertest holds doubles of the player's interfaces that do nothing, for tests, as net/http/httptest holds HTTP's: Services, Stream and Device. |
|
plugins
Package plugins runs MixMusic's plugins: each in a JavaScript runtime of its own (sobek, an ECMAScript engine in Go), on a goroutine of its own, with the API of docs/plugins.md.
|
Package plugins runs MixMusic's plugins: each in a JavaScript runtime of its own (sobek, an ECMAScript engine in Go), on a goroutine of its own, with the API of docs/plugins.md. |
|
portal
Package portal asks the desktop's XDG portals for what MixMusic can't do by itself inside a Flatpak's sandbox: to keep running without a window, and to start when the user logs in, which the Background portal decides.
|
Package portal asks the desktop's XDG portals for what MixMusic can't do by itself inside a Flatpak's sandbox: to keep running without a window, and to start when the user logs in, which the Background portal decides. |
|
proc
Package proc starts helper programs, such as yt-dlp, without showing a console window for them on Windows.
|
Package proc starts helper programs, such as yt-dlp, without showing a console window for them on Windows. |
|
romaji
Package romaji writes Japanese in Latin letters, as Hepburn romaji: kana by a table, and kanji by the readings the morphological analyser kagome finds in the IPA dictionary, which MixMusic downloads the first time romaji is turned on (Dictionary).
|
Package romaji writes Japanese in Latin letters, as Hepburn romaji: kana by a table, and kanji by the readings the morphological analyser kagome finds in the IPA dictionary, which MixMusic downloads the first time romaji is turned on (Dictionary). |
|
romanize
Package romanize writes lines of lyrics in Latin letters on the computer, script by script, each by the official or the most used standard of its language, as it reads for singing along:
|
Package romanize writes lines of lyrics in Latin letters on the computer, script by script, each by the official or the most used standard of its language, as it reads for singing along: |
|
settings
Package settings defines the user's preferences and their defaults.
|
Package settings defines the user's preferences and their defaults. |
|
spotify
Package spotify reads the Spotify catalog and the user's library through the Spotify Web API, and plays tracks on Spotify Connect devices.
|
Package spotify reads the Spotify catalog and the user's library through the Spotify Web API, and plays tracks on Spotify Connect devices. |
|
store
Package store keeps values in JSON files.
|
Package store keeps values in JSON files. |
|
stream
Package stream finds the audio streams of YouTube videos, through YouTube's player API as YouTube's visionOS app, else with yt-dlp, and serves them to the player's audio element through a local scheme, with range requests, so it can seek.
|
Package stream finds the audio streams of YouTube videos, through YouTube's player API as YouTube's visionOS app, else with yt-dlp, and serves them to the player's audio element through a local scheme, with range requests, so it can seek. |
|
sysproxy
Package sysproxy picks the proxy of MixMusic's requests: the one the environment names, as Go's own clients do, and on Windows, failing that, the one set in Windows' settings, which browsers, WebView2 and yt-dlp use too.
|
Package sysproxy picks the proxy of MixMusic's requests: the one the environment names, as Go's own clients do, and on Windows, failing that, the one set in Windows' settings, which browsers, WebView2 and yt-dlp use too. |
|
taskbar
Package taskbar puts the player's buttons on the thumbnail of a window's taskbar button, which Windows shows while the pointer rests on the button: previous, play or pause, and next, as music players have them there.
|
Package taskbar puts the player's buttons on the thumbnail of a window's taskbar button, which Windows shows while the pointer rests on the button: previous, play or pause, and next, as music players have them there. |
|
tools
Package tools finds and installs the programs MixMusic runs: yt-dlp, which finds the audio streams YouTube's player API won't give MixMusic itself, and a JavaScript runtime, which yt-dlp needs to solve the challenges YouTube sends.
|
Package tools finds and installs the programs MixMusic runs: yt-dlp, which finds the audio streams YouTube's player API won't give MixMusic itself, and a JavaScript runtime, which yt-dlp needs to solve the challenges YouTube sends. |
|
volume
Package volume is the curve of MixMusic's volume: what a position of the slider, from 0 to 1, sounds like, and how settings.json keeps it.
|
Package volume is the curve of MixMusic's volume: what a position of the slider, from 0 to 1, sounds like, and how settings.json keeps it. |
|
youtube
Package youtube reads YouTube Music's catalog through InnerTube, the API the YouTube Music website itself uses: search, the home feed, albums, artists, playlists and radios.
|
Package youtube reads YouTube Music's catalog through InnerTube, the API the YouTube Music website itself uses: search, the home feed, albums, artists, playlists and radios. |
|
Package lyrics finds the lyrics of tracks on Unison and LRCLIB, open databases of lyrics synchronized to the music, and reads the TTML and LRC formats they come in.
|
Package lyrics finds the lyrics of tracks on Unison and LRCLIB, open databases of lyrics synchronized to the music, and reads the TTML and LRC formats they come in. |
|
Package mp4 reads the audio of MP4 files, of the ISO base media file format (ISO/IEC 14496-12 and 14496-14), such as the AAC audio YouTube serves (itags 139 and 140), and its 5.1 surround in AC-3 and E-AC-3 (380 and 328): the packets of their first audio track, with their times, and seeking by their sample tables or segment indexes.
|
Package mp4 reads the audio of MP4 files, of the ISO base media file format (ISO/IEC 14496-12 and 14496-14), such as the AAC audio YouTube serves (itags 139 and 140), and its 5.1 surround in AC-3 and E-AC-3 (380 and 328): the packets of their first audio track, with their times, and seeking by their sample tables or segment indexes. |
|
Package opus decodes Opus audio (RFC 6716 and RFC 8251): a pure Go port of the decoder of libopus 1.6.1, float build, under the BSD license of LICENSE.libopus.
|
Package opus decodes Opus audio (RFC 6716 and RFC 8251): a pure Go port of the decoder of libopus 1.6.1, float build, under the BSD license of LICENSE.libopus. |
|
internal/celt
Package celt is the CELT decoder of Opus (RFC 6716, section 4.3), the codec of music and of the high band of hybrid frames: a port of libopus 1.6.1's float build, under the BSD license of opus/LICENSE.libopus.
|
Package celt is the CELT decoder of Opus (RFC 6716, section 4.3), the codec of music and of the high band of hybrid frames: a port of libopus 1.6.1's float build, under the BSD license of opus/LICENSE.libopus. |
|
internal/opustest
Package opustest checks decoders against the Opus test vectors of RFC 8251: their files, and the quality metric of libopus's opus_compare, which decides whether a decoder conforms.
|
Package opustest checks decoders against the Opus test vectors of RFC 8251: their files, and the quality metric of libopus's opus_compare, which decides whether a decoder conforms. |
|
internal/rangedec
Package rangedec is the range decoder of Opus (RFC 6716, section 4.1), which SILK and CELT read their symbols with: a port of entdec.c and entcode.c of libopus.
|
Package rangedec is the range decoder of Opus (RFC 6716, section 4.1), which SILK and CELT read their symbols with: a port of entdec.c and entcode.c of libopus. |
|
internal/silk
Package silk is the SILK decoder of Opus (RFC 6716, section 4.2): a port of the SILK decoder of libopus 1.6.1 as its default float build compiles it (no deep PLC, OSCE, DRED or QEXT), under the BSD license of opus/LICENSE.libopus.
|
Package silk is the SILK decoder of Opus (RFC 6716, section 4.2): a port of the SILK decoder of libopus 1.6.1 as its default float build compiles it (no deep PLC, OSCE, DRED or QEXT), under the BSD license of opus/LICENSE.libopus. |
|
Package resample converts the sample rate of audio, as MixMusic's audio engine, which plays everything at 48 kHz, converts the 44.1 kHz of YouTube's AAC and the other rates AAC has.
|
Package resample converts the sample rate of audio, as MixMusic's audio engine, which plays everything at 48 kHz, converts the 44.1 kHz of YouTube's AAC and the other rates AAC has. |
|
Package resources holds MixMusic's brand files for the code that draws them: the mark of its logo, the pink rings with a play button.
|
Package resources holds MixMusic's brand files for the code that draws them: the mark of its logo, the pink rings with a play button. |
|
tools
|
|
|
cask
command
Command cask writes the Homebrew cask of a release, Casks/mixmusic.rb of the tap fzn0x/homebrew-tap, from packaging/homebrew/mixmusic.rb.tmpl: with the version, the SHA-256 of the release's disk image, and, until the app is notarized, caveats that tell how to allow its first launch.
|
Command cask writes the Homebrew cask of a release, Casks/mixmusic.rb of the tap fzn0x/homebrew-tap, from packaging/homebrew/mixmusic.rb.tmpl: with the version, the SHA-256 of the release's disk image, and, until the app is notarized, caveats that tell how to allow its first launch. |
|
changelog
command
Command changelog folds the changelog's fragments into CHANGELOG.md.
|
Command changelog folds the changelog's fragments into CHANGELOG.md. |
|
elfloader
command
Command elfloader checks that MixMusic's Linux builds ask for the system's own loader, at the path every distribution has it, so that they start outside NixOS too (#166).
|
Command elfloader checks that MixMusic's Linux builds ask for the system's own loader, at the path every distribution has it, so that they start outside NixOS too (#166). |
|
metainfo
command
Command metainfo writes the Flatpak's AppStream metadata, which software centers show: packaging/flatpak/io.github.fzn0x.mixmusic.metainfo.xml, with the releases of CHANGELOG.md in place of its <releases/>, each with its date, its summary (the first paragraph of its section) and a link to its page.
|
Command metainfo writes the Flatpak's AppStream metadata, which software centers show: packaging/flatpak/io.github.fzn0x.mixmusic.metainfo.xml, with the releases of CHANGELOG.md in place of its <releases/>, each with its date, its summary (the first paragraph of its section) and a link to its page. |
|
overlap
command
Command overlap tells whether a pull request merges with each of the other open ones.
|
Command overlap tells whether a pull request merges with each of the other open ones. |
|
pinyindata
command
Command pinyindata makes internal/romanize/pinyin.bin, the readings in Hanyu Pinyin that romanize reads Chinese by, from data of permissive licences only:
|
Command pinyindata makes internal/romanize/pinyin.bin, the readings in Hanyu Pinyin that romanize reads Chinese by, from data of permissive licences only: |
|
registry
command
Command registry builds the index of the community's themes and plugins that MixMusic's marketplace reads, community/registry-2.json, of community/themes and community/plugins, and checks every add-on on the way.
|
Command registry builds the index of the community's themes and plugins that MixMusic's marketplace reads, community/registry-2.json, of community/themes and community/plugins, and checks every add-on on the way. |
|
sitedocs
command
Command sitedocs makes the website's docs pages from docs/*.md, which stay their only source: the README and GitHub link to them, and the site is built from them.
|
Command sitedocs makes the website's docs pages from docs/*.md, which stay their only source: the README and GitHub link to them, and the site is built from them. |
|
Package webm reads the audio of WebM and Matroska files, such as the Opus audio YouTube serves (itags 249, 250 and 251): the packets of their first audio track, with their times, and seeking by their Cues.
|
Package webm reads the audio of WebM and Matroska files, such as the Opus audio YouTube serves (itags 249, 250 and 251): the packets of their first audio track, with their times, and seeking by their Cues. |
Click to show internal directories.
Click to hide internal directories.