User Tools

Site Tools


MIDIBox SpeakJet K64 Modul



K64 Modul is seperated in 2 Applications - K64 and K2 SpeakJet Application:

K64 Application is a classic keyboard-controller to play MIDI Notes from retro C64 keyboard for seperate UPPER- and LOWER-Keyfield Input. You can control MIDI events for specific channels too. So you can use it as mobile input device for external syntheziser or to use it as input keys for SEQV3 application. With an additonal seperate SpeakJet Modul you are able to control parameters for SpeakJet and SEQV3 at same time.

If a SpeakJet-Board is installed you can use the advanced functionalities “Text To Speech” Mode. This Mode allows you to write text phrases, which are processes directly in realtime by setup variation, speed and bend for every letter of a word/sentence. Text To Speech can be controlled via incomming MIDI Notes in several modes. Every letter can be replaced by variations in Realtime. German language is pre-configured.

All Text To Speech patches can be stored up to 8 external EEPROMs on a bankstick. 2048 patches (8x32k) or 4096 patches (8x64k) are maximum possible.


1x Core board + PIC18F452 for K64 application v2

1x Core board + PIC18F452 for next/last release of AC's K2 (or you can use the contained 2×16 K2mod test version) speakjet_application_software_v_0.2 from audiocommander

1x SpeakJet board for the midibox_speakjet application from audiocommander

1x C64 PSU to connected Core boards with 5V DC, e.g. here: mbhp_4xsid_c64_psu_optimized.pdf

1x midiboxkb board midiboxkb_-_using_a_c64_keyboard_as_input from jambonbill

1x C64 Case + functional C64 Keyboard (older or newer case, keyboard are possible)

1x 2×40 LCD for K64 Controller application (for Key control and TextToSpeech (32 characters in 1 Patch))

1x 2×16 or 2×8 LCD for K2 application

2x MIDI-IN (on K64-Core for trigger text; on K2-Core for receiving SpeakJet commands)

1x MIDI-OUT (on K64-Core for external use (you can link it to K2-Core, but also route it through SEQV3)

www.inventati.org_ganchan_midibox_k64_images_k64_2.jpg www.inventati.org_ganchan_midibox_k64_images_k64_3.jpg


K64 Application Software version 2.0 for Core Module:

K64 release 2.0

Warning / Notes

Use the hardware build up at your own risk! Use the applications at your own risk! I will not liable for any damages at hardware or software.

For SpeakJet-Board PIC16F88 the SpeakJet firmware 1.0 should be sufficient. (It works fine about a year). AudioCommander noticed some errors with his build-up, so he have done some changes in released 1.2 firmware.

Please read all information about PSU, PCB Boards (CORE, SpeakJet / K2, C64 Keyb etc.) at MIDIBOX WIKI and See links above.


MIDIbox SpeakJet Modul K64 version: 2.0 (german) Copyright 2008 Sebastian Kühn (Rio)

some parts belongs to:

a) Sample Matrix: Copyright 2006 Thorsten Klose Licensed for personal non-commercial use only. All other rights reserved.

b) K2 Copyright 2007 Audiocommander

c) C64 KeyB Copyright 2007 Bill

Released under GNU General Public License

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation


Doku / Tutorial

The main screen - the midi keyboard


The main screen - the midi keyboard

The main screen displays the adjustable midi settings to use the C64 keyboard as a splitted midikeyboard with UPPER and LOWER Keyfield. Maybe you can use it to play or control external device (SEQ, Syntheziser, K2) seperatly. I'm often using the LOWER keyfield to transpose SEQ tracks and SpeakJet pitch at same time by SEQ's internal router. Maybe the UPPER keyfield can be used for playing notes or chords directly.

Playing notes

In the middle of screen the current playing midi notes are displayed. Notice that only 3 keys are possible at the same time. That's a restriction of the keyboard matrix, because pushing a 3th key in same row/col will short-circuited some other keys in matrix. To solve that problem as good a possible, i've implemented an additional HOLD Mode (press RETURN and a “+” will be shown besides CH1). It's easier to play chords and to hold them without holding down all the keys. In HOLD Mode an additional 4th note can be played in the lower Keyfield too - so 3th chords in the upper field and e.g. a bass line in the lower field can be played and changed at same time. You can release all notes by pressing CTRL. You can switch off HOLD Mode by pressing RETURN again. The state of HOLD Mode will be stored internal.

If a played chord is known, it will be shown on the left side of note view:

Play chords / notes in a simple way:


Setup keyfields

On the right side of screen the adjustable channel- and transpose-values for UPPER and LOWER keyfield are shown. CH1 (for LOWER keyfield) can be changed with CRSR keys up down, CH2 (for UPPER keyfield) is variable by + and -. Pushing F1 and F7 will change the transpose value (TR1). For the UPPER Keyfield TR2 is adjustable in 2 ways: Pushing SHIFT_R + F1 and SHIFT_R + F7 or pushing simply the SPACE key. A short touch of the space button transposes TR2 up, a longer touch transposes TR2 down. All Parameters will be stored internal.

CCs and Values

On the right side of screen the adjustable CC and CC Values are shown. The pointer char “>” infront of Midi-Channel presents the current Channel for a choosen CCs. SHIFT_R + ? switches the CC pointer between the 2 keyfields. CCs are adjustable with F3 and F5. The Keys COMMODORE and SHIFT_L presents the datawheel of K64. CC Values are sended out by moving CC Value up and down with that keys. INST/DEL Key sets values back to 0.

Triangle LFO

There is an integrated LFO option to automate some functions of the datawheel. The LFO option changes the CC Values in a specific interval up and down. Close to CC Value area, there are 2 marker adjustable. The Startpointer “>” on the left and Endpointer “<” on the right side. The Start marker is adjustable by pushing SHIFT_R + LIRE key - the end marker by SHIFT_R + CLR/HOME. Changes adjust the border for triangle LFO. SHIFT_R + “-” Key resets default marker position (0..127).

To Start the LFO press RUN/STOP. To Stop the LFO press RUN/STOP again. You can influence the flow by controlling CC Values manually, changing end- and start-position and setup Speed Value.

Start Marker:

End Marker:

Speed option

The speed value (default = 1) behind the value number presents the speed of changing CC Values, which are controlled by datawheel or by LFO. Manual changes are constantly double fast as LFO. Pushing SHIFT_R + F3 or SHIFT_R + F5 will change the speed value. Notice, if the speed value is 0 the LFO will be frozen.

Union Mode

The Union Mode binds the lower and upper Keyfield. All notes will be sended out to the single Midi Channel.

SEQV3 Record

People, which own's a MIDIBox SEQV3 are able to use this special feature to record or to modify parameters as easy as possible from K64. Every step of a track can be controlled by Cursorkeys, toggling notes (Space Key) or recording notes from Keyfield.

The Record Mode is available by pushing SHIFT_R + RETURN in mainscreen. Note!! Only SEQ versions higher than SEQ V3.2a will work correct. All you have to do: Set up the same midichannel for SEQV3 midi-in and K64 (lower) keyfield.

Tracks can be copied by pushing SHIFT_R + UPARROW (Copy) and pasted by pushing SHIFT_R + @ (Paste). Pushing first time will activate the COPY / PASTE MODE (so you can use the rotary encoder of your SEQ to select an area); Pushing same keys a second time again - the selected area will be copied or pasted. Try it out.

For choosing another track you have to push SHIFT_R + F1 / SHIFT_R + F7 for step tracks up or down. If you want to choose one of the 3 layer push SHIFT_R + F3 / SHIFT_R + F5.

Keys like + or SHIFT_R + “+” will activate the SCROLL or MOVE MODE.

CLR/HOME will clear a track; INST/DEL will undo a command.

It's possible to start and stop the sequencer with “]” and “=”.

RETURN will toggle between REALTIME and STEP feature of record mode. I've used the STEP MODE for recording a note at current position, while a track is playing. So now it's possible to listen up the track.

LIRE Key toggles between the AutoStart feature of record mode.

Available SpeakJet areas

If you've installed the K2 and SpeakJet-Board and if you want to control the SpeakJet for Text to Speech, you can change the main screen to TTS screen by pushing CTRL. If you press CTRL again, you will be back in main screen.

If you want to change SpeakJet CCs instead all CCs, press ←.

If you push SHIFT_R + ← you will change to Synth Mode of SpeakJet. Push ← again, you will turn back to main screen.

SpeakJet K2 Parameters

SpeakJet Parameters are: (OS1…5) pitch of OSC 1,2,3,4,5; (VO1…5) volume of OSC 1,2,3,4,5; frequency of Envelope (ENV); Distortion-Level of OSC 4 and 5 (DIS); global Speech Speed (SPD); global Speech Bend (BND); Jaw (JAW) and Tonque (TON).

Remember SpeakJet control is only available, if K64 modul is linked to K2 modul via MIDI.

SpeakJet Configurations

The SpeakJet can be configured with following Keys:

SHIFT_R + E toggle Envelope Type (saw, sin, tri, sqr)

Toggles Envelope Type will only be shown on K2 Display. Parameter E changes to several waveforms.

SHIFT_R + T toggle Envelope State (0,1,2,3)

Toggles Envelope State will only be shown on K2 Display. Parameter T changes to 0,1,2,3.

Bit 1: activates Envelope for OSC 123

Bit 2: activates Envelope for OSC 45

So T = 3 will link all OSCs to the Envelope.

SHIFT_R + O toggle OSC for OSCSynthese

Toggles OSC Waveform for OSCSynthese.

If something goes wrong, or something isn't adjusted right with SJ anymore, it's possible to reset the speakjet with key combination SHIFT_R + ←.

Some more function for configuration the SpeakJet are described on keymap.

Talk Mode

If Talk Mode enabled (SHIFT_R + = ) then the current selected text patch will be sended out by pressing keys on the lower keyfield. You can play the correct tone scale at Midi Channel 4.

How to create TextToSpeech Patches?

First we changed from mainscreen to TTS Screen by pushing CTRL. Now the first patch will be shown. If nothing is stored before, only a blinking cursor will be displayed. Now you can write a word or a sentence. Notice that the application is preconfigurated for german language (because german words are easier pronounceable from text as any other language. E.g. english are very different between written letters and spoken text - many algorithmics have to be implemented to meet all requirements for a TTS).

Ok, we will try to write a german sentence:

Der Weltraum example

The upper line is for writing input (max. 32 characters for patches are allowed). A space character will insert a pause. The cursor can be moved by CRSR Keys to a special position in word. On the left side you can choose the current bankstick (SHIFT_R + F1 / SHIFT_R + F7) and the current patchnumber (+ / -). The lower line represents different configurations for every letter.

Text modifications

LIRE - delete

INST/DEL - backspace

SHIFT_R + INST/DEL - insert



RETURN key or any MIDI-IN Notes at Channel 13 or Channel 14 (bended) will send out the phrase. Midi-IN Channels 1..12 are used to activate the text patches of bankstick.

Speech modifications

Ok, we should fine tune pauses in sentence. Go to the space positions and write down a number or using F3 / F5 keys. Higher values will insert longer pauses. Try following:

Ok, we should fine tune variations of letters. We change the letter “E” in “WELTRAUM” and the first “E” in “WEITEN”. Use F3 / F5 to change numbers below letters and listen to the result:

Der Weltraum with pauses and variations

Every letter can be changed by variations. The number of variations is different for every letter. Try to find out the best combinations for your words.

Now we want to do changes in Speed and Bend. Pushing F1 / F7 will change “VAL” to submenu “SPD” and “BND”. Try to added following changes in both and listen to the results by pushing RETURN:

SPD and BND settings will change global settings for SpeakJet. So next speakjet events (e.g. next spoken letter) will use the last values for Speed and Bend. The normal value for Speed is 8 and for Bend 4.

Storing Patches

At least you are able to store the patch on current patchnumber by pushing SHIFT_R + RETURN. A Message will be shown. Every 32K Bankstick can store 256 Patches; 64K Bankstick can store 512 Patches.

If you want to copy the text phrases to another position: Hold down SHIFT_R and choose the new patchnumber by + / - keys. Notice, old patches will be overwritten.

Using Textphrases

There are several modes to controll Textphrases:

1. Pushing RETURN in TTS Screen and Mainscreen plays the actual patch

2. Incoming MIDI Notes can used for playing phrase in several modes:

for 32K Bankstick you can use patches:
CHANNEL 1:	C-1, C#1...		Patch 1,2...		
CHANNEL 2:	C-1, C#1...		Patch 51,52...		
CHANNEL 3:	C-1, C#1...		Patch 101,102...		
CHANNEL 4:	C-1, C#1...		Patch 151,152...
CHANNEL 5:	C-1, C#1...		Patch 201,202...		
CHANNEL 6:	C-1, C#1...		Patch 251,252...256		
for 64K Bankstick you can use additional patches:
CHANNEL 7:	C-1, C#1...		Patch 301,302...		
CHANNEL 8:	C-1, C#1...		Patch 351,352...		
CHANNEL 9:	C-1, C#1...		Patch 401,402...		
CHANNEL 10:	C-1, C#1...		Patch 451,452...			
CHANNEL 11:	C-1, C#1...		Patch 501,502...512			

Text patches will be played as in describtion above in mainscreen. So you can trigger whole sentences with incoming midinotes from a SEQ. Let him sing while sending additional notes to CHANNEL 4 of K2.

If you are in TTS screen, only the fit note will play the current patch. E.g. TTS screen displays PatchNr 3 then only D-1 will trigger the text phrase. All other notes will be ignored.

CHANNEL 13:	Plays actual text patch
CHANNEL 14:	Plays actual text patch with changing BEND
		C-1, C#1...		BEND 0,1,2,3,4,5...127


A visualisation of several main areas:








The whole keymap:

—————- Keyboard Mode —————————————————————————————————————–

	<--			select K II CC Mode
	SHIFT_R + <--		Reset SpeakJet
	CTRL			stop current playing notes
				otherwise select TTS Mode	
	Z..?			note Ch1
	S..[			halfnote Ch1		
	Q..UPARROW		note Ch2
	2..0			halfnote Ch2
	RETURN			activates/deactivates Upper keyfield Hold-Notes mode (+)
	SHIFT_R + RET.		activates/deactivates SEQV3 Record mode
	SHIFT_R + SPC.		activates/deactivates Union mode (for non-splitted keyfield)
	SHIFT_R + =		activates/deactivates Talk mode for lower keyfield (*)
	SPACE			short time - transpose up for Ch2
				long  time - transpose down for Ch2
	COMMODORE		CC Value down	
	SHIFT_L			CC Value up
	RUN/STOP		Start LFO / Stop LFO
	CLR/HOME		Reset CC Value (CC Value = 0)
	SHIFT_R + -		Reset LFO marks		
	CRSR_LR			Ch1 up
	CRSR_UD			Ch1 down
	SHIFT_R + CRSR_UD	Ch2 down
	F1			Transpose1 up	
	F7			Transpose1 down
	SHIFT_R + F1		Transpose2 up	
	SHIFT_R + F7		Transpose2 down
	F3			CC up	(KII CC up)
	F5			CC down	(KII CC down)
	SHIFT_R + F3		Increment LFO Speed	
	SHIFT_R + F5		Decrement LFO Speed (If Speed 0 - LFO will hold)
	SHIFT_R + ?		Select CC outgoing Channel	
	SPEAKJET CONTROL dependend from installed K2 version:
	SHIFT_R + E		toggle Envelope Waveshape (saw, sin, tri, sqr)	
	SHIFT_R + T		toggle Envelope OSC State (0,1,2,3)
	SHIFT_R + O		toggle OSC Waveshape for OSCSynthese
	SHIFT_R + P		toggle OSC Envelope Basefreq
	SHIFT_R + M		resets Mastervolume = 127
	SHIFT_R + @		Harmonizer listen key OFF
	SHIFT_R + *		Harmonizer listen key ON
	SHIFT_R + UPARROW	Harmonizer scale (0,1,2)

—————- Record Mode ———————————————————————————————————————–

	SHIFT_R + RET.		deactivates SEQV3 Record mode
	CRSR_LR	SEQ 		Step Right
	CRSR_UD	SEQ 		Step Left
	SHIFT_R + F1		SEQ Track up	
	SHIFT_R + F7		SEQ Track down		
	]			PLAY
	=			STOP
	SHIFT + UPARR.		COPY MODE ON (pushing again will COPY from selected area
	SHIFT + @		PASTE MODE ON (pushing again will PASTE to selected area
	(all other note keys will be recorded)

—————- Text to Speech Mode ———————————————————————————————————

	CTRL			select Keyboard Mode
	A..Z			Write Letters
	SPACE			Write Pause (Space)
	RETURN			play/send current speech text
	SHIFT_R + CLR/H.	Clear Text
	INST/DEL		Backspace
	SHIFT_R + INST/D.	Insert Space
	LIRE			Delete Letter
	+			Text Patch up
	-			Text Patch down
	SHIFT_R + '+'		Copy Patch to higher patch position (at shift key up)
	SHIFT_R + '-'		Copy Patch to lower patch position (at shift key up)
	F1			MODE up		(VAL, SPD, BND)	
	F7			MODE down	(VAL, SPD, BND)
	SHIFT_R + F1		BANK up	
	SHIFT_R + F7		BANK down
	F3			MODE value up	(0..9)	0 - not displayed
	F5			MODE value down	(0..9)
					0	- Standard LETTER
					1..x	- LETTER Variations
					0..9	- SHORT...LONG
					1..9	- SLOW..FAST
					0	- IGNORE
					1..9	- LOW..BRIGHT
					0	- IGNORE

additional K2 MIDI-Implementation-Chart

Please take a look at AC's K2 defination. The only last additional CC's are following:

Function #define default assingment Channel Mode Description

Thanks goes to ganchan for supported webspace.

RIO 2008/03/25

midibox_speakjet_k64_modul.txt · Last modified: 2011/09/17 05:54 by dougster