Homebrew [WIP] ctrmus - Another 3DS Music Player

  • Thread starter Thread starter MaK11-12
  • Start date Start date
  • Views Views 63,451
  • Replies Replies 119
  • Likes Likes 29
Hi everyone. Just wanted to give an update regarding ffmpeg support.

I've been working on adding ffmpeg support to ctrmus over the past couple of days; you can have a look at my work so far here.
Adding ffmpeg support is becoming a bit of a pain because each decoder in ffmpeg may output audio in varying formats. For example, flac music is decoded to signed 16 bit (which is what the 3DS uses, so that's great). But the AAC decoder outputs either floating point or signed 32 bit buffer. This means that I'll have to find a way of converting between the possible output formats to signed 16 bit. I think this may be possible using libswresample, but I'm not sure. This requires a lot of research, and so therefore this feature may take quite a while to finish.

Currently, ctrmus in the ffmpeg branch can open all files that ffmpeg supports (including AAC, MKV, MP3, etc.), and displays metadata on the top screen, but playback is incredibly horrible due to the feature being in very early stages.

In addition, I'm going to be busy with work for the next 3 days so progress will be limited during this time.

Thanks for you support. :) Give me a shout if there are any questions.
Thank you so much for your hard work sir, I REALLY appreciate this! :)
 
Looks very interesting. I have a question, do you plan on adding support for CTRM/BCSTMs with loop-flag support? The Nintendo 3DS can natively run binary CSTMs, and it's also possible for the 3DS to run audio sample rate of up to 44100Hz too (unlike Nintendo 3DS Sound, which only plays at a very low sample-rate when playing audio files).
 
Looks very interesting. I have a question, do you plan on adding support for CTRM/BCSTMs with loop-flag support? The Nintendo 3DS can natively run binary CSTMs, and it's also possible for the 3DS to run audio sample rate of up to 44100Hz too (unlike Nintendo 3DS Sound, which only plays at a very low sample-rate when playing audio files).
I don't plan on adding support for those file formats at this time. I don't believe there is a use case for it, as I don't think users would be deliberately encoding their music collection to something proprietary like CSTM. I'd like to support whatever file formats other common music players use.
 
If you setup a donation button, I'll donate to this project every couple of weeks. I enjoy having a stable music player that's easy to use.

Thanks for your support. :) I don't think I'll accept donations though. This project isn't just for the benefit of the community, but also to better my programming skills. In addition there are no expenses such as server costs that are required to keep this project running.
 
  • Like
Reactions: death360 and Jayro
awesome! i've been looking forward to an alternative to 3DS Sound

btw, do you think it would be possible to add support for native video game sound formats like NFS/SPC/PSF/ect?
 
awesome! i've been looking forward to an alternative to 3DS Sound

btw, do you think it would be possible to add support for native video game sound formats like NFS/SPC/PSF/ect?

I don't currently have plans to support those formats unless they're already in ffmpeg. I may add it in the future, but I can't imagine too many people wanting to play those formats directly on the 3DS.
 
FFMPEG has .OGG, yes? That one is going to be very-much requested I believe. FLAC is my poison of choice, and playback has been flawless so far.
I'm only adding ffmpeg because of it's free as in freedom AAC decoder. A number of people were requesting AAC, so now I'm replacing all decoders with ffmpeg. It's a pain but at least it'll open a lot of other codecs. It could also be possible to have video playback support way in the future. ;) Although ctrmus on the ffmpeg can currently open video files, but only play the audio track.

Adding OGG on its own could have been easy using libvorbisfile, but at least ffmpeg will add OGG support to ctrmus soon.
 
New release updated 15-02-2017 (0.4.9):
  • Changed button mappings to resemble Moonshell DS. Press L+Left to see button mappings.
  • Browse files whilst music is playing.
  • Use left and right buttons to browse 13 files at a time.
  • Fixed an issue whereby the user was unable to suspend ctrmus (CIA only).
  • Changed banner and banner music (CIA only).
  • Back-end changes to reduce compile warnings.
 
Last edited by MaK11-12,
Hello.

I'm having an Error 1000: NDSP Initialisation failed when I try to play an .mp3 song. I downloaded this homebrew via FBI QR scan, by the way.

Thanks.
 
Hello.

I'm having an Error 1000: NDSP Initialisation failed when I try to play an .mp3 song. I downloaded this homebrew via FBI QR scan, by the way.

Thanks.
You have to run DSP Dumper from the homebrew channel first, but you only need to do it once. Then everything will work fine.
 
  • Like
Reactions: MaK11-12
Had the opportunity to test this out on a long train journey yesterday and it totally held up.

Besides having to select every track to play everything worked as it should .

Once the option to play an entire folder is implemented it would mean I can fully ditch the PSP.

Thank you
 
  • Like
Reactions: Jayro and MaK11-12
Hello.

I'm having an Error 1000: NDSP Initialisation failed when I try to play an .mp3 song. I downloaded this homebrew via FBI QR scan, by the way.

Thanks.
As Jayro says, you have to use DspDump before ctrmus and other homebrew that use audio can work. :)

Had the opportunity to test this out on a long train journey yesterday and it totally held up.

Besides having to select every track to play everything worked as it should .

Once the option to play an entire folder is implemented it would mean I can fully ditch the PSP.

Thank you
Thanks! :)
 
Hey @MaK11-12 , do you think you could enable double buffering on the bottom screen, so when you're scrolling the text won't flicker? Unless that's not how you fix it... Just curious if the flickering text was fixable.
According to ctrulib documentation here, double buffering is used by default. The only way this can be fixed is by creating a proper graphics accelerated GUI. :)
 

Site & Scene News