First bgm attempt. How am i doing?

Discuss NSF files, FamiTracker, MML tools, or anything else related to NES music.

Moderator: Moderators

User avatar
FrankenGraphics
Formerly WheelInventor
Posts: 2064
Joined: Thu Apr 14, 2016 2:55 am
Location: Gothenburg, Sweden
Contact:

First bgm attempt. How am i doing?

Post by FrankenGraphics »

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.
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.
User avatar
dougeff
Posts: 3079
Joined: Fri May 08, 2015 7:17 pm

Re: First bgm attempt. How am i doing?

Post by dougeff »

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
nesdoug.com -- blog/tutorial on programming for the NES
User avatar
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?

Post by FrankenGraphics »

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?
User avatar
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?

Post by Drew Sebastino »

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.
User avatar
dougeff
Posts: 3079
Joined: Fri May 08, 2015 7:17 pm

Re: First bgm attempt. How am i doing?

Post by dougeff »

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.
nesdoug.com -- blog/tutorial on programming for the NES
User avatar
Banshaku
Posts: 2417
Joined: Tue Jun 24, 2008 8:38 pm
Location: Japan
Contact:

Re: First bgm attempt. How am i doing?

Post by Banshaku »

Listened to it and it sounds good, like it!
zzo38
Posts: 1096
Joined: Mon Feb 07, 2011 12:46 pm

Re: First bgm attempt. How am i doing?

Post by zzo38 »

It is good, although perhaps is a bit short loop
(Free Hero Mesh - FOSS puzzle game engine)
User avatar
rainwarrior
Posts: 8732
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: First bgm attempt. How am i doing?

Post by rainwarrior »

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.
User avatar
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?

Post by FrankenGraphics »

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.
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.
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.
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.
tepples
Posts: 22708
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Re: First bgm attempt. How am i doing?

Post by tepples »

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.
User avatar
rainwarrior
Posts: 8732
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: First bgm attempt. How am i doing?

Post by rainwarrior »

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.
User avatar
dougeff
Posts: 3079
Joined: Fri May 08, 2015 7:17 pm

Re: First bgm attempt. How am i doing?

Post by dougeff »

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.
nesdoug.com -- blog/tutorial on programming for the NES
User avatar
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?

Post by FrankenGraphics »

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.
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:
-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.
User avatar
rainwarrior
Posts: 8732
Joined: Sun Jan 22, 2012 12:03 pm
Location: Canada
Contact:

Re: First bgm attempt. How am i doing?

Post by rainwarrior »

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.
User avatar
Myask
Posts: 965
Joined: Sat Jul 12, 2014 3:04 pm

Re: First bgm attempt. How am i doing?

Post by Myask »

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.
Post Reply