First bgm attempt. How am i doing?

This is an archive of a topic from NESdev BBS, taken in mid-October 2019 before a server upgrade.
View original topic
First bgm attempt. How am i doing?
by on (#184424)
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.
Re: First bgm attempt. How am i doing?
by on (#184439)
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
Re: First bgm attempt. How am i doing?
by on (#184451)
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?
Re: First bgm attempt. How am i doing?
by on (#184453)
I just looked at it: pretty damn good! :shock: 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?
by on (#184459)
Quote:
That can't be completely right, i've soloed a channel and can positively hear a slight bend down on R01.


You are right. I guess speed zero is not actually zero. Because Q01 and R01 do bend slightly.

I see on the wiki, something about 2x+1. So speed zero = 2*0+1=1.
Re: First bgm attempt. How am i doing?
by on (#184477)
Listened to it and it sounds good, like it!
Re: First bgm attempt. How am i doing?
by on (#184480)
It is good, although perhaps is a bit short loop
Re: First bgm attempt. How am i doing?
by on (#184486)
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.
  • 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)
There are a lot more shape possibilities for "open" chord orchestrations (notes space widely) than "closed" ones (notes packed closely together).

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.
Re: First bgm attempt. How am i doing?
by on (#184557)
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?

rainwarrior wrote:
There is a strange phase cancellation effect there where those two channels are matching briefly.
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.
Quote:
Usually in a game, sound effects will interrupt or interfere with the music in some way, usually one of the square channels
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.
Quote:
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.
I made *slight* adjustments towards this effect this time, but some fadeouts are still there.
Quote:
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).
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. :mrgreen: But sort of like the sequencer music that is now epitomized by the stranger things soundtrack.
zzo38 wrote:
It is good, although perhaps is a bit short loop

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. :)
---
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?
by on (#184561)
WheelInventor wrote:
rainwarrior wrote:
There is a strange phase cancellation effect there where those two channels are matching briefly.
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.

Klax does the same thing, where pulse 1 and pulse 2 play the same note with opposite sweep directions.

WheelInventor wrote:
-Only incompatible feature left, i think, is the use of Gxx note delay in the first frame.

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.
Re: First bgm attempt. How am i doing?
by on (#184563)
WheelInventor wrote:
Is there a more efficient (bytewise) way to write sequences for the famitracker engine, famitone, or the like?

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:
-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 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:
rainwarrior wrote:
There is a strange phase cancellation effect there where those two channels are matching briefly.
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.

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.

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?
by on (#184564)
Quote:
Moved back from Q/Rxx to 1/2xx since dougeff has been working on implementing those for famitone.


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.

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.
Re: First bgm attempt. How am i doing?
by on (#184594)
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?

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.)
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.

Quote:
I think I specified the exact spot
Oh, apologies. :oops: 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, again :beer:

tepples wrote:
Quote:
-Only incompatible feature left, i think, is the use of Gxx note delay in the first frame.
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.
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.

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.

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.
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.
Re: First bgm attempt. How am i doing?
by on (#184614)
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?

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.

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?
by on (#184622)
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.
Re: First bgm attempt. How am i doing?
by on (#184631)
I personally liked more the first version. The beginning with the change in the instrument for detunning is fine it just later there some radical sudden change in the note and it feels odd a little bit. Maybe I'm just not used to the new version. I will try to check tonight which place it was.
Re: First bgm attempt. How am i doing?
by on (#184744)
New update to the song in the OP! Longer and probably much better. :P

Banshaku, no you're right. When i switched some of the 2xx effects for a new instrument, the result was a bit more evident. I removed a few of them that stuck out too much for me.

Above all, there were a lot of note progressions which didn't make much harmonic sense, which made certain passages shallow and uneasy. With tired ears i didn't catch them the first time around, because the arpeggio is slightly too fast for my brain to pinpoint what went wrong. I stepped it through and overall, it should have a little more melodic depth to it now.

I'm beginning to feel a little confident i could make a decent soundtrack, though your comments still help me out a lot :beer:
Re: First bgm attempt. How am i doing?
by on (#184929)
Just an update. I'm beginning to think all the existent frames *might* be final, if i didn't miss something. :) Major overhaul done to frame 8, and lots of minor tweaks elsewhere. I'll upload a copy in the OP aswell. What do you think?

Here's a tip for better tri bass: One thing i noticed was that the bass get a lot better distinction in between notes; especially the fast ones, if the envelope is 0 1 rather than 1. It simulates finger play rather well. Varying between the two is fine, but i'm consistently using 0 1 for this song. This trick wasn't as obvious in my instruments list before, but now it's a separated instrument, partly for clarity, and partly because i wanted to tweak flutish/clarinetish independently from this feature.
Re: First bgm attempt. How am i doing?
by on (#184930)
Here are some drum patches to experiment with:

Kick/Snare (noise)
Arpeggio: Absolute 10 0
Volume: 10 10 8 6 4 3 2 2 1 1 0
Note: 0-# (kick); A-# (snare)

Closed hi-hat (noise)
Volume: 4 2 1 1 0
Duty: | 0 1
Note: C-#

Open hi-hat (noise)
Volume: 5 4 3 2 2 1 1 1 0
Duty: | 0 1
Note: C-#

Triangle assist for kick
Arpeggio: Fixed 40 36 33

Triangle assist for snare
Arpeggio: Fixed 47 45
Re: First bgm attempt. How am i doing?
by on (#184935)
A note on vibrato, look at your loop in instrument 00, and think about the pitch it produces relative to the note:
Code:
envelope:  0 |  1  2  1  0  0  0 -1 -2 -1  0  0  0
relative:  0 |  1  3  4  4  4  4  3  1  0  0  0  0
average relative = 2

It first lowers the pitch (1 2 1), then raises it to its starting point (-1 -2 -1). This results in an average pitch that is below the intended pitch of the note, so the result is out of tune.

The envelope should instead start halfway through a rise or fall so the average pitch remains centred and in tune:
Code:
envelope:  0 |  2  0  0  0  0 -2 -2  0  0  0  0  2
relative:  0 |  2  2  2  2  2  0 -2 -2 -2 -2 -2  0
average relative = 0

Or alternatively, a smoother version:
Code:
envelope:  0 |  1  1  0  0 -1 -1 -1 -1  0  0  1  1
relative:  0 |  1  2  2  2  1  0 -1 -2 -2 -2 -1  0
average relative = 0
Re: First bgm attempt. How am i doing?
by on (#184945)
re: Rainwarrior
Thanks for the heads-up on vibrato. My dips are a little too deep, it seems. My ears had grown too used to the sound. There's some more to discuss on this topic, though.

Different physical instruments achieve vibrato differently. With flutes and woodwinds, it is relatively easy to produce the downwards motion, but if you try to push upwards above the initial pitch, the air pressure starts to affect timbre and amplitude more than it affects pitch. To a flutist, a vibrato is a repeated series of dips. It results in an average lower pitch, which i think is probably why many composers facilitate flutes to achieve moaning, mystical or supernatural parts, other than its somewhat hollow timbre.

I tried your pitch-even vibratos, but unfortunately the instrument lost its flute character, accordingly.

Steps taken to achieve a nicer vibrato that is still true to flute characteristics:
1) Flute vibrato changed to 0 | 1 2 0 0 0 0 -1 -2 0 0 0 0.
This is still a downward dip but doesn't go as far, so it sounds less sour, especially on higher notes.
This setup causes the square tone to make a click sound on some 'note on' events (which i think have to do with the pulse cycle being tickled to reset), so
2) Created a second instrument using one of your even vibratos: 0 | 1 1 0 0 0 -1 -1 -1 -1 0 0 1 1
for use any time the sound is clicking too sharp for my taste.

I think this compromise works out. Hopefully those clicks in the attack of a note remain consistent.
ftm snapshot:
Attachment:
encounter_intro_or_story4d.ftm [15.2 KiB]
Downloaded 89 times
(edit: forgot to repoint the noise swoosh to the right instrument in the outro, so it sounds wrong in this snapshot)

re: tepples
Thanks! I haven't had the time to try these out yet, but you must've noticed my infamilarity with drum synthesis on the 2a03 (It's a bit different from how i go about it on a synth). Will try and experiment with those as soon as there's time.

On that note, i came up with this table for using 1xx/2xx for creating Tim Follin-esque kick/tom+bass notes (as heard in Solstice). It's maybe a fool's errand to approach it this way but it works within its conditions. The same technique (ofter in smaller amounts and/or with quicker slopes) can be used in synthesizers to give deep notes a bit of extra punch.

Code:
Assuming conditions: Speed 7, tempo 150, 2xx directly followed by 200
tested on NTSC tri wave. 2xx works as coarse tuning, starting note as fine tuning. It is consistent for a while on this speed, then up the scale, it gets a little cryptic to achieve the right pitch. Done by ear, hopefully there's no mistake.
 
Note* |   2xx |   Starting note:
F-1      2AC   F-5
F#1      2A2   F#5
G-1      299   G-5
G#1      290   A#5
A-1      288   A-5
A#1      280   A#5
B-1      279   B-5

C-2      272   C-6
C#2      26C   C#6
D-2      266   D-6
D#2      260   D#6
E-2      25B   E-6
F-2      256   F#6
F#2      251   F-6
G-2      24C   F#6
G#2      247   E-6
A-2      243   F-6
A#2      23F   F#6
B-2      23B   F-6

C-3      238   G-6
C#3      235   G#6
D-3      231   F#6
D#3      22E   G-6
E-3      22B   G-6
F-3      219   G#6
F#3      226   G-6
G-3      224   A-6
G#3      222   A-6
A-3      220   A#6
A#3      21E   A#6
B-3      21C   A#6   

*the desired landing note for the bass line
Re: First bgm attempt. How am i doing?
by on (#184946)
It's sounding quite good. Part 08 it still doesn't sound right yet to me but it's getting better compared to other versions. The rest in general is improving with every version.