Tutorial ROM Hack [Tutorial] Add custom songs to Let's Sing! (2022) from UltraStar

MRJPGames

Pretty great guy
OP
Member
Joined
Aug 17, 2013
Messages
1,191
Trophies
0
Location
The Netherlands
Website
fizazy.com
XP
1,524
Country
Netherlands
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!

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!
 

BeckysFootSlave

Active Member
Newcomer
Joined
Jan 4, 2022
Messages
35
Trophies
0
Age
48
XP
171
Country
Germany
I love you!
Thank you so much, but I didn't testet it!
Have to go thru your tutorial and try it so I can come back to give you feedback!

Sad I am the only one?!

Yes, please get bored and do the software anyway :rofl2:
Would be awesome and maybe more will come in here!
 
  • Like
Reactions: MRJPGames

cubes

Well-Known Member
Member
Joined
Sep 16, 2016
Messages
142
Trophies
0
XP
363
Country
Germany
1645390116781.png

I hate python so much ); (I typed SONGNAME for example but it should still work right?)

EDIT: Solution was to type "-s" instead of "-S" it worked :toot:
 
  • Like
Reactions: MRJPGames

MRJPGames

Pretty great guy
OP
Member
Joined
Aug 17, 2013
Messages
1,191
Trophies
0
Location
The Netherlands
Website
fizazy.com
XP
1,524
Country
Netherlands
can i connect my phone as a microphone on a nintendo switch with atmosphere??
No!
Because it is using online service!
You can just use USB Mic!
This, also you can use aux headphones/cable with in-line microphone. Though depending on your use case that might not work, but at least it's technically possible.

(as an asside to those wanting a GUI. It's on the backburner atm. It currently kinda almost works. But that means a lot of testing because what is going wrong requires testing in-game. If I have the time to fix it I'll release it, if I don´t I might release what I have right now, in case anyone feels like continueing (though tbh it's so hacked together you'd probably be better off starting fresh))
 

derYASIN

Member
Newcomer
Joined
Nov 18, 2017
Messages
8
Trophies
0
XP
290
Country
Germany
This, also you can use aux headphones/cable with in-line microphone. Though depending on your use case that might not work, but at least it's technically possible.

(as an asside to those wanting a GUI. It's on the backburner atm. It currently kinda almost works. But that means a lot of testing because what is going wrong requires testing in-game. If I have the time to fix it I'll release it, if I don´t I might release what I have right now, in case anyone feels like continueing (though tbh it's so hacked together you'd probably be better off starting fresh))
I'm currently working on a python3 script. But same, lot of testing is still needed.
A mod to reduce the Boot-Time would be nice :creep:
 

Kleister

New Member
Newbie
Joined
Mar 9, 2022
Messages
1
Trophies
0
Age
29
Location
Home
XP
4
Country
Germany
Everything seems to work till the last step
I didnt had a contents folder inside atmosphere so I created one. (nxdumptool dumped in a other diretory - (E:\switch\nxdumptool\RomFS)
I tried to add Survivor - Eye of the Tiger to the German DLC Song Package (E:\atmosphere\contents\0100CC30149B900E\romfs\Songs\audio\EYEOFTHETIGER.ogg)
I got all the files from the tutorial put them in the right diretories but when I boot the game nothing new is shown
what can be wrong?
DO I have to put the Folders in nxdumptool\RomFS because it extracted it there maybe?
 

derYASIN

Member
Newcomer
Joined
Nov 18, 2017
Messages
8
Trophies
0
XP
290
Country
Germany
Everything seems to work till the last step
I didnt had a contents folder inside atmosphere so I created one. (nxdumptool dumped in a other diretory - (E:\switch\nxdumptool\RomFS)
I tried to add Survivor - Eye of the Tiger to the German DLC Song Package (E:\atmosphere\contents\0100CC30149B900E\romfs\Songs\audio\EYEOFTHETIGER.ogg)
I got all the files from the tutorial put them in the right diretories but when I boot the game nothing new is shown
what can be wrong?
DO I have to put the Folders in nxdumptool\RomFS because it extracted it there maybe?
Check the songs in the SongsDLC File. Copy the columns (after year artist etc.) from one that is shown ingame, and paste them to your custom song.

Alternative: edit the name.txt with a other editor.
 

ErikTheGman

Member
Newcomer
Joined
May 17, 2014
Messages
7
Trophies
0
Age
35
XP
129
Country
Wow this is incredible. There's currently no all in one karaoke game on any platform where you can add and build a custom collection so this is much appreciated. I'd definitely be interested in an all in one conversion tool.
 
  • Like
Reactions: lordelan
General chit-chat
Help Users
    Psionic Roshambo @ Psionic Roshambo: Although the neighbors will probably be all rapey lol