Coder Social home page Coder Social logo

kermalis / vgmusicstudio Goto Github PK

View Code? Open in Web Editor NEW
251.0 15.0 31.0 4.7 MB

🎵 A program that lets you listen to the music from popular video game formats. 🎵

License: GNU Lesser General Public License v3.0

C# 98.60% Assembly 1.40%
gba gameboy-advance gameboy-advance-emulator sf2 soundfont2 rom rom-hacking sound-processing sound-engine sound-visualizer

vgmusicstudio's People

Contributors

irdkwia avatar kermalis avatar laqieer avatar platinumlucario avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

vgmusicstudio's Issues

A way to ensure a "finish" event is dumped

When loading events, the program will stop scanning once a loop or finish is detected. However, to dump midis that match the source midi used in development of the game, there is the problem of finish events appearing after loop events. This means the finish event is missing when dumping the midi.

Possible solutions:

  • "Load to end" option that loads events after jumps in order to get a finish event. This is not ideal as the default solution since not all games will have finish events after the looping jumps.
  • Add a finish event while dumping midis if there is not one present. The problem here arises when there are events after the looping jumps aside from just the missing finish event.

Saving new note data to the ROM

Hello! This is my first time using the program, so apologies if it's obvious and I'm just not seeing it. I'm exporting to MIDI, changing the arrangement in Sekaiju, and opening the MIDI back up to preview it, but I can't find an option to save modified + converted MIDI data back to the ROM. Is this functionality something that's currently being worked on/isn't complete yet?

Also, this is a tangent, but I saw in the README.md that you might support Amiga MODs in the future if you go insane. If I had the know-how, I'd implement .XM files or Impuse Tracker .IT files instead - there are a lot less weird limitations in those file formats than the Amiga MOD format (forced panning, four-channel limit, etc.)

There is no way to tell the version of a GBA ROM.

Not sure if I'm just being dumb since I'm sort of new to this, but every time I try to play a track from the Pokemon Ruby NTSC rom that I have, no matter what song I choose, an error like this would come up.
image

Export voicegroup to DLS file?

The other soundfont format which VGMTrans exports to along with SF2. It's more convenient when importing a song into FL Studio since it just imports in one go and you don't need extra setup. It would be really awesome if you could add it here too.

8-bit audio stream

This is something that I've wanted for a long time. It would complete the GBA feel of the music and yield more accuracy for those who use GBA Music Studio as a tool for ROM edits.
I tried this a while back but it produced a lot of popping when notes turned on. The program even popped really loud when starting, and I don't understand why there is any popping because all I'm doing is removing floats and instead using bytes.
What I will do is create a new branch with the 8-bit stream version, and maybe an audio expert can help me figure this out.

Mother 1+2 (Japan) related

@Kermalis

Hello. My name is John Enigma, and I'm part of the Mother 2 GBA VWF Project by Jeffman. Right now, progress has been running smoothly on our Discord, and not only are we porting, and bugfixing, the entire script of EarthBound to M2GBA. There are also sub-projects unrelated to Mother 2 GBA, which is a recolorization, and a music & sound restoration. The latter is actually more important than the colors one. Why? Because Mother 2 GBA's music sounds like an ear-deafening mess, compared to the original (EarthBound).

One of the members of the translation team is interested in restoring the music, but the problem is that there are no available builds, or a way to compile the app via the source code. Can you help us out on that?

Also, I have one small personal question: does this program have the ability to edit music of the Mother 1 portion of Mother 1+2?

Here's a link to our Discord: https://discord.gg/FuBXVV

VoiceTableSaver's problems

Fixed frequency instruments need to be added with the engine's frequency

GB instruments sound pretty strange

Export to .wav Always Uses 1 Loop

When exporting to a .wav file, the program always exports just the first loop and then starts fading out, regardless of playlist settings.

Application hangs on exit

A thread stays alive and the process remains in memory as a result. I think it is SongPlayer.StopThread() misbehaving.

Possible information loss when loading a song

M4A/MP2K:
Since running status, previous key, and previous velocity are used while loading the commands, if these three are needed after jumping somewhere, the final playback may be incorrect since they are not saved in the commands. Mid2agb by Nintendo stops this (relying on these after jumps), but custom-written songs or songs created by other conversion tools that rely on this behavior will not work.
DSE:
Same issue but for last note duration & last rest.

Notes are extending in specific circumstances

Take this situation here: (Song 37)
image

The game plays 4 groups of 4 equally spaced notes

Currently, the program's playback and midi saving do not check the previous command, so they are extending the free note.

AllocTrack and OpenTrack are implemented incorrectly

AllocTrack currently enables the track, and open track sets the track's position.
This is incorrect, AllocTrack would not actually do anything in a program like this, and OpenTrack should instead be the one enabling the track. An example is MKDS song 75 where opening tracks is subject to change. Also, in BW2, a lot of sound effects call AllocTrack for more tracks than are used with OpenTrack, and as a result, some tracks start enabled at offset 0 when they should not actually be enabled.

Channel lists are not thread-safe just yet

In NDSMusicStudio, it works because channels are removed then nullified, and created then added
In GBAMusicStudio there is some place that channels are nullified then removed, which means the UI can capture the list while there is a null entry and then crash

Mario Kart song 75

When the rand seed is 189955040, the song is changed to an alternate form. The top two tracks are silent because their note is of 0 length, but it should play the sound regardless.

Exception handling from WAV recording

Currently the only exception that will be handled is when you try to create the file with the specified name and it fails. If you run out of disk space or the file gets removed/locked in some other way, then the mixer will be unable to write the samples and will throw an exception, and that exception cannot be caught because it is in a different thread.

Infinite loading in song 1824 in BW

The 14th event is a "LoopStart (26)" command and the 17th event is a "Jump" command back into the 14th event. Loading never stops because the call stack is above 0.

Issue when build is attempted

When attempting to compile in Visual Studio, the build fails. I am on Windows 7 64-bit.
Here is the error output.

C:\Users\Bonboon228\Downloads\GBA\GBAMusicStudio\GBAMusicStudio.csproj : error : The project file could not be loaded. The 'Content' start tag on line 126 position 6 does not match the end tag of 'None'. Line 128, position 7. C:\Users\Bonboon228\Downloads\GBA\GBAMusicStudio\GBAMusicStudio.csproj

MIDI Saver events are in the wrong order

track.Insert is placing the new event before the events already at that tick. For example:

First note event:
NoteOn - 240 (lasts for 12 ticks)
NoteOff - 252

Next note event:
NoteOn - 252 (lasts for 12 ticks)
NoteOff - 264

track.Insert will place the second note's NoteOn before the first event's NoteOff which causes one long note and one note that does not play.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.