How NES Music Was REALLY Composed

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

Moderator: Moderators

User avatar
Doommaster1994
Posts: 162
Joined: Mon Jun 21, 2010 10:23 pm
Location: Seattle, WA
Contact:

How NES Music Was REALLY Composed

Post by Doommaster1994 »

Hello,
I thought I'd share something interesting with all of you. I have talked to countless NES composers and they've told me how they wrote their music. I'll share them with you guys:

Composer(s) - Program

Akito Nakatsuka - Family BASIC
Alberto Gonzalez - Compact Editor (ZX)
Barry Leitch - MODTracker (Amiga)
Brad Fuller - Hex Code
Charles Deenen - Hex Code
David Hayes - Cakewalk
David Warhol - Cakewalk
David Wise - Hex Code
Earl Vickers - Hex Code
Ed Bogas - Atari Music Studio (Atari ST)
Elliot Delman - Digital Performer
Frank Klepacki - Dr. T (Amiga)
Gavan Anderson - Hex Code
George Sanger - Digital Performer
Hirohiko Takayama - Hex Code
Hirokazu Tanaka - Family BASIC
Jeroen Tel - Hex Code
Jonathan Dunn - Hex Code.
Kinuyo Yamashita - Hex Code.
Koji Kondo - Family BASIC
Mark Knight - CuBase (Atari ST)
Mark Van Hecke - Dr. T (Atari ST)
Marshall Parker - Hex Code
Neil Baldwin - Hex Code.
Paul Webb - Hex Code
Paul Wilkinson - Cakewalk and Hex Code
Paul Webb - Hex Code.
Rob Wallace - Digital Orchestrator
Russell Ginns - Mastertracks (DOS)
Steven Samler - Digital Performer
Tania Smith - Hex Code
Zap Ajisai - Music Maker
User avatar
Bregalad
Posts: 8087
Joined: Fri Nov 12, 2004 2:49 pm
Location: Divonne-les-bains, France

Post by Bregalad »

Well personally I prototype with Cakewalk and convert it manually to .db statements (that you call hex code).
With appropirate definitions, this is not too much a pain.

Of course I could also write a MIDI->binary converter but it would take at least as much time.

PS : You really TALKED to all those guys ?
Useless, lumbering half-wits don't scare us.
Drag
Posts: 1642
Joined: Mon Sep 27, 2004 2:57 pm
Contact:

Post by Drag »

Wow, that's absolutely fascinating! The composers that used Family Basic, I wonder if they also wrote their engines with it, or just used Family Basic as a front-end for composing. (Or maybe the music engine was built into Family Basic? :o)

Heh, if you'd like, you can add me to that list -- I compose using raw hex code, and then I rely on my assembler to insert pointers (for jumping, looping, etc).

Sometimes, I'll "sketch out" a song using any number of tools (ModPlug, FLStudio, etc) before converting it to my engine, but most often, I'll simply compose directly in hex, assemble the music engine + data to an NSF file, and hear my work from that.
User avatar
Doommaster1994
Posts: 162
Joined: Mon Jun 21, 2010 10:23 pm
Location: Seattle, WA
Contact:

Post by Doommaster1994 »

Bregalad wrote:Well personally I prototype with Cakewalk and convert it manually to .db statements (that you call hex code).
With appropirate definitions, this is not too much a pain.

Of course I could also write a MIDI->binary converter but it would take at least as much time.

PS : You really TALKED to all those guys ?
I would love to have a MIDI>NES converter. David Warhol has one but he's too lazy to try getting the disks to run. Every time I've asked, he's given me some excuse.

I talked to about 95% of those guys. Hirokazu and Koji and a few others I haven't found a way to get a hold of. The rest of them I've got a hold of on Facebook.


Drag: Have you tried ripping those GBS files for me yet? Haha.
If you have done music for a game then I'll put on you there, though I'd prefer your real name on the list, but if you don't want that, that's fine. I wrote music for an NES game too for Gil-Galad. I'm just not sure if he's actually going to try and complete the game or not.
tepples
Posts: 22819
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Post by tepples »

Doommaster1994 wrote:I talked to about 95% of those guys. Hirokazu and Koji and a few others I haven't found a way to get a hold of. The rest of them I've got a hold of on Facebook.
Did they say anything for or against fan remixes like those heard at ocremix.org?
User avatar
Doommaster1994
Posts: 162
Joined: Mon Jun 21, 2010 10:23 pm
Location: Seattle, WA
Contact:

Post by Doommaster1994 »

I've never asked them about that.
Drag
Posts: 1642
Joined: Mon Sep 27, 2004 2:57 pm
Contact:

Post by Drag »

Doommaster1994 wrote:Drag: Have you tried ripping those GBS files for me yet? Haha.
Oops, I finally got around to it just now. :P
Doommaster1994 wrote:If you have done music for a game then I'll put on you there, though I'd prefer your real name on the list, but if you don't want that, that's fine. I wrote music for an NES game too for Gil-Galad. I'm just not sure if he's actually going to try and complete the game or not.
Hmm... I'm not sure if I'm ready to have my real name on the internet just yet. At any rate, I still have yet to complete a game that uses music I wrote, so I guess I'll hold off for now. :P
bucky o'hare
Posts: 160
Joined: Fri Sep 22, 2006 9:52 am
Location: philly

Post by bucky o'hare »

Sweet list! You've found a lot more than I have. :)

I was interesting in putting something similar together, something written in layman's terms to give a basic understanding of how NES music was made to someone who's curious but not already knowledgeable.

http://theshizz.org/forum/index.php?/to ... -was-made/

Sorry for the huge post, but I figure I might as well copy/paste it here.

- - - - - - - - - - - -

1 - Neil Baldwin
2 - Alberto Gonzalez
3 - David Wise
4 - Tommy Tallarico

1. Neil Baldwin - link
Composer of Magician, James Bond Jr, Lethal Weapon 3, Ferrari Grand Prix Challenge, The Jungle Book, Dropzone, and Hero Quest + Erik the Viking (both unreleased).

In short - He wrote most everything out in text files that were subsequently compiled with Eurocom's own 6502 assembler. A Yamaha keyboard and graph paper were some of the physical tools that assisted in the composition and transcription process, although the keyboard was in no way actually interfaced with the system.

Detailed explanation-
NB: There were no tools to speak of so everything was entered as numbers in the assembler/editor. Later on I turned the numbers for command codes into macros to make entering and reading the sequences of notes a little easier but that's as sophisticated as it got. I worked out tunes on a little Yamaha keyboard and typed in the pitches and durations. Often I'd work out timings on some squared graph paper, mostly by trial and error.

- - -

Dennis: 'My big question is what kind of software you eventually fell into using, and if it resembled a tracker of any sort?

NB: All of my music was entered in text files and compiled with our own in-house 6502 assembler. I'd messed around with tracker-style programs on the Amiga but it's not a format that I ever really got on with. I did write some simple MIDI-to-text utility later on but it's use was very limited so 90% of the time I just typed everything in.
Further anecdotes on working with the NES-
NB: We had no development hardware just half-a-dozen Famicom consoles and a badly photocopied hardware specification that was 99% written in Japanese! What we lacked in resources, we clearly made up for in boundless determination.

Luckily for us, our parent company (at the time) employed the skills of a really talented electronics engineer, Richard Alton, who managed to reverse engineer (and build) some flash-ROM cartridges and together with an old 6502 editor/assembler, "PDS", we had ourselves a rudimentary development kit!

I remember myself and Tim Rogers (now Technical Director at Eurocom) visiting the languages department at Sheffield University with the photocopied Japanese NES manual and with the help of two Japanese girls we deciphered a lot of the technical information. They're uncredited in the history of Eurocom but looking back, I'm not quite sure how we'd have progressed without their help!
2. Alberto Gonzalez - link
Composer of Asterix and The Smurfs.

In short - He wrote his own tracker for the ZX Spectrum, titled Compact Editor, and sequenced out the basics of the music (notes, lengths) on there. Then after it was converted to source code most of the percussion, instrument details, and other nuances were all done in a plain text file. Data was transferred across platforms using a piece of hardware known as the P.D.S.
http://www.worldofspectrum.org/infoseek ... loadpics=1

Image

Image

Detailed explanation-
B: Wait, so you even wrote NES music, for example, on the ZX Spectrum! Tell us a little bit more about your program Compact Editor, and how it basically functioned. Was it capable of tracking / composing a complete song from start to finish for the rest of your non-ZX 8-bit soundtracks?

AG: Compact Editor was a simple music sequencer, based on tracks, blocks, and instrument definitions, inspired by some Amiga computer trackers like NoiseTracker. A complementary PC program named “The Sourcer” was used to transform the binary data created with Compact Editor into raw source code, as a text language that I could understand (basic notes, lengths, etc). This way I could then edit the songs into its fullest detail.

- - -

AG: My entire process of making music for 8 bit consoles can be elaborated as such- First I used the Compact Editor to compose the basic idea of the song, with its different parts. Later the song was transformed into source code using The Sourcer, and then as a plain text file I put the small details and riffs into the song, as well the drum track and the final sound for each instrument. This process was done by changing the source code, compiling, sending it to the console, listening, and so on again and again until it sounded as I intended (or I ran out of time!). Finally, if required (most of the time), the compression stage took place, which consisted of finding and reusing small fragments of the song to make it use the least amount of memory possible.

Many times I adapted the sound driver for each game, adding new commands and effects, drum sounds or whatever. It was an evolving thing. I don’t know how the other musicians did their soundtracks, I’m still wondering, but don’t think it would be much different.
Further anecdotes on working with the NES-
AG: ... The NES had something special. The triangle wave channel was a good source for percussive sounds and boomy basses, although it wasn’t very usable for other kind of sounds. I really enjoyed doing the music of Asterix & The Smurfs. Solstice by Tim Follin was my inspiration at that time. I had to learn 6502 and I liked it much more than I would have imagined.

AG: ... When I was writing Asterix for the NES and learning the sound chip, I didn’t find information about the right frequency values to use for the notes (the frequency table), and the values of my Game Boy driver didn’t work. So what I did was create a small program for the Game Boy to play each note (12*8 notes if I remember correctly), and another program in the NES to lower and raise the sound frequency with the controller. Then I played each note in the Game Boy and tried to mach its frequency on the NES “by ear”, to find the right value for the registers. How brute is that? Well it worked, but now when I listen to my NES soundtracks I notice that some notes are a bit out of tune.
3. David Wise - link
Composer / Sound Design for Battletoads, Wizards and Warriors, Marble Madness, Ironsword, Taboo: The Sixth Sense, Pin-bot and many others. http://en.wikipedia.org/wiki/David_Wise_(composer)#1987

The explanation is a bit short to summarize, so I'll skip the 'in short' here and go straight to the quote-
OCR: What was the first week on the job like?

DW: Good - interesting. Video games were still in their infancy, and learning that the sound chip on the NES - the Nintendo Entertainment System - was somewhat compromised, compared to a Roland D-50, certainly made things challenging. But I like a challenge!

OCR: What was the most difficult thing to learn?

There was no MIDI, instead, notes were entered data style into a PC. I typed in hex numbers for pitch and length and a few commands for looping subroutines. And this method of writing video game music continued right through to the end of the SNES development.
4. Tommy Tallarico - link 1, link 2
Composer for Color a Dinosaur (NES), as well as many more post-NES soundtracks.

In short - Working with a limited sound driver, and approaching the NES from more of a musical background than a programming one, Tallarico used a midi (.mid) -> ascii (.asc) converter. The converter was programmed by Virgin vice president Dr. Stephen Clarke-Wilson. Music was initially sequenced with Cakewalk. The sounds were edited and finalized using a custom NES cart- a gutted copy of what was formerly a test version of Golf Power, replaced with "Tommy T's Play Me Sound Editor"-

http://www.youtube.com/watch?v=XoD0ERZntFI
(note that the video is about the discovery of the item, which is why the speaker didn't know much about it at the time)

Image

Detailed explanation-
TT: I had never done music and sound fx for an NES game before...

The sound driver for the NES was horrid!! Before the G.E.M.S. tool for the Sega Genesis you pretty much had to be a computer programmer in order to do sound for video games, especially the NES. [Dr. Stephen Clarke-Wilson] who was not only a talented musician and programmer in his own right created a small conversion program in Cakewalk which enabled midi files (.mid) to be converted to ascii (.asc) files. With .asc files I could get the NES to sound like something as long as I stayed within the proper note ranges. As far as sound fx went I could tweak a bunch of numbers and make some interesting albeit annoying sounds...

I created the simplest midi files I could in the time I had and ran them through the midi to ascii converter...

There were all sorts of tweaking tricks one could do to get it to sound “not horrible”. Composer/programmers could write their own tools and incorporate things like vibrato and pitch bend. I mean lets face it the most memorable and popular songs in the entire history of the video game industry were created and performed on the NES! Of course I’m talking about the music from Mario Bros. Well, when it came to the NES I was no Kojii Kondo!! Especially considering I had a beat up piece of crap audio driver and a day to learn it and compose for it.
Further anecdotes on the NES sound editor-
TT: I saw the pics of the carts in a forum. Yeah... those were my carts from almost 20 years ago. And the "Tommy T." label is my handwriting. The "Golf Power" was an old cartridge casing that I erased over... I was a game tester for Golf Power so when the game was completed I used the cart to put an NES sound engine on it for when I was working on Color A Dinosaur!
- - - - - - -
:D I realize some of the links don't work right on this forum. That's ok.
Hexum064
Posts: 3
Joined: Thu Jan 27, 2011 2:13 pm

Emulator

Post by Hexum064 »

Hey all, I am working on an emulator (on an XMEGA128) and right now I am doing sound. The DMC specifically. Does anyone have a short sample I can test with?
tepples
Posts: 22819
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Post by tepples »

Grab samples out of your Windows directory, use Audacity to convert them to 33500 Hz mono, and run them through this converter.
Hexum064
Posts: 3
Joined: Thu Jan 27, 2011 2:13 pm

Post by Hexum064 »

Tnx. I didn't know you could do that!
User avatar
AlbertoG
Posts: 21
Joined: Fri Feb 04, 2011 12:06 pm
Location: Barcelona / Spain

Post by AlbertoG »

Nice thread :)

Hi everyone! I thought I could share some vintage chiptune code with you.

This is the source code for the NES Game Over song of Asterix. All was written with macros. Each macro corresponds to an hexadecimal value or chunk of assembly code, this way it was much easier to program since you could write real words that had some meaning, instead of numbers and raw assembly code.

-------------------------

Code: Select all

GAMEOVER	INCHA	GOMEL
	INCHB	GOCHRD
	INCHC	GOBASS
	RTS


GOMEL	DW	GOMEL1
	DW	0,GOMEL

GOCHRD	DW	GOCHRD1
	DW	0,GOCHRD

GOBASS	DW	GOBASS1
	DW	0,GOBASS

GOBASS1	DB	L10,VIB,0,4,5,TRA,-2
	PERC	10,GOPERC
	DB	L40
	DB	a1,__
	DB	__,g1
	DB	e1,__
	DB	__,e1

	DB	a1,__
	DB	__,g1
	DB	e1,__
	DB	__,g1

	DB	d1,__
	DB	__,d2
	DB	a1,__
	DB	__,a1
	DB	d1,__
	DB	__,d2
	DB	e1,__
	DB	gs1,B1
	DB	XM

GOCHRD1	DB	L10,SENV,$D1,3,$64,W1,EF1

	DO2
	DB	P9,a2,P3,c3,e3,a3,c4,a3,e3,c3
	LOP
	DO2
	DB	P9,e2,P3,g2,b2,e3,g3,e3,b2,g2
	LOP
	DO2
	DB	P9,a2,P3,c3,e3,a3,c4,a3,e3,c3
	LOP
	DO2
	DB	P9,e2,P3,g2,b2,e3,g3,e3,b2,g2
	LOP
	DO2
	DB	P9,d2,P3,f2,a2,d3,f3,d3,a2,f2
	LOP
	DO2
	DB	P9,a2,P3,c3,e3,a3,c4,a3,e3,c3
	LOP
	DO2
	DB	P9,d2,P3,f2,a2,d3,f3,d3,a2,f2
	LOP
	DO2
	DB	P9,EF5,e2,P3,gs2,b2,e3,gs3,e3,b2,gs2
	LOP
	DB	XM

GOMEL1	DB	L10,SENV,$39,5,$90,VIB,20,1,4,W1,REL,5,$02
	DB	e3,__,a3,__,c4,__,__,__
	DB	__,NN,a3,b3,c4,__,d4,__
	DB	b3,__,__,g3,e3,__,__,__
	DB	__,__,__,__,__,f3,e3,d3
	DB	e3,__,a3,__,c4,__,__,__
	DB	__,NN,a3,b3,c4,__,d4,__
	DB	b3,__,__,a3,g3,a3,b3,__
	DB	__,__,e3,__,__,__,f3,g3

	DB	a3,__,__,g3,f3,__,e3,f3
	DB	__,__,e3,__,d3,__,c3,__
	DB	d3,__,e3,__,e3,__,d3,e3
	DB	__,__,__,__,__,nn,f3,g3
	DB	a3,__,__,g3,f3,__,e3,f3
	DB	__,__,e3,__,c4,__,b3,__
	DB	e3,__,e3,__,d4,__,c4,__
	DB	c4,__,__,__,B3,__,__,__
	DB	XM
 
GOPERC	DB	1,0,6,5,2,0,6,5
	DB	1,0,6,5,2,5,1,5
	DB	END
If there is enough interest I could write some comments and details about what does all that code mean. :)

Cheers,
Alberto
User avatar
Bregalad
Posts: 8087
Joined: Fri Nov 12, 2004 2:49 pm
Location: Divonne-les-bains, France

Post by Bregalad »

I do the exact same in my unfinished project, I use .db statements but with definitions instead of using plain hex numbers. In the end it looks like that :

Code: Select all

SucessTri
.ifndef PAL
	.db SetTempo, $88
.else	.db SetTempo, $a3
.endif	.db SetAttack+6
	.db Duty
	.db SetVolume+2
	.db SetSustain
	.db SetRelease
	.db SetOctave+4
	.db DblCr+Mi, DblCr+Mi, DblCr+Sil, DblCr+Mi, DblCr+Sil
	.db DblCr+Solb, DblCr+Sil, DblCr+Lab, Bl+La
	.db Stop
Of course if you don't understand french you won't understand it, but the notes are called Do Re Mi Fa Sol La Si instead of C D E F G A B (it's just very much easier to me to make them in my language).
So basically each .db satatement is either a command followed (or added) with an argument, or a note (or silence) added with a duration. This is just how my format works though.

PS : A second NESdev comeback from a former NES musician, that's great, welcome !
Useless, lumbering half-wits don't scare us.
tepples
Posts: 22819
Joined: Sun Sep 19, 2004 11:12 pm
Location: NE Indiana, USA (NTSC)
Contact:

Post by tepples »

Bregalad wrote:the notes are called Do Re Mi Fa Sol La Si instead of C D E F G A B
We have Do Re Mi in English, except they're relative to the key in which the piece was written.
User avatar
neilbaldwin
Posts: 481
Joined: Tue Apr 28, 2009 4:12 am
Contact:

Post by neilbaldwin »

While we're throwing our hats in the ring, here's a 'sequence' from Nijuu. The principles were very similar to my old NES drivers back in the day;

Code: Select all

S14	I 8
	SI DCM_MODE,NOTE_LOOP
	SI DCM_SPEED,1
	SI DCM_START,0
	V 10
	D 16
	db C5,_,_,_,Ds5,_,_,_,C5,_,_,_,G5,_,_,_
	db C5,_,_,_,Ds5,_,_,_,C5,_,_,_,As5,_,_,_
	db C5,_,_,_,Ds5,_,_,_,C5,_,_,_,G5,_,_,_
	db C5,_,_,_,Ds5,_,_,_,C5,_,_,_,F5,_,_,_
	ES	
Post Reply