Hallo Rio,
Also ich hab gestern mal deine Applikation neu übersetzt. Komischerweise wurde die appl. ohne das ich was geändert habe fast 2kb größer (30kb) :-X
Das ist seltsam. Ich habe die Anwendung in den letzten Wochen dramatisch erweitert und bin immer noch auf 16 kB. Soweit ich mich erinnere hat die alte Hex-Syx-Datei maximal 14 kB, also sind es 16 kB mehr (das ist mehr als das doppelte!!): vermutlich hast du die mios_lib_sdcc eingebunden?
Das sollte nicht notwendig sein.
Ja und nach ewigen Tests, ist dein Feature mit den NoteOff-NoteOn -> Vol = 0 Converter schon an vielen Stellen sinnvoll. 
ja, ne? Naja, es gibt sicherlich noch einige Stellen an denen das verbesserungswürdig ist. V.a. ist mir aufgefallen treten Probleme auf, wenn mehrere Tasten sehr hastig gedrückt werden.
Ich checke nochmal alles ab und vielleicht kann ich was verbessern;
aber wie gesagt, nachdem meine aktuelle Version schon 0.2.2 beträgt (0.1.4 oder 0.1.5 sollte veröffentlicht sein) wäre es ein wenig planlos jetzt hektisch in einer uralt-Version rumzuändern.
Du kannst aber davon ausgehen, dass in den neuen Releases theoretisch alles kompatibel sein sollte.
Nach ein bißchen rumspielen mit den Noten und den CCs viel mir auf, dass du die Osc 1..5 immer “enveloped” startest (bei Ch11..15) . Die OSC sollten ja auch ohne “envelope” funktionieren. Aber ich finde keine Deaktivierung der Envelope in deiner Beschreibung.
habe mich eigentlich bemüht alles gut zu kommentieren:
// set OSC Freq & Lvl based on incoming Note & Velocity
IIC_SPEAKJET_ENVFreq(evnt1); // base freq for ENV
IIC_SPEAKJET_OSCFreq(targetOsc, evnt1); // play note
IIC_SPEAKJET_OSCLvl(targetOsc, evnt2); // set velocity
[/code]
D.h. du kannst gerne testhalber [tt]IIC_SPEAKJET_ENV_Freq(evnt1);[/tt] deaktivieren.
Soweit ich das verstanden habe, gehen aber alle Oszillatoren durch den Envelope (s. Fig 3 SpeakJet 5 Channel Synthesizer Block Diagramm, S. 4). D.h. wenn ich den Envelope nicht der Frequenz anpasse, auf die ich den OSC stelle, kommt nach meinem Verständnis kein harmonischer Klang heraus.
Was mich dabei noch ein wenig stutzig machte - wenn ich veränderungen für die Freq. des Envelope oder für das Volumen via CC vornehme, wird bei jedem neuen Tastenanschlag diese Einstellungen wieder zurückgesetzt und die Freq. für OSC+ENV gleichgesetzt. D.h. Alte Werte die per CC dafür gesetzt worden sind, gehen bei neuen Tastenanschläge verloren. Das Phraselator Programm kann dagegen solche Einstellungen unabhängig voneinander ansteuern.
Das kannst du auch!
1. Via “so ist es gedacht”:
Du musst einfach einen entsprechenden Midi-Kanal auswählen, denn das Einstellen der Frequenzen/Volumes via CC ist nicht im Zusammenspiel mit der Tastatur im Synth-Modus (CH 11-16) gedacht, sondern mit der Tastatur im Speech-Modus (CH 1-10)!
D.h. stell den Midikanal auf Sprache ein (z.B. CH 3), triggere ein paar Sounds und drehe dann an den CCs rum ;D ..dann weißt du wie’s gedacht ist.
Die “Synth”-Modi (Midi-Kanal 11-16) sind dann nichts anderes als vordefinierte ENV/OSC-CCs nur dass die stimmstabil sind, d.h. dass du das harmonisch nutzen kannst (was via CC nicht möglich ist!).
Ein “Zurückschalten” der OSC/ENV Einstellungen nach einem NoteON/OFF Signal sind meines Erachtens nicht sinnvoll, da diese Einstellungn auch nach einer Sprachausgabe nicht zurückgestellt werden. Das würde zu viel Aktion bedeuten und ich wüßte nicht, was das bringen sollte. Außerdem klingt mir das eher nach einer Anwendung für zwei SpeakJets, die parallel betrieben werden (meine Applikation ist aber (noch?) nicht Multimodul-kompatibel!).
2. Via Code:
Dafür gibt es beide Funktionen separat:
[code=IIC_SPEAKJET.h:168]
void IIC_SPEAKJET_ENVFreq(unsigned char value) __wparam {
// 0..127, SCP_FREQ_MAX is 3999
void IIC_SPEAKJET_OSCFreq(unsigned char osc, unsigned char value) __wparam {
// osc = 1..5, value = 0..127, SCP_FREQ_MAX is 3999
Ich weiß keinen sinnvollen Anwendungszweck für eine getrennte Einstellung, weil der SJ ohnehin schon aufgrund der fehlenden Fließkommagenauigkeit ziemlich … naja, :
so halbmastschräg ist (manchmal), da brauch ich nicht noch einen schrägen Envelope, aber du kannst ja gerne die Funktionen direkt ansprechen. Dafür habe ich die Applikation ja in verschiedene Dateien aufgeteilt:
Die kommende Version enthält einige kleine Änderungen, viele Korrekturen und kleinere Bugfixes und ein neues Modul: eine SensorMatrix, die die Jaw/Tongue Enunciation Controls nutzt, die in der veröffentlichten Version schon angelegt ist.
Hoffe, ich konnte einige Fragen klären,
Grüße,
AC