I just want to clarify that this web app was created to PLAY music. All music that is on the site currently is being sourced directly from archive.org, downloads.khinsider.com and possibly other sites in the future, but NONE of the music is downloaded inside this repository. ALL OF THE MUSIC CURRENTLY LINKED INTO THE MUSIC PLAYER IS OWNED BY NINTENDO.
I decided that I didn't want to wait infinitely for a Nintendo Music port for desktop, so I decided to just make it myself.
you can suggest a soundtrack here https://forms.gle/oQnVGh2VCC6JScFh9 and I will probably accept the suggestion since I doubt more than like 2 people will ever see this
-
If you're asking "Wait, how do I search for individual songs?" the answer is... you can't yet, sorry. Buuut... you can go into an album and use Ctrl/Cmd F !! (no? too convenient? ah well, it was worth a try.)
-
if an album cover has no image, and all the songs seem to load for infinity, that means you can't access those on your current internet connection (if its blocked on that wifi or something like that).
I added user created PLAYLISTS!!!!! along with shuffling, searching, and volume control, it seems like such a necessity for a music app. (I spent so long trying to figure out how I could make them work)
my first thought when making the user created playlists, was how would they be stored?? I thought cookies were the best option but it turns out there is a better thing called "localStorage" which has a higher storage limit than cookies.
When you first load up the page, (or load it up after clearing all site data) it creates the item in the localStorage of the site. I had to store the array that holds the playlists as a string in localStorage because for some reason it really didn't like that I was trying to put a kinda 3D array into it.
//to write the variable to localStorage
localStorage.setItem("playlists", JSON.stringify(playlistsList))
//to access the variable from localStorage
playlistsList = JSON.parse(localStorage.getItem("playlists"))Adding albums used to be VERY time consuming. I used to have to manually add each album as an array, which looks something like this:
let exampleAlbum = [
"Example Title", //name
"assets/covers/example.png", //path to album cover
[ //songs
[
"Aria Math", //name of song
"05:10", // duration of song in mm:ss
"ariamath.mp3" //audio path for song
],
[
"Sneaking", //name of song
"01:30", // duration of song in mm:ss
"sneaking.mp3" //audio path for song
]
//continue for however long the album needs to be
],
"More Explaining Example Title", // the name that will be checked to be searched for
"exampleAlbum" // the name of the album array as a string for the stupid function thingie I did
]The process used to goes like this:
-
write down name of song x16
-
write down the duration of those 16 songs
-
copy and paste in the audio link for those 16 songs
-
repeat until whole album is done
(Usually it is a lot more compact than that example.)
but now, I made a script that you can run in an internet archive page, and it will grab the soundtrack and format it in my array format! (thanks [BlockHead66](https://github.com/Blockhead66)!)
I put it in a bookmarklet if you want to use it and make custom albums (no these are not formatted the same as playlists, and if you try to upload one as a playlist, it will not work.)
Soundtrack Grabber for Archive.org (Bookmarklet)
just drag the bookmarklet into your bookmark bar, and run on any archive.org soundtrack page. (it does take some patience for the longer soundtracks though)
Now that you're at the bottom, I can explain even more!!!!
Albums are loaded on the main page with a display album, and an actual internal album. the internal album is signified in album[4], and the display album is just the entire album array you chose by default. The internal album is usually set to be the same as the display, otherwise you could technically have an album that says "Super Mario Galaxy" with the cover and all that, but once you click on it... it would open the Pokémon Sword & Shield soundtrack or something.
I just wanted to share that, thanks for reading :)

