Gr300 emulation


#1

hi there,

i am trying to do something really nifty, and i'm almost there :wink:

basically it is a pitch to voltage converter in signal/samplerate domain only. it is a straight ripoff of the gr300 schematics (guitar synthesizer by roland made in the 80s). the principle is simple:

convert incoming signal to square wave (apply filtering first), convert to pulses, feed an accumulator to get a sawtooth wave from the pulses, measure the height of the sawtooth (which is dependant on frequency obviously) with a sample and hold circuit, and tadaa!!! you have a voltage dependant on the input frequency.

i did this in puredata and it works wonderfully, bass-guitar to any oscillator (since you can feed it from the "voltage") without additional latency! now i started porting this to axoloti and i have a problem with the last step. the "voltage" i am getting after the sample and hold is inverted to the pitch, so i have to use something like value/input to get a linear response. in puredata a simple [expr~ "samplerate"/$v1] did the trick, but in axoloti this is not possible. is there another way? i tried with reciprocal, but if i feed the signal to a frequency input of an oscillator the response is not right...or am i doing something completely wrong?
note that i used two sampleandhold, offset by one half of a wavecycle and add the results, in puredata this improved tuning stability by quite a bit. not sure if it is necessary on the axoloti.

attached is the patch, with 2 custom objects, do i have to post them?
gr300tryout.axp (5.5 KB)

also, i am well aware that this method only works in a certain range, since it will clip the sawtooth if frequency is too low, but that is ok.

cheers for anybody that will have a look.


Guitar synthesizer
#2

as a gr300 owner i'm curious to understand the guts of it so i had a look - it's clear that the following are missing

Object name math/accumulatorsimple not found
Object name math/muls 16bit not found
Object name math/accumulatorsimple not found

i'm guessing what you were saying about range relates to the relatively low available voltage if you were driving the external oscillator from the axoloti ? but, is this what you're doing, i'm curious to know if the output is DC coupled, i did ask before i bought recently, but have clean forgotten, perhaps because the range was very modest

either way - interested to follow your endeavours !!


#3

ok, the objects are now in my repository, if you hit sync libraries, you should get them.

the signal is not suggested to leave the axoloti as a control signal, but just as sound :slight_smile:

the range is limited because that is inherently how the system works, the amplitude of the generated sawtooth varies with frequency. since the axoloti has finite gain, there are limits. (there where also limits on the gr300 in this regard, but for 1 string, 24 semitones it is totally fine)


#4

Hi, not clear to me how you go from the pulses to the saw tooth.
The method you are describing, I think, is very similar to counting the zero-crossings of the input wave.
I once implemented this in the SynC modular system, but with a difference, once you generate that the sequence of zero crossings, then apply a LPF which acts as an accumulator which then is multiplied by the sampling frequency:


I tried redoing this in the axoloti, but I can't say I have succeeded...
Will try your code!


#5

you just start the accumulator, and reset it on every wave cycle, that way you get a sawtooth with amplitude dependant on input frequency. an accumulator is just adding values until it is reset.


#6

Its a very interesting concept, but not sure how you determine the angle portion of the saw tooth wave, how do you get the angle right so it delivers the right voltage level ?
And If the freq is too high, it may not pass zero ? is this correct ?

I think Sir Slick created a pitch detector counting srate samples,
I created what I call a "Poor mans bass guitar tuner" by counting the number of krate samples every time the signal passes zero 15 times. The idea here is the lowest freq open E at 41.2 Hz will give me almost 3 readings, counting 1089 samples to determine the pitch per second. It works but I lack the skill filtering out the natural harmonics coming from the bass, so it bounces around a bit, and I need to define the number of sample to pitch for it to work. As it is, is fine for a tuner, but I have also thought as you have improving it to other synth etc type rolls.


#7

well it does not matter per se, what the angle is, since the amplitude of the sawtooth is proportional to frequency. you just have to take the number of samples you add per step (or the angle as you say) into account later for the frequency calculation. and you want to make it small enough so that it does not overflow on low frequencies.

the beauty of this concept is, that you don't do any counting or analysing of the signal, it reacts immediately. on pitch change you get a voltage rise or fall with a certain curve, so that could be thought of as latency, but the ear does not take it as such. on "normal" pitch tracking systems you always have to wait for the note to be recognised, which especially for bass takes just too much time to be usable for me. and believe me i tried them all!


#8

Cool. I did an emulation for my masters degree and thought of making one with Axoloti. Looking forward to trying it out, (if you're posting it up). Are you running 3 Axoloti's for the hex pickup or is it monophonic?


#9

cool! how did you emulate it, what environment? i did one in puredata, which works very well. if i ever use it it will be for four string bass guitar, so only two axolotis :slight_smile:


#10

I used Synthedit which is why I was so excited when I learned about Axoloti. GR300 is epic. Did they do a bass version?


#11

Yep - http://www.joness.com/gr300/GR-33B.htm


#12

but they are very hard to get, at least in a good shape. i have two gr-300 and i always wanted to mod one for bass, but i have also bought all the parts for the bass version and studied the schematics quite extensively... well, if only i had time... :slight_smile:

nowadays i came to the conclusion, that my synth-bass stuff should be played from a synth controller, so i created my own, in the shape of a bass guitar, but with softpot ribbons as strings and fsr's as triggers. it works great and you are truly able to play a synth!!!


#13

Very intresting!
Can you post the pd file?


#14

uuh, i will have to dig very deeply on my harddrive... will try. what i can post is a documented "voice" of the conversion. you will have to add the input filtering and stuff yourself. also this is not 100% gr300 emulation, since there the sawtooth wave was just clipped in the lower register, resulting in a squarewave-sawtooth mix, in the pd patch i divide the amplitude of the sawtooth by the control voltage which gives me a steady sawtooth wave with all frequencies...


#15

That would be nice, Thanks!


#16

Hi guys, I'm also quite interested in performing pitch detection on a bass guitar. I was wondering, is there any specific reason why a PLL wouldn't work?


#17

no specific reason, i think the pll will probably suffer from the same symptoms as other options:

octave jumping (or smearing in the case of a pal) if filtering is not good enough...