Skip to content
AndryTheBeastPublic

About

Songate: a native music player for the Nintendo Switch. Automix joins your songs like a DJ, synced lyrics, colours from every cover, Mood playlists, and a background player with an Ultrahand overlay for the HOME menu and games.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Latest commit

ย 

History

29 Commits

Folders and files

Repository files navigation

Songate

A native music player for the Nintendo Switch and Windows.
Your own music folder, synced lyrics, colours from every cover and DJ-style Automix. Listen together on a Switch and a PC, hand the music over, play from an iPhone with AirPlay, and scrobble to Last.fm. On the Switch, music that keeps playing on the HOME menu and in games.
By AndryTheBeast ยท version 2.0.0 BETA 2 ยท based on Gatefold by DEVIROYrus
โฌ‡๏ธ Download ยท ๐ŸŽš๏ธ The Automix models

tour.mp4

"We just can't ship junk."
Steve Jobs, Apple's Mac event, August 2007

Songate began as a recreation of Gatefold, DEVIROYrus's modern interface for foobar2000 on Windows, and was called Gatefold NX until 2.0.0. It is not a port: it is a native rewrite in C++ (devkitPro, libnx, SDL2). Layout values come from Gatefold's CSS, and CSS pixels map 1:1 onto the Switch's 1280ร—720 screen. Its palette algorithm, icons and typeface are Gatefold's own. Automix, Mood playlists, Devices, Listen together, AirPlay, the background player, the overlay and the updater are Songate's.

Important

Tests were only made on HOS 22.5.0 and 23.0.0, with the latest HATS pack from sthetix. Other setups may work, but they have not been tested.

On Windows, tests were only made on Windows 11. See Songate for PC.

Only MP3, M4A and FLAC are supported. Other formats are untested (see Formats).


โœจ Highlights

  • ๐ŸŽจ Colours from the cover. The whole interface takes its palette from the album playing, with Gatefold's own algorithm (palette-core.js, ported line for line and verified to give identical colours on Gatefold's test covers). Or pick a fixed Dark or Light theme, or your own.
  • ๐ŸŽš๏ธ Automix. Playlists that play like a DJ set: Songate listens to each song once, orders them for the best joins, and blends each into the next on the beat, on the drop, or through its fade. In the app and in the background.
  • ๐ŸŽญ Mood playlists. Your library sorted by how it sounds, Happy, Party, Relaxed, Sad or Aggressive, measured on the console.
  • ๐Ÿ”— Your devices, together. Pair a Switch and a PC once: Liked, playlists, tag edits and play counts stay the same on both, and the songs one lacks can be copied over. Over your own network, with no account.
  • ๐ŸŽง Listen together and Handoff. One queue on two devices, playing in time, or hand the music over and the other device carries on from the same second.
  • ๐Ÿ“ฒ AirPlay. Pick Songate in an iPhone's AirPlay list, on the Switch or the PC: the song, its cover and its progress show in Songate.
  • ๐Ÿ“ป Last.fm. Scrobbles, and what is playing on your profile, once you sign in on Last.fm's own page.
  • ๐ŸŽค Synced lyrics. From .lrc files or the lyrics tag, in Now playing and in the full-screen Canvas. They follow the music, scroll by hand, and an instrumental break shows three pulsing dots.
  • ๐Ÿ–ผ๏ธ Canvas. A full-screen Now playing with Cover, Lyrics and Minimal layouts. When nothing is touched, the controls fade away and the progress line grows into a spectrum.
  • ๐ŸŽง Background player. An optional sysmodule keeps the music going on the HOME menu, during games and after Songate closes, with no gap. An Ultrahand overlay controls it from anywhere.
  • ๐ŸŽ›๏ธ Equalizer and crossfade. Ten bands with presets of your own, in the app and in the background.
  • ๐Ÿ“Š Play statistics and smart playlists. Plays are counted, also by the background player, and smart playlists such as Most played, Recently added or Forgotten favourites fill themselves.
  • ๐ŸŒ™ A sleep timer. The music fades out and pauses, then the console can go to sleep by itself.
  • ๐Ÿ”Š Volume levelling. Every track about as loud as the next, measured on the console: your files are never changed.
  • ๐Ÿงญ A guided tour. Basic, Advanced or Complete: Songate shows you around its own screens, with your music.
  • โฌ†๏ธ Updates from inside the app. Only if you turn them on: new versions, going back to an earlier one, and new Automix models.
  • ๐Ÿ“ Your music, however it is organised. One flat folder of 3,000 files, Artist/Album folders, or folders used as playlists: albums, artists and genres come from the tags, never from the layout.
  • โšก Fast on the console. Launches in about a second with a 3,000-track library. Covers and the file list are cached, and background work runs on the console's spare cores.

๐Ÿ“ธ Screenshots

Listen together: the Devices button Handoff: the other device asks
Devices Handoff
Listening together: who changes what plays AirPlay from an iPhone
Listen together AirPlay
Last.fm The opening
Last.fm Opening
Now playing ยท synced lyrics Canvas
Lyrics Canvas
Canvas when idle: the spectrum Automix: a join playing
Canvas idle Automix join
An Automix playlist, with its joins A Mood playlist
Automix playlist Mood playlist
Albums An album's page
Albums Album
Artists Genres
Artists Genres
Library โ†’ Tracks, with the letter index The track menu
Tracks Track menu
Playlists New playlist
Playlists New playlist
A smart playlist Liked
Smart playlist Liked
From the cover, on a light background The cover's palette: its colours and the role each plays
Light Palette
Appearance Playback
Settings Playback settings
Equalizer The sleep timer
Equalizer Sleep timer
Updates and Automix models Support
Updates Support
The guided tour
Tour

The screenshots and the tour video come from the PC preview (see below). In the shots of Devices, Handoff, AirPlay and Last.fm, the other device, the iPhone and the Last.fm account are stand-ins: the preview has none of its own. The music is from NCS (NoCopyrightSounds), ncs.io: see Credits.


๐Ÿ’ป Songate for PC

The same app on Windows, from the same code: the library, playlists, Automix, Mood, the equalizer, lyrics and the Canvas all work as they do on the console. So do Devices, Listen together, Handoff, AirPlay and Last.fm: a PC and a Switch pair with each other, and play together. Tests were only made on Windows 11.

Songate on Windows

The Canvas, full screen Albums
Canvas on Windows Albums on Windows
  • โŒจ๏ธ Keyboard and mouse. Space plays and pauses, Ctrl F searches, C opens the Canvas, right-click opens the track menu. Settings โ†’ Controls lists every key.
  • ๐ŸชŸ A real window that keeps the interface sharp at any size, on high refresh rate screens too. F11 or Alt Enter for full screen. The window's close, minimise and full screen buttons appear when the mouse reaches the top left corner.
  • ๐Ÿ”ฝ Keep playing when the window closes. Songate stays by the clock, playing, and its icon brings it back (Settings โ†’ Playback).
  • โ–ถ๏ธ Media keys and Windows' media controls.
  • ๐Ÿ”— Devices and AirPlay use your network, so the first time they are on, Windows asks once to let Songate through its firewall. Allow it, on private networks, or other devices and iPhones can't reach it.
  • ๐Ÿ“ป Last.fm opens your browser to sign in.
  • ๐Ÿ“ Settings are in %APPDATA%\Songate. Uninstalling leaves them there.

Not on the PC: the background player, the overlay, game actions and per-game volumes. They belong to the console.

Not tested yet: game pads, a second monitor, taskbar buttons, Sleep now, the colour picker, and an in-app update from a real release. If you try them, please say how it went.

The sections below describe the console. The PC's differences are the ones listed here.


๐ŸŽต Now playing

  • ๐Ÿ’ฟ A large cover that crossfades between tracks and breathes gently with the bass (the strength is a setting, down to off).
  • ๐Ÿท๏ธ Title, artist and album with year, format chips (codec, bit depth, sample rate, bitrate) and the genre, which opens its page.
  • โค๏ธ Add to Liked, Album, Artist, Folder and the โ‹ฏ track menu.
  • ๐Ÿ“Š A live spectrum, ported from Gatefold's viz.js and spectrum-worker.js.
  • ๐Ÿ“‘ Three tabs: Up next, Lyrics and Palette (the cover's colours and the roles they play).
  • โฑ๏ธ Lyrics running early or late? Earlier and Later fix them for that track.
  • ๐ŸŽš๏ธ The player bar has the playback order (default, repeat playlist, repeat track, shuffle), previous / play / next, stop after this track, a waveform seek bar, the sleep timer, the equalizer button, the queue, volume and the Canvas button.

๐Ÿ–ผ๏ธ Canvas

  • ๐Ÿงญ Cover, Lyrics and Minimal layouts. Changes animate: the cover glides and the text crossfades.
  • ๐ŸŽผ A track without lyrics switches to Minimal by itself and goes back to your layout with the next track that has some.
  • ๐ŸŒซ๏ธ A drifting blurred backdrop, with an optional slow float and Ken Burns zoom on the cover.
  • ๐Ÿ’ค After a few seconds without input the controls fade away and the progress line rises into a spectrum. Any button brings them back.
  • ๐Ÿ“œ Lyrics scroll by touch or the right stick. After four seconds they return to the line playing.
  • ๐ŸŒ™ The sleep timer's moon is there too, with the time left.

๐ŸŽš๏ธ Automix

An Automix playlist plays like a DJ set. Create one with + in the sidebar โ†’ Automix playlistโ€ฆ, then tick tracks, albums, artists, genres or folders.

  • ๐Ÿ‘‚ It listens first. Each song is analysed once on the console: tempo, beats and bars, key, bass, drops, fades and levels.
  • ๐Ÿ”€ It finds the order. Songs are placed where they join best, and ordered again as you add more. Move one by hand and your order stays until Order again. Play this first pins the opener. Automix playlists never shuffle: their order is the point.
  • ๐ŸŽ›๏ธ It plans each join: on the drop, a bridge between tempos, by the songs' structure, or a smart crossfade, with the bass changing hands so two basslines never fight.
  • โœจ A show for each join. The cover frosts over with Automix's hint. Settings โ†’ Appearance โ†’ Automix chooses how it looks: Full, Immersive or Simple on Now playing, Full or Simple on the Canvas.
  • ๐ŸŽง In the background too. The background player plans and plays the same joins, in games and with Songate closed.
  • ๐Ÿ“ฆ Models. Automix's decisions are a versioned model. V1.0.0 and V1.1.0 are built in, and V1.2.0 comes with Songate and plans every join until you choose another. Settings โ†’ Updates can bring new ones over the air, checked by size and checksum. You can always go back.

The analysis, the planner, the models and the training tools are open source in songate-automix, where anyone can train a model of their own.

๐Ÿ“š Library

  • ๐Ÿ’ฝ Albums, Artists and Genres, built from the tags (album, album artist, artist, track number, year, genre). Several genres per track are split on ";". Artist and genre pages switch between their albums and their tracks (a genre also lists its artists), with the four list views for tracks.
  • ๐Ÿ”ค Library โ†’ Tracks lists every song. Sort it by artist, title, album, year, genre or length, either way round. Filter it by the field you sort by, and jump with the letter index down the side.
  • ๐Ÿ—‚๏ธ Folders: browse the music folder as a tree, then play or shuffle any folder, or add it to the sidebar as a playlist that follows the folder.
  • ๐Ÿ’พ Files: a browser of the whole SD card, off until you show it in Settings โ†’ Appearance โ†’ Sidebar. An image can become a cover, an .lrc a track's lyrics, an .m3u8 a playlist. It also renames, copies, moves and deletes, one file or several.
  • ๐Ÿ“‹ Four list views, as in Gatefold 1.4.2: by album, with covers, as tiles, or as a plain list. Every list remembers its own.
  • ๐Ÿ“Š Play statistics. A track counts as played after a minute (or nearly all of a shorter one), in Songate and in the background player. Plays, last played and date added show in the track's Details. They are kept by Songate; your files are not changed.
  • ๐Ÿงพ Editing the queue. On the Playlist view and in Up next, the track menu has Play next, Move (the row is picked up and the D-pad moves it) and Remove, and Clear empties the queue, the track playing too.
  • ๐Ÿ” Search with the console keyboard (Y): title, artist, album and path.
  • ๐Ÿ”„ Resume where you left off: the queue comes back after a restart, paused at the same place.

๐ŸŽถ Playlists

Everything starts from + next to PLAYLISTS in the sidebar. Tap the PLAYLISTS heading for a page of them all, and Move puts them in your order.

  • โค๏ธ Liked and your own playlists, made from the sidebar or the track menu, renamed and deleted as you like.
  • โœจ Smart playlists, as in Gatefold 1.4: Recently added, Most played, Recently played, Forgotten favourites, Never played, a genre, a decade, long tracks. Each has one setting, shows how many tracks match before you create it, and keeps itself up to date.
  • ๐ŸŽญ Mood playlists: Happy, Party, Relaxed, Sad or Aggressive. Songate measures each song on the console with its own analysis (energy, beat, brightness, key), so the list fills in as it goes, and each mood wears its own icon.
  • ๐ŸŽš๏ธ Automix playlists: see above.
  • ๐Ÿ–ผ๏ธ 78 icons, shown in the sidebar even when it is folded.
  • ๐Ÿ“„ M3U: import an .m3u or .m3u8 from the card, and export any playlist for other players.
  • ๐ŸŽฎ Playlists for games: a playlist can start by itself when a game opens, on the HOME menu, back in the game or when it closes, where it was left or shuffled afresh.

๐Ÿ”— Devices

Two Songates on the same network, a Switch and a PC, find each other and work as one. Everything starts in Settings โ†’ Devices, and the Devices button at the top of the screen reaches Listen together, Handoff and AirPlay from anywhere.

  • ๐Ÿค Pairing, once. One device shows a code, the other types it. From then on they recognise each other, and what passes between them is encrypted end to end. There is no account and no server: nothing leaves your network.
  • ๐Ÿ”„ Sync. Liked, your playlists (in their order), tag edits and play counts stay the same on both, automatically a few seconds after anything changes, or by hand. Each device keeps its own play count, and both show the total. Covers and Songate's measurements can be shared too, so the other device needn't work them out again. Little arrows at the top left turn while a sync runs.
  • ๐Ÿ“ Music files. A device can copy the songs the other has and it lacks, into the same folders, slowly while music plays. It never replaces anything, and Follow deletions removes a song from both. Each device has its own switch.
  • ๐ŸŽง Listen together. One queue on both devices, playing in time, in one room or two. Next, pause and seek work from either, or, if the device that started chooses Only this device, only from there: the other's controls are greyed out. Even two different files of one song are lined up.
  • ๐ŸŽš๏ธ Timing. Speakers, headphones and Bluetooth each delay the sound differently. Tell each device what it plays through, and move Timing once for the pair until the two sound as one.
  • โฉ Handoff. Your queue and your place in the song move to the other device, and this one pauses. The other device asks once before it takes over. Undo the handoff brings your own queue back for two minutes.
  • ๐Ÿ“ฒ AirPlay. Turn on Receive AirPlay, then pick Songate in an iPhone's AirPlay list. The song, its cover and its progress show in Songate, with levelling and the equalizer; play, pause and skip on the iPhone. A new iPhone is asked about once, and Always remembers it. On the Switch and the PC.

๐Ÿ“ป Last.fm

Settings โ†’ Last.fm, off until you turn it on.

  • โœ๏ธ Sign in on Last.fm's own page: on the Switch, scan a QR code with your phone; on the PC, your browser opens. Your password is never typed into Songate.
  • ๐ŸŽถ Scrobbles each track once you have heard half of it or four minutes, and shows what is playing on your profile. Only tracks with tags are sent.
  • ๐Ÿ“ด Offline? What can't be sent waits on the card and goes, oldest first, as soon as Last.fm can be reached.

๐ŸŽ›๏ธ Sound

  • ๐ŸŽš๏ธ Equalizer. Simple mode gives you a preset plus bass and treble; Advanced adds ten bands and a preamp. Save your own sounds under a name. The player bar's button turns it on and off, and a long press opens its settings. It works in the background player too.
  • ๐ŸŒŠ Crossfade. 2 to 12 seconds, and optionally not between tracks of one album, so live albums stay seamless. A track changed by hand fades in 0.3 s.
  • ๐Ÿ“ Volume levelling. Every track's loudness is measured on the console as ITU-R BS.1770 / EBU R128 measure it (ported from Gatefold 1.4's own meter), with its true peak. Off (the default), Track, Album, or Auto (album, but track while shuffling), to a target of โˆ’18, โˆ’14 or โˆ’11 LUFS. Quiet tracks are raised only as far as their peaks allow. It runs in the background while Songate is open, the track playing and the next ones first, then the whole library, once. The background player levels with the same measurements.

๐ŸŒ™ Sleep timer

  • โฒ๏ธ 15, 30, 45, 60 or 90 minutes, or the end of the track: from the moon in the player bar, the Canvas or Settings โ†’ Playback, and as Sleep Timer in the overlay.
  • ๐ŸŒซ๏ธ The music fades out over its last ten seconds and pauses where you were. The background player keeps the time, so it works with Songate closed too.
  • ๐Ÿ˜ด With Songate open, a card then counts down and puts the console to sleep, unless you stay awake (or turn it off in Settings).
  • ๐Ÿ”† Keep the console awake: while Songate is open the screen does not dim and the console does not sleep by itself, with an optional dimming of the screen after a few minutes without input.

๐ŸŽจ Appearance

  • ๐ŸŒˆ Themes: From the cover (on a dark or a light background), Dark, Light, or Custom (your background and two accents, with a colour picker).
  • โœจ The opening: a short animation and a chime as Songate starts, never over music the background player is already playing. Either can be turned off.
  • ๐ŸŽ›๏ธ Saturation, colour transition time, and the cover's palette.
  • ๐Ÿงฑ A collapsible sidebar: reorder its tabs, hide any but Now playing, and add dividing lines.
  • ๐Ÿ”‹ The battery in the title bar shows when it is charging, and how long to full or to empty (each can be hidden).
  • ๐Ÿ“ˆ Visualizer settings: sensitivity, smoothing, number of bars (for Now playing and the Canvas separately), peak caps and the cover's bass pulse.

โœ๏ธ Track menu

Press + on any track, or โ‹ฏ on Now playing:

  • โ–ถ๏ธ Play next, add to the queue, add to a playlist, like.
  • ๐Ÿท๏ธ Edit tags (title, artist, album, album artist, genre, year, track number) and change the cover with any image on the SD card, for one track or the whole album. Your changes are kept by Songate in sdmc:/config/songate-nx/ and can be undone. Your music files are never modified.
  • ๐Ÿงญ Go to the album, artist, genre or folder, show the details (with plays and loudness), or delete the file (after asking).

๐ŸŽง Background player

An optional sysmodule plays the music outside Songate: on the HOME menu, during games, and after Songate is closed. While it runs it does all the playback and Songate becomes its remote, so closing Songate never interrupts the song.

  • ๐ŸŽต M4A (AAC) with its own small decoder (Helix), plus MP3 and FLAC, gapless, at its own volume, with crossfade, the equalizer and Automix joins.
  • ๐ŸŽฎ Game actions. For Game Opens, HOME Menu, Back to the Game and Game Closes, choose Nothing, Play (a random folder of your music, shuffled), Resume, Pause or one of your playlists, each with a fade. A fresh launch and a return from HOME are told apart, so going HOME and back never reshuffles.
  • ๐Ÿ”Š Per-game volume. The game running now keeps its own music volume, and every other game shares one.
  • ๐Ÿ’พ The queue is kept across restarts (bg-session.txt).
  • ๐Ÿ“Š It counts plays and keeps the sleep timer while Songate is closed, and levels the volume with Songate's measurements.
  • ๐Ÿ–ผ๏ธ Covers for the overlay. Songate makes small copies at the overlay's exact size, because an overlay cannot decode large JPEGs. They are made for every queue sent to the player, or for the whole library at once. If many are missing, Songate offers to make them, and a card in the sidebar shows the progress.

๐Ÿงฉ Overlay

Songate.ovl for Ultrahand, in the style of sys-tune 2.1, on which it is built:

  • Player page: the cover, title and artist, a seek bar (A picks it up, so the D-pad never scrubs by accident), and shuffle / previous / play / next / repeat.
  • Settings page (D-pad right): Songate's queue, the music volume, the running game's volume (shown under the game's own name), the volume for every other game, the game actions and their fades, the equalizer and its presets, the sleep timer, and stop after this track.
  • Browse: your Folders, or your Playlists by kind, Normal, Smart, Mood and Automix, each with Songate's own icons. Play from any track, or add one or all to the queue. With shuffle on, a folder played or added is shuffled; an Automix playlist always plays in its own order.

Open it with Ultrahand's combo (L + D-pad down + R3, a click of the right stick, unless you changed it).

Player Queue, browse and volumes Game actions The queue
Overlay: player Overlay: volumes Overlay: game actions Overlay: queue
Equalizer Browse Playlists by kind Presets
Overlay: equalizer Overlay: browse Overlay: playlists Overlay: presets

The overlay on a real console, over the HOME menu.

โš™๏ธ Settings, updates and support

  • ๐Ÿ”Ž Find a setting searches every option by name.
  • ๐Ÿ—ƒ๏ธ Storage: where each browser opens, where backups go, and what Songate keeps on the card, each with its size and a Clear button.
  • ๐Ÿ›Ÿ Backups and resets. Back up the settings whenever you like, and Songate backs up by itself before every update. Reset puts every setting back as it came, and Factory reset erases what you choose, or everything.
  • โฌ†๏ธ Updates stay off until you turn them on; with them off, Songate never goes online. Then it can check GitHub for new versions, show what changed, install one, or go back to an earlier one, with all three parts always from the same release. Beta versions are a separate switch: they can have bugs, so please report what you find.
  • ๐Ÿž Support stays off until you turn it on. Then you can report a bug or suggest a feature from the console, with what helps to fix it: your Songate and firmware versions and, if you agree, recent crash reports. Never your file names.
  • ๐Ÿงญ The tour is in Settings โ†’ About: Basic (15 steps), Advanced (36) or Complete (57) on the Switch, with a chapter on Devices.

๐ŸŽฎ Controls

Button Action
D-pad Move focus (sidebar, content and player bar)
Left stick A pointer: A taps and drags under it (speed and acceleration in Settings โ†’ Controls)
A Select. On a slider or seek bar, pick it up so โ†/โ†’ move it (A or B puts it down)
B Back. In Settings' options, back to the category list
X Play / pause
Y Search
L / R Previous / next track
ZL / ZR Seek โˆ’10 / +10 s
โˆ’ Canvas (full screen)
+ Track menu
Right stick Scroll
HOME Leave Songate (close it from the HOME menu)

๐Ÿ‘† Touch works everywhere: tap, drag lists with momentum, and drag the seek bar and the volume. A USB mouse works too.

๐Ÿ’พ Installation

๐ŸŽฎ On the Switch

You need a Switch running Atmosphรจre, and Ultrahand for the overlay. Tests were only made on HOS 22.5.0 and 23.0.0, with the latest HATS pack from sthetix.

Download SongateNX-<version>.zip from Releases and unzip it onto the root of the SD card. It holds:

Path What
switch/Songate/Songate.nro ๐ŸŽต the app
atmosphere/contents/4200000047464E58/exefs.nsp ๐ŸŽง the background player (sysmodule)
atmosphere/contents/4200000047464E58/flags/boot2.flag starts it at boot
atmosphere/contents/4200000047464E58/toolbox.json lets sysmodule managers list it
switch/.overlays/Songate.ovl ๐Ÿงฉ the overlay

๐Ÿ™ˆ Can't find the overlay? switch/.overlays is a hidden folder (its name starts with a dot): macOS and many phone file and zip apps hide it, and some leave it out when copying. Copy the whole switch and atmosphere folders from the zip, and on a Mac press โŒ˜ โ‡ง . in Finder to see hidden folders. The overlay shows up in Ultrahand, which must be installed.

๐Ÿ” Coming from 2.0.0 BETA 1? Settings โ†’ Updates installs it, with Beta versions on, or unzip over it. From Gatefold NX 1.x? Unzip over it. Either way, the first start moves your settings from sdmc:/config/gatefold-nx/ to sdmc:/config/songate-nx/ (and your backups beside them), and going back to an earlier version moves them back. The first start also removes 1.x's old .nro and overlay.

Restart the console after installing or updating the background player, because sysmodules load at boot.

โ–ถ๏ธ Launch Songate by holding R while starting a game (title override). Applet mode, from the Album, has too little memory and no keyboard.

๐Ÿ“ Put your music anywhere on the card. On first start a folder called Music at the top of the card is used; otherwise a folder picker opens (Settings โ†’ Library โ†’ Music folder changes it). Settings, playlists, Liked, your edits and the caches are kept in sdmc:/config/songate-nx/.

The app and the overlay work without the background player. Without it, or with Keep playing outside Songate turned off, Songate plays by itself and the music stops when you leave it.

๐Ÿ’ป On Windows

You need a 64-bit PC. Tests were only made on Windows 11.

Download SongateWIN-<version>.exe from Releases and run it. It needs no administrator rights: you choose a folder, which shortcuts you want, and whether to open Songate at the end. Windows' protected folders, like Program Files, can't be used. Settings โ€บ Updates installs newer versions, once you turn it on.

๐Ÿ›ก๏ธ "Windows protected your PC"? The installer isn't signed, so Windows doesn't know it yet. Click More info, then Run anyway. Your browser may also ask whether to keep the download. The release notes list the file's SHA-256, if you'd like to check it first.

๐Ÿ“ At the first start, choose your music folder (Settings โ†’ Library โ†’ Music folder changes it).

๐ŸŽผ Formats

Supported: MP3, M4A (AAC) and FLAC. These are the formats Songate is tested with, in the app and in the background player.

  • Every other format is unsupported. Some of them may play (WAV; in Songate only, also ALAC, Ogg Vorbis and Opus), but they are not tested. If you run into a problem with one, you can still open an issue.
  • Covers: embedded art, your own cover from the track menu, or cover / folder / front (.jpg, .png) in the track's folder.
  • Lyrics: an .lrc (or .txt) file with the track's name beside it, or the LYRICS / USLT tag.

โšก Performance

  • ๐Ÿš€ Fast launch. The music folder's file list is remembered and checked again in the background, so launch doesn't wait for the SD card. Fonts are read into memory once, and the tag cache is read in one pass.
  • ๐Ÿ–ผ๏ธ Cover cache. Every cover is kept as a small JPEG (one per distinct picture), so lists open with their covers ready. The cache fills in the background after the tags, and again for new music after a rescan.
  • ๐Ÿงต Multi-core. The main thread keeps core 0. Audio, the track loader and file writing run on core 1, tags and covers on core 2, each with its own priority so nothing visible waits for background work.

๐Ÿ› ๏ธ Building

Requires devkitPro with Switch support:

dkp-pacman -S switch-dev switch-sdl2 switch-sdl2_mixer switch-sdl2_ttf switch-sdl2_image switch-ffmpeg switch-libjpeg-turbo
make                     # the app: Songate.nro (fonts and icons ship inside it, in RomFS)
make clean && make DEV=0 # the app as released, without the testing extras (Settings โ†’ Debug)
make -C sysmodule        # the background player: gatefold-bg.nsp
make -C overlay          # the overlay: Songate.ovl

tools/bgtest/ runs the background player's decoders on a PC, to compare them with FFmpeg.

๐Ÿ’ป Windows

tools/windows/ builds Songate for PC from the same source/, with clang and CMake. build-deps.sh builds the libraries, build.sh the program, and package.sh the installer with Inno Setup.

๐Ÿ–ฅ๏ธ PC preview

tools/preview/ builds the same UI code for Windows against a small stand-in for libnx, with a fake SD card. It reads WAV, plus M4A and FLAC when built with FFmpeg. It runs hidden, takes scripted input, and saves screenshots: every screenshot above comes from it.

python tools/preview/make_demo.py <folder-with-jpg-covers> <demo-root>
FFMPEG=<FFmpeg win64 shared build> bash tools/preview/build.sh <folder-with-SDL2-devel-VC-packages>

Run gatefold-preview.exe with the variables described at the top of tools/preview/hostshim.cpp:

  • GF_ROOT=<demo-root> points it at the fake SD card.
  • GF_SHOW=1 opens a window you drive with the keyboard.
  • GF_SCRIPT=<file> replays scripted input and takes screenshots.

The preview is a dev build; DEV=0 before bash tools/preview/build.sh builds it as a release looks, as for the screenshots above. GF_FILM=<file> films it instead of showing it: 60 frames a second whatever a frame takes, with its own sound, which is how the tour video was made.

โš ๏ธ Known limits

  • Formats: only MP3, M4A and FLAC are supported and tested. Others may play but are untested; the background player skips ALAC, Ogg Vorbis and Opus.
  • Firmware: tests were only made on HOS 22.5.0 and 23.0.0, with the latest HATS pack from sthetix.
  • Windows: tests were only made on Windows 11. The installer isn't signed.
  • Devices: both devices must be on the same network, open, with Devices on. Bluetooth speakers and TVs add their own delay, each its own: set Timing by ear for each one (docked, a TV can add about 50 ms).
  • AirPlay: audio only, and like every AirPlay speaker it plays about a second behind the iPhone.
  • Not ported: Gatefold's radio, YouTube, and online cover and lyrics lookup.
  • Scripts: CJK text uses the console's own fonts; scripts outside them will not render.
  • MP3 durations: VBR MP3s without a Xing header get an estimated duration.

๐Ÿ“œ Licence

Songate's own code (the app, the background player and the tools) is under the MIT licence (LICENSE), like Gatefold itself. The overlay (overlay/) is under the GPL 2, because it is built on sys-tune and libultrahand (overlay/LICENSE-sys-tune). The third-party code and assets listed below keep their own licences.

๐Ÿ™ Credits and licences

  • ๐ŸŽจ Gatefold by DEVIROYrus: the foobar2000 interface Songate began as a recreation of, with its design, palette algorithm and icons. ยฉ Gatefold contributors, MIT licence (LICENSE-gatefold).
  • ๐Ÿ”ค Inter: the typeface. ยฉ The Inter Project Authors, SIL Open Font Licence (romfs/fonts/OFL.txt). Fraunces: the Songate wordmark, SIL Open Font Licence (tools/brand/OFL.txt).
  • ๐ŸŽž๏ธ FFmpeg (LGPL 2.1), SDL 2 with SDL_mixer, SDL_ttf and SDL_image (zlib), libFLAC, mpg123, Opus, Tremor and libjpeg-turbo, through devkitPro's portlibs. stb_image (public domain / MIT).
  • ๐Ÿ” Monocypher: the encryption between your devices. ยฉ Loup Vaillant and contributors, BSD 2-clause or CC0. QR Code generator (the Last.fm sign-in code): ยฉ Project Nayuki, MIT.
  • ๐Ÿ“ก AirPlay: Mbed TLS answers an iPhone and decodes what it sends, ยฉ The Mbed TLS Contributors, Apache 2.0 (devkitPro's on the console, built by tools/windows on the PC). How an iPhone speaks AirPlay was learned from shairport-sync (Mike Brady and contributors) and James Laird's ShairPort, which published the AirPort Express key it answers with; none of their code is in Songate. AirPlay is Apple's; Songate is not affiliated with Apple. Nor with Last.fm, whose service Songate's scrobbles go to.
  • ๐Ÿงฐ libnx and devkitPro: the Switch homebrew toolchain (ISC).
  • ๐ŸชŸ On Windows: the same libraries built by tools/windows, plus curl, zlib and Mbed TLS, as listed in the licences folder beside the program. FFmpeg and mpg123 are separate DLLs you may replace.
  • ๐ŸŽง Background player: the Helix fixed-point AAC decoder ยฉ RealNetworks, RPSL (sysmodule/lib/helix-aac). Also minimp3 (CC0) and dr_flac (public domain / MIT-0), in sysmodule/lib/single.
  • ๐Ÿงฉ Overlay: built on sys-tune's overlay ยฉ HookedBehemoth and ppkantorski, GPL 2 (overlay/LICENSE-sys-tune), with libultrahand ยฉ ppkantorski and libtesla ยฉ WerWolv (overlay/lib/libultrahand).
  • ๐ŸŽถ Music in the screenshots and the tour video: from NCS (NoCopyrightSounds), ncs.io. Among them: Warriyo ft. Laura Brehm, Mortals, and Egzod, Maestro Chives & Neoni, Royalty, under the tour video; Rival & CADMIUM ft. Harley Bird, Seasons; Jim Yosef & ROY KNOX, Sun Goes Down; Diviners ft. Harley Bird, Falling; Marin Hoxha, Endless; K-391, Earth. No music is included with Songate.

Songate is an unofficial homebrew project, not affiliated with Nintendo or foobar2000.

๐Ÿ‘ฅ Authors

  • AndryTheBeast: Songate, the Switch app, background player and overlay.
  • DEVIROYrus: Gatefold, the foobar2000 interface on PC that Songate began as a recreation of.

About

Songate: a native music player for the Nintendo Switch. Automix joins your songs like a DJ, synced lyrics, colours from every cover, Mood playlists, and a background player with an Ultrahand overlay for the HOME menu and games.

Topics

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages