It is currently Sun Jul 22, 2018 6:12 am

All times are UTC - 7 hours





Post new topic Reply to topic  [ 11 posts ] 
Author Message
PostPosted: Wed Jun 27, 2018 6:40 am 
Offline
User avatar

Joined: Tue Jun 24, 2008 8:38 pm
Posts: 1628
Location: Fukuoka, Japan
When I started nes programming, the only available option was either making everything by hand or use the famitracker driver. I started with the driver and tried to add sound effects but my lack of knowledge of assembler and of the driver caused that I never really went far with it.

Now 8 years later, someone made a driver with sound fx and it uses the famitracker files as the source. This is great but I only have one issue: some of the music that I want to use are not compatible because of the limitations.

What I would like to know is how many people tried to add a few missing features that they required for their song and were successful? What kind of issues did you had while doing so?

Another question that I have about famitone is if there is a special version of famitracker that force the limit by default? That would be useful for new songs (I guess) until I get used to the limits.


Top
 Profile  
 
PostPosted: Wed Jun 27, 2018 7:35 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20283
Location: NE Indiana, USA (NTSC)
Versions of FamiTone2 modified to add new effects were used in Haunted: Halloween '85 and The Curse of Possum Hollow. I'm interested in what rainwarrior and dougeff have to say about their practicality.

Another option is choosing an engine other than FamiTone2 that plays FamiTracker modules and supports a wider selection of effects. One of them is Pently used with ft2pently, as heard in Mega Mountain and Nova the Squirrel. Its manual includes a section on considerations when using ft2pently, which I'll summarize below.

FT features supported in Pently:

Volume, arpeggio, and duty envelopes
Volume column (limited to 4, 8, C, F)
Fast and slow arpeggio schemes
Effects 0xy, 1xx, 2xx, 3xx, 45x, Bxx, Cxx, D00, Fxx, G0x, Qxy, Rxy, S0x

FT features not supported in Pently:

Pitch and hi-pitch envelope
Looping envelopes
Note release
Pseudo-melodic use of 93-step noise melodies (crow boss in Curse)
DPCM (tools translate it to PSG drums)
Effects 7xy, Axy, Dxx (x > 0), F01, Gxx/Sxx spanning more than a row, Hxy, Ixy, Pxx, Vxx
0CC grooves


Top
 Profile  
 
PostPosted: Wed Jun 27, 2018 10:01 am 
Offline
User avatar

Joined: Fri May 08, 2015 7:17 pm
Posts: 2155
Location: DIGDUG
You can use Shiru's version of the full famitracker driver to do everything a standard NES can do.

Are you trying to do expansion audio channels?

What features are you missing?

I wrote a version of famitone that allows all notes and volume column. Also have a 99% done version that allows 1xx,2xx,4xx effects.

Took me about 2 years. It's not easy.

_________________
nesdoug.com -- blog/tutorial on programming for the NES


Top
 Profile  
 
PostPosted: Wed Jun 27, 2018 6:34 pm 
Offline
User avatar

Joined: Tue Jun 24, 2008 8:38 pm
Posts: 1628
Location: Fukuoka, Japan
I saw Shiru's example for using famitracker but he uses famitone for the fx, which means now you need 2 drivers to make it works. If possible I want to avoid such thing, thus starting to look how difficult famitone is to update. If I need famitracker, I think I could use an older version which should be a lot smaller too (I was using 2.9 at the time). It is quite simple to add to a C project now that I'm used to work with cc65.

As for what feature I need, I do not know yet, unfortunately. Since the song was not made by me and the converter stop on the first error it finds.. It could be very little or very complicated. I will see first to update the converter so it could give me a list of errors in one shot and that should give me a better idea.

When I was searching on the subject I found your blog that was talking about the driver so I guess you seems to be the one that have the most experience doing it :) 2 years.. Hmmmm. I need to see if it's worth updating once I find what is missing. There is one project I would like to continue but it's not 100% sure yet.

Thanks for your comments!


Top
 Profile  
 
PostPosted: Thu Jun 28, 2018 4:38 am 
Offline
Formerly WheelInventor

Joined: Thu Apr 14, 2016 2:55 am
Posts: 1657
Location: Gothenburg, Sweden
There are lots of things that won’t work when moving from ft to famitone. Not sll of them produce errors, so those are potentially worse.

Check what effects are used, then what envelopes are used. Famitone doesn’t support duty envelopes.

One ”no error yet still wrong” thing to be on the lookout for is that in famitone, you can’t do instrument changes without defining a new note, and you can’t (as far as i remember) make a new note without declaring its instrument choice. If you don’t tell both values, these changes are simply ignored. This can be a bit tedious, depending on your composers’ style. Mostly, it is a an easy fix that just decreases the readability of the score. Sometimes though, there are compromises, since an instrument change itself doesn’t reset the pitch, which may be intentional, in which case you need to get creative.

Quote:
now you need 2 drivers to make it works.


If you can afford the ROM space, it’s not too bad. Having a ”sound fx update pending” flag will let you branch past this whole block every time an sfx is not playing, which is most of the time, unless it’s a hectic shoot ’em up or the like.

_________________
http://www.frankengraphics.com - personal NES blog


Top
 Profile  
 
PostPosted: Thu Jun 28, 2018 6:20 am 
Offline
User avatar

Joined: Sat Sep 07, 2013 2:59 pm
Posts: 1648
@Banshaku:

If you want my opinion on this whole issue:

Find a sound driver that you like, be it FamiTone or another one, and then tell your composer to create music based on the driver's limitations right from the start.

At least that's how I'm doing it.

CPU time is precious and with every new feature that you hack into an existing driver, your calculations become longer and the risk of running into a lag becomes bigger.
(ROM space might also be an issue, depending on your mapper.)

Even if it's just some small features like Doug's additions to FamiTone with volume columns and the ability to access all notes: It increases the CPU time by a fair amount.

And using the full FamiTracker driver for an actual game is even less likely to turn out well.


FamiTone is capable of converting fine music. And it's a very lightweight program. So, I would just stick with its unaltered version.

O.k., it doesn't support stuff like individual volume columns. So what?
How many actual NES games do you know where the volume becomes louder and quieter in certain parts of the song, independent from the general global instrument volume?
If a song is created with the limitations in mind and it is of good quality, nobody will miss features that aren't used.
You don't complain about the "Super Mario Bros." soundtrack that it doesn't use the features from the "Journey to Silius" soundtrack. And if you create a song with FamiTone, nobody will say: "Hey, why did you never use <feature that's unsupported in FamiTone>? This sucks!"


About using already finished music that doesn't compile with FamiTone: Well, yeah, this might be a problem. You could ask a composer to rewrite the song.


Also, I'm not aware of a FamiTracker version that enforces FamiTone rules.
The FamiTone limitations list is pretty clear and it's nicely put into one singular place in the readme. The composer will need to put this list before his eyes and be aware of it when composing.

_________________
Available now: My game "City Trouble".
Website: https://megacatstudios.com/products/city-trouble
Trailer: https://youtu.be/IYXpP59qSxA
Gameplay: https://youtu.be/Eee0yurkIW4
German Retro Gamer article: http://i67.tinypic.com/345o108.jpg


Top
 Profile  
 
PostPosted: Thu Jun 28, 2018 7:25 am 
Offline
User avatar

Joined: Tue Jun 24, 2008 8:38 pm
Posts: 1628
Location: Fukuoka, Japan
@FrankenGraphics

That's good to know that the tool doesn't catch them all. Thanks for the tip!

@DRW

For any new games I will make I do not have any problem to make or request songs with a set of limitation based on the sound driver: it makes sense and you're right about it. Right now I'm mostly exploring what is possible with the current driver and I'm testing with old files so this is why those questions were asked. I guess one thing that I'm using right now for my experiment will have to be left out.

The one I wrote then I will just have to fix them "if" I decide to use some of them. Nothing is stone yet. At the least now I know what to expect about the driver, converter and issues if adding to it.


Top
 Profile  
 
PostPosted: Thu Jun 28, 2018 7:57 am 
Offline

Joined: Sun Sep 19, 2004 11:12 pm
Posts: 20283
Location: NE Indiana, USA (NTSC)
DRW wrote:
Find a sound driver that you like, be it FamiTone or another one, and then tell your composer to create music based on the driver's limitations right from the start.

"I can't deal with lack of portamento. I quit."

DRW wrote:
How many actual NES games do you know where the volume becomes louder and quieter in certain parts of the song, independent from the general global instrument volume?

When I played Tetris (Nintendo) years ago, I noticed that music 2 has a decrescendo about three-fourths of the way through.

I've NSF exported the music of the first level of Blaster Master. It runs the same instrument on 2 channels, with volume precisely 2 steps different between the two. This is subtractive volume control, similar to very early versions of FT, not the multiplicative volume control in 0.4.x and 0CC.

DRW wrote:
About using already finished music that doesn't compile with FamiTone: Well, yeah, this might be a problem. You could ask a composer to rewrite the song.

During the development of Haunted: Halloween '85, I was at first using the music engine of RHDE, now called Pently 4. At the time, it didn't support vibrato or portamento, in part because my musical experience was with woodwinds, brass, and keyboards, as opposed to continuous pitch instruments (fretless bass, trombone, or violin family). However, it did support arpeggio envelopes and HOPOs (note pitch changes that do not restart the envelope, analogous to guitar hammer-ons or pull-offs). I did my best to approximate composer Thomas Cipollone's portamento with arpeggio envelopes and HOPOs that I found musically equivalent. But the composer disapproved, and rainwarrior was brought on at the last minute to extend FamiTone2.

For the sequel The Curse of Possum Hollow, we had the same composer and the same predilection toward portamento. By that time, early versions of Pently 5 had added vibrato. But that still wasn't enough, and dougeff was brought on at the last minute to extend FamiTone2. Around then, two things were holding me back from adding new major effects to Pently:

  1. RAM use concerns
    I didn't want to waste valuable RAM by adding effects that use a lot of state but which not all users need. I solved that by writing a preprocessor that allocates RAM based on which effects are enabled at assembly time.
  2. Ownership of changes
    I didn't want to add things would end up locked behind an NDA, keeping other projects from being able to reuse them. So I delayed portamento until Curse had wrapped.


Top
 Profile  
 
PostPosted: Thu Jun 28, 2018 8:12 am 
Offline
User avatar

Joined: Fri May 08, 2015 7:17 pm
Posts: 2155
Location: DIGDUG
Quote:
You don't complain about the "Super Mario Bros." soundtrack that it doesn't use the features from the "Journey to Silius" soundtrack.


I disagree. (that is why I worked so hard to get pitch bends and vibrato working).

Listen to Mega Man 2 Sountrack (like the crash man level). The vibrato really stands out, and that could make a mediocre game really stand out to the audience.

Putting dull, one-volume music in would bore me, even if a very good composer wrote it.

_________________
nesdoug.com -- blog/tutorial on programming for the NES


Top
 Profile  
 
PostPosted: Thu Jun 28, 2018 8:36 am 
Offline
Formerly WheelInventor

Joined: Thu Apr 14, 2016 2:55 am
Posts: 1657
Location: Gothenburg, Sweden
tepples wrote:
"I can't deal with lack of portamento. I quit."

Argument that might get quitting composers back on board: Lack of portamento can actually be substituted in FamiTone (or any other driver lacking it but having pitch envelopes) by building ladders of notes up/down to your target note, each note in the ladder using an instrument with a pitch envelope that matches the pitch difference and # of ticks between the notes, so they build a continous ramp together. It's inconvenient, but i did it for the one song i made for Project Blue (the sirens of the intro jingle). Same song also compensates for the lack of vibrato in the same way. It's a bit inconvenient to write the score like this and messy looking/not very transparent to read, but it sounds the part. My best tip is making a proto version using portamentos / vibratos for ease of composition, then once the song has crystallized well enough, clone that project file, and replace all the non-featured effects with this method.

An engine that has these features built in will still attract more composers, for plain ease of use, though.

tepples wrote:
DRW wrote:
How many actual NES games do you know where the volume becomes louder and quieter in certain parts of the song, independent from the general global instrument volume?


When I played Tetris (Nintendo) years ago, I noticed that music 2 has a decrescendo about three-fourths of the way through.

I've NSF exported the music of the first level of Blaster Master. It runs the same instrument on 2 channels, with volume precisely 2 steps different between the two. This is subtractive volume control, similar to very early versions of FT, not the multiplicative volume control in 0.4.x and 0CC.


First thing on my mind: Castlevania 1 - Heart of Fire. This passage is easily one of the most memorable ones in the whole soundtrack, and precilely for its stepped increase in volume between the phrases. Link. The driver seems rather thin on features (or it might also be a restrictive style of not having a tracker at hand for instant feedback and instrument creation interfaces), which makes this section stand out even more. It is used again in the final level song to a quite intense effect.

I always keep two or three different versions for each percieved instrument in case it is used with a driver that doesn't support volume messages. It's not just for varying the volume in a channel, it is also/mainly because you get a clearer voice separation when playing diads on the square channels if they have slightly different volumes. If the volume is equal, the diad gets a bit muddy and potentially fatiguing if it's the same all the time. Usually the brighter note is the slightly more quiet one, but you can change this up to make accents. Thirdly, bright notes ought to be slightly more quiet in most cases. I actually think a lot of games do this and most people doesn't notice because it simply sounds natural. It's when the music doesn't do it that people take notice: it sounds shrill and sometimes piercing.

_________________
http://www.frankengraphics.com - personal NES blog


Top
 Profile  
 
PostPosted: Thu Jun 28, 2018 10:35 am 
Offline
User avatar

Joined: Thu Mar 31, 2016 11:15 am
Posts: 318
Many features can be implemented by modifying the conversion script only, at the cost of ROM space. Effect combinations can be compiled into vanilla instruments.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 11 posts ] 

All times are UTC - 7 hours


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group