====== MIDIBox SpeakJet K64 Modul ====== {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/K64_1.jpg}} ===== Introduction ===== 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. ===== Hardware ===== 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 2x16 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: {{http://www.ucapps.de/mbhp/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 2x40 LCD for K64 Controller application (for Key control and TextToSpeech (32 characters in 1 Patch)) 1x 2x16 or 2x8 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) {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/K64_2.jpg}} {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/K64_3.jpg}} {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/K64-hardware.gif?800x*}} ===== Software ===== K64 Application Software version 2.0 for Core Module: [[http://www.inventati.org/ganchan/MIDIBOX/K64/Code/K64_relese_2.0.zip|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 [[http://www.ucapps.de/mbhp_iic_speakjet.html|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 Ucapps.de. See links above. ===== Licence ===== **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 http://www.gnu.org/licenses/gpl.html 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 YOU ARE ALLOWED TO COPY AND CHANGE BUT YOU MUST RELEASE THE SOURCE TOO (UNDER GNU GPL) IF YOU RELEASE YOUR PRODUCT YOU ARE NOT ALLOWED NOT USE IT WITHIN PROPRIETARY CLOSED-SOURCE PROJECTS ===== Doku / Tutorial ===== ==== The main screen - the midi keyboard ==== {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/Key_LCD.jpg?640}} ==== The main screen - the midi keyboard ==== {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main1.gif}} 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. {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main5.gif}} If a played chord is known, it will be shown on the left side of note view: {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main9.gif}} Play chords / notes in a simple way: {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/k64_play.jpg}} === 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: {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main7.gif}} End Marker: {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main8.gif}} === 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 === {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main4.gif}} The Union Mode binds the lower and upper Keyfield. All notes will be sended out to the single Midi Channel. === SEQV3 Record === {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main3.gif}} 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 === {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main2.gif}} 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 === {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main6.gif}} 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: {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main_tts1.gif}} [[http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/01_speech.mp3|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 CLR/HOME - Pos1 SHIFT_R + CLR/HOME - Clear 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: {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main_tts2.gif}} 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: {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main_tts3.gif}} [[http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/02_speech.mp3|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: {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main_tts4.gif}} {{http://www.inventati.org/ganchan/MIDIBOX/K64/Tutorial/main_tts5.gif}} 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 ===== Keys ===== A visualisation of several main areas: {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/k64map_1.jpg?800x*}} {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/k64map_2.jpg?800x*}} {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/k64map_3.jpg?800x*}} {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/k64map_4.jpg?800x*}} {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/k64map_5.jpg?800x*}} {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/k64map_6.jpg?800x*}} {{http://www.inventati.org/ganchan/MIDIBOX/K64/Images/k64map_7.jpg?800x*}} 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 + INST/DEL Set LFO END mark SHIFT_R + LIRE Set LFO START mark SHIFT_R + - Reset LFO marks CRSR_LR Ch1 up CRSR_UD Ch1 down SHIFT_R + CRSR_LR Ch2 up 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 RETURN REALTIME / STEP MODE SHIFT + LIRE ASTART ON / OFF SHIFT + UPARR. COPY MODE ON (pushing again will COPY from selected area SHIFT + @ PASTE MODE ON (pushing again will PASTE to selected area SHIFT + "+" MOVE MODE ON "+" SCROLL MODE ON SHIFT + CLR/HOME SEQ CLEAR Track INST/DEL SEQ UNDO SPACE TOGGLE NOTE ON/OFF (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 CLR/HOME Pos1 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) VAL: ------- 0 - Standard LETTER 1..x - LETTER Variations SPACE VAL (PAUSE) -------------------------------- 0..9 - SHORT...LONG SPEED: ------------ 1..9 - SLOW..FAST 0 - IGNORE BEND: ------------ 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 ^ ^ == SYSTEM REALTIME MESSAGES == ^ ^ ^ ^ ^ ^ | MSA Stop | MIDI_CC_ALL_SOUND_OFF | CC 120| - | STOP MSA / SPEECH | ---- Thanks goes to **ganchan** for supported webspace. --- //[[http://www.rattenrudel.de|RIO]] 2008/03/25//