Jump to content

SpeakJet Board und Applikation


Rio
 Share

Recommended Posts

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

Link to comment
Share on other sites

  • Replies 70
  • Created
  • Last Reply

Top Posters In This Topic

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.

Link to comment
Share on other sites

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 4321

192 = 1100 0000

Damit hast du die '1','9' und die '2' als Sinuswelle mit den zwei Bits 00.

Außerdem:

Datenblatt, S.5 - 10

Grüße,

Michael

Link to comment
Share on other sites

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. 2

Damit 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.  ;D

klar 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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 ;))

Link to comment
Share on other sites

  • 2 weeks later...

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 schauen

Im Großen und ganzen möchte ich mich hiermit auch gleichzeitig für die riesige Vorarbeit von AudioCommander bedanken.

Beste Grüße, Rio.

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 OSC45

3. 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 eingeblendet

und 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.

Link to comment
Share on other sites

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)

lg

Michael

Link to comment
Share on other sites

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 ;D

Also warte noch ein zwei Tage ab.. und ich mach dann noch ein paar soundbeispiele oder so...  :)

Link to comment
Share on other sites

(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)  :P

Gruß nach Nömbärch, Thomas

Link to comment
Share on other sites

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... ;)

    hijack.gif

Grüße,

Michi

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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();
}

 

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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 waren

Das 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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share


×
×
  • Create New...