Shruthi-Synthesizer and my "WAVE 1"

I see what you mean. I wonder what this means in behaviour though:

When the for loop (erroneously?) access formant_amplitude[3] it will actually set the value noise_modulation if I’m not mistaken. This means noise_modulation isn’t 0 after all.


That depends on the memory alignment. It may well be that the compiler adds another byte for padding after formant_amplitude[3]

Edit: Sorry my bad. It’s an 8bit processor, there is no need fro alignment. Consequently, there seems to be no padding on avr-gcc (unless soemthing is stored in flash - then there’s a aligment to even numbered adresses)

Hmmm, I don’t understand why that would happen for a consecutive number of bytes in a C struct.
Anyway, I only think it’s Olivier that can comment if this is a deliberate “hack” or not.

Not a bug.

There are 7 bytes of data per phoneme: 3 formant frequencies, 3 formant amplitudes, and an additional noise amplitude.

The 3 amplitudes and the noise are all represented by a 4-bit number, so the same code is used to crossfade the 3 amplitudes and the noise. It’s normal for the loop to count to 4, and to affect the variable that follows the last entry in the formant_amplitude[] array - noise_modulation

Add with phase_noise makes interference above parameters value 96

vowel with phase_noise from Shruthi:

vowel without phase_noise from DE-GENERATOR:

Now… my code is function without noise_amplitudes and without interference:

// OscRender: VOWEL
void OscRender_Vowel(uint8_t osc_nr)
uint8_t block_size = 127;
uint8_t parameter;
uint8_t *buffer;

if (osc_nr == 0)
	parameter = Osc.prm[0];
	if (Voice.buffer_nr == 0)
		buffer = Voice.Buffer2a;
	else {buffer = Voice.Buffer1a;}
	Osc.vw_update[0] = (Osc.vw_update[0] + 1) & 3;
	if (!Osc.vw_update[0])
		uint8_t offset_1 = U8ShiftRight4(parameter);
		offset_1 = (uint8_t)(U8U8Mul(offset_1, 7));
		uint8_t offset_2 = offset_1 + 7;
		uint8_t balance = parameter & 15;
		// Interpolate formant frequencies.
		for (uint8_t i = 0; i < 3; ++i) {
			Osc.vw1_formant_increment[i] = U8U4MixU12(
			pgm_read_byte (&(wav_res_vowel_data[offset_1 + i])),
			pgm_read_byte (&(wav_res_vowel_data[offset_2 + i])),balance);
			Osc.vw1_formant_increment[i] <<= 3;}
		// Interpolate formant amplitudes.
		for (uint8_t i = 0; i < 3; ++i) {
			uint8_t amplitude_a = pgm_read_byte (&(wav_res_vowel_data[offset_1 + 3 + i]));
			uint8_t amplitude_b = pgm_read_byte (&(wav_res_vowel_data[offset_2 + 3 + i]));
			Osc.vw1_formant_amplitude[i] = U8U4MixU8(amplitude_a,amplitude_b, balance);}
	uint16_t phase_integral = Osc.phase[0] >> 8;
	uint16_t phase_increment_integral = Osc.phase_increment[0] >> 8;
	// sample loop --------------------------------------------------------
		int8_t result = 0;
		for (uint8_t i = 0; i < 3; ++i) {
			Osc.vw1_formant_phase[i] += Osc.vw1_formant_increment[i];
			result += pgm_read_byte (&((i == 2 ? wav_res_formant_square : wav_res_formant_sine)
			[((Osc.vw1_formant_phase[i] >> 8) & 0xf0) | Osc.vw1_formant_amplitude[i]]));}
		result = S8U8MulShift8(result, ~(phase_integral >> 8));
		phase_integral += phase_increment_integral;
		if (phase_integral < phase_increment_integral) {
			Osc.vw1_formant_phase[0] = 0;
			Osc.vw1_formant_phase[1] = 0;
			Osc.vw1_formant_phase[2] = 0;
		uint8_t x = S16ClipS8(4 * result) + 128;
		*buffer++ = x;
		*buffer++ = x;
	} while (block_size--);
	// update phase
	Osc.phase[0] = (__uint24)phase_integral << 8;

Vowel sound from DE-GENERATOR:

two vowel voices:

I love vowel sounds :heart_eyes:

1 Like

DE-GENERATOR with Midi Control Change

I did not see new iteration of this at Superbooth this year @tubeohm

I talked to Andre. They have the firmware almost ready. Hardware-wise there’s not much new to show.
It will be ready soon, he said.

1 Like

Latest news , 29.08.2018 . I must order 30 Motherboards new in Verson 1.3. Should come this week .
If i get it , i will test it and write the DIY manual . In the meanetime Rolf update the software . Now we can draw waveforms for the oscillators and later also for the LFO’s.
Bad with the Motherboards- my mistake …We habe source now all rare parts and hopefully we can start in september .

1 Like

Nice progress! Getting there… :smile:

Hallo again…

Andre from has made new Videos from DE-GENERATOR. Look at here:

Hallo friends…

There are new features in the waveform editor. The clipping in the VOL function was changed and now works properly. And second, a random function (RND) has been integrated. The RND function creates a new waveform from two randomly selected waveforms This allows over 16,000 new waveforms.


Random Waveforms


Greetings from Germany :smiley:

1 Like

Hello friends
I wish you a happy new year and have fun with the electronic music. :heart_eyes:

Here are some sounds from DE_GENERATOR


This is the end of the story of DE GENERATOR :sleepy:

The software is ready and the case is coming soon :slight_smile:

Block news online :

Best regards from germany. Rolf

PS: But the story of the DE-GENERATOR is not quite finished yet. I still have some ideas …


De-Generator - Release … now



Congrats! I’m really glad this adventure of yours finally reached its final goal!

Btw. shall we change the thread title into something that better reflects the current thing? Open to suggestions for the title and available to change it if you can’t edit it yourself.

Also congras from here, hmmm I could imagine that making it DIY only would scare away many potential interested buyers…

There is a new video of the de-generator. In the video Andre explains the oscillator functions in detail.

Greetings from germany. Rolf

1 Like