Add custom songs to Let's Sing! (2022) from UltraStar

First of all massive credit to @Dh4rry, check out their original post on replacing a DLC song with your own here: https://gbatemp.net/threads/add-your-own-songs-to-lets-sing-2019.538379/
In this tutorial we will be making use of a customized version of their script to convert an UltraStar (PC karaoke game) TXT file to Let's Sing's VXLA format. Their research was also used by me as the jumping off point. Importantly however this tutorial will delve into how to ADD, NOT REPLACE songs!

NOTICE:
This tutorial is no longer actively supported, and is provided as-is. I the author will not be providing any help in regards to this tutorial. Please feel free to ask questions in the thread, in the hopes someone can help you, do not expect me to reply.
Secondly it has come to my attention that nxdumptool does not work on the latest firmwares (17.0+), this is not a required part of this tutorial. Any other method of dumping romfs will work just fine. (DBI is a good example)


Demo:

(I imported more than one song though!)

Step 0: Prerequisites
- Homebrew capable Nintendo Switch
- AtmosphereNX installed
- A Let's Sing game (Only tested on 2022, should work on all games)
- A DLC for the Let's Sing game
- Basic knowledge of directories
- Linux/Windows PC (MacOS might work?)
- FFMPEG (Linux: "sudo apt install ffmpeg" or your package managers equivalent", Windows: Download the binaries here or something: https://ffmpeg.org/download.html)
- Python3

Step 1: Dumping the required assets
1. Get "nxdumptool" if you don't have it installed already (https://github.com/DarkMatterCore/nxdumptool/releases/tag/v1.1.14)
2. Launch "nxdumptool"
3. Choose "Dump installed SD card / eMMC content"
4. Choose "Let's Sing 2022" (or your version, it should not actually matter, but I only tested 2022)
5. Choose "RomFS options"
6. Navigate to "Use update/DLC" and use the right/left arrows to select the update (v131072/0.0.2.0 for LS2022 as of writing)
7. Choose "RomFS section data dump" (You might want to take note of this as the "Core titleid")
8. Navigate back to the "RomFS options" after dumping has finished
9. Navigate to "Use update/DLC" and use the right/left arrows to select the first DLC you see (Does not matter which DLC you have)
10. Choose "RomFS section data dump" (You might want to take not of this as the "DLC titleid")
11. Done!

Step 2: Getting the files you need
0. Create a folder somewhere where you can modify files, and create your "mod". We'll be calling this folder the "Working folder" from now on.
1. Access your Switch's SD card contents from your PC either directly or through FTP
2. Find the following file: sd:/atmosphere/contents/[CORE TITLEID]/romfs/Data/StreamingAssets/SongsDLC.tsv and copy it to your working folder
3. Find the following file: sd:/atmosphere/contents/[DLC TITLEID]/romfs/name.txt and copy it to your working folder
4. Find the following file: sd:/atmosphere/contents/[DLC TITLEID]/romfs/SomeSongName_meta.xml and copy it to your working folder (SomeSongName is not the actual name, but the song name is dependand on the specific DLC, just copy a *_meta.xml file)
5. Download the following file: https://raw.githubusercontent.com/MrJPGames/ultrastar2singIt-Converter/master/ultrastar2singit.py and place it in your working folder
(Again huge thanks to @Dh4rry for making the orignal version of this script!)


Step 3: Getting your song files
Sadly I cannot link you to the actually useful resources for UltraStar song files. There exist piracy free sites, but finding the exact right music/video for these can be difficult. Instead try to search around the internet for a certain spanish UltraStar site. This will provide torrents to many files (including many non-spanish ones!)

For the next steps I'll be assuming you have gathered the following files:
- A UltraStar TXT
- A music video (most likely AVI but format is not important, video should not contain audio!)
- The music (most likely mp3, but format is not important)
- A 1:1 (square) image (most likely jpg, but format is not important) of the cover art


Step 4: Getting the song files ready for Let's Sing!
0. Before we get started we have to decide on a unique name for our song. The songs title without spaces or non letters is the normal choice (but not necissary). Eg. "The Man Who Sold The World" becomes "TheManWhoSoldTheWorld". This name has to be the same EVERYWHERE, and spelled exactly the same (CASE SENSITIVE!). In the rest of the tutorial this will be referred to as SONGNAME. So replace any SONGNAME with your song id. (eg. SONGNAME.mp4 would become TheManWhoSoldTheWorld.mp4)
1. The music video should be in mp4 format. To do this you can use ffmpeg:
Code:
ffmpeg -i input_video.avi SONGNAME.mp4
2. The music should be in ogg format. To do this you can use ffmpeg:
Code:
ffmpeg -i input_song.mp3 SONGNAME.ogg
2 1/2. Optionally open the music file in Audacity and cut a part 30 seconds to a minute long. Save this as SONGNAME_preview.ogg. Alternativly you can create a copy of the full song and give it the name SONGNAME_preview.ogg, and this should also work, though has not been stress tested with many songs doing this!
3. The cover art should be in png format. Open up any other formats in an image editor (gimp, photoshop, paint.net, mspaint etc.). Make sure the image width and height are the same (thus a square image) and save this as "SONGNAME.png". (Only tested with "low resolution" images, if crashes occur maybe lower the image resolution.)
4. Copy your _meta.xml file and name it SONGNAME_meta.xml
5. Open the _meta.xml file with a text editor and replace the values so they match your song. "Id" should be SONGNAME (case sensitive!). Difficulty ranges from 0-4 (with 0 being 1 star, and 4 being 5 star).


Step 5: UltraStar TXT to VXLA
1. Place the ultrastar TXT in your working folder
2. Open a terminal (bash/cmd) in your working folder
3. Run the command "python3 ultrastar2singit.py input.txt -S SONGNAME"
4. This should result in SONGNAME.vxla being created in your working folder


Step 6: Adding your song!
1. Create a folder called "Patch' (This is a clear name, but you can choose your own)
2. Create the following folder structure inside of that folder: (Of course replace COREID/DLCID with the ids you noted down during the game assets dump step)
oKL5eCY.png

3. Next place your song files in the correct places as shown below (with the SONGID in this case being "TheManWhoSoldTheWorld")
d2pxbGp.png

(Note the backgrounds are optional, hence being left out of this tutorial, look at the offical files for guidance. They are the background in the menu, pause menu and after completing a song (_Result), Not including them will result in a white background instead.)
4. Open up name.txt ("DLCID/romfs/name.txt) and add a new line to the end of the file and put your SONGID there
5. Open up SongsDLC.tsv with LibreOffice Calc or Excel. Copy an existing row. Insert a row and paste the existing row there (so you now have that song in the table twice). Change the UID (a small number, second column) to be unique.
Change the ID to be your SONGNAME. The artist, title and year columns can also be updated (I did not test not updating them), all other collums can be left alone, but you might change them if you so choose (difficulty and some other data is taken from _meta.xml file instead of this table). This is the entry for TheManWhoSoldTheWorld:
jywweka.png


Step 7: The moment of truth!
0. (Optional, but saves space) remove COREID, and DLCID forlders from sd:/atmosphere/contents
1. Copy your COREID and DLCID folders to sd:/atmosphere/contents
2. Boot Let's Sing (2022)! And enjoy your newly added custom song!

Step 8 (not really): Feedback!
Hey, I was wondering if there was interest in the community for a (GUI) tool to easily import songs into Let's Sing. As shown in this tutorial most of the steps can be easily automated. And especially for importing larger libraries doing it by hand can get annoying. But I feel I need to at least know some people will actually want to use such software before I invest the time to make it (or maybe I do it anyways if i get bored who knows).

Other than that please let me know how it went if you followed this tutorial, and please let me know if I made a mistake somewhere so I can fix it!
 
Last edited by MRJPGames,
Weird, I've added around 500 songs to my game and haven't come across this issue.

Looking around for discussions on this error...
What version of Atmosphere are you running? What format is your SD card (exfat vs fat32)?
Post automatically merged:

I've released a new version of the converter on my github btw, it should no longer show files as missing after the first run and it should skip copying over incomplete conversions (in case the audio is missing in the output folder for example, this might even be what's crashing atmosphere). There are a few other improvements, check it out.
 
Last edited by ratnapatka,
I am on system version 19.0.1 and AMS 1.8,0|E

Have download it. Do you recommend and "clear cache" on all the files and start all over? Or just create the patch folder with the updated version?
 
Last edited by Conan85,
Maybe don't run it just yet.., I'm not sure renaming the contained files was the right approach, I'm probably going to revert back this logic and make a new release. Give me 15ish minutes.
Post automatically merged:

OK, you can download the 1.0.2 version now. You can just try creating a new output folder for starters if you don't know which song might be causing the errors. If the game still crashes you can try clearing the cache.
Post automatically merged:

I am on system version 19.0.1 and AMS 1.8,0|E
I've found a couple discussions about the error you're getting, not sure which solution I'd recommend. It could possibly be an issue with Atmosphere itself, they say in this thread that they'd fixed this error it in version 1.9.4. So maybe you could try updating your Switch and Atmosphere (I'd been putting this off myself for so long as well, wasn't nearly as hard to update as I'd been fretting).

Other people say they've had luck by "fixing the archive bit" 🤷‍♂️
In Atmosphere, go to "tools" > "Arch bit . RCM . Touch . Pkg1/2" > "Fix Archive Bit"
 
Last edited by ratnapatka,
I tried deleting the old folders, both on the switch and the "patch". Then i removed the entire catche and converted everything again and copyed to SD. The only change is that it now crashes earlier. Now it crashes at once when i select "all songs". Before I could select "all songs" and scroll to Elvis before it crashed.

Also tried "fix archive bit", but no change.

Using the first patch that I created with less songs, it works fine.

Not sure if I want to try and updating atmosphere for this, as I am not sure if it would work. I think the one I have is the most stable. And I feel the risk is high, as my son is using the switch and it has 700gb of games. I cannot risk telling him that daddy broke his switch.

Only difference I can think of when creating the old patch and the new (except for having more songs) is that I enabled "Analyze song vocals" in Conversion tweaks, but I doubt that would has anything to do with the problem.
 
Last edited by Conan85,
Could you somehow dm me the list of the additional songs you're getting the crash on? I wanna see if I can replicate this.
 

Site & Scene News

Popular threads in this forum