
audiocommander
Frequent Writer-
Posts
1,358 -
Joined
-
Last visited
Content Type
Profiles
Forums
Blogs
Gallery
Everything posted by audiocommander
-
hello jeb, look for the midi-clock (mclock) project at the download section. It contains all you need for the timing. and just one topic before there's one with exactly the same question: http://www.midibox.org/forum/index.php?topic=8513.0 regards, Michael
-
öhm...
-
well, theoretically you can. there are two ways for that: 1. a hacked install; some approaches to that should be still around, though I don't know if that's really a nice thing to do. 2. darwin is open source. it's the underlying *nix without the aqua-gui and w/o all the other nice (Core-)stuff; but there is also openStep that has most of the cocoa frameworks adapted. Probably a bit outdated... 3. * but both approaches are only for the hackers, that like to dig deep... not really my cup of tea :) it's my believe though, that macs are so stable because of the overviewable available hardware. probably that's why windows is so unstable. once you got one bad driver it might all become quirky :-\ I made once the error to buy a product of one of the first available product lines ;) I wouldn't do it again. And remember that the Intels are out for just one year. The last machines I saw were all pretty stable and not really hotter than my ppc powerbook. but anyway, kris is right, that should not become a mac vs. win debate. I wouldn't like it if all current 95% win users would become mac users, this surely wouldn't be the solution that's politically more correct... yeah, Ardour is quite nice. There's also Rosegarden for Midi stuff... And there's been a topic recently here about audio production environments. There were quite some links to really interesting linux-music-distributions. Cheers, Michael *Edit: Just stubled over one more: http://mac-on-linux.sourceforge.net ;)
-
I experienced the same thing when I once discovered that my super-slow notebook with XP was in fact a hell lot faster than my older w2k computer if I did retouches in Photoshop; but when working with the explorer it was much slower than my w2k desktop PC. Then the discussions about Longhorn came around and all that stuff about DRM, TCPA / "trusted computing", software-activation for operating systems(!), os-updates need previous installed versions(how crappy is that!), restricted amounts of installs, white- and blacklist by microsoft, disabling of burning-/grabbing-software by copyprotection-mechanisms... and there were discussions going on about new copyrights in germany, and first plans about logging all communication actions (both are now law, said but true). This is not about personal taste anymore. It has become a political decision! I mean, how can anyone be so short-sighted to piss on one's digital rights and finance the richest man of the world, just to play another idiotic shooting game that requires DirectX10? And there are no alternatives? I discovered there are more alternatives than you can count. I decided to go for a mac, 'cause I love it's simplicity (well I guess apparently ;D). Apple has been one of the few companies not being a member of the TCPA Consortium. There are no OS activations and for most apple programs you don't even need to enter a serial number. But there are enough other OSses around, Linux has made great progress; and I'm keeping an eye on Ubuntu. I don't believe in all that "I desperately need this or that application". In the *nix world there are alternatives for nearly any program. I don't know anyone, nor have I ever heard about anyone who ever felt sorry about switching and turning one's back to windows. Never! ;) Regards, Michael
-
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
-
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. :-\ 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
-
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
-
Es gibt nicht mehrere Envelopes, sondern nur einen. Ich glaube, jetzt wäre der passende Moment, dass Du Dir nochmal das Datenblatt des SpeakJets durchliest und das zugrundeliegende Funktionsprinzip des Chips anschaust. Meine Anwendung ist kein Zaubermittel das aus dem SpeakJet einen multitimbralen GSM Synthie macht :-\ Edit zum Edit: Ich habe das Gefühl, dass wir uns hier im Kreis drehen. Wenn in den letzten Postings, für die ich heute schon über eine Stunde aufgebracht habe, keine ersichtliche Antwort dabei war: die Quellen sind veröffentlicht, du kannst gerne deinen eigenen Code schreiben. ;) noch ein Hint: wenn der Envelope auf 0 Hz steht, hörst du gar nichts. Und bitte schau doch jetzt mal in das Datenblatt. Da steht das nämlich. und ein letzter Hint: du kannst auch in meiner Anwendung die Env-Frequenz getrennt von der OSC-Frequenz einstellen (deshalb gibt es ja die CC-Controls).
-
Also nochmal: CH 1-10: Stimm-/FX-Ausgabe CH 11 bis 15: OSCs 1-5 CH 16: Multi-Mode für alle OSCs die CC's funktionieren Channel-übergreifend, d.h. CC#111 macht auf CH1 das gleiche wie auf CH12! - mit dem ControlChange der OSC-Frequenc für die OSCs 1 bis 5 manipulierst du direkt die Frequenz des betreffenden Oszillators! - mit einem Tastendruck im Synth-Mode (CH 11-15) passiert genau das gleiche: der OSC wird auf die Frequenz der Tonhöhe eingestellt. Warum sollte jetzt, wenn du die Taste loslässt, der zuletzt eingestellte CC Wert wieder kommen? Ist doch total unlogisch. Der zuletzt eingestellte Wert war der der Taste. (Klar kannst du das einprogrammieren, gerne, mir ist jedoch schleierhaft, warum du das möchtest?!) Die Möglichkeit OSC-Frequenzen per CC einzustellen ist kein Filter oder Effekt, das ist die Basis-Frequenz des Oszillators! Wenn du das veränderst, veränderst du die zugrundeliegende Basis der Tonerzeugung. Und der OSC behält halt einfach die zuletzt wiedergegebene Frequenz. Ob die Eingabe per CC oder per NoteON/OFF erfolgt ist unrelevant. Im übrigen verhält sich der SJ Chip nach dem gleichen Prinzip: Wenn ein Sound per MSA getriggert wird, bleiben alle OSCs und der ENV in der Position der letzten Spracherzeugung. Also dann sind deine letzten CC-Werte auch weg :-\ ?? Mit anderen Worten: wenn du unbedingt die letzte OSC-Frequenz /-Lautstärke, die per CC kam, behalten willst, dann darfst du halt keine Klaviatur-Taste drücken; das ist ja das gleiche also ob du den CC-Schieber veränderst?! Edit: Die Hex-Datei ist exakt 29.376 Bytes groß (= 32kB) Ich dachte, du meinst die SYX-Datei, denn die wird ja übertragen. Und die ist in dieser Version 13.024 Bytes (=16 kB) groß. (Hab ich im letzten Posting auch durcheinander gebracht ;)... Also hier scheint alles in Ordnung zu sein.
-
Hallo Rio, 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, 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. 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. Das kannst du auch! [u]1. Via "so ist es gedacht":[/u] 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!). [u]2. Via Code:[/u] 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: - IIC_SPEAKJET.h/.c Kernfunktionen des Speakjet - main.h/.c Beispielhafte Implementation und MIDI-Control des SJ 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
-
Um genau zu sein, ist das kein Problem von meiner Anwendung, sondern vom SpeakJet. Beim NoteOff wird ein 5 byte langes SCP Kommando gesendet, das die Aussprache stoppt und den Input-Buffer freimacht. Wenn alles ein wenig zu schnell geht, kann ein Ton stehen bleiben. Nachdem die NOTE_OFF Funktion aber eh' kein Killer-Feature ist, kann man das halt abschalten. Aber wie gesagt, bei normalem Gebrauch tritt das ziemlich selten auf und die Möglichkeit die Sounds zu verkürzen fand ich sehr sinnvoll, deshalb hab ich's angelassen.
-
Hallo Rio, nachdem ich im Augenblick überhaupt keine Zeit habe und wenn einige Minuten frei sind, ich mit der Entwicklung der nächsten kII -Version beschäftigt bin, die schon ziemlich weit fortgeschritten ist, kann ich das für das nächste Release einplanen. Ansonsten musst du das bitte im Augenblick selbst probieren, da es mir im Augenblick einfach zu viel Zeit kosten würde, die alte Version rauszukramen, zu ändern, zu kompilieren und zu testen. Es ist ja an sich nichts komplexes, schau dir doch einfach mal die betreffenden Stellen (wie schon erwähnt in main.c, MPROC_Notify) an: // parse channels switch(channel) { case SJCH_SOUNDCODES: if(evnt2 > 0) { IIC_SPEAKJET_MSA_Soundcode(evnt1); } else if( (evnt2 == 0) && (evnt1 == lastNoteDown[channel]) ) { IIC_SPEAKJET_MSA_Stop(); } break; case SJCH_ALLOPHONES: if(evnt2 > 0) { IIC_SPEAKJET_MSA_Allophone(evnt1); } else if( (evnt2 == 0) && (evnt1 == lastNoteDown[channel]) ) { IIC_SPEAKJET_MSA_Stop(); } break; case SJCH_FX: if(evnt2 > 0) { IIC_SPEAKJET_MSA_FX(evnt1); } else if( (evnt2 == 0) && (evnt1 == lastNoteDown[channel]) ) { IIC_SPEAKJET_MSA_Stop(); } break; case SJCH_PERCUSSIVE: if(evnt2 > 0) { IIC_SPEAKJET_MSA_Percussive(evnt1); } else if( (evnt2 == 0) && (evnt1 == lastNoteDown[channel]) ) { IIC_SPEAKJET_MSA_Stop(); } break; [/code] Du muss eigentlich nur den [tt]"else if { MSA_Stop() }"[/tt] teil bei den spracherzeugenden Funktionen auskommentieren. Darauf komplett zu verzichten ist nicht sinnvoll, weil es für den Synthie-Modus auch gilt. Außerdem macht es wohl keinen Sinn dieses eine Feature extra zu releasen, da es eine riesige Menge an unterschiedlichen Kompilierungsoptionen gibt. Wenn ich da alles Kombis (mit/ohne LCD, versch. LCD größen, etc, etc... einfach mal in die #define sektionen reinschauen) durchkompiliere werd' ich glaub' ich wahnsinnig... Anders sieht es aus, wenn es deine Applikation mal gibt und die funzt, dann kann ich gerne verschiedene hexes zur Verfügung stellen. v.Grüße, Michael
-
two more questions: - are you using a DOUT board from Mike's or SmashTV? The reason I ask is, because SmashTV's boards have the pin numbers printed on and (IMHO) are therefore easier to handle - do you know the debug-function of MIOSStudio? you can send DOUT_PinSet1(pin) from the debug window to test what pin has what number (actually) Best regards, Michael
-
simple answer: no. 2 AIN-modules per Core only. Regards, Michael
-
The wiki and the forum are hosted and paid by Twin-X. So I'd also love to see some of the money going to him. I don't think he gets that much donations. I think putting up a page on the wiki is an excellent idea, because (as wilba said) there will be lots of new galleries and impressions and that's what I really like about it ;) regards, Michael
-
In fact, there is already a button at the end of the posts page (REPLY | NOTIFY | ADD POLL | SEND THIS TOPIC | PRINT) ;D And if there are different categories, IMHO one "best midibox song" should also be nominated! :) Cheers, Michael
-
I did: and if you're stuck please try to follow my other advices first, esp. that one looking at the example codes at the c-section of ucapps: http://www.ucapps.de/mios_c.html => sending midi events on button movements (the doc headline fits better: Send Note Events on digital input changes)
-
Hi matrigs, you need a local variable. For example: unsigned char shift; // now you have to increment the shift var at the DIN_Notify() function like this // shift can be 0 (0-7), 1 (8-15) or 2 (16-23) shift++; if(shift > 2) { shift = 0; } // now at the AIN_Notify() or ENC_Notify() get the CC number like this: unsigned char cc = (shift << 3) + enc_num; a left bitshift (<<)* is nothing else than a multiplication with 2; so x<<3 is a multiplication with 2 for 3 times. so 1<<1=2, 2<<1=4, 6<<1=12, 1<<6=64. a right bitshift (>>) is the same but only division with 2. You might also take a look at a basic C book (there are plenty of online resources) and look into the code examples from the c section! Best regards, Michael * don't mix it up with the logical expression "is smaller than" (<)
-
Hm, good points said here. I, too, think that it's difficult/dangerous to duplicate information (which gets problematic if something changes); and therefore links/quotes to/from ucapps.de are better than copies. Besides the missing menu for the Wiki (which is problematic in my eyes, 'cause the trace is only showing places where one has already been and that's not really useful in most cases ;) – isn't there a menu plugin that could be used?), we need to resolve and merge lots of spreaded pages. For example: search for LCD on the wiki and you'll see what I mean if you look at the pagename-results! also the namespaces are not really useful (including my own ;D ) so that inter-article linking is not that intuitive as it should be => http://www.midibox.org/dokuwiki/doku.php?id=ain see what I mean? To give an example of the problem: where does the LCD belong to? is it a part? a module? what about software debugging? I'd say it's a module – including the links to captain hastings G/CLCD tools! but there are surely other opinions out there! IMHO that's the main pain in the arse and the reason why noone finds a thing. So organisation and structure is most needed for the wiki. Especially if I think back how it was when I was a newbie: I found it really hard to distinguish between hardware modules and available applications, 'cause you're overwhelmed with all the AINx4 OPL3 MB64 MB64/e MB16 SHX HAL2000 CIA FBI THC... IMHO the projects/modules/application section of the wiki got really improved over the last months. At least I think a newbie can easily grasp what to look out for. Not sure about the rest (links, intros, tipps & tricks, tools & helpers) though There are some great tutorials waiting to be discovered in the depths of our Wiki... ;D I always wanted to develop some icons, I think that would be great for the wiki-home, but unfortunately I never found time for that :-\ so long post, short content: a lot to do and so little time ;) Cheers, Michael
-
uh, yeah, especially the website(s) :-X :-\ seldomly seen such ugly pages these days... to be honest, I'm not wondering why they (have to?) sell it so cheap... (with regards, I'm only referring to the design not to technical aspects ;) ) Cheers, Michael
-
Hi, you could take a look to the Wiki, there's a floorboard project linked; I think that might be just what you're looking for ;) Cheers, Michael
-
You can take a look at TK's mClock example. It shows pretty well how to deal with timed events. Regards, Michael
-
oh, and btw: do you know http://www.spamgourmet.com/ ? I'm using this for a while now since I can't use my own specialized addresses without hassle anymore and I really like this service :) If, for example, you register with the name johnsmith and enter your normal email address at spamgourmet, then your basic spamgourmet address is johnsmith @ spamgourmet.com and messages get forwarded to your normal pop account. Now you want to download a driver from microsoft, but are forced to register, you simply choose the address microsoft.10.johnsmith@spamgourmet.com and you get exactly 10 messages forwarded from spamgourmet and will never hear again from m$ them after the 10th mail ;D Of course you might also type microsoft.1.johnsmith@spamgourmet.com and you only get a single mail ;) Cheers, Michael
-
haha, welcome to the club :) I experienced this some months ago and I'm really sorry to say this: the only help for me was to disable the catchall and to set up a hundred forwarders, 'cause I also used an emailing-address system where I could track down the filthy mail-traders*. But apparently there are so many idiots clicking on "I'm not there, address is wrong" buttons in their mail proggies and amateur-admins setting up bouncers, that this becomes a huge problem, 'cause the spam is answered with spam to the wrong senders. I don't think you will get blacklisted or sued, 'cause anyone can send mail with faked addresses and IMHO that's the case here (there are even some anonymous mailer programs in the internet... though to the ones that want to use this: you're not anonymous, if you don't know exactly how to use these ;) ) I remember that time when there have been these ugly Nazi-Virus mails around with faked sender-addresses. That's been really disgusting. :( I whish a nice anti-catchup-forwarding-typing-session ;D hehe... Cheers! Michael * I have to admit that 99% haven't given away my address. And I guess the 1% where I got spam are virus-victims that got their address-book robbed...