FS1R Coarse Frequecy values

Yamaha FS1R Formant Shaping/FM Synthesis Tone Generator

Moderators: parametric, Derek, Fozzer, Saul

User avatar
javelin276
Member
Member
Posts: 34
Joined: Wed Oct 12, 2016 6:00 pm
Contact:
United States of America

FS1R Coarse Frequecy values

Unread post by javelin276 » Sun Mar 26, 2017 8:09 am

Hi guys, I'm writing a program to edit sysex fseq files and I've ran into a snag. The Coarse frequency setting is supposed to range from 0-21 decimal (15 hex) but the values in the sysex files are generally in the hex 60's and 70's. Something extra is stored in the byte, I think in the upper bits. The added bits are in both the Voiced and Unvoiced operator coarse frequency values. Does anybody know what the extra bits are for?

The program is mostly completed, but the frequency values are out to lunch now that I'm testing things out. The rest of the data seems to be just fine, it's just the frequency values that are confusing.

User avatar
EXer
Member
Member
Posts: 91
Joined: Tue Dec 11, 2012 6:15 pm
France

Re: FS1R Coarse Frequecy values

Unread post by EXer » Sun Mar 26, 2017 2:38 pm

In the sysex file a frequency in an FSEQ is given by one parameter, coded on 2 bytes, related to the actual frequency by this formula:

p = k . ln f + p0 (ln : natural logarithm)

with k = 738.5 and p0 = 8983.3


E.g. C3 = 130,81 Hz hence p = 12583, i.e. 62h (hi byte) 27h (lo byte)
EX5 EX5 EX5R FS1R TX81Z TX81Z TX7 A4000
EX5Tech Member #101

User avatar
javelin276
Member
Member
Posts: 34
Joined: Wed Oct 12, 2016 6:00 pm
Contact:
United States of America

Re: FS1R Coarse Frequecy values

Unread post by javelin276 » Sun Mar 26, 2017 5:27 pm

Wow! That was fast, thanks EXer. How did you figure that one out? I'll try that.

I was attempting to figure something out working with the coarse and fine settings in the parameter sysex commands.
The Coarse frequency settings in the FS1R match FreqC = 0.013435364*(2^(n-1)) where n is the number stored by the parameter sysex command when you double tap 'Enter'.
The Coarse adjustments move the numbers on the display by octaves. 0.0134 is the first octave frequency in the sequence.
The Fine frequency settings match Freq = FreqC*(1.005429901^m) where m is the fine number stored by the fine parameter sysex command.
The Fine adjustments give you 127 steps between each octave, the 128th root of 2.0. Octaves double the frequency.
These match the frequency numbers on the display as you adjust the frequency.

The problem with mine is the hi byte numbers aren't big enough to match the numbers stored in the fseq.syx files. I have to add more data bits on the top of the hi byte to get the numbers to work out.

I hope your method works, because I'm baffled at this point.

User avatar
EXer
Member
Member
Posts: 91
Joined: Tue Dec 11, 2012 6:15 pm
France

Re: FS1R Coarse Frequecy values

Unread post by EXer » Sun Mar 26, 2017 9:49 pm

javelin276 wrote:I hope your method works
What? Dare you doubt? :twisted:

It does work.

And it was not difficult to figure out. A parameter defined as a linear function of the logarithm of the frequency is common in signal processing.
The values of the constants have been obtained by analysing FSEQs made with Fseq Editor. Here is the 'making of':

Image

__

N.B. when you convert the decimal value of the parameter given by the formula to sysex keep in mind that MIDI bytes have only 7 significant bits, so hi_byte = INT(parameter/128 [*not* 256] ) and lo_byte = param - 128 * hi_byte.
EX5 EX5 EX5R FS1R TX81Z TX81Z TX7 A4000
EX5Tech Member #101

User avatar
javelin276
Member
Member
Posts: 34
Joined: Wed Oct 12, 2016 6:00 pm
Contact:
United States of America

Re: FS1R Coarse Frequecy values

Unread post by javelin276 » Sun Mar 26, 2017 10:11 pm

Thanks EXer, that really makes it clear.
I don't doubt your answer, I just find it mind boggling that Yamaha would make it so complicated when all they had to do was save the two settings bytes already in the synthesizer.
Thanks so much for your help!
Javelin

User avatar
javelin276
Member
Member
Posts: 34
Joined: Wed Oct 12, 2016 6:00 pm
Contact:
United States of America

Re: FS1R Coarse Frequecy values

Unread post by javelin276 » Sun Mar 26, 2017 11:42 pm

Got the import export functions working! Thanks guys.

New question... Volume Levels of 0 in a lot of the fseq files are represented as 127, not as 0. Do I need to set the levels to 127 for 0? Has anyone tested this?

User avatar
EXer
Member
Member
Posts: 91
Joined: Tue Dec 11, 2012 6:15 pm
France

Re: FS1R Coarse Frequecy values

Unread post by EXer » Mon Mar 27, 2017 12:13 pm

Sorry, I can't help about the volume levels, but I guess it would not be too difficult to test: just create a fseq with constant frequencies and set the level to 00h in the 1st third of the frames, to 40h on the 2nd 3rd and to 7Fh and the last 3rd, and listen.

Btw I'm amazed someone is trying to edit fseqs. Could you tell more about your project?
EX5 EX5 EX5R FS1R TX81Z TX81Z TX7 A4000
EX5Tech Member #101

User avatar
javelin276
Member
Member
Posts: 34
Joined: Wed Oct 12, 2016 6:00 pm
Contact:
United States of America

Re: FS1R Coarse Frequecy values

Unread post by javelin276 » Mon Mar 27, 2017 5:45 pm

Sure, I can test it that way, I just don't have the upload feature implemented in my program yet. I suppose I could upload using the existing FseqEdit program until mine is operable. Hmmm.

Yes, I want to edit fseq's in a specific way not provided by the older FseqEdit program. I'm attempting to get the FS1R to speak and sing in English. The coms are the hard part, the standard midi interface is too slow, like trying to drink coffee through a sippy straw. The amount of data flow needed isn't possible. It's a shame that Yamaha didn't update the FS1R with a USB interface like the MU-2000 had just a year or two later. The only alternative is to attempt it using an fseq. I need to cram the standard 44 English phonemes into one fseq, then jump between phonemes using a controller input in scratch mode. (I've tested that capability already.) Fseq's are 512 frames. The only midi controller with more than 127 positions is Pitch Bend, so I will lose Pitch Bend to pull it off. Since I'm limited on the number of frames, it may end up rather notchy switching between phonemes. It would be nice to have a way to blend from one frame to the next, but the instrument wasn't designed to do that.

I've got the main editor up and running. The program can load in text data from a spreadsheet, load existing fseq's, and load spectrum charts exported to text from both Audacity and Spectrogram16. It then analyzes the spectrum chart to locate the sound peaks in different frequency bands to locate the formants, and calculates the required volumes to match, compensating for volume changes due to the Bandwidth settings. It does this for both the voiced and unvoiced operators. The result is an fseq frame which gets stored into one of the 512 frame slots. The program can also load in an entire spectrum map from Spectrogram16, which can fill all 512 slots in one whack. It's similar to the .wav file input of the older FseqEdit program, but with controls on how the spectrum data is parsed into settings. Unlike the older editor, I've set it up to blend both voiced and unvoiced operators into an fseq simultaneously, the older editor (and Yamaha's original editor) jumped between operator types based on the dominant frequency band. High frequency sounds went into Unvoiced operators, lower pitched sounds went into the voiced operators. They didn't mix both operator types together for some reason. You can see that behavior in the fseq files when you edit them. My program has a graphical plotting window too so you can visually see what's going on in the analysis part of the program.

I also have the speech program half way assembled. It takes in text lyrics and notes from a text file and translates the words into phonetics using a 70,000 word Oxford English dictionary. Once I get a proper fseq constructed, I'll add to this program so it outputs all of the controller commands to a midi track to select and play back the phonemes using the fseq.

I've already created very life-like voice patches on the FS1R, but only with one phoneme per patch. Now I want it to speak and sing.
You can hear a demo of one of my singer patches on YouTube here:
https://www.youtube.com/watch?v=IvKTYFWN2Uk

I've also written a manual on FM voice editing on the FS1R including formants which you can download off my website, if that interests you.
http://www.JavelinArt.com

User avatar
EXer
Member
Member
Posts: 91
Joined: Tue Dec 11, 2012 6:15 pm
France

Re: FS1R Coarse Frequecy values

Unread post by EXer » Mon Mar 27, 2017 7:32 pm

Please check your PMs
EX5 EX5 EX5R FS1R TX81Z TX81Z TX7 A4000
EX5Tech Member #101

User avatar
javelin276
Member
Member
Posts: 34
Joined: Wed Oct 12, 2016 6:00 pm
Contact:
United States of America

Re: FS1R Coarse Frequecy values

Unread post by javelin276 » Mon Mar 27, 2017 10:38 pm

Just so everyone knows, the Christina1 voice patch is detailed in the FM programming manual on my website. It's in the Formant section, patch example #4. The numbers are also in the table in the appendix, though the portamento settings and such are only in the Formant section.
http://javelinart.com/fm-synth-programming-guide.html

Post Reply

Return to “Yamaha FS1R”

Who is online

Users browsing this forum: No registered users and 1 guest