
audiocommander
Frequent Writer-
Posts
1,358 -
Joined
-
Last visited
Content Type
Profiles
Forums
Blogs
Gallery
Everything posted by audiocommander
-
Speakjet - A PIC ready sound chip?
audiocommander replied to herr_prof's topic in MIDIbox User Projects
that sounds very promising :) ...although I don't think we can get rid of the PIC16 controller as long as the chip does not support IIC (or I2C) or MIDI; the page sais Soundgin is controlled by a 2400 or 9600 Baud Serial Connection? Cheers, AC Edit: is your SJ working again, Justin? -
lowest cost DIY illuminated button - the challenge continues...
audiocommander replied to ilmenator's topic in Tips & Tricks
very tricky ;D I like that! -
I'm about to decide if I'm going into silkscreening, because if I had the stuff available, there are lots of other possibilities how to use it (T-Shirts, CDs, Artworks, Cups, Merchandising, MidiBox-Shawls ;D )... Another one of my favorites is working with stamps... You get a (simple wooden) stamp with your own motive for about 5 to 10 EUR, and there are some stamps that you can setup with letters... but maybe this is more for the [EXPORT GOODS] look... One more idea: plotted foils (with a cut-plotter): it is available in sticky and very sticky; I know the font-sizes are restricted and it's hell removing the unused outer parts of a tiny plot's foil without damaging the foil that should be used... :-\ ...but if you'll do this by yourself (I mean removing the overhead-foil), I'm sure this isn't too expensive. I started working with translucent plexi; cut my own holes and you can always stick anything from behind... I scratch the parts that should be opaque with sandpaper – and can then put any other material above or underneath (I'll post pics of my new sensorizer next week when I'm back from a gig)! But I think silkscreening may really be the most professional looking option. Besides you can lay it out in an computer-program... I don't think that it's toooo expensive if you go to a printing house near you :) Cheers, Michael
-
DIN Buttons problem on my SID please help!! (Renamed)
audiocommander replied to dcer10's topic in MIDIbox SID
Hey, that's great news! :D I've had an issue with a SpeakJet prototype board; soldered it one week and then connected it to a Core that was working fine (seemed to me obviously because I'd used it before)... nothing was functioning as expected and it took me about two weeks until I discovered that there was a wrong connection on the Core! I just never found that error, because I've never been using IIC before – Nevertheless I have been so convinced that the error couldn't be on the Core that this irrational assumption brought me two sleepless weeks ::) What I want to say is: don't let yourself distract from the fact "it was working before"; maybe the error is hiding exactly there where you're not looking - for whatever reason - ;D Cheers, AC Edit: the regulator can become hot, but running only a Core, LCD and LTC it shouldn't become VERY hot! This indicates there is still something crappy around... try it without LTC, just Core and LCD, maybe you can track the error down to the Core ;D hehe... -
also, C für PICs ist eigentlich nur C ohne irgendwas anderes dazu; mit bitoperatoren muss man sich allerdings erst mal anfreunden, um multiplikationen/divisionen großräumig umgehen zu können... ansonsten kann ich nur empfehlen, das mf-(motorfader)-programm anzuschauen, das ist komplett in C-geschrieben..., ein Blick ins applicationDev im Wiki schadet auch nichts: http://www.midibox.org/dokuwiki/doku.php?id=application_development ...dort findest du auch nochmal die ganzen pin-tabellen, um einzelne pins in C ansprechen zu können (was du wahrscheinlich brauchst)... ansonsten ist es eigentlich recht einfach, aber man muss höllenmäßig konzentriert sein und möglichst alles doppelt und dreifach nach buffer-overflows (zu kleine variablentypen, evtl. volatiles verwenden) abzusuchen... Grüße, ac ps: bei Galileo gibt's ein super OpenBook über C (html) zum schnellen Nachlesen: http://www.galileocomputing.de/openbook/c_von_a_bis_z/
-
Hi Rowan, please take a look into the Wiki to learn about Midi; this page is currenly in a quite excellent status :) http://www.midibox.org/dokuwiki/doku.php?id=midi_specification then you'll know, why your MIDI-In MPROC is never ever been reached (hint: you're checking evnt1!!) for the DIN_Notification: you'll have to exchange the numbers of the #defines before, of course! if you have a START and STOP button on pin 0 and pin 3 of your DIN, its: #define DIN_BUTTON_START 0 #define DIN_BUTTON_STOP 3 or else: if you got a button that rolls you a cigarrete on pin 24 it's: #define ROLL_MY_CIGARETTE 24 okay? The Init() should work, I don't know why you say it isn't working... are the pin-numbers correct? Maybe you could try the other call: MIOS_DOUT_PinSet1(pin) and MIOS_DOUT_PinSet0(pin)? (but I don't think this changes something, both calls should be fine)... You could experiment setting DOUTs also within MIOSStudio... have you found the "Debug" Window where you can call MIOS-Functions? Just select MIOS_DOUT_PinSet1(pin) and set your pin-number as argument (can't remeber, should be param1 or wreg...) Cheers, Michael Edit: you might also wanna take a look at the midi-overview table: http://www.midi.org/about-midi/table2.shtml
-
Rowan, - you get the state of the LED by calling MIOS_DOUT_PinGet(pin) aka DIN; - adding an additional function means that the processing time will be slightly (slighty) increased (probably not in your case, but in general!), so there should be a good reason, why? - as your case statement doesn't mix up the different calls (MIDI/DIN), there's no need, why the case-statement is processed every time when a Midi-Input Event occurs and vice versa; #define MIDI_NOTE_ON 0x90 // 144, on CH1 #define MIDI_NOTE_OFF 0x80 // 128, on CH1 #define DIN_BUTTON_START 5 #define DIN_BUTTON_STOP 7 // on INIT MIOS_DOUT_PinSet(0,0); MIOS_DOUT_PinSet(1,1); ---------------------------------------------------------------- // on NOTIFY_MIDI (MPROC) switch(evnt1) { case MIDI_NOTE_ON: // Note on received if(evnt0 == 0x90) { MIOS_DOUT_PinSet(0,1); //LED 1 On MIOS_DOUT_PinSet(1,0); //LED 2 Off } break; case MIDI_NOTE_OFF: //Note off is received if(evnt2 == 0x00 || evnt2 == 0x80) { MIOS_DOUT_PinSet(0,0); //LED 1 Off MIOS_DOUT_PinSet(1,1); //LED 2 On } break; } ---------------------------------------------------------------- // on NOTIFY_DIN switch(pin) { case DIN_BUTTON_START: // Clip Start button pressed (core sends note on) if(MIOS_DIN_PinGET(0) == 0) { //LED 1 Flashing //LED 2 On } break; case DIN_BUTTON_STOP: // Clip stop button pressed (core sends note on) if(MIOS_DIN_PinGET(1) == 0) { // LED 1 On // LED 2 Flashing } break; } avoid unnecessary switches, ifs or functions unless you have a reason to do so. Cheers, Michael Edit: added #defines; they make your code more readable and just exchange an expression before generating the machine-code
-
you're welcome Rowan :) as soon as you get the whole picture and get used to programming, you'll surely enjoy it. It's like solving a crossword puzzle by pure logic... no. every function is a space of its own. just write two separated switch() or if() blocks. as they don't interact with each other anyway, it makes no difference. and it's good programming practice to separate things and sort them. that's one huge part of what programming is about ;) best regards, Michael
-
keine Ahnung wo die Dateieindungen ein-/ausgeblendet werden. Das ist bei jeder WIN-Ausgabe woanders versteckt ::)... ich weiß nur noch, dass es "Endungen bekannter Dateitypen ausblenden" heißt (oder so ähnlich) und sollte irgenwo unter "Erweitert" oder "Einstellungen" in der Menüleiste eines Explorer-Fensters zu finden sein... oder in einem anderen der 3500 verschachtelten Dialogfelder (sorry, bin Mac-User, deshalb leicht überheblich in diesen Dingen ;D ) also, die Anweisungen hier: http://www.midibox.org/mios_studio/ besagen: - Java installieren JRE 5.0: http://java.sun.com/j2se/1.5.0/download.jsp - Datei laden: MIOSStudio_xxx.jar (und NICHT .zip!) http://www.midibox.org/forum/index.php?topic=7238.0 - datei doppelt klicken - wenn das nicht funzt: DOS-Prompt öffnen und tippen: [tt]java -jar path_and_name_of_jar_file[/tt] wobei "path_and_name_of_jar_file" natürlich den Pfad zu der .jar Datei sein sollte, also z.B. sowas wie "C:\Programme\MIOSStudio_beta7_4.jar"
-
nicht .jav sondern .jar ;) ...und außerdem musst du evtl. sicherstellen, dass die Dateieindungen auch angezeigt werden; nicht dass du sonst eine MIOSStudio_beta7_4.jar.zip hast... evtl. kannst du die Anwendung auch starten, wenn du "öffnen mit" und dann sowas wie "jar launcher" oder so anklickst (meine olle Windows-Kiste ist aus, deshalb nur ungefähre ca. Angaben :))
-
this seems like a good musical point :) if the input is random-based, this will make no difference... but on the other hand, if the input is well thought out (composed), this might be an issue; Cheers, Michael
-
yeah! :) now you just have to take care, that you don't mix up the places where these scripts get. Take a look at the skeleton. You'll find one function that receives MIDI-messages and another one that receives changes at the DIN-ports. That means, you can't mix up your logic for MIDI-, DIN- and AIN-Events. isn't that difficult, is it? Cheers, ac.
-
Hi Rowan, you're halfway there :) the thing with the switch() is, that you can just evaluate the truth of a setting. that means TransLEDHandler cannot be (S0 > S1). you could check the contents of a variable with that. in your case you might have to mix if's and switches. the switch example you can find above is perfect to determine incoming midi messages --> switch(message) { case a:, case b:, and so on... } also think of, that you get your notifications if a button has been pressed! therefore your code should look more like this: --> on notify DIN event if(pin == S0) { // pin S0 if(MIOS_DIN_PinGet(S1)) { do this } else { do that } } else { // pin S1 ... } now you can even combine switches and ifs to minimize code size; but try to separate it first, so that you don't get confused! and one last hint: whenever there are three lines duplicated somewhere, you can think about optimisation! :) Cheers, Michael
-
Speakjet - A PIC ready sound chip?
audiocommander replied to herr_prof's topic in MIDIbox User Projects
You can find the mp3 along with some more informations on how this was recorded here: http://shoko.calarts.edu/~lorinp/insanium.html (I think it's important to know how many of these chips were used and that there are additional vocals on the track)... moreover, there's a link to a youtube video! @MTE: there are some sources for the chip mentioned in this thread earlier. have you checked them out? I think stryd also can get you some. Remember his prices are AUS$ (hopefully right, stryd? ;D) -
DIN Buttons problem on my SID please help!! (Renamed)
audiocommander replied to dcer10's topic in MIDIbox SID
right... I already guessed something like this ;) However, if you have problems gettings your encoders to work properly, I would write down that correctly. It does not hurt to comment lines out and put the encoders in the right order. You can also use some sort of "scratchFile" where you copy and paste unused codeSnippets. That's a good suggestion. Try that again! the most important thing is to get to know the reason why something is not working! So "seems to be unable" is not a real descriptive statement! And putting a bunch of different apps, won't help solving anything either. - Have you tried uploading it again after "it seemed not to work"? The fact that there's no message "reloading" (and PIC restarting) indicates, that there's a problem with the MIDI-flow from the PC to the Core, either because of some hardware-crap in the box, or because of a misconfigured MIDI-application/routing! - Have you tried with another interface? - Is any software MIDI-routing app active? - Have you tried restarting MIDI-apps? - You said MIOSStudio "is not working"? - Sorry to be repetitive, but: what exactly is "not working"? - Have you followed the uploading notes for MidiOx? for example setting the speed of delay between the messages; if msg are sent too fast, the PIC is receiving garbage! - If it's a box that was working formerly, what are the differences now to your procedure in the past? However I'm a bit confused: Are you talking of two boxes now? If it's just one, there might be a hardware error; if you have two boxes and by uploading an application to the second (formerly working) box, you just prooved, that the error has to be searched somewhere in the sysEx chain. In this case, try getting MIOSStudio to work and send the application from there! This indicates, that you have either a bad soldering or bad wiring. If there's a short somewhere, that would explain the flickering of the screen and if the LTC is "disturbing" the SysEx receivement, this would explain why the SysEx Data is not received correctly. Again: - try to sort this out piece by piece. - make sure your MIDI applications are working and you can send/receive sysEx - disconnect all modules from the core (have you used connectors? ;D) - upload a test application from the download section - does it work? - now switch off the box, connect one module and switch it back on. - does it work? (and so on...) Regards, Michael -
DIN Buttons problem on my SID please help!! (Renamed)
audiocommander replied to dcer10's topic in MIDIbox SID
Hi, regarding your question about the tables: having connected 12 Encoders (with at least two pins per Encoder = 24 Digital Connections) on one ShiftRegister ("0") that provides only up to 8 Digital Inputs seems not right... The same applies for the DIN's, there are 25 more Inputs to SR0, witch would make 51 connections to SR0 ??? You have to fill in the ShiftRegister-Number and the Pin, eg. if you have an Encoder on SR0, Pins D0 and D1 the entry should say: ;; SR Pin Mode ENC_ENTRY 0, 0, MIOS_ENC_MODE_WHATEVER ENC_ENTRY 0, 1, MIOS_ENC_MODE_WHATEVER or an Encoder at SR4, Pins D3 and D4: ;; SR Pin Mode ENC_ENTRY 4, 3, MIOS_ENC_MODE_WHATEVER ENC_ENTRY 4, 4, MIOS_ENC_MODE_WHATEVER Best regards, Michael -
...and killed the radio star!
-
I searched for this and found http://www.speaknspell.co.uk/ (with flash simulator) and http://en.wikipedia.org/wiki/Speak_%26_Spell_%28toy%29 and from there on to the chipCollection http://smithsonianchips.si.edu/texas/t_074.htm I think I have seen some webpage that midified this thing... now I only have to find it again.. searching... searching... searching... foundit! :) http://highlyliquid.com/kits/midispeak/ so this is definitely possible, one just has to find out how the sound generator chips work (TMC0281 Speech Synthesizer and a derivative of the TMS1000 microprocessor) and how to communicate with them. Cheers, ac
-
Coding CS handler in C (use of functions pointers?)
audiocommander replied to mess's topic in MIOS programming (C)
well, I'm having this for example: // get enc button state switch(encoder) { case ENC_A_MIN: encDown = MIOS_DIN_PinGet(DIN_A_MIN) ^ 0x1; break; case ENC_A_MAX: encDown = MIOS_DIN_PinGet(DIN_A_MAX) ^ 0x1; break; case ENC_B_MIN: encDown = MIOS_DIN_PinGet(DIN_B_MIN) ^ 0x1; break; case ENC_B_MAX: encDown = MIOS_DIN_PinGet(DIN_B_MAX) ^ 0x1; break; case ENC_C_MIN: encDown = MIOS_DIN_PinGet(DIN_C_MIN) ^ 0x1; break; case ENC_C_MAX: encDown = MIOS_DIN_PinGet(DIN_C_MAX) ^ 0x1; break; case ENC_D_MIN: encDown = MIOS_DIN_PinGet(DIN_D_MIN) ^ 0x1; break; case ENC_D_MAX: encDown = MIOS_DIN_PinGet(DIN_D_MAX) ^ 0x1; break; default: encDown = FALSE; break; } and SDCC generates this: ; .line 696; main.c switch(encoder) { MOVLW 0x08 SUBWF r0x00, W BTFSC STATUS, 0 BRA _00454_DS_ MOVFF r0x0B, POSTDEC1 MOVFF r0x0C, POSTDEC1 CLRF r0x0C RLCF r0x00, W RLCF r0x0C, F RLCF WREG, W RLCF r0x0C, F ANDLW 0xfc MOVWF r0x0B MOVLW UPPER(_00490_DS_) MOVWF PCLATU MOVLW HIGH(_00490_DS_) MOVWF PCLATH MOVLW LOW(_00490_DS_) ADDWF r0x0B, F MOVF r0x0C, W ADDWFC PCLATH, F BTFSC STATUS, 0 INCF PCLATU, F MOVF r0x0B, W MOVFF PREINC1, r0x0C MOVFF PREINC1, r0x0B MOVWF PCL _00490_DS_: GOTO _00446_DS_ GOTO _00448_DS_ GOTO _00450_DS_ GOTO _00452_DS_ GOTO _00447_DS_ GOTO _00449_DS_ GOTO _00451_DS_ GOTO _00453_DS_ _00446_DS_: ; .line 697; main.c case ENC_A_MIN: encDown = MIOS_DIN_PinGet(DIN_A_MIN) ^ 0x1; break; MOVLW 0x02 CALL _MIOS_DIN_PinGet MOVWF r0x04 MOVLW 0x01 XORWF r0x04, F BRA _00455_DS_ _00447_DS_: ; .line 698; main.c case ENC_A_MAX: encDown = MIOS_DIN_PinGet(DIN_A_MAX) ^ 0x1; break; MOVLW 0x06 CALL _MIOS_DIN_PinGet MOVWF r0x05 MOVLW 0x01 XORWF r0x05, W MOVWF r0x04 BRA _00455_DS_ _00448_DS_: ; .line 699; main.c case ENC_B_MIN: encDown = MIOS_DIN_PinGet(DIN_B_MIN) ^ 0x1; break; MOVLW 0x0a CALL _MIOS_DIN_PinGet MOVWF r0x05 MOVLW 0x01 XORWF r0x05, W MOVWF r0x04 BRA _00455_DS_ _00449_DS_: ; .line 700; main.c case ENC_B_MAX: encDown = MIOS_DIN_PinGet(DIN_B_MAX) ^ 0x1; break; MOVLW 0x0e CALL _MIOS_DIN_PinGet MOVWF r0x05 MOVLW 0x01 XORWF r0x05, W MOVWF r0x04 BRA _00455_DS_ _00450_DS_: ; .line 701; main.c case ENC_C_MIN: encDown = MIOS_DIN_PinGet(DIN_C_MIN) ^ 0x1; break; MOVLW 0x12 CALL _MIOS_DIN_PinGet MOVWF r0x05 MOVLW 0x01 XORWF r0x05, W MOVWF r0x04 BRA _00455_DS_ _00451_DS_: ; .line 702; main.c case ENC_C_MAX: encDown = MIOS_DIN_PinGet(DIN_C_MAX) ^ 0x1; break; MOVLW 0x16 CALL _MIOS_DIN_PinGet MOVWF r0x05 MOVLW 0x01 XORWF r0x05, W MOVWF r0x04 BRA _00455_DS_ _00452_DS_: ; .line 703; main.c case ENC_D_MIN: encDown = MIOS_DIN_PinGet(DIN_D_MIN) ^ 0x1; break; MOVLW 0x1a CALL _MIOS_DIN_PinGet MOVWF r0x05 MOVLW 0x01 XORWF r0x05, W MOVWF r0x04 BRA _00455_DS_ _00453_DS_: ; .line 704; main.c case ENC_D_MAX: encDown = MIOS_DIN_PinGet(DIN_D_MAX) ^ 0x1; break; MOVLW 0x1e CALL _MIOS_DIN_PinGet MOVWF r0x05 MOVLW 0x01 XORWF r0x05, W MOVWF r0x04 BRA _00455_DS_ _00454_DS_: ; .line 705; main.c default: encDown = FALSE; break; CLRF r0x04 _00455_DS_: seems somehow like a jumping thing... is that good? -
I'm not exactly sure what this is, but have you seen the SpeakJet WikiEntry/Thread? Cheers, Michael
-
Coding CS handler in C (use of functions pointers?)
audiocommander replied to mess's topic in MIOS programming (C)
As I also read some time ago in the SDCC-manual that switch-statements get converted to tables: has the switch-method been the preferred one, then? (I'm a bit tangled up, because I'm not sure if functionpointers are a "table-based method"...) cheers, Michael -
some minor add-ons from my side: blues Major: 0,3,4,7,9,10 blues minor: 0,3,4,5,6,7,9,10 yummi, and you forgot some of my all-time-favorite scales: MiSheberach (jewish scale, sounds great!): 0,2,3,6,7,9,10 Kumoi (smth japanese, if I remember right): 0,2,3,7,9 Jap-Dim: 0,1,5,7,10 the "spanish-gypsy" is spanish, actually (also one of my top-faves), because gypsy (uhh, this one is definitely one of the most worse scales ever :-X ;D) is: 0,2,3,6,7,8,11 and maybe (if you're already into it): I used to store a related scale along with it, so you can switch to the next one; eg. from major to minor. I also implemented a random-next-related function, so it's similar to playing chords, but this makes only sense for min/MAJ scale, so I'm not sure about that (I will put that it in a seperate mb-app with a special harmonic interface somewhen anyway...) harmonic greets to ya all :-* ac
-
du kannst auch einen temporären freespace nehmen, das bild wird von der wiki-software gecacht :) z.b. http://imageshack.us/
-
hallo Brain, man kann das Bild dazu leider nicht sehen, weil man sich in deinem Wiki authentifizieren muss? Du kannst das Bild dann auch direkt einbinden: {{http://myserver.de/mypic.jpg}} Ich habe die Page außerdem auf der Startseite unter dem bekannten Titel ClockBox verlinkt! Grüße, Michael
-
...at least Rowan now knows that there's no way to get around a clean state diagram ;D cheers, AC