2014-10-07 21:38:18

Hi there,
Lately I've been looking at many ways of writing chiptune music. I have found a few alternatives as stated in my topic in the off-topic room, but the only one that I managed to get to work was MCK, a way to convert MML (Music Macro Language) into music files for the nintendo entertainment system. The only problem with this method is that it seems to require a 16 bit system, although windows xp doesn't work, so my only other possibility is to have a windows 98 machine running so I can convert the MML files after writing them since editing with supernova under 98 is incredibly obnoxious. This means I have to do loads of transfers between the machines because the nes player that I use doesn't work under 98 either. The compiler is also pretty slow. That, combined with the lag the virtual machine has, makes writing nes music a very hard task, requiring a lot of work which could be saved... with bgt.
Surprisingly enough, the bgt soundtrack object's philosophy is mostly the same as the MML/MCK one. The syntax is almost exactly the same, they both use a channel system, but they have a few differences which really make the change impossible. I will try to detail them here so if Philip happens to read this or someone passese this on to him these features might get added in a future small update.
1. Noise channels: This is perhaps my greatest problem right now. Noise channels are used in lots of chiptune tracks to simulate drums in a very rudimentary fassion. They're also incredibly useful when making 8bit sound effects. This would be a great addition to the tone synth class for people like me who don't mind scripting chiptune.
2. Samples (DPCM): The nes had a channel for DPCM samples, which were basically recorded wave samples or something like that that you could insert into the track. This was another way of making drums, way more realistic than the noise one. With bgt you can't add samples to a song in any way.
3. Macros: MML has a very useful feature called macros. They're basically sequences of different atributes that can either loop or just affect the beginning of a note. You have different macros for arpegiator, volume, vibrato, etc. The attack parameter in the soundtrack object, for example, could be achieved in mml by making a volume macro that would ramp the volume up when a note starts: @EV0={ 0 1 3 5 7 }
4. Square wave duty: As most of you already know, square waves can have different duties (12.5%, 25%, 50% and 75%) which make the soudn of the instrument completely change. It would be extremely useful to have that in square instrument tracks since it would allow for more instrument making, and if we ever have an duty macro, that would help a lot too.
5. Pitchbending in soudntrack objects: One of the many reasons I didn't switch to bgt for chiptune making is this one. You can't do pitchbends in the soudntrack because you have no control on the current note whatsoever.
6. Easier way to make tuplets in soundtracks: Right now you have to actually calculate the length of the note which is kind of hard for me. MML uses a pair of delimiters with the notes inbetween them and then a number after the closing delimiter signifying the length of those notes. SO to do an eighth note tripplet you do {CDE}8 or someothing like that, I honestly can't remember if it was braces or brackets off the top of my head.

Well, I think that's it. If anyone would be so kind as to pass this on to Philip if he doesn't really check this forum, I would greatly appreciate it. I'm sure all of us chiptune lovers out there will love this. Hell, this might even make bgt an interesting tool for sighted people who also love chipmusic.
Thanks in advance!

A fight we cannot lose.
An enemy we cannot defeat.
A destiny we cannot escape.
Follow me on twitter @guilevi2000

2014-10-07 21:53:25

What about multiple tracks, chords, and the like?
I might add this to Libaudioverse.  It's already got all the basic objects to do it, and anything that might sell, and the like.  Would be interesting, if nothing else, though simply compiling to MIDI is probably saner in the long run.
On that note, compiling to MIDI could be a good learning project, if you want to learn about making simple parsers and the MIDI format.  MIDI is not actually that hard and already contains all the capabilities you need-the hardest part of it is simply finding a chiptunes soundfont and learning how to set up Midiyoke.  I could probably do it in a weekend, so I suspect those who don't know how could do it in a week or so.

My Blog
Twitter: @ajhicks1992

2014-10-08 00:15:19

Hi,
@camlorn like I said in my other chiptune topic, there aren't any good chiptune soundfonts out there. There're a few which work for most stuff but each one has a problem that makes it unusable at one point or another.

A fight we cannot lose.
An enemy we cannot defeat.
A destiny we cannot escape.
Follow me on twitter @guilevi2000

2014-10-08 02:34:44 (edited by CAE_Jones 2014-10-08 03:02:06)

1. I'm with you on this one. Here's the best I could do (the function you want starts "void noise"), which I have compared to NES and Genesis and found lacking.
2. We could do this for songs playing in the engine, but not if we want to save them as wave files. It would, however, require a ton of work that probably isn't worth it.
5. Huh, I remembered the Soundtrack object having this, but I guess I was wrong. The soundtrack source code is available in the includes folder, but I looked at trying to edit it once, and decided it was easier to just play with the tone_synth directly when I need to do what the soundtrack can't.


[edit: the link is to a synth keyboard in which the instruments are entirely generated in BGT. Another user remodeled it completely after this version, to the extent that I'm keeping both. The recording formats are completely different between the two. I'll edit a link to that one when I find it...
... Here it is (the comment at the top explains the changes): https://dl.dropboxusercontent.com/u/112 … nth102.bgt
I also realize that mine didn't come with instructions, but you probably weren't going to need the interface anyway since you're talking about coding songs. (zxcvb are drums, the other rows are melodic instruments, F5 is record, F6 stop, F7 save, F8 load, and F9 play. Backspace/backslash transpose, and shift and slash change the scale. Escape resets everything.)
]

看過來!
"If you want utopia but reality gives you Lovecraft, you don't give up, you carve your utopia out of the corpses of dead gods."
MaxAngor wrote:
    George... Don't do that.

2014-10-08 11:29:00

Hi,
@CAE, I know most of these changes wouldn't be worth it to implement, but I'm posting the full list out here anyway so if philip sees this and feels it would, here they are. Sighted people can use trackers which we of course can't take advantage of. I've tried a few sid trackers myself and theey're not accessible at all.

A fight we cannot lose.
An enemy we cannot defeat.
A destiny we cannot escape.
Follow me on twitter @guilevi2000

2014-10-14 16:22:18

This isn't quite what you wanted, but I extended the soundtrack class a bit:
https://dl.dropboxusercontent.com/u/165 … track2.bgt
It has what drum-like sounds I could scrounge up (set instrument to 0. B1-E2 and C5-Bb5 are all that's different from the default synth tennors), and I added some fixed-length fades (5-8) for a harp-esque effect.
I want to add pitch bending and more complex instruments and maybe work out the crappy noise generator so it isn't so crappy, but htat's the future.

看過來!
"If you want utopia but reality gives you Lovecraft, you don't give up, you carve your utopia out of the corpses of dead gods."
MaxAngor wrote:
    George... Don't do that.