This weekend I started working on my own SNES music program. It's going to use the Mario Paint mouse and will have 3 main sections:
-SPC700 parameters (volume, ADSR, echo enable, etc)
-software synthesizer
-music tracker
The software synthesizer lets you create your own samples from scratch using a combination of additive synth and FM.
My "synthesizer specs" include, up to 4 operators per channel (maybe even 8 operators in the future). Operators can be a selection of waveforms (pulse, square, saw, triangle and sine) with detuning, FM modulation and ADSR settings (though you would have to be careful not to clash with the hardware ADSR).
There would be 5 sample loop settings:
-no loop
-single cycle loop (no detuning)
-multi cycle loop
-single cycle loop with attack (no detuning)
-multi cycle loop with attack
Sounds interesting.
Quote:
The software synthesizer lets you create your own samples from scratch using a combination of additive synth and FM.
Do you mean offline processing? Are you going to try to do an optimizing BRR encoder?
I found out using the Mario Paint mouse is harder than I thought. I thought the directions you move the mouse work the same as the D-Pad, and the 2 buttons are A and B, but I guess I was wrong.
93143 wrote:
Sounds interesting.
Quote:
The software synthesizer lets you create your own samples from scratch using a combination of additive synth and FM.
Do you mean offline processing? Are you going to try to do an optimizing BRR encoder?
I never heard of offline processing before, but it's going to attempt to compute the BRR samples with the 65816 as soon as parameters get changed, then feed them to the SPC700.
The buttons are X and A, and the cumulative distance is in the sign-and-magnitude of the next 16 bits after the autoreader finishes. For more info, see
"Mouse" on NESdev Wiki.
Need code examples? My NES programs with Super NES Mouse support include
Controller test,
Thwaite,
Action 53 menu, and the sound effects editor that comes with
Pently. NovaSquirrel has
Sliding Blaster. The controller interface on the Super NES controllers works exactly the same way, except that the autoreader has already read the first 16 bits for you.
So it's basically
lda $4016
lsr
ror {joypad}
8 times in a row, for 2 bytes.
psycopathicteen wrote:
I never heard of offline processing before, but it's going to attempt to compute the BRR samples with the 65816 as soon as parameters get changed, then feed them to the SPC700.
What I mean by "offline processing" is essentially just the opposite of "real-time" or "on-the-fly". As in, encoding to BRR once the user has designed the waveform and pushed the RENDER button, rather than live while the track is playing (or, I suppose, while the user is designing the waveform - I can't figure out what you mean by "parameters get changed"). I was wondering if you were going for an optimizing encoder, which I imagine would be easier to pull off without the rigid time constraints of real-time playback.
Got a piano working. Right now it's doing NES style square waves. I'm using hand coded samples that are 64 samples long, with a simple (-.5, 2, -.5} sharpening filter manually applied. I had trouble with aliasing on high notes, so I rounded the values to the nearest 64000/x Hz frequency.
Attachment:
music program.zip [21.23 KiB]
Downloaded 454 times
I'm about to download this. I hope that I can plug in my MIDI keyboard and use it with the program. I also hope that the program is has GUI and I can actually understand how to use it.
*crosses fingers*
[edit]
Okay, All I got was this strange SNES rom which had a blue screen and an arrow that just flickered diagonally across the screen. So ???
You have to put the mouse in port 2. Gamepad in port 1; it's used to manipulate parameters.
The graphics (other than the mouse pointer) don't work in Snes9X. Gotta use something else.
Erockbrox wrote:
Okay, All I got was this strange SNES rom which had a blue screen and an arrow that just flickered diagonally across the screen. So ???
Gotta read the original post a little more closely:
psycopathicteen wrote:
This weekend I started working on my own SNES music program. It's going to use the Mario Paint mouse
In other words, this isn't a Windows program for making SNES music. This is a
SNES program for making SNES music. Or, at least, it will be eventually, I guess.
93143 wrote:
You have to put the mouse in port 2. Gamepad in port 1; it's used to manipulate parameters.
The graphics (other than the mouse pointer) don't work in Snes9X. Gotta use something else.
Oh yeah, I forgot. Snes9x is retarded.
EDIT:
Tested it. It's working on Snes9x correctly on my computer.
I used ZMZ emulator.
Okay so you need an SNES mouse then? Okay I will try it out on real hardware once I get an actual mouse.
Good idea!
Seems promising!
I'll keep an eye on it.
Very interesting idea and certainly ambitious. Do you plan on adding any capability for samples too? That would be great, but I have no idea how you'd get this to work for a multitude of reasons...
My instinct on adding custom samples would require the SRAM to be used and will likely require an external program to put them in there.
Well, he could develop a mic that passes data via the controller or expansion ports
I've updated it quite a bit.
To make a user defined instrument, set the instrument parameter to 3, and press left or right to go to the user defined instrument screen. Sample size is (N+1)16 where $0000 is 16 samples, and $03FF is 16384 samples. You can mix up to 4 oscillators. The "wave" parameter doesn't do anything yet so just ignore it. A frequency of $0400 is "normal". In order to hear it, you must press render to update the BRR sample to the SPC700 chip.
What are the controls? I can move the cursor around, but I haven't been able to make anything happen beyond that, unfortunately. It might be a good idea to include a readme file at some point for if you plan on distributing it outside of NESDev. Fantastic work, by the way.
It uses the keyboard and the mouse.
Okay, I see now. I wasn't expecting whatever is mapped to the start button to enable you to modify the values.
I've been starting to work on this thing again, and I'm wondering how much of a difference there will be between a BRR sample using only filter 0 (raw 16-bit PCM) blocks and a BRR using all 4 filters. I got the range bits working, but not the filter bits.
The filter bits "just" let you trade off some amount of sharpness for some amount of reduction of quantization noise. As to how to decide when is appropriate? Last time I said to pick it as a function of what desired frequencies exist in your output, and
use the filters to remove higher harmonic content.
Attachment:
music engine.zip [22.27 KiB]
Downloaded 233 times
Now you can use 4 waveforms for the additive synth section:
1: square
2: 25% pulse
3: 12.5% pulse
4: sawtooth
The part that does BRR sample conversion automatically decides if sample blocks use filter 0 or filter 1. I didn't implement anything with filter 2 or filter 3 yet.
I just got the system to do a complete conversion from PCM to BRR. I think I'll hold off posting an update until I have some more features. I think I'll do add FM synth next.