I felt like writing a spc700 code to generate a 2 operator FM wave sample. To keep the spc700 time down, it's not going to render every single sample. Instead it's going to generate a single cycle waveform that gets updated every frame. I'm not sure how many channels it can do per frame, but if it can't do enough, you can lower the frame rate.
This code is supposed to generate a 64 sample loop. Carrier volume is not calculated, because it can be handled in hardware by the DSP.
Code:
fm_synth: //this uses bass.exe as the assembler
lda #$82
sta {brr_buffer}
sta {brr_buffer}+9
sta {brr_buffer}+18 //BRR samples need a header byte every 9th byte
inc
sta {brr_buffer}+27 //first 3 BRR blocks have a header byte of $82 (range = 8, filter = 0, loop flag set)
ldx #$00 //last block has a header byte of $83 (same as above, but with end flag set)
str {#_of_blocks}=#$04 //4 blocks of 16 samples = 64 samples
-;
inx
str {countdown}=#$08 //8 pairs of samples per block
-;
clc
adc {modulator_phase}={modulator_frequency} //add modulator frequency to phase
ldy {modulator_phase}
lda sine_table,y //use modulator phase to index an 8-bit sine wave
ldy {modulator_amplitude} //with a range from 0 to 255
mul //multiply the sine wave (A) with amplitude (Y) to get the modulation height (Y)
clc //I believe SPC700 uses unsigned multiply. I'll fix it if I'm wrong
adc {carrier_phase}={carrier_frequency} //add carrier frequency to carrier phase
tya
clc
adc {carrier_phase} //take the carrier phase and add the current modulation height
tay
lda waveform,y //use that to get the final 4-bit sample
sta {temp}
clc
adc {modulator_phase}={modulator_frequency} //do it all again for another sample
ldy {modulator_phase}
lda sine_table,y
ldy {modulator_amplitude}
mul
clc
adc {modulator_phase}={modulator_frequency}
tya
clc
adc {carrier_phase}
tay
lda {temp}
xcn //this time, grab the previous sample, and swap nibbles
ora waveform,y //OR it with the new sample, to have 2 samples in 1 byte
sta {brr_buffer},x //save the result
inx
dec {countdown}
bne -
dec {#_of_blocks}
bne --
rts
Did some cycle counting. Only ~54 cycles per sample. Fast enough to generate 4 channels at once, with 64 samples per waveform.
I guess most people here don't like FM synth, and those that do only like FM with at least 4 operators.
To be honest, I really don't know what FM, or operators, even are. Isn't it just that the sound signal is generated by a mathematical equation, kind of like a graphing calculator or something?
Dear Andy, once
again, do you really, honestly expect people to actively become acquainted with random ideas/code snippets of yours that have literally zero comments, let alone there not being a demo ROM of some sorts to show off what you've come up with?
BTW, I'm not meaning to troll you. On the contrary, personally I respect you as one of the most skilled SNES programmers in this day and age, and I very much appreciate your work.
However, I fear your accomplishments may forever go unnoticed, and unappreciated, should you choose to continue presenting them in a way that, every time, feels not like an enlightenment to everyone else (as was probably intended), but rather like a huge dragon turd. ("Here's proof that dragons exist, people! Who wants to dig in?" -- "Dragons? Yay! Dig in? Err ...")
So,
please give us some more information. What SPC700 assembler is your code meant to be for? What do all those curly brackets stand for? What does
mul, or
xcn do? And so on and so on ...
Thanks!
So here's how Alisha's Adventure sounds like with an FM synth main instrument, with these settings:
carrier frequency = #$04
modulation frequency = #$08
modulation amplitude = #$FF
Not too interesting though. I tried sliding the modulation amplitude and frequency up and down, neither sounded interesting enough to post. Maybe if I had a 3rd oscillator, I could do more interesting timbre changes.
Ramsis wrote:
become acquainted with random ideas/code snippets of yours that have literally zero comments, let alone there not being a demo ROM of some sorts to show off what you've come up with?
Hmm...
Quote:
Maybe faster way of ordering object palettes
psycopathicteen wrote:
Did some cycle counting. Only ~54 cycles per sample. Fast enough to generate 4 channels at once, with 64 samples per waveform.
I downloaded the rom, and regarding the music, I like the main chime sound effect, but I'm not as crazy about the background instrument. I'm probably have the opposite opinion as most people when I say I like more "gritty" sounding FM.
https://www.youtube.com/watch?v=rlmbkKtjfSc,
https://www.youtube.com/watch v=fPdVe183EVQ&list=PLCE893C44A08A961D&index=10
Man though, you've come a long way... It's really impressive considering it was made by a one man production team. I especially like level 2.
This time I changed the carrier wave from a triangle, to a half-triangle half-square wave.
Code:
+--- +
| \ |
| \ |
| \ |
+ ---+
...and also an LFO modulating the modulator's amplitude.
I love FM. How about a simple 1-channel FM demo with slowly changing operators so we can hear what's going on?
Right now, your in-game music sounds a bit too dissonant and hyper for me to appreciate your technical innovation.
I should also double buffer the FM waveform to have smoother wave transistions.
Thanks for the demo rom, honestly i think that is totally crazy that you're doing live FM synthesis on the SPC700
And the result is definitely quite good ! Being limited to 2 op will limit the sound varieties but still that is a nice achievement.
If i understand correctly currently you're limited to a 64 samples generated loop per frame, also it seems you're updating the modulator amplitude only once per frame (or even not at all) ?
Maybe you could setup a sound engine having 6 PCM channels + 2 FM channels (4+4 would be probably too heavy for the SPC700).
Today I implemented double buffering and the modulator amplitude sweeps are a whole lot clearer.
I like the concept, however I ask myself, what is the advantage of calculating this in runtime and not simply pre-render the waveforms you're going to use ? One of the disadvantage of runtime computation is not only the CPU time, but also the fact you're bound to using only filter #0 and as such the result is lower quality (just 4-bit PCM basically). Perhaps you should use filer #1 instead, and considering each sample to be the delta from the previous one (which is a good approximation), and since the derivate of a sine is a cosine, the concept would still apply ?
And to be honest, the example probably do not show the limit of what is possible to do.
Quote:
I guess most people here don't like FM synth, and those that do only like FM with at least 4 operators.
I used to really dislike the concept of FM synth, but I changed my mind. Used well it can be amazing, however yes, 4 operators are pretty much a must to sound good. 2 operators remembers me the terrible sound of my OPL-3 soundblaster MIDI card when I was a kid - which is one of the rare things about old computers I am not nostalgic about so much it sucked.
I do not know if any 3-operator FM synth exist, but if not, you could always create one and it'd be a good compromise between sound quality and fast processing.
Btw the S-SMP has pitch modulation which can be cascaded if I'm correct. (Use ch0 amplitude as pitch control for ch1, use ch1 amplitude as pitch control for ch2, etc). I wonder if that can be used for some sort of FM synthesis. However the number of channels would be very low (4x2op or 2x4op, e.g.) and the op configuration ("algorithm") would always be the same...
ikari_01 wrote:
Btw the S-SMP has pitch modulation which can be cascaded if I'm correct.
You are correct.
Quote:
I wonder if that can be used for some sort of FM synthesis.
I wonder too. I guess if you are playing same waves it's basically the same thing BUT the phase is not the same between channels, and also the pitch is bounded so you cannot use modulators out of audio range just to get nice effects on lower frequencies.
What's commonly called FM synthesis is actually phase modulation and not frequency modulation.
There's a mathematical proof that they're equivalent under ideal conditions, but there's a very good reason that the practical implementations are all phase modulation. Unless you can modulate frequency in a perfectly symmetrical way, it's just not stable. You'll have a constantly shifting timbre, lots of strange sidebands.
rainwarrior wrote:
Unless you can modulate frequency in a perfectly symmetrical way, [...] You'll have a constantly shifting timbre, lots of strange sidebands.
So that's what we get with SPC700's hardware pitch modulation, and Famocom Disk System's adapter's frequency modulation, right?
KFF made a demo of using the SPC700's pitch modulation for FM-ish sound...
Bregalad wrote:
rainwarrior wrote:
Unless you can modulate frequency in a perfectly symmetrical way, [...] You'll have a constantly shifting timbre, lots of strange sidebands.
So that's what we get with SPC700's hardware pitch modulation, and Famocom Disk System's adapter's frequency modulation, right?
Yeah, though maybe the resulting sound is acceptable anyway. If your goal is just to make music, maybe you'll find the constantly sliding phase okay.
rainwarrior wrote:
Yeah, though maybe the resulting sound is acceptable anyway. If your goal is just to make music, maybe you'll find the constantly sliding phase okay.
Well, obviously, the goal is to make music (or sound effects).
I don't even have an idea of what you're refering to by saying "constantly sliding phase".
Sound will be constantly changing in timbre, which can be really good.
I mean that if you have a steady tone, the modulator and carrier should have exactly the same wavelength, and stay locked together with the same phase. The waveform should be repeating and identical each time.
With frequency modulation, basically there is always going to be some error. It might spend a little more time at a higher frequency and little less time at a lower frequency, and by the end of a waveform it slips a little bit past its starting position. The carrier slowly shifts out of phase with the modulator, giving a slowly changing timbre as the waveform changes. You can't have a repeating identical waveform this way, it is always changing.
The sound is similar to slowly changing the duty on C64, or playing two slightly detuned waves, ZX beeper phaser, that kind of thing.
The main problem is the speed of phasing is going to be different for every note. You can't really control it, it's limited by the accuracy of your hardware. (On FDS it's really bad, but on these SNES examples it seems much slower, less of a consistency problem.)
With a "phase modulation" implementation instead, you never actually change the frequency of the modulator, the carrier's output is just added to its phase when you do the lookup. They'll always stay locked together perfectly.
For the pitch modulation, does anyone know what amplitudes correspond with what frequencies?
Nocash's fullsnes has the following comment:
The pitch counter is adjusted at 32000Hz rate as follows:
Step = VxPitch ;range 0..3FFFh (0..128 kHz)
IF PMON.Bit(x)=1 AND (x>0) ;pitch modulation enable
Factor = VxOUTX(x-1) ;range -4000h..+3FFFh (prev voice amplitude)
Factor = (Factor SAR 4)+400h ;range +000h..+7FFh (factor = 0.00 .. 1.99)
Step = (Step * Factor) SAR 10 ;range 0..7FEEh (0..256 kHz)
XXX somewhere here, STEP (or the COUNTER-RESULT) is cropped to 128kHz max) XX?
Counter = Counter + Step ;range 0..FFFFh, carry=next BRR block
So the raw signed 15-bit voice magnitude (post BRR decompression and Gain) of the previous channel becomes a linear (not exponential/note name) frequency multiplier from 0x to almost 2x relative to the frequency programmed for the current channel
Okay, I guess I found the reason why when I tried pitch modulation before I didn't hear much of a difference. The sample I used for the modulator wasn't loud enough.
That begs the question, if I use a modulator that is always raised, can I bypass the frequency limit?
You mean, to produce more aliasing? Certainly fullsnes says you can, to get sample rates up to 256kHz (that are then decimated down to 32kHz as normal)
<pedant>"begs the question" means "assumes the answer", not "requires asking"</pedant>
rainwarrior wrote:
With frequency modulation, basically there is always going to be some error.
Excuse me, but I do not see why there would always be going to be some error. I am not saying you're wrong - perhaps you are right, however I do not see why it'd be so obvious.
I understand the phase of the modulator can be random relative to the phase of the modulatee (is that how we say it ?), because of random things happening after a "key on" event on both channels. Even that might not happen if the "key on" event is simultaneous, but let's happen the phases align randomly.
Once the note is sustained I see no reason there should be a phase shift or anything. If the frequency of a channel is a direct multiple of the frequency of the other (no matter which is which), then I see no reason the synchronization wouldn't last forever. If you just use the same note one octave down for instance, there might be a problem due to the low frequency bit being lost. On the countrary, if you use the lowest value and discard the unnecessary bits for the highest value, the sync should be perfect.
Quote:
It might spend a little more time at a higher frequency and little less time at a lower frequency, and by the end of a waveform it slips a little bit past its starting position. The carrier slowly shifts out of phase with the modulator, giving a slowly changing timbre as the waveform changes. You can't have a repeating identical waveform this way, it is always changing.
Again, I do not understand your logic. You just claim "you can't", as if this was absolutely obvious, but to me it's not.
Quote:
(On FDS it's really bad, but on these SNES examples it seems much slower, less of a consistency problem.)
On what basis do you make this claim ? Please show demos attempting to do that and explain what the problem is. The previously mentioned demo by KungFuKirby is actually very impressive and generate sounds close to what the Genesis can do on the SNES.
Okay, since you do seem interested, I will try to explain with more detail:
When the frequency of an oscillator stays constant, its wavelength stays constant.
With phase modulation synthesis, both carrier and modulator stay at the same frequency always. Their wavelengths always match, they always stay synchronized.
With frequency modulation, the frequency of the modulator is constant, but the frequency of the carrier is always changing. The wavelength of the carrier is much more complicated in this case, it is an integral related to the changing frequency over time.
So, with a perfect sine wave modulator, the "ideal" mathematical version, the wavelength of the carrier adds back up to where it started; there's equal time spent in lower frequency and higher frequency and it balances out.
With an integer approximation of a sine wave modulator, they only approximately balance. It's similar to how
Euler integration step by step of a physical trajectory will have an error compared to the ideal continuous integral.
What happens when the wavelength of the modulator does not match the wavelength of the carrier? Its phase shifts a little bit each wavelength. How much it shifts depends on how much error. The amount of error is a bit chaotic with these kinds of systems, which is what I mean when I say every different note is going to have a different speed of phase shifting.
Anyhow, if the phase shifts, the timbre of the sound changes. If the phase is shifting slowly, you get a slowly changing sound. If it shifts quickly, you get a quickly changing sound.
There do exist ways to make integer approximations where the errors will balance (and even systems that don't tend to have a few "lucky" notes that are stable), but it requires careful design with this in mind. You're not likely going to get something that does that in the SNES or FDS.
Does this explain what the problem is and how it occurs?
Bregalad wrote:
rainwarrior wrote:
(On FDS it's really bad, but on these SNES examples it seems much slower, less of a consistency problem.)
On what basis do you make this claim ? Please show demos attempting to do that and explain what the problem is. The previously mentioned demo by KungFuKirby is actually very impressive and generate sounds close to what the Genesis can do on the SNES.
It was quite a long time ago that I did test of this with the FDS and I did not document them. Sorry. You can easily operate the FDS modulator with Famitracker, but you'd need to use a real FDS to get an accurate test.
RushJet1 tried making music this way. His goal wasn't to make perfect FM synthesis, it was just to use high frequency modulators to make interesting sounds, and he did make some music with it. He was dissatisfied with how different it sounded on FDS and Famitracker though, so I think he kind of gave up.
In the demo by KungFuFurby you can hear the phasing problem constantly. You can also here it in psycopathicteen's demos in this thread. I alerady commented on this (i.e. the phasing is slower, i think cause SNES has a lot more precision for the modulator).
Whether the phasing is objectionable, musically, is a matter of taste. I was just trying to point out that it's an inherent an uncontrollable part of the sound when you do this on such a system.
Quote:
You can also here it in psycopathicteen's demos in this thread.
I didn't use the hardware pitch modulation. The timbre changing was done intentionally to show off it can change timbres while playing a sound, even though it doesn't exactly fit with the beat of the song.
lidnariq wrote:
KFF made a demo of using the SPC700's pitch modulation for FM-ish sound...
Wahoo, terrific sound,but does it run on a real snes, or needs an hacked emulator ??
TOUKO wrote:
lidnariq wrote:
KFF made a demo of using the SPC700's pitch modulation for FM-ish sound...
Wahoo, terrific sound,but does it run on a real snes, or needs an hacked emulator ??
The pitch modulation feature existed on an actual SPC700 (and thus, on a real SNES). See Oracle from Secret of Mana, several songs from Packy and Marlon, and Dark Jungle from Jurassic Park (you'll have to wait about a minute or two on this one) for a few examples.
Amusingly, it's not a hacked emulator that I used, but a hacked sound driver. I hacked SNESMod, which never had pitch modulation support to begin with. Later versions were produced by Augustus Blackheart, and I sometimes contributed fixes.
thanks for the infos, and sorry for the mistake (hacked emulator rather than audio driver
)
BTW, i listened the others song you posted and i like very much, good job .
How do you know how an MOD file is going to sound before you convert it?
Depends on what I'm making. Usually I can just rely on Schism Tracker, but this doesn't work as well when pitch modulation and/or noise generation is involved (thankfully I assigned these to unused IDs, to the original Impulse Tracker's standards...). Sometimes I have to convert them while they're incomplete to make sure my pitch modulation (and/or noise generation) is working correctly. Other times I convert them only when they're finished and ready to go.
Do you know what settings you use for electric guitar sounds?
rainwarrior wrote:
Okay, since you do seem interested, I will try to explain with more detail:
When the frequency of an oscillator stays constant, its wavelength stays constant.
With phase modulation synthesis, both carrier and modulator stay at the same frequency always. Their wavelengths always match, they always stay synchronized.
With frequency modulation, the frequency of the modulator is constant, but the frequency of the carrier is always changing. The wavelength of the carrier is much more complicated in this case, it is an integral related to the changing frequency over time.
So, with a perfect sine wave modulator, the "ideal" mathematical version, the wavelength of the carrier adds back up to where it started; there's equal time spent in lower frequency and higher frequency and it balances out.
With an integer approximation of a sine wave modulator, they only approximately balance. It's similar to how
Euler integration step by step of a physical trajectory will have an error compared to the ideal continuous integral.
What happens when the wavelength of the modulator does not match the wavelength of the carrier? Its phase shifts a little bit each wavelength. How much it shifts depends on how much error. The amount of error is a bit chaotic with these kinds of systems, which is what I mean when I say every different note is going to have a different speed of phase shifting.
Anyhow, if the phase shifts, the timbre of the sound changes. If the phase is shifting slowly, you get a slowly changing sound. If it shifts quickly, you get a quickly changing sound.
There do exist ways to make integer approximations where the errors will balance (and even systems that don't tend to have a few "lucky" notes that are stable), but it requires careful design with this in mind. You're not likely going to get something that does that in the SNES or FDS.
Does this explain what the problem is and how it occurs?
Thank you very much for the detailed explaination, Rainwarrior. This is very much appreciated.
So the problem does not come from FM itself, but from the rounding necessary to store a digital sine wave. Isn't is possible to make the error perfectly symetric, for example by having a sine table which is perfectly symetric ?
About the FDS; I undetsand there is less bits for the modulator, however it is still possible to have a perfecly symetric signal for the modulator despite the lower precision, isn't it? The issue is that I do not think it is possible to amplitude of the modulator dynamically as a note sustain, so this cannot approach what FM synthesis does, I guess, even without accounting the shifting from accumulating errors.
I think he means there is always going to be some aliasing on the modulator that causes a distorted sound.
Bregalad wrote:
Isn't is possible to make the error perfectly symetric, for example by having a sine table which is perfectly symetric ?
About the FDS; I undetsand there is less bits for the modulator, however it is still possible to have a perfecly symetric signal for the modulator despite the lower precision, isn't it? The issue is that I do not think it is possible to amplitude of the modulator dynamically as a note sustain, so this cannot approach what FM synthesis does, I guess, even without accounting the shifting from accumulating errors.
Yes, being an approximation doesn't mean you can't balance. It just means it requires careful design of the algorithm.
With the FDS you're fighting against other factors besides its extremely coarse control (like how the modulator multiplies against the pitch value, trying to adjust it pseudo-logarithmically instead of linearly). If you do enough analysis work you might be able to find some combination that balances for at least a subset of pitches, but I don't know if there's a practical way to do it.
On the SNES, it seems that the modulation amount might be linear, so I think there is a much better possibility here. (Maybe even the naive approach is close enough.)
psycopathicteen wrote:
Do you know what settings you use for electric guitar sounds?
Usually a square wave on the carrier, and a sine wave (usually one octave down, although sometimes I fool around to limited effect) on the modulator (if I'm using the terminology right). Psuedo-feedback effects can be achieved by simply dialing the modulator's gain (gradually) to zero.
I also have used two square waves, although I usually prefer them at the same frequency.
Thanks. I've been trying to figure how to make synthy electric guitar sound for a long time.
lidnariq wrote:
KFF made a demo of using the SPC700's pitch modulation for FM-ish sound...
What is the frequencie of that example?, in the link doesn't described...
That one's a mixed bag. Sine waves, square waves and saw waves are all used in varying fashions as carriers and modulators.
What octaves are they sampled at?
Also a mixed bag. I was experimenting with up to two octave's difference, and in at least one case I used a five-semitone pitch difference rather than an octave.
psycopathicteen wrote:
This time I changed the carrier wave from a triangle, to a half-triangle half-square wave.
...and also an LFO modulating the modulator's amplitude.
Sounds cool! I often use 4-6 channels just for one sound. It would be nice to continue doing so when I have the tracks to spare but then switch to this method when I don't.
Quote:
How do you know how an MOD file is going to sound before you convert it?
For me it doesn't sound much different in the MOD file unless I'm using pitch modulation or noise. The first thing I did when I started messing about with pitch modulation was try different combinations of samples/octaves in one file. Then I made a note of the combinations I liked best. I should just add SNES emulation for sound playback in my tracker but it would be even more useful to add it to a cross platform tracker so more people could make use of it. As an added attraction I'd have it ignore/map commands based on the sound driver or native IT mode (like my hacked tracker does.)
I've attached a ROM* with some songs in case anybody needs more examples of songs using pitch modulation.
*slightly buggy, SNESMod doesn't stop playing tracks that have ADSR enabled. Whoops.
I'm having trouble with higher notes not sounding like guitars. Do I not have the right ADSR envelopes or the right kind of vibrato?
psycopathicteen wrote:
I'm having trouble with higher notes not sounding like guitars.
Why would that be a problem?
I'm trying to make guitars sounds.
Using FM synth ? Complicate to replicate, i think that requires very high frequency modulation.
Yeah, I'm stupid, I misread it as sounding like, not not sounding like. That joke sucked.
You can hear how the first part it does a fairly good guitar sound, but when you get to the second part it sounds really weird.
That's a very bizarre FM guitar. I was expecting something along the lines of this:
https://www.youtube.com/watch?v=rlmbkKtjfSc
That's because I'm not an FM synth expert.
Found what was causing it to sound crappy at high frequencies. The way I calculated note frequencies was too inaccurate.
I've been thinking of ways to do 4 op fm synth on either the CPU or SPC700 (or both at the same time), and then I thought maybe I can make a 2612 VGM player if I can get all 6 channels to work.
Would be awesome to have a 2612 VGM player on SNES, honestly i though from years now about doing the opposite (SPC player on Sega Genesis ^^).
I think I'll try doing HDMA SPC700 loading. So, I guess I just have to time the spc700 loop to be exactly 65 cycles, but somehow make sure it starts at the beginning of a scanline too. Like checking for a header byte, followed by 32 nops, followed by the loop.
psycopathicteen: have you considered making an python IT/XM/etc tracker conversion script etc for this that exports to SPC, ASM code or SFC binary?
The n00bz over at
http://battleofthebits.org could have some fun with this.
psycopathicteen wrote:
I think I'll try doing HDMA SPC700 loading. So, I guess I just have to time the spc700 loop to be exactly 65 cycles, but somehow make sure it starts at the beginning of a scanline too. Like checking for a header byte, followed by 32 nops, followed by the loop.
Won't you waste many previous SPC700 cpu time doing that ? I believe having a fast loading loop once per frame would probably be probably lighter on SPC side at least.
I just tried doing it the normal way, and I counted cycles and it appears that it takes just as long for the spc700 either way. I did it 2 bytes at a time, and it added up to 33 spc700 cycles per 16 bits, which would be 66 cycles per 32 bits. I could also try doing 4 bytes at once, but I doubt there will be much improvement.
I implemented all 8 algorithms but I'm having a quantization noise problem with algorithm 7. In order find the BRR "range" I just added up the carrier volumes, and counted the number of 0 bits at the top. If you have several carriers that are slightly detuned they could cancel each other out, which would turn into a square wave with only 4 bit samples. I guess I just have to find the BRR range by checking each sample individually.
psycopathicteen wrote:
I implemented all 8 algorithms...
I'm looking forward to hearing what that sounds like.
I made this test awhile ago using the original code you posted... I just dropped your code into the middle of the SNESMod vibrato routine. 4xy: x = vibrato speed and carrier frequency, and y = vibrato depth and modulation frequency; but only when the vibrato waveform is $08-$0f. <$08 is just vibrato waveforms. Each time the song repeats the FM waveform is changed.
Channel 1: FM waveform echo
Channel 3+5 FM waveform
Channel 4+6 2nd waveform (pitch modulation enabled)
carrier frequency = #$02
modulation frequency = #$04
I was working on a ROM that would allow you to change various settings maybe I'll dig that up.
Also, it's weird that .spc extension is not allowed.
Can BIN be directly used as an SPC file?
I just saved it as an SPC file, and it worked.
I tried to play it with both of my SPC players and it sounded awful in both. Is this due to an emulation inacuracy or is it supposed to sound like this ?
Bregalad wrote:
I tried to play it with both of my SPC players and it sounded awful in both. Is this due to an emulation inacuracy or is it supposed to sound like this ?
It doesn't sound great. I noticed playback varied a lot on each SPC player I tried. After real hardware it probably sounded the best on SPCPlay.
Due to limited RAM I'm only using two BRR blocks. How good it sounds depends on the waveform selected and settings used. The ramp up and ramp down waveforms probably sound the worst unless you are looking for a super glitch-y sound.
I've attached another test and a song, although they probably do not sound much better.
The first half sounds awesome though
Augustus Blackheart wrote:
It doesn't sound great.
What is causing this? It sounds like an electronic voice crack at 22 seconds in.
Here's another example (made during a shocking international incident). There's one version with FM and pitch modulation, it's used starting one minute into the song, and one version with pitch modulation only.