audiocommander Posted February 14, 2007 Report Share Posted February 14, 2007 na, dann kommen wir der Sache schon näher! :) Das passiert unter Envelope Control (=Envelope Waveform) und nicht unter den Envelope Frequenzen. Ich bin davon ausgegangen, dass du immer noch von den Frequenzen sprichst!Nein, das ist war noch nicht implementiert ;)Aber damit geht es:// == SCP_MEMWRT (N) ==// ENVType (send ENVType + ENVState!)#define SCP_ENV_OFF '0'#define SCP_ENV_SAW '2'#define SCP_ENV_SINE '3'#define SCP_ENV_TRIANGLE '4'#define SCP_ENV_SQUARE '5'[/code][code=IIC_SPEAKJET.c:726]void IIC_SPEAKJET_ENV_ToggleWaveshape(void) { // toggle envelope waveshape env_waveshape++; if(env_waveshape > 4) { env_waveshape = 0; } IIC_SPEAKJET_ENVCtrl((env_waveshape << 4));}void IIC_SPEAKJET_ENVCtrl(unsigned char value) __wparam { // 0..127 => 0..7 // see SpeakJetDefines! env_waveshape = value >> 4; IIC_SPEAKJET_TransmitStart(0); IIC_SPEAKJET_SCP_Enter(0, SCP_CTRLTYPE_REGISTER); // set speakjet to serial control mode IIC_SPEAKJET_TransmitByte(SCP_ENV_CTRL); // select envelope control register 8 IIC_SPEAKJET_TransmitByte(SCP_MEMADDR); IIC_SPEAKJET_TransmitByte('1'); // write envelope type to register IIC_SPEAKJET_TransmitByte('9'); // (incl. enable envelopes for all osc) switch(env_waveshape) { case 0: IIC_SPEAKJET_TransmitByte(SCP_ENV_OFF); break; // NONE case 1: IIC_SPEAKJET_TransmitByte(SCP_ENV_TRIANGLE); break; // TRIANGLE case 2: IIC_SPEAKJET_TransmitByte(SCP_ENV_SQUARE); break; // SQUARE case 3: IIC_SPEAKJET_TransmitByte(SCP_ENV_SAW); break; // SAW case 4: IIC_SPEAKJET_TransmitByte(SCP_ENV_SINE); break; // SINE default: IIC_SPEAKJET_TransmitByte(SCP_ENV_OFF); break; } IIC_SPEAKJET_SCP_Exit(1); // exit and write IIC_SPEAKJET_TransmitStop();}Nur die einzelnen 123/45 An/Aus-Schalter sind mir jetzt im Moment zu stressig; wenn du das implementierst, kannst du mir Bescheid geben und ich aktualisiere meinen Code!Grüße,Michael Quote Link to comment Share on other sites More sharing options...
Rio Posted February 15, 2007 Author Report Share Posted February 15, 2007 oki na das ist doch was ;D ..ich werd mir mal die Tage den Synthbereich bei dir im Code die nächsten Tage in Ruhe anschauen. Das bringt dann sicherlich mehr Klärung :).Mhh... dazu hab ich 2 kurze Fragen:// == SCP_MEMWRT (N) == // ENVType (send ENVType + ENVState!) #define SCP_ENV_OFF '0' #define SCP_ENV_SAW '2' #define SCP_ENV_SINE '3' #define SCP_ENV_TRIANGLE '4' #define SCP_ENV_SQUARE '5' hier werden ja die Werte für EnvType definiert. kannst du mir kurz erklären warum die Typen um 2 (für EnvState?) incrementiert sind, weil aus der Doku finde ich ja lediglich das: The first two bits are used to select the type of Envelope 00 = Saw Wave 01 = Sine Wave 10 = Triangle Wave 11 = Square Wave und letzte Frage: mir ist nur noch unklar, warum du im IIC_SPEAKJET_ENVCtrl for dem Setzen des EnvType folgendes setzt: IIC_SPEAKJET_TransmitByte('1'); // write envelope IIC_SPEAKJET_TransmitByte('9'); // (incl. enable envelopes for all osc) ... Wo finde ist das in der Doku beschrieben? und was macht '1' und '9' genau? Zu Register 8 finde ich eigentlich nur diese WerteTabelle (wie oben beschrieben): The first two bits are used to select the type of Envelope 00 = Saw Wave 01 = Sine Wave 10 = Triangle Wave 11 = Square Wave The 3rd, 4th, 5th and 6th bits are not used. The 7th bit is used to select if Oscillators 1, 2 and 3 are enveloped. 0 = Not Enveloped. 1 = Enveloped. The 8th bit is used to select if Oscillators 4 & 5 are half enveloped. 0 = Not Enveloped. 1 = ½ Enveloped + ½ Not Enveloped. All bits are sent in a single value. Example: To turn off the envelopes: “8J0N†Registers 9 and 10 are not used.Dann müsste ja '1' - Sine Wave und '9' - Nicht definiert sein...irgendwas versteh ich hier falsch. Ich dachte es reicht wenn man 8J(Val)N sendet.Beste Grüße, Rio. Quote Link to comment Share on other sites More sharing options...
audiocommander Posted February 15, 2007 Report Share Posted February 15, 2007 Ich dachte es reicht wenn man 8J(Val)N sendet.Eigentlich hast du's selber schon beantwortet und ich habe gerade bemerkt, dass das mit dem ENV_OFF doch nicht so einfach ist, wie ich dir's gestern geschickt hatte (ich glaube es bringt einfach nix, "zwischenrein schnell mal" fixes zu machen). Tatsächlich schaltet 190 nur das 7.Bit aus, das 8. bleibt an. :-\The 7th bit is used to select if Oscillators 1, 2 and 3 are enveloped.The 8th bit is used to select if Oscillators 4 & 5 are half enveloped.bits = 8765 4321192 = 1100 0000Damit hast du die '1','9' und die '2' als Sinuswelle mit den zwei Bits 00.Außerdem:Datenblatt, S.5 - 10Grüße,Michael Quote Link to comment Share on other sites More sharing options...
Rio Posted February 15, 2007 Author Report Share Posted February 15, 2007 ok... ;) jetzt check ichs... mit TransmitByte werden die 3 Zahlen seriell gesendet und (Schlussmarkierung: N) zuerst die 1, 9 und dann dass jeweilige ausgewählte: z.B. 2Damit setzt du natürlich bei jedem senden den Envelope für alle OSC..daraus ergibt sich 1100 0000 -> also wird Saw ausgewählt und Envelope für OSC123 und Half-Envelope für OSC45 gesetzt. ;Dklar dann funktioniert das nicht für Off mit dem einfachen setzen von 0, weil dann 190 gesendet werden und das 10111110 ergibt.. fatal. Die Lösung ist der Ansatz: mit 19x setzt du allein ja schon das jeweilige Envelope. Das heisst, um den envelope zu aktivieren oder nicht, könnte man z.B. eine if-abfrage for dem Senden der beiden Werte (1 und 9) machen ;)ja kann ja mal ausprobiert werden. beste Grüße Rio. Quote Link to comment Share on other sites More sharing options...
audiocommander Posted February 15, 2007 Report Share Posted February 15, 2007 genau :)es gäbe noch die Möglichkeit, den Envelope-Status in einem Bitfeld zu speichern und dann alles in einem Rutsch per IIC_SPEAKJET_Transmit14bit() zu übertragen (die Funktion ist etwas dämlich benannt; hab' ich auch mittlerweile in IIC_SPEAKJET_TransmitNumber() geändert).Diese Funktion nimmt 16bit integer, wandelt diese mit Hilfe von MIOS_HLP_Dec2BCD in einzelne binary coded digits und sendet die als ASCII-Chars, also quasi die Herzfunktion des Ganzen; z.B. in:123 out:'1','2','3').Wäre wahrscheinlich die eleganteste Lösung und man hätte gleich alles in einer Variable gespeichert...Ich wüßte grade nur nicht, wie sich ein Toggle() Knopf verhält, wenn man die Wellenformen durchschaltet (gäbe dann ja eine Menge Optionen mehr)beste Grüße auch,Michael Quote Link to comment Share on other sites More sharing options...
Rio Posted February 16, 2007 Author Report Share Posted February 16, 2007 ja das muss getestet werden.. danke für die Info mit Transmit14bit ;)dann lässt sich sowas wirklich leichter zusammensetzen.Also ich hab für die Synth Ansteuerung eh ein klein wenig was anderes im Kopf. Ich kann das ja mal umsetzen und das dann hier vorstellen (mal schauen wenn ich genug zeit hab ;)) Quote Link to comment Share on other sites More sharing options...
Rio Posted February 26, 2007 Author Report Share Posted February 26, 2007 Hi audiocommander,1. also ich hab jetzt letztes wochenende eine ganze menge an der originalen K-II geändert. Die Änderungen betreffen nur den Synth Bereich, einige Funktionen für die OSCs wurden geändert/angepasst, Env ist getrennt zuschaltbar, CC-List um 2 CCs erweitert)Ich werde das Teil später (aber erst, wenn diese komplett fertig angepasst ist) als eine K-II mod (modified) releasen.Muss ich dazu irgendwas besonderes in der Beschreibung in der Source beachten? - also ich schreibe meine Änderungen zusätzlich mit meinem Namen zu deiner lizenzbedingung mit deinem Namen in die Source, ok?2. Mich interessieren noch kurz 3 Fragen. Würde mich freuen wenn du eine knappe Antwort dazu geben kannst:Kannst du mir kurz beschreiben was der Harmonizer technisch genau macht? (also die Änderungen am OSCs und ENV)Wie funktioniert eigentlich deine OSCSynthese? (ich habe dafür eine andere Funktion für die k2mod implementiert)Wozu gibt es eine OSC Waveform Auswahl?...der Synth hat doch nur eine einzige Waveform.Beste Grüße, Rio. Quote Link to comment Share on other sites More sharing options...
audiocommander Posted February 26, 2007 Report Share Posted February 26, 2007 Hallo Rio,1. klingt gut :)hab' da keine Einwände.Wenn du das releast hast und das sinnvolle Sachen sind, kann ich die auch gerne (natürlich mit Autorenangabe) in neue Releases von mir einbinden...2.a) Der Harmonizer schiebt lediglich bestimmte Noten zurecht. Das hat mit dem OSC/ENV so eigentlich unmittelbar garnichts zu tun, da er rein MIDI-basierend arbeitet.2.b) Die OSC-Synthese ist eigentlich das Interessanteste, da hier aus den 5 Einzel-Oszillatoren ein fünfstimmiger Klang modelliert wird. Kannst ja mal nach "Subtraktiver Synthese" suchen. Das ganze ist in der Fassung, die dir vorliegt noch relativ experimentell. ...im Prinzip werden durch bestimmte Lautstärkenverhältnisse der "Harmonischen" verschiedene Wellenformen gebildet. Kannst ja mal den OSC-Waveform durchschalten und dir das anhören. Im Zusammenspiel mit den ENV-Waveforms ergeben sich ganz neue Klänge.2.c) damit wohl schon beantwortet ;)Grüße,Michael Quote Link to comment Share on other sites More sharing options...
Rio Posted February 26, 2007 Author Report Share Posted February 26, 2007 oki ;)na bei ein paar funktionen sind es verschiedenartige Ansätze. Muss man halt schauen was für beide Applikationen zusammen sinn machen könnte... ansonsten würde ich sagen stehen die beiden Applikationen für den jeweiligen Zweck explizit zur Verfügung. Bei mir kommt ja noch das Modul für eine Tastatur-Ansteuerung mit hinzu, für das ja einige Änderungen in deiner K2 für die K2mod vorgenommen wurden..)Beste Grüße, Rio. Quote Link to comment Share on other sites More sharing options...
Rio Posted February 27, 2007 Author Report Share Posted February 27, 2007 Jo die Harmonizer funktion ist sehr brauchbar ;) und deine OSC Subtraktiver Synthese wird auch mit in der K2mod aktivierbar sein ;) Damit sind dann alle deine Spezial Synth-Funktionen ebenfalls mit enthalten...hab die beiden sachen gestern nochmal getestet. Quote Link to comment Share on other sites More sharing options...
seppoman Posted February 27, 2007 Report Share Posted February 27, 2007 Hallo ihr zwei,ich habe zwar bisher keinen SJ und werde so schnell auch keinen kaufen, trotzdem aber ein kleiner Beitrag zur Qualitätssicherung:Ich würde wenn irgend möglich empfehlen, dieses Projekt nicht in mehrere Release-Stränge zu zerpflücken. Selbst wenn das gelegentlich Kompromisse bedingt, aber der SJ ist sowieso schon eher ein Seitenprojekt hier auf ucapps, und wenn sich Newbies dafür interessieren und dann mehrere verschiedene Software-Versionen zur Auswahl finden, dann ist das eher verwirrend als nützlich.Viele Grüße,Seppoman Quote Link to comment Share on other sites More sharing options...
Rio Posted February 27, 2007 Author Report Share Posted February 27, 2007 jo, kommt drauf an, ob audiocommander die sachen, die ich geändert habe später eventuell integriert...(ist natürlich seine Entscheidung ;) und dazu muss er die Änderungen auch erstmal sehen) Da ich einige Parameter getrennter am SpeakJet kontrollieren möchte, sind die gemachten Änderungen Grundlage dafür. Als zusätzliches Modul kommt bei mir ja noch eine C64 Keyboard ansteuerung mit hinzu.. ;D welche mit diesen Parametern via MIDI IN interagiert.Ich muss erstmal die K2mod zuende entwicklen, meine Änderungen dokumentieren und die K2mod veröffentlichen .. dann kann man weitersehen.Anderseits ist es natürlich jedem überlassen, welche Applikation er für seine Zwecke nutzt :) Die Hauptapplikation ist die K2. Meine Version ist ja eine modifizierung der K2 - darum K2mod. Eventuell hat das eine sein vorteil, das andere sein nachteil. Damit es darüber kein Streit gibt, sind zwei Releases eventuell vorab nicht verkehrt.. man muss halt schauenIm Großen und ganzen möchte ich mich hiermit auch gleichzeitig für die riesige Vorarbeit von AudioCommander bedanken.Beste Grüße, Rio. Quote Link to comment Share on other sites More sharing options...
audiocommander Posted February 27, 2007 Report Share Posted February 27, 2007 Ich würde wenn irgend möglich empfehlen, dieses Projekt nicht in mehrere Release-Stränge zu zerpflücken. ja, stimmt!Rio: Du könntest ja einfach mal hier schreiben, was du alles geändert hast, dann kann ich sagen, ob ich das übernehmen würde.Der ENV An-/Aus ist ja in jedem Fall klar (hab' ich schon zugesagt). Was den Rest anbelangt, klingt es ja (noch) recht geheimnisvoll ;)Also: lass mal raus; der Moment ist günstig: Wie schon öfters angedeutet, steht mein 2. Release bevor, das tatsächlich eine markante Weiterentwicklung darstellt. Ich habe hauptsächlich an der Sprachausgabe gearbeitet, also sehe ich keinen Grund, warum man nicht deine Arbeit an der Synthie-Sektion einfließen lassen sollte; im Gegenteil! Und ehrlich gesagt, weiß ich nicht, wer sich ein olles Projekt baut, wenn das neuere eine ziemlich coole SensorMatrix mit dran hat.Im Grunde veröffentliche ich ja deshalb auch meinen Quellcode, damit das Projekt wächst und cooler wird :)Grüße,ac Quote Link to comment Share on other sites More sharing options...
Rio Posted February 27, 2007 Author Report Share Posted February 27, 2007 ok ;D ...also mal schauen ob du enttäuscht bist oder nicht (mir fallen natürlich jetzt nicht alle Änderungen ein, darum möchte ich die woche noch nutzen den rest fertig zu implementieren (denn dann bin ich damit fertig) und dann erstmal die Sourcen hier offenzu legen)1. Problem Knacksen bei Änderungen der OSCs: vorallem bei Volume Änderungen (extrem: an / aus). Bekommt man dann besonders mit wenn der Envelop ausgeschaltet ist. Ist halt schon übel entwickelt das teil ;) aber es gibt wege, das zu umgehen in dem man ein volumenslide vornimmt.. Der Synth wird nicht über das MSA_Stop mehr komplett deaktiviert sondern nur noch über die Volumeslides hörbar gemacht.2. Trennung der Envelops in 3 schritten: 0 = aus, 1 = an für OSC123 und 2 = an für OSC453. Aktivierung des Verschiebens der Tonhöhe des Envelops (für gespielte Noten) duch ein CC command, bei deaktivierung werden die Envelops nicht verschoben. Durch ein CC Wert können diese getrennt durch CCs verschoben werden:Wert*2, Im unteren Bereich Wert*1 um hier die interessanten Schwingungen (vorallem bei Sinus) für den klang auszunutzen) 4. Multimodus... mehrere OSCs können durch CC zugeschaltet (Einstellungen 1,2,3,4,5,6) werden, gibt die Einstellungen der einzel gespielten OSCs in ihren letzten Einstellungen wieder (da kommen dann alle möglichen sound raus) und werden dann relativ zur tonhöhe gespielt. Die 6. einstellung ist die OSCSynthese von AudioCommander). Ein wenig verzögert kann sich im extremfall der Volumeslide, da der sich hier für alle 5 OSC (bei Einstellung 5) berechnet wird. Eventuell wäre hier eine ASM-Routine noch besser aber ich hab jetzt schon das Knacksen in einer angemessenen Geschwindigkeit für alle OSCs gleichzeitig mit guten Resultaten wegbekommen.5. Harmonizer Optionen werden nur bei nutzung für eine gewisse Zeit eingeblendetund eventuell noch ein zwei andere Sachen...fällt mir jetzt auf die schnelle nicht ein. Ich würde sagen schau dir zum ende der Woche einfach mein release an... ein zwei Änderungen an den Envelops und an der Darstellung wollte ich noch vornehmen...Beste Grüße Rio. Quote Link to comment Share on other sites More sharing options...
Rio Posted February 27, 2007 Author Report Share Posted February 27, 2007 zu 2. noch: und 3 = für OSC12345 an! ;D Quote Link to comment Share on other sites More sharing options...
audiocommander Posted February 27, 2007 Report Share Posted February 27, 2007 1. Meinst du mit dem Knacksen die RS232-Befehle, die an den SJ gesendet werden? Die sollten eigentlich nur hörbar sein, wenn die RS232 Verbindung besteht. Wenn du die serielle Verbindung trennst, dürfte nichts mehr zu hören sein (zumindest ist es so bei mir).2. Ist gebongt, wird bei mir implementiert!3. und 4. klingt super!!!5. muss von mir ohnehin überarbeitet werden, da werde ich mir das in jedem Fall mal näher anschauen :)also, alles in allem klingt das nach einer geilen Verbesserung, die zusammen mit der sensorMatrix bestimmt der Rocker wird (mal sehen, ob sich dann auch Seppoman einen baut ;D ...würde zumindest gut zum Vocoder-Telefon passen ;D)lgMichael Quote Link to comment Share on other sites More sharing options...
Rio Posted February 27, 2007 Author Report Share Posted February 27, 2007 ne ich mein das derbe Knacken wenn ein OSC mit großen Volumenänderungen (Sprüngen) angespielt oder losgelassen wird (also sofort Volumen von 0->31 oder 31->0 gespielt wird. also man hört das...Dafür gibt es jetzt Slides in max. Geschwindigkeit (da knackt dann fast nichts mehr)mhh... ach ja der Multimodus halbiert noch mal das Volumen, um nicht die Grenze von 63 zu überschreiten ;DAlso warte noch ein zwei Tage ab.. und ich mach dann noch ein paar soundbeispiele oder so... :) Quote Link to comment Share on other sites More sharing options...
seppoman Posted February 27, 2007 Report Share Posted February 27, 2007 (mal sehen, ob sich dann auch Seppoman einen baut ;D ...würde zumindest gut zum Vocoder-Telefon passen ;D)nur wenn Du mir noch einen Sprachanalyzer programmierst, der das in den Hörer gesprochene direkt auf dem SJ wieder ausgibt 8) :PGruß nach Nömbärch, Thomas Quote Link to comment Share on other sites More sharing options...
audiocommander Posted February 27, 2007 Report Share Posted February 27, 2007 hehe .)ich hab' mir neulich eine Elektor-Zeitschrift "Mikrokontroller" gekauft, in der ein Projekt ist, das durch Analyse von Pfeiftonhöhen – ich glaube bis zu 8 – digitale switches steuert. Auf nem Amtel µC......nur mal so beiläufig erwähnt, falls das jemanden interessiert... ;) Grüße,Michi Quote Link to comment Share on other sites More sharing options...
Rio Posted March 1, 2007 Author Report Share Posted March 1, 2007 Ich bin dabei ein letztes feature zu implementieren...Irgendwie habe ich bei der OSCSynthese noch nen bug für die Wiedergabe des ENV (da schaltet sich aus unerfindlichen Gründen das Rauschen nach einer Weile zu, muss ich mir im detail noch anschauen...) also ich plane mal das wochenende mit ein.Beste Grüße, Rio. Quote Link to comment Share on other sites More sharing options...
Rio Posted March 5, 2007 Author Report Share Posted March 5, 2007 hi audiocommander,also ich wäre dann fast soweit, die modifizierte Applikation erstmal zu veröffentlichen. Ich werde morgen (im Laufe der Woche) bei Userproject und in der Wiki zu "SpeakJet Application Software" (auf deiner Seite) zusätzlich eine Seite zu meinem vorläufigen K2mod + Key64-Modul verlinken.. ;) wäre das ok?Ich habe jetzt nur noch ein riesiges Problem mit der OSCSynthese, womit ich mich das gesamte Wochenende rumgequält habe..Ich weiss nicht woran es liegt, komischerweise spinnt der SpeakJet bei der OSCSynthese, wenn der 1/2 Envelope für OSC4und5 zugeschaltet ist.Bei allen anderen Einstellungen funzt die Funktion einwandfrei.Das fiel bei deiner Applikation ja nicht weiter auf, weil dort immer beide Envelope-Typen zugeschaltet waren. Die MSA_STOP / NOTE_OFF Funktion hatte ja so bei jedem einkommenden MIDI Signal alle Pegel komplett aktiviert / deaktiviert... Komischerweise hatte diese Methode auch wenn der Envelope ausgeschaltet war, dann den Envelope wieder aktiviert.. (das war auch schon so ein komischer seiteneffekt ???)ich fahr ja dort nun einen anderen Weg.....und bei mir fiel dieses wirre Problem nun bei einem bestimmt Frequenzenbereich auf... Wirkungen: der SpeakJet kann zufällig Übersteuerungen hervorufen, die GesamtLautstärke kann sich ändern oder das Rauschen wird einfach aktiviert/deaktiviert usw. ...Jedoch werden die Lautstärkeeinstellung für die einzelnen OSCs durch die for-Schleife wiederum richtig ausgeführt - also es scheint als wenn irgendwas nebenbei am SpeakJet noch passiert... Ich weiss jetzt nicht genau woran es liegt und bin schon fast am verzweifeln. Es kann natürlich sein, dass der Speakjet entweder die Daten zu schnell bekommt und aus den Commandos dann was anderes interpretiert oder der SCP Modus doch einen Buffer für die inkommenden Commandos verwendet und der in der Zeit zu schnell voll ist... (es hängt auf alle fälle mit Envelope 1/2 typ für OSC4 und 5 zusammen)... oder es kann sein das die Baudrate nicht ausreicht oder der SpeakJet mit Envelope 1/2 für OSC 4 und 5 einen Bug hat! Vielleicht hast du noch eine Idee... ich schau heute abend ein letztesmal rein.Ich habe hier die OSCSynthese mal schon Code optimiert (ist wesentlich platzsparender so). Aber es wird hier im vorab keine MSA_STOP / NOTE_OFF ausgeführt wie bisher, sondern nur für die einzelnen OSC-Volumen eingestellt (aus vielerlei gründen). Vielleicht hast du noch eine Erklärung dafür, warum es zu den oben beschriebenen Problem führen kann:const unsigned char of[3][5] = { { 4, 6, 8, 0, 2 }, { 4, 6, 8, 0, 2 }, { 2, 3, 4, 0, 2 } }; const unsigned char oa[3][5] = { { 2, 1, 1,30, 4 }, { 6, 4, 3,30,10 }, {10, 7, 6,30,15 } }; void IIC_SPEAKJET_OSCSynthesis(unsigned char evnt1, unsigned char evnt2) __wparam { // all OSCs, 0..127 unsigned char c, lvl; unsigned int f[9]; // harmonics // determination of frequency harmonics by looking up the table f[0] = freqOfNote[evnt1]; f[1] = f[0] << 1; f[2] = f[0] + f[0]; f[3] = f[0] << 2; f[4] = f[0] + f[2]; f[5] = f[0] << 3; f[6] = f[0] + f[4]; f[7] = f[0] << 4; f[8] = f[0] + f[6]; for (c=0;c<9;c++) if (f[c] > 3999) f[c] = 0; if (env_slide) IIC_SPEAKJET_ENVFreq(evnt1,env_slide); // start transmission IIC_SPEAKJET_TransmitStart(0); IIC_SPEAKJET_SCP_Enter(0, SCP_CTRLTYPE_REGISTER); for (c=5;c>0;c--) { IIC_SPEAKJET_TransmitByte(NUM2ASCII(c)); // select OSC Frq IIC_SPEAKJET_TransmitByte(SCP_MEMADDR); IIC_SPEAKJET_Transmit14bit(f[of[oscsynth_waveshape][c-1]]); IIC_SPEAKJET_TransmitByte(SCP_MEMWRT); IIC_SPEAKJET_TransmitByte('1'); IIC_SPEAKJET_TransmitByte(NUM2ASCII(c)); // select OSC Lvl IIC_SPEAKJET_TransmitByte(SCP_MEMADDR); if (evnt2) IIC_SPEAKJET_Transmit8bit(oa[oscsynth_waveshape][c-1]); else IIC_SPEAKJET_TransmitByte('0'); IIC_SPEAKJET_TransmitByte(SCP_MEMWRT); } // cleanup IIC_SPEAKJET_SCP_Exit(0); // Exit SCP, don't write IIC_SPEAKJET_TransmitStop(); } Quote Link to comment Share on other sites More sharing options...
audiocommander Posted March 5, 2007 Report Share Posted March 5, 2007 Hallo Rio,kurze Antwort, weil ich gerade deine PM erhalten habe. Ich gerade leider keine Zeit genauer darüber zu schauen. Das ganze ist ja auch erst als experimenteller Modus zu verstehen.Du könntest versuchen, Klammern zu setzen, denn eine verschachtelte Arrayanweisung als Parameter kann in SDCC zu Problemen führen:IIC_SPEAKJET_Transmit8bit(oa[oscsynth_waveshape][c-1]); => siehe auch Wiki->MIOS Developer Section->C Tipps & Tricks->SDCC-Bugs.Außerdem ist mir noch ein Fehler von mir aufgefallen: Die Volumen-Settings ergeben mehr als 63 im letzten Waveform-Gebilde (10,7,6,30,15).Ansonsten müsste ich mir das genauer anschauen, nur ein schneller Blick...Wie schon vorher gesagt, fände ich es super, wenn du mir ein wenig Zeit gibst, mal in dein Release zu schauen, bevor du einen Link auf die SpeakJet-Seiten setzt (was auf deiner UserPage passiert ist natürlich vollkommen deine Sache). Denn wenn die Sachen soweit sinnvoll sind (wovon ich zum jetzigen Zeitpunkt ausgehe) würde ich das einfach mit in das nächste "offizielle" Release aufnehmen, das ohnehin kurz vor VÖ steht. Wie das Seppoman auch schon vorgeschlagen hat: nur nichts verkomplizieren und wenn's geht keine keine Absplittungen.Natürlich kriegst du Credits, versteht sich ja ;)Grüße,Michael Quote Link to comment Share on other sites More sharing options...
audiocommander Posted March 5, 2007 Report Share Posted March 5, 2007 Nachtrag:spinnt der SpeakJet bei der OSCSynthese, wenn der 1/2 Envelope für OSC4und5 zugeschaltet ist. (...)Das fiel bei deiner Applikation ja nicht weiter auf, weil dort immer beide Envelope-Typen zugeschaltet warenDas verstehe ich nicht: wenn die bei mir immer zugeschaltet waren, warum geht das jetzt nicht mehr, wenn beide zugeschaltet sind? Oder meinst du der Fehler tritt nur auf, wenn ausschließlich der 1/2 Env f. OSC4/5 an ist und ENV f. OSCs1-3 aus sind?Wenn ja, kann es am Code für die entspr. Einstellung liegen?Wenn nein: was passiert, wenn mein Original-Code verwendet wird?Hat das mit dem Note-Release-Code zu tun, den du entfernt/ersetzt hast? Quote Link to comment Share on other sites More sharing options...
Rio Posted March 6, 2007 Author Report Share Posted March 6, 2007 Also ich hab erstmal den Bug soweit lokalisiert:Es hängt tatsächlich daran, wenn das 1/2Envelope Bit am SpeakJet gesetzt ist, und tritt auch bei allen anderen Funktionen auf, wo die OSC4und5 dann gespielt werden (also nicht nur bei der OSCSynthese). Unklar ist mir nur warum?? Vorallem tritt das erst in Frequenzen auf, höher als 1500Hz... und ja es tritt sowohl auf wenn das Envelope für OSC123 gesetzt oder nicht gesetzt ist. Ist jedoch das Envelope für OSC123 alleine gesetzt gibt es überhaupt keine Probleme!Kann es sich hierbei um ein zeitkritisches Problem am SpeakJet handeln, da ja hier die Tonhöhe für das Envelope, für die OSCs und für das 1/2 Envelope gesetzt wird? Also ich hab mal im Phraselator wie ein wilder an den OSC4 und 5 Einstellungen rumgedreht.. da tritt das Problem nicht auf (da kann ich aber nicht alle einstellungen zur gleichen zeit verändern). Ist vielleicht die Baudrate zu gering? Mit welcher Baudrate wird per MIDI am SpeakJet kommuniziert (19200 oder 9600 (Std))?=> siehe auch Wiki->MIOS Developer Section->C Tipps & Tricks->SDCC-Bugs ..hab ich mir angeschaut - alles probiert - alles ist beim alten geblieben - keine Änderung des Problems!Außerdem ist mir noch ein Fehler von mir aufgefallen: Die Volumen-Settings ergeben mehr als 63 im letzten Waveform-Gebilde (10,7,6,30,15).nein. Die Volumen Begrenzung ist nur relevant für die OSC123 und nicht für OSC45! somit ist das ok in dem Array..sonst hätte ich das aber auch schon tierisch knacken hören müssen...Wenn nein: was passiert, wenn mein Original-Code verwendet wird?Hat das mit dem Note-Release-Code zu tun, den du entfernt/ersetzt hast?naja bei deiner Sache, waren ja beide Envelope-Typen immer an und es wird ja bei jedem neuen Anschlag MSA_STOP ausgeführt OSCs komplett ausgeblendet und dann wieder aktiviert... (das hatte jedoch zum teil auch zum Knacksen beim Anspielen beigetragen) - ich habe mal das Envelope in deinem Code deaktiviert und siehe da es wird einfach von geisterhand wieder aktiviert nach ner weile... - war also genauso unklar - hab ich auch nicht verstanden, auf jeden fall hat es den Envelope nicht seperat behandelt.Sollten wir das Problem nicht irgendwie determiniert kriegen, würde ich sagen belassen wir es erstmal für ein Release auf:Envelope an und Envelope aus für OSC123. (Env für 4 und 5 wird vernachlässigt...)Wie schon vorher gesagt, fände ich es super, wenn du mir ein wenig Zeit gibst, mal in dein Release zu schauen, bevor du einen Link auf die SpeakJet-Seiten setzt (was auf deiner UserPage passiert ist natürlich vollkommen deine Sache). Denn wenn die Sachen soweit sinnvoll sind (wovon ich zum jetzigen Zeitpunkt ausgehe) würde ich das einfach mit in das nächste "offizielle" Release aufnehmen, das ohnehin kurz vor VÖ steht. Wie das Seppoman auch schon vorgeschlagen hat: nur nichts verkomplizieren und wenn's geht keine keine Absplittungen.jo na dann schick ich dir das mal per mail vorab. Ich kann ja mal einen Artikel zu meinem gesamten Projekt (Bilder), den Erweiterungen in der K2 und mit ein paar soundbeispielen auf meine Userpage in der Dokuwiki reinsetzen. Ich muss nur noch heute noch das wichtigste durchkommentieren ;)Beste Grüße, Rio. Quote Link to comment Share on other sites More sharing options...
Rio Posted March 6, 2007 Author Report Share Posted March 6, 2007 ok hier mal ein paar impressionen, wie denn die Änderungen am Speakjet direkt klingen ;D:k2mod1.mp3k2mod2.mp3k2mod4.mp3 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.