First bgm attempt. How am i doing?
Moderator: Moderators
- FrankenGraphics
- Formerly WheelInventor
- Posts: 2064
- Joined: Thu Apr 14, 2016 2:55 am
- Location: Gothenburg, Sweden
- Contact:
First bgm attempt. How am i doing?
Update 2016-12-07 - New attachments at the bottom of OP.
==========================
Sharing a little wip in hope of comments. After doing a few covers of NES originals, i decided to try and make bgm music (for gameplay, story, cutscenes).
Before i go on beyond this 30 second intro (1160 bytes), i was thinking i could ask you guys for critique. Have i done something you would concider a technical no-no?
It is only using three instruments; the 'spooky soft clarinetish' is reused in various channels.
The arpeggios are very instruction-dense. Would i be better of doing a bunch of instrument subsets?
I replaced 2xx and 1xx with Q and R, not sure if it got better aesthetically, and it exploded the first part a bit.
Am i placebo-hearing at this point or is there really a difference to write
Q01
as opposed to
Q01
Q10
?
Any other things you come to think of?
Thanks.
==========================
Sharing a little wip in hope of comments. After doing a few covers of NES originals, i decided to try and make bgm music (for gameplay, story, cutscenes).
Before i go on beyond this 30 second intro (1160 bytes), i was thinking i could ask you guys for critique. Have i done something you would concider a technical no-no?
It is only using three instruments; the 'spooky soft clarinetish' is reused in various channels.
The arpeggios are very instruction-dense. Would i be better of doing a bunch of instrument subsets?
I replaced 2xx and 1xx with Q and R, not sure if it got better aesthetically, and it exploded the first part a bit.
Am i placebo-hearing at this point or is there really a difference to write
Q01
as opposed to
Q01
Q10
?
Any other things you come to think of?
Thanks.
- Attachments
-
- encounter_intro_or_story4c.nsf
- (8.85 KiB) Downloaded 330 times
-
- encounter_intro_or_story4c.ftm
- (14.75 KiB) Downloaded 346 times
Last edited by FrankenGraphics on Fri Dec 16, 2016 5:13 pm, edited 4 times in total.
Re: First bgm attempt. How am i doing?
Qxy/Rxy...(quote from wiki)
y is the number of semitones to sweep to, x is the speed at which the slide should be performed.
Q10 moves zero semitones = no slide
Q01 moves 1 semitone at rate zero = no slide
y is the number of semitones to sweep to, x is the speed at which the slide should be performed.
Q10 moves zero semitones = no slide
Q01 moves 1 semitone at rate zero = no slide
nesdoug.com -- blog/tutorial on programming for the NES
- FrankenGraphics
- Formerly WheelInventor
- Posts: 2064
- Joined: Thu Apr 14, 2016 2:55 am
- Location: Gothenburg, Sweden
- Contact:
Re: First bgm attempt. How am i doing?
That can't be completely right, i've soloed a channel and can positively hear a slight bend down on R01.
Was hoping R/Q10 would increase the rate of the previous (since it has no semi-note info of its own) so you could build a different curve. But the way you explain it makes sense. Thanks!
Anyone wanting to take a look at the famitracker file?
Was hoping R/Q10 would increase the rate of the previous (since it has no semi-note info of its own) so you could build a different curve. But the way you explain it makes sense. Thanks!
Anyone wanting to take a look at the famitracker file?
- Drew Sebastino
- Formerly Espozo
- Posts: 3496
- Joined: Mon Sep 15, 2014 4:35 pm
- Location: Richmond, Virginia
Re: First bgm attempt. How am i doing?
I just looked at it: pretty damn good! The two things I'd do though, are maybe elongate the noise channel for the snare drum type noise, (although you called it a placeholder) and not turn off the triangle channel once it gets started; it blends in with the music less because it's a little distracting.
Re: First bgm attempt. How am i doing?
You are right. I guess speed zero is not actually zero. Because Q01 and R01 do bend slightly.That can't be completely right, i've soloed a channel and can positively hear a slight bend down on R01.
I see on the wiki, something about 2x+1. So speed zero = 2*0+1=1.
nesdoug.com -- blog/tutorial on programming for the NES
Re: First bgm attempt. How am i doing?
Listened to it and it sounds good, like it!
Re: First bgm attempt. How am i doing?
It is good, although perhaps is a bit short loop
(Free Hero Mesh - FOSS puzzle game engine)
- rainwarrior
- Posts: 8732
- Joined: Sun Jan 22, 2012 12:03 pm
- Location: Canada
- Contact:
Re: First bgm attempt. How am i doing?
Technical suggestions:
Usually in a game, sound effects will interrupt or interfere with the music in some way, usually one of the square channels. To me, both square 1 and 2 here seem rather essential, either one dropping out temporarily makes a big impact. (Obviously not important if this is being used for some part of a game with no sound effects conflicting.) In my game, I put all SFX on square 1 or noise, so I tried to write every track so that square 2 and triangle are essential, and it still sounds "complete" if I mute the other two.
Be careful of unisons, especially between the square. In the third pattern look at row 34-36 where both squares are playing the same pitch. There is a strange phase cancellation effect there where those two channels are matching briefly.
If you ever want to know whether it's smaller to make an arpeggio instrument macro vs typing in the notes, export, write down the bytes created, then export again and compare. It depends on what your exporter does, but in general an instrument consumes bytes once, and a note consumes bytes every time it's placed in a new pattern. Similarly, replace a repetitive use of an effect with an instrument if you can. (My own engine didn't support most effects, because it's effective enough just to do most things by instrument alone, and usually space conservative.)
Musical suggestions: (not intended as criticism, I like it so far, just some ideas if you're looking for any)
On the square 2 melody, instead of fading out notes, consider a sudden drop in volume instead, which can sound like an "echo", almost as if there is an extra channel.
The constant arpeggio in square 1 is a very dominating texture with a very "flat" rhythm. Maybe consider thinning it out a little (e.g. deleting or moving a few notes, giving it some kind of rhythm), lowering its volume, passing through tones besides just the triad (e.g. E F# G B instead of E G B G, or longer patterns).
When moving between chords, try not to just take the exact shape and move it up or down, try to vary it instead, and try to think of the individual notes in the chord as each being their own melodic line that should move short distances from chord to chord. When trying to vary shape it often helps a lot to have more than 3 parts to your harmony.
Avoid matching the rhythm of the bassline with the rhythm of the melody. You only have 3 channels to work with, so making them rhythmically distinct helps a lot to make the orchestration feel "thicker". For example, in pattern 4 maybe move that B on row 0C back to 08. This applies to all channels, really, if you have the harmony change every 4 beats, don't make everything else align with it, start the melody somewhere else in the bar, move the bassline yet somewhere else.
Usually in a game, sound effects will interrupt or interfere with the music in some way, usually one of the square channels. To me, both square 1 and 2 here seem rather essential, either one dropping out temporarily makes a big impact. (Obviously not important if this is being used for some part of a game with no sound effects conflicting.) In my game, I put all SFX on square 1 or noise, so I tried to write every track so that square 2 and triangle are essential, and it still sounds "complete" if I mute the other two.
Be careful of unisons, especially between the square. In the third pattern look at row 34-36 where both squares are playing the same pitch. There is a strange phase cancellation effect there where those two channels are matching briefly.
If you ever want to know whether it's smaller to make an arpeggio instrument macro vs typing in the notes, export, write down the bytes created, then export again and compare. It depends on what your exporter does, but in general an instrument consumes bytes once, and a note consumes bytes every time it's placed in a new pattern. Similarly, replace a repetitive use of an effect with an instrument if you can. (My own engine didn't support most effects, because it's effective enough just to do most things by instrument alone, and usually space conservative.)
Musical suggestions: (not intended as criticism, I like it so far, just some ideas if you're looking for any)
On the square 2 melody, instead of fading out notes, consider a sudden drop in volume instead, which can sound like an "echo", almost as if there is an extra channel.
The constant arpeggio in square 1 is a very dominating texture with a very "flat" rhythm. Maybe consider thinning it out a little (e.g. deleting or moving a few notes, giving it some kind of rhythm), lowering its volume, passing through tones besides just the triad (e.g. E F# G B instead of E G B G, or longer patterns).
When moving between chords, try not to just take the exact shape and move it up or down, try to vary it instead, and try to think of the individual notes in the chord as each being their own melodic line that should move short distances from chord to chord. When trying to vary shape it often helps a lot to have more than 3 parts to your harmony.
- E3 G3 B3 -> D3 F3 A3 (same shape, lack of variety, feels like "same" chord because it is)
- E3 G3 E4 G4 -> D3 A4 D4 F4 (doubling 3rd and omitting 5th and widening the span can make room for a shape change)
- E3 G3 B3 E4 -> F3 A3 C4 D4 (adding a 7th or using the 3rd in the bass can add shape/sound variety)
- E3 F#3 G3 B3 -> D3 F3 A3 C4 (adding a 9th between the root and 3rd has other possibilities)
Avoid matching the rhythm of the bassline with the rhythm of the melody. You only have 3 channels to work with, so making them rhythmically distinct helps a lot to make the orchestration feel "thicker". For example, in pattern 4 maybe move that B on row 0C back to 08. This applies to all channels, really, if you have the harmony change every 4 beats, don't make everything else align with it, start the melody somewhere else in the bar, move the bassline yet somewhere else.
- FrankenGraphics
- Formerly WheelInventor
- Posts: 2064
- Joined: Thu Apr 14, 2016 2:55 am
- Location: Gothenburg, Sweden
- Contact:
Re: First bgm attempt. How am i doing?
Thanks for all the helpful and encouraging comments! I've added a new .ftm in the OP so you can hear the differences your tips and remarks have contributed to. Here's some more questions, and then the replies, and last a list of some of the more notable changes, just in case someone would like to comment on it.
New questions
-When writing a pitch sequence (arpeggio), i do it like this:
| 0 0 0 0 0 0 0 -4 -4 -4 -4 -4 -4 -4 -7 -7 -7 -7 -7 -7 -7 -4 -4 -4 -4 -4 -4 -4
Is there a more efficient (bytewise) way to write sequences for the famitracker engine, famitone, or the like?
-When i put in new notes, FT always adds which instrument it is for, however, it isn't necessary for playback if i don't change instruments. Are these completely reduntant or do they serve a purpose?
Is it good practice to remove any seemingly superfluous instrument assignments?
---
Technical changes
-Moved back from Q/Rxx to 1/2xx since dougeff has been working on implementing those for famitone.
-Now aiming at famitone, i removed the duty sequence mostly heard on sq 1. It's not that much of a sacrifice.
-Only incompatible feature left, i think, is the use of Gxx note delay in the first frame.
Artistic changes
-Reduced # of break lines in tri and moved some of them to offbeat positions where they don't ask for as much attention.
-Bassline also has more of a rythmic identity of its own now.
-Arpeggio got a compromise between volume adjustment and new movements.
New questions
-When writing a pitch sequence (arpeggio), i do it like this:
| 0 0 0 0 0 0 0 -4 -4 -4 -4 -4 -4 -4 -7 -7 -7 -7 -7 -7 -7 -4 -4 -4 -4 -4 -4 -4
Is there a more efficient (bytewise) way to write sequences for the famitracker engine, famitone, or the like?
-When i put in new notes, FT always adds which instrument it is for, however, it isn't necessary for playback if i don't change instruments. Are these completely reduntant or do they serve a purpose?
Is it good practice to remove any seemingly superfluous instrument assignments?
Hmm. You don't happen to mean the crescending detune effect here (originally Rxx, now 2xx)? Or something else? I placed them there to separate the unison. Since there is some movement in the detuning, this may come across as not only wet but aslo phasing due to moving points of cancellation. Feature or flaw - i'm not yet sure whether to keep as is, or approach it differently.rainwarrior wrote:There is a strange phase cancellation effect there where those two channels are matching briefly.
Thanks, i'll keep that in mind. I think it's okay for this song as i imagined some sort of 'cinematic' encounter or cutscene or the like.Usually in a game, sound effects will interrupt or interfere with the music in some way, usually one of the square channels
I made *slight* adjustments towards this effect this time, but some fadeouts are still there.On the square 2 melody, instead of fading out notes, consider a sudden drop in volume instead, which can sound like an "echo", almost as if there is an extra channel.
This and your examples was very helpful. There's a little of everything in the new version, except note cutting, and it's still a little conservative on note spread for the most part. A bit of a sidenote, but i was hoping to retain a sort of simple analogue sequencer feel, but even those may have triggers and accents. But sort of like the sequencer music that is now epitomized by the stranger things soundtrack.Maybe consider thinning it out a little (e.g. deleting or moving a few notes, giving it some kind of rhythm), lowering its volume, passing through tones besides just the triad (e.g. E F# G B instead of E G B G, or longer patterns).
Thanks! And regrettably, so is the new version, though i'm eager to extend it now that i've got some of the technical question marks out of the way.zzo38 wrote:It is good, although perhaps is a bit short loop
---
Technical changes
-Moved back from Q/Rxx to 1/2xx since dougeff has been working on implementing those for famitone.
-Now aiming at famitone, i removed the duty sequence mostly heard on sq 1. It's not that much of a sacrifice.
-Only incompatible feature left, i think, is the use of Gxx note delay in the first frame.
Artistic changes
-Reduced # of break lines in tri and moved some of them to offbeat positions where they don't ask for as much attention.
-Bassline also has more of a rythmic identity of its own now.
-Arpeggio got a compromise between volume adjustment and new movements.
Re: First bgm attempt. How am i doing?
Klax does the same thing, where pulse 1 and pulse 2 play the same note with opposite sweep directions.WheelInventor wrote:Hmm. You don't happen to mean the crescending detune effect here (originally Rxx, now 2xx)? Or something else? I placed them there to separate the unison. Since there is some movement in the detuning, this may come across as not only wet but aslo phasing due to moving points of cancellation. Feature or flaw - i'm not yet sure whether to keep as is, or approach it differently.rainwarrior wrote:There is a strange phase cancellation effect there where those two channels are matching briefly.
My own music engine, Pently, doesn't support sweep yet, primarily because of the huge dynamic range of sweep rates that I expect people to want: multiple semitones per frame vs. several rows per semitone. It does support a 12-frame vibrato (similar to FamiTracker effect 45x), which if enabled on only one channel might be useful for detuning a unison. But it does have Gxx note delay and Sxx note cut.WheelInventor wrote:-Only incompatible feature left, i think, is the use of Gxx note delay in the first frame.
- rainwarrior
- Posts: 8732
- Joined: Sun Jan 22, 2012 12:03 pm
- Location: Canada
- Contact:
Re: First bgm attempt. How am i doing?
I don't believe so. You could add RLE macro support to the engine if you thought it was necessary, though. (The biggest problem/consequence here would be requiring an extra byte or two of RAM per macro per channel, I think.)WheelInventor wrote:Is there a more efficient (bytewise) way to write sequences for the famitracker engine, famitone, or the like?
I believe repeated use of the same instrument is "free", only changing it within the pattern incurs the switching cost. (Easy to verify this with an export test, though. You can delete values from the instrument column and see if it makes a difference.)WheelInventor wrote:-When i put in new notes, FT always adds which instrument it is for, however, it isn't necessary for playback if i don't change instruments. Are these completely reduntant or do they serve a purpose?
Is it good practice to remove any seemingly superfluous instrument assignments?
I think I specified the exact spot, there was no pitch effect there (and there still isn't). With a detune of some sort there is no longer an exact unison, so the problem is alleviated, though still it's usually prudent to take care with short notes and detuned unison, since the phasing effect may have a slower rate of change than the notes used.WheelInventor wrote:Hmm. You don't happen to mean the crescending detune effect here (originally Rxx, now 2xx)? Or something else? I placed them there to separate the unison. Since there is some movement in the detuning, this may come across as not only wet but aslo phasing due to moving points of cancellation. Feature or flaw - i'm not yet sure whether to keep as is, or approach it differently.rainwarrior wrote:There is a strange phase cancellation effect there where those two channels are matching briefly.
The three unison notes in that spot stuck out to my ear, maybe the difference doesn't bother you like it does me (I may have trained myself to notice it). Basically you can have notes that sound twice as loud, not at all, or have some timbre change, depending on the circumstances of phase going in.
In version 2, the 201 you use there on the second instance of that unison thing helps a lot, I think. That would be useful on the first instance as well.
I like a lot of the changes in version 2.
Re: First bgm attempt. How am i doing?
I already have 1xx,2xx,4xx done, but I haven't had time to fully test (especially 4xx, who's depth seems not matching famitracker)...but there's still a bug in doing multiple songs, that I don't know how to fix.Moved back from Q/Rxx to 1/2xx since dougeff has been working on implementing those for famitone.
Also considering 3xx. Maybe. Been busy.
My Flappy Jack game is using a famitone2 engine with 1xx,2xx,4xx effects. It seems to work ok.
Edit...I limited 4xx to have only one possible rate, but depths 0-A. That's what I chose, and I'm sticking to it.
Edit 2...but my 4xx has an advantage over famitracker, in that it doesn't click on certain frequencies (on writes to high byte resetting phase)...as it does not overflow/underflow, and never needs a high byte write.
nesdoug.com -- blog/tutorial on programming for the NES
- FrankenGraphics
- Formerly WheelInventor
- Posts: 2064
- Joined: Thu Apr 14, 2016 2:55 am
- Location: Gothenburg, Sweden
- Contact:
Re: First bgm attempt. How am i doing?
Here's another question:
How much does rows per frame matter towards byte efficiency? I used 64 rows just because that was preset, but i can imagine one could have a few more duplicates compressed if set to 32 or even 16. Is there any penalty doing so?
Regarding your problem (i read the thread), i was thinking about how you'd play a fretless instrument like the cello, controller ribbon, or the like. There's certain common modes of glissando (in reality: thousands of micro tempo-tonal differences), but they could be represented convincingly by a few combinations of envelopes of differing log/lin/exponantiality (talking in synth terms here). A working analogy would be the interface and film animation terms of ease in and ease out (and their natural-looking and sounding combination named easy ease in AfterEffects). Google's material design tutorial has some illustrative animations and useful protocols. In their examples, just translate "screen bounds" to "note on/off" when reading/viewing.* While this doesn't solve your problem directly, i think what i'm suggesting is finding a middle road working for the most commonly used octaves and then maybe complete/negotiate that compromise with a few select different modes (maybe in the form of LUTs) of glissando. Not perfect, but maybe approachable? FT wouldn't support it natively, of course.
*If you have AE, you could even insert a tone generator and set it to follow a curve to be able to preview how different curve modes affect pitch, and then edit those curves in realtime to hear the difference. Could be good for simulation. Pitch movement can also be scripted as a function. After Effects' animation scripts follow JavaScript syntax.
How much does rows per frame matter towards byte efficiency? I used 64 rows just because that was preset, but i can imagine one could have a few more duplicates compressed if set to 32 or even 16. Is there any penalty doing so?
This reply got me thinking a little. Necessary would probably be a strong word in this case, but it would prove versatile to have the option to be able to set step length relative to the track row grid rather than the smallest step atom, because that would make selected sequences independent of the speed setting (from song to song, or even from part to part). It would save a bunch of bytes too, as a side effect. It would require modification to FT itself to be able to review it correctly during composition, though.rainwarrior wrote:You could add RLE macro support to the engine if you thought it was necessary, though. (The biggest problem/consequence here would be requiring an extra byte or two of RAM per macro per channel, I think.)
Oh, apologies. It got me confused since my patterns are in the order 0, 2, 1, 3, 4. I looked at number 3 rather than the third in order and found nothing. Now i hear it. Fixed it! Thanks, againI think I specified the exact spot
That's good to keep in mind! If this gets implemented, a conversion should be straightforward and transparent, since it already has support for Gxx.tepples wrote:My own music engine, Pently, doesn't support sweep yet, primarily because of the huge dynamic range of sweep rates that I expect people to want: multiple semitones per frame vs. several rows per semitone. It does support a 12-frame vibrato (similar to FamiTracker effect 45x), which if enabled on only one channel might be useful for detuning a unison. But it does have Gxx note delay and Sxx note cut.-Only incompatible feature left, i think, is the use of Gxx note delay in the first frame.
Regarding your problem (i read the thread), i was thinking about how you'd play a fretless instrument like the cello, controller ribbon, or the like. There's certain common modes of glissando (in reality: thousands of micro tempo-tonal differences), but they could be represented convincingly by a few combinations of envelopes of differing log/lin/exponantiality (talking in synth terms here). A working analogy would be the interface and film animation terms of ease in and ease out (and their natural-looking and sounding combination named easy ease in AfterEffects). Google's material design tutorial has some illustrative animations and useful protocols. In their examples, just translate "screen bounds" to "note on/off" when reading/viewing.* While this doesn't solve your problem directly, i think what i'm suggesting is finding a middle road working for the most commonly used octaves and then maybe complete/negotiate that compromise with a few select different modes (maybe in the form of LUTs) of glissando. Not perfect, but maybe approachable? FT wouldn't support it natively, of course.
*If you have AE, you could even insert a tone generator and set it to follow a curve to be able to preview how different curve modes affect pitch, and then edit those curves in realtime to hear the difference. Could be good for simulation. Pitch movement can also be scripted as a function. After Effects' animation scripts follow JavaScript syntax.
I think that's great. If one'd want another rate, that's still doable with a looped instrument sequence. These two options should cover most if not all needs for vibrato.dougeff wrote:Edit...I limited 4xx to have only one possible rate, but depths 0-A. That's what I chose, and I'm sticking to it.
Edit 2...but my 4xx has an advantage over famitracker, in that it doesn't click on certain frequencies (on writes to high byte resetting phase)...as it does not overflow/underflow, and never needs a high byte write.
- rainwarrior
- Posts: 8732
- Joined: Sun Jan 22, 2012 12:03 pm
- Location: Canada
- Contact:
Re: First bgm attempt. How am i doing?
It depends on how often you are able to reuse patterns instead of creating new patterns in your composition. A longer order has more entries in it, but in most cases doubling it probably is less extra space than even adding one new pattern worth of notes? There's going to be a point of "too small" as well, but again depends on your composition.WheelInventor wrote:How much does rows per frame matter towards byte efficiency? I used 64 rows just because that was preset, but i can imagine one could have a few more duplicates compressed if set to 32 or even 16. Is there any penalty doing so?
However, I think Famitone's exporter might have some kind of auto-subdivision routine that will automatically subdivide and repeat patterns like that, but I am not 100% sure about this.
Re: First bgm attempt. How am i doing?
I like it. The arps are of the melodic speed rather than the "expat C64 musician" variety.
I feel it would be slightly improved by having the bass not have rests in the measures it plays, but I'm a sucker for bass.
I feel it would be slightly improved by having the bass not have rests in the measures it plays, but I'm a sucker for bass.