MML DPCM - few questions
Moderator: Moderators
-
Fib Gibbley
- Posts: 13
- Joined: Fri Aug 08, 2008 11:33 pm
MML DPCM - few questions
I am trying to recreate a Fester's Quest bass line. The song is Track 3 (overworld). I found 4 dmc samples to use from an old archive in 2a03. The samples are called fesLO, fesMEDLO, fesMEDHI, and fesHI. This is obviously telling me something about what pitch the dmc is in. However, when I tested out the files it was just a brief high pitched sound. I fixed this when I read up about altering the pitch of a dpcm. But when I solved this minor problem many more questions took their place.
1.) How am I supposed to know what the proper pitch to set the dmc files to? For example, I can make fesHI sound like crap if I set it like:
@DPCM12 = { "samples\fesHI.dmc", 3 }.
I'm sure the higher pitched dmc files should get a higher pitch assignment, but what should they be set to exactly?
2.) How can I increase the pitch of a dmc without decreasing the length of its "note"? Some of the higher notes in the song are not brief, but sustained.
3.) Taking off from question 2, how do you alter the length of a dmc sample?
I took a midi file of the song in question and I checked it out with frinika (a free midi composer). Using frinika, I was able to find out all the notes used in the bass line and I arranged them in a list from lowest in tone to highest:
*Fester's Quest Bass Line*
How many notes are in the bass scale? What are the lowest pitches?
Format: <octave><notation>
4d# (highest)
4d
4c
3a#
3g
3d#
3d
3c
2a#
2g#
2g
2f#
2f (lowest)
For those that are musically inclined, the scale is:
f f# g g# a# c d d#
The Espla's scale or Eight-tone spanish scale matches this perfectly, with:
C D D# F F# G G# A#
I also found out that there are only 3 different note times (for lack of the proper word). They are:
0:360
0:240
0:120
Of course this is in "Frinika's time", so this isn't a standard number by far but at least it is something to use. Notice how these are all multiples of 120.
4.) How can I use this information to recreate the bass line of Fester's Quest (track 3, overworld)?
1.) How am I supposed to know what the proper pitch to set the dmc files to? For example, I can make fesHI sound like crap if I set it like:
@DPCM12 = { "samples\fesHI.dmc", 3 }.
I'm sure the higher pitched dmc files should get a higher pitch assignment, but what should they be set to exactly?
2.) How can I increase the pitch of a dmc without decreasing the length of its "note"? Some of the higher notes in the song are not brief, but sustained.
3.) Taking off from question 2, how do you alter the length of a dmc sample?
I took a midi file of the song in question and I checked it out with frinika (a free midi composer). Using frinika, I was able to find out all the notes used in the bass line and I arranged them in a list from lowest in tone to highest:
*Fester's Quest Bass Line*
How many notes are in the bass scale? What are the lowest pitches?
Format: <octave><notation>
4d# (highest)
4d
4c
3a#
3g
3d#
3d
3c
2a#
2g#
2g
2f#
2f (lowest)
For those that are musically inclined, the scale is:
f f# g g# a# c d d#
The Espla's scale or Eight-tone spanish scale matches this perfectly, with:
C D D# F F# G G# A#
I also found out that there are only 3 different note times (for lack of the proper word). They are:
0:360
0:240
0:120
Of course this is in "Frinika's time", so this isn't a standard number by far but at least it is something to use. Notice how these are all multiples of 120.
4.) How can I use this information to recreate the bass line of Fester's Quest (track 3, overworld)?
Re: MML DPCM - few questions
Apart from a looped sample, you can't do it in hardware on the NES. You have to use a longer sample.Fib Gibbley wrote:2.) How can I increase the pitch of a dmc without decreasing the length of its "note"?
By finding the source .wav file, editing it to be longer, and converting it again.3.) Taking off from question 2, how do you alter the length of a dmc sample?
-
Fib Gibbley
- Posts: 13
- Joined: Fri Aug 08, 2008 11:33 pm
I have trouble understanding something about DPCM. If I can only see 4 samples from the song, I and can get those same 4 samples, why can't I create all the same music that the song can? The way I am seeing it, it's like having the same ingredients as the chef next to you, but for some reason you can't bake the same cake.
My understanding of your problem may not be correct, so bear with me.
DMC (or DPCM if you prefer) samples are a fixed length. The NES outputs this fixed size sample until it reaches its end.
Regarding the pitch of the sample: The NES has 16 "speeds" which it can play back the sample. The faster you play it back, obviously the shorter it will be (will reach the end faster). Also, due to the way audio works... the faster you play it back, the higher the pitch -- this is just how it is. Think of an old cassette player... if you fastforward it or play it on high speed, it moves faster and it sounds higher pitched. There are ways around this, but they're computationally expensive, and the NES doesn't do them anyway, so they may as well not exist for your purposes.
To work around this problem, you can have multiple samples played at each desired pitch. But that would require you to produce multiple .dmc files (like tepples mentioned, you could get the source wav, make it the size you want, and reconvert).
The reason for the multiple DMC files is because the DMC channel on the NES isn't capable of playing every note on the scale. Best way I can illustrate this is to borrow a snippit from dmc.txt:
These are the 16 "speeds" which the NES can play the sample back. You'll notice that the fastest two speeds... it goes from G to C. So if you wanted to play a B or a C#, you couldn't with this sample! This is why the games had multiple samples: each of those samples are set to slightly different pitches which makes you able to play every note on the scale useing the above speeds.
As for which samples to use and at which pitch -- you'll just have to try them out and see. I wrote a DMC player program that can playback samples at each speed pretty quickly a while back. You can get it here:
http://disch.arc-nova.org/dmcplayer.zip
Try each of the 4 samples you have at each speed, and make like a chart or something of how to get specific notes. In my experience, the lower speeds are pretty much useless for these kinds of samples, so you'll probably want to go at speed A and faster (iirc, anyway, but try them all out to see for yourself).
I don't understand your chef/cake metaphore at all. If you have all the samples a song uses, you can reproduce the song.
DMC (or DPCM if you prefer) samples are a fixed length. The NES outputs this fixed size sample until it reaches its end.
Regarding the pitch of the sample: The NES has 16 "speeds" which it can play back the sample. The faster you play it back, obviously the shorter it will be (will reach the end faster). Also, due to the way audio works... the faster you play it back, the higher the pitch -- this is just how it is. Think of an old cassette player... if you fastforward it or play it on high speed, it moves faster and it sounds higher pitched. There are ways around this, but they're computationally expensive, and the NES doesn't do them anyway, so they may as well not exist for your purposes.
To work around this problem, you can have multiple samples played at each desired pitch. But that would require you to produce multiple .dmc files (like tepples mentioned, you could get the source wav, make it the size you want, and reconvert).
The reason for the multiple DMC files is because the DMC channel on the NES isn't capable of playing every note on the scale. Best way I can illustrate this is to borrow a snippit from dmc.txt:
Code: Select all
value CPU
written clocks octave scale
------- ------ ------ -----
F 1B0 8 C
E 240 7 G
D 2A8 7 E
C 350 7 C
B 400 6 A
A 470 6 G
9 500 6 F
8 5F0 6 D
7 6B0 6 C
6 710 5 B
5 7F0 5 A
4 8F0 5 G
3 A00 5 F
2 AA0 5 E
1 BE0 5 D
0 D60 5 C
As for which samples to use and at which pitch -- you'll just have to try them out and see. I wrote a DMC player program that can playback samples at each speed pretty quickly a while back. You can get it here:
http://disch.arc-nova.org/dmcplayer.zip
Try each of the 4 samples you have at each speed, and make like a chart or something of how to get specific notes. In my experience, the lower speeds are pretty much useless for these kinds of samples, so you'll probably want to go at speed A and faster (iirc, anyway, but try them all out to see for yourself).
I don't understand your chef/cake metaphore at all. If you have all the samples a song uses, you can reproduce the song.
Fib Gibbley wrote:The way I am seeing it, it's like having the same ingredients as the chef next to you, but for some reason you can't bake the same cake.
Are you trying to convert "No One Is to Blame" to NSF?Howard Jones wrote:You can look at the menu but you just can't eat
You can feel the cushions but you can't have a seat
You can dip your foot in the pool but you can't have a swim
You can feel the punishment but you can't commit the sin
-
Fib Gibbley
- Posts: 13
- Joined: Fri Aug 08, 2008 11:33 pm
Ha, no. I was saying that when I went looking for the samples to recreate the song, I expected it to end there. I didn't think the sample ripping program was holding out on me, and I had to go craft my own dmcs with the 4 samples.
I thought I was given all the dmcs available (ingredients) to make the cake (song). I thought all I had to do was tweak a few things to make all the notes.
So, why didn't the program rip 13 samples (or more) instead of just 4? I guess there is something I still don't understand about the E channel.
I found out the notes are:
fesLo - 2nd octave G#
fesMedLo - 2nd octave A
fesMedHi - 2nd octave A#
fesHi - 2nd octave B
Which is interesting because A and B are not even notes used in the song.
Also, it looks like this post is closely related to my problem. They are even talking about Fester's Quest! What should I learn from it that is valid?
http://nesdev.com/bbs/viewtopic.php?t=3309
I thought I was given all the dmcs available (ingredients) to make the cake (song). I thought all I had to do was tweak a few things to make all the notes.
So, why didn't the program rip 13 samples (or more) instead of just 4? I guess there is something I still don't understand about the E channel.
I found out the notes are:
fesLo - 2nd octave G#
fesMedLo - 2nd octave A
fesMedHi - 2nd octave A#
fesHi - 2nd octave B
Which is interesting because A and B are not even notes used in the song.
Also, it looks like this post is closely related to my problem. They are even talking about Fester's Quest! What should I learn from it that is valid?
http://nesdev.com/bbs/viewtopic.php?t=3309
You were. And that is all you have to do. You're making this more complicated than it is.I thought I was given all the dmcs available (ingredients) to make the cake (song). I thought all I had to do was tweak a few things to make all the notes.
Because to get all the notes you have to play those samples at different speeds.So, why didn't the program rip 13 samples (or more) instead of just 4?
Did you try what I said and play those samples at different speeds? They'll produce different tones when you do. What speed are you playing the samples at to get those tones you mentioned?
Even though the game doesn't have notes A or B, it might still use those samples at different speeds to get a tone different from A or B.
Also -- could you upload these samples somewhere so I can listen to them? I could walk you through what I do after that (even though I thought my previous post covered it -- maybe a more step-by-step approach would be easier to understand)
-
Fib Gibbley
- Posts: 13
- Joined: Fri Aug 08, 2008 11:33 pm
First of all thank you for that program disch. Without your help I wouldn't have been able to get this far.
Using your program, I am playing the samples all at the same speed; 5. I closely compared them to the source to get my notes at that speed. The way I see it, they created these dmcs with the speed at 5 all along, right?
The source files are available here, at http://2a03.free.fr/
At the bottom of that page you will see "latest files". Find DCPM_Samples (should be the fifth one down from the top). In that, go to Synth&Instrument > SunSoft Bass > Uncle Festor.
Using your program, I am playing the samples all at the same speed; 5. I closely compared them to the source to get my notes at that speed. The way I see it, they created these dmcs with the speed at 5 all along, right?
The source files are available here, at http://2a03.free.fr/
At the bottom of that page you will see "latest files". Find DCPM_Samples (should be the fifth one down from the top). In that, go to Synth&Instrument > SunSoft Bass > Uncle Festor.
Okay -- hopefully my math here is right.
If you figure note C is 0, and you number each note above it as the next highest number (C#=1, D=2, D#=3, E=4, F=5, etc). And each octave higher being +12. Then looking again at that chart from dmc.txt.. we can produce a different chart. We will use speed 5 as the baseline, and find out how much the note changes when played at different speeds. According to the chart, speed 5 plays 'A' which would be assigned number 9.
So what does that mean? That means if you play fesLo.dmc at speed 5 and get a G#... playing it at speed 6 will get you a tone 2 notes higher (A#). With that... we can build yet another table:
Hopefully I didn't screw that up. As you can see... you can get any note on the scale between E-2 and B-3 by using a specific sample at a specific speed.
If you figure note C is 0, and you number each note above it as the next highest number (C#=1, D=2, D#=3, E=4, F=5, etc). And each octave higher being +12. Then looking again at that chart from dmc.txt.. we can produce a different chart. We will use speed 5 as the baseline, and find out how much the note changes when played at different speeds. According to the chart, speed 5 plays 'A' which would be assigned number 9.
Code: Select all
speed tone change
-----------------------
3 -4 (F - A = -4)
4 -2 (G - A = -2)
5 0 <-- using this as the baseline, so it's 0
6 +2 (B - A = +2)
7 +3 (12 + C - A = +3) +12 because it's an octave higher
8 +5 (12 + D - A = +5)
9 +8 (12 + F - A = +8)
A +10 (12 + G - A = +10)
B +12 (12 + A - A = +12)
Code: Select all
Lo MLo MHi Hi
--+---------------------
3 | E-2 F-2 F#2 G-2
4 | F#2 G-2 G#2 A-2
5 | G#2 A-2 A#2 B-2
6 | A#2 B-2 C-3 C#3
7 | B-2 C-3 C#3 D-3
8 | C#3 D-3 D#3 E-3
9 | E-3 F-3 F#3 G-3
A | F#3 G-3 G#3 A-3
B | G#3 A-3 A#3 B-3
You start with four or five waves, spaced one semitone apart. Number them 0-3 or 0-4 from lowest to highest pitch.
To choose the wave:
To choose the playback rate:
To choose the wave:
Code: Select all
_______________________________________________
|| | ||| | | ||| | ||| | | ||| | ||| | | ||| | ||
||1|1|||1|1|1|||1|1|||1|1|1|||1|3|||2|1|3|||1|3||
|| | ||| | | ||| | ||| | | ||| | ||| | | ||| | ||
| U U | U U U | U U | U U U | U U | U U U | U U |
| | | | | | | | | | | | | | | | | | | | | | | | |
|0|0|0|0|0|0|0|0|0|2|0|0|0|2|0|2|0|1|0|2|4|0|2|4|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
C D E F G A B C D E F G A B C D E F G A B C D ECode: Select all
_______________________________________________
|| | ||| | | ||| | ||| | | ||| | ||| | | ||| | ||
||0|1|||3|4|5|||7|8|||9|A|B|||C|C|||D|E|E|||F|F||
|| | ||| | | ||| | ||| | | ||| | ||| | | ||| | ||
| U U | U U U | U U | U U U | U U | U U U | U U |
| | | | | | | | | | | | | | | | | | | | | | | | |
|0|1|2|3|4|5|6|7|8|8|9|A|B|B|C|C|D|D|E|E|E|F|F|F|
|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|_|
C D E F G A B C D E F G A B C D E F G A B C D E-
Fib Gibbley
- Posts: 13
- Joined: Fri Aug 08, 2008 11:33 pm
So I counted the three different note times I need, and along with the 13 notes I have a total of 23 dmc files I need to make (about two timings per note).
The only problem is that I don't have the source wav files. All I have are dmc samples. I have seen pages and pages of wavtodmc programs, but what about dmc to wav? What is a good program (or method) for doing this?
And what wav editing program would you recommend? I would need something to keep a count of the time (0:000) and allow me to increase the length of a wav (like cut and paste sections). I was thinking with cut and paste, I could increase and decrease the duration of the actual tone played to the amount I need.
The only problem is that I don't have the source wav files. All I have are dmc samples. I have seen pages and pages of wavtodmc programs, but what about dmc to wav? What is a good program (or method) for doing this?
And what wav editing program would you recommend? I would need something to keep a count of the time (0:000) and allow me to increase the length of a wav (like cut and paste sections). I was thinking with cut and paste, I could increase and decrease the duration of the actual tone played to the amount I need.
-
Fib Gibbley
- Posts: 13
- Joined: Fri Aug 08, 2008 11:33 pm
I can't use the four samples I have because I need the notes to be sustained at three specific times. When you change the pitch you also speed up the play back time, and this is undesirable for specific note times. This is the list I made:
Different lengths used.
0:360
0:240
0:120
4d#: 240,120
4d: 240, 120
4c: 120, 240
3a#: 120
3g: 240,
3d#: 240, 120
3d: 240, 120
3c: 240, 120
2a#: 360, 240, 120
2g#: 240, 360
2g: 120, 240
2f#: 240
2f: 240
Total Notes Needed: 23
For example, in 2a#, I can't just have one dmc and have everything time correctly, because 2a# has three note times (lengths) used in the song.
Different lengths used.
0:360
0:240
0:120
4d#: 240,120
4d: 240, 120
4c: 120, 240
3a#: 120
3g: 240,
3d#: 240, 120
3d: 240, 120
3c: 240, 120
2a#: 360, 240, 120
2g#: 240, 360
2g: 120, 240
2f#: 240
2f: 240
Total Notes Needed: 23
For example, in 2a#, I can't just have one dmc and have everything time correctly, because 2a# has three note times (lengths) used in the song.