Jump to content

Antichambre

Programmer
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    101

Everything posted by Antichambre

  1. LOL Hans Zimmer is an old guy now, he was very productive since the 80s. I can understand that some people can be bored to hear him everywhere and since a long time. I'm not bored, Interstellar is one of his most beautifull piece and lead the whole movie, Inception is not bad too... it is same who will like this work of a lifetime when he will leave us :( It's a big guy anyway!... And his studio is awesome and I'm jealous too! Have a good week too !
  2. I am really curious to know too. The left-handers are so thwarted all their life, because of that they are always more ambidextrous than a right-handed. Maybe it doesn't care for a left-hander ?! Best, Bruno.
  3. Funny. I thought exactly the same when I watched the last pictures. Navigating the menus is not playing, I need my right hand to play, I'm also right-handed. Must ask a left-hander what he thinks about it, maybe he instinctively wants the menus on the right ! ;)
  4. Question of taste, I remain objective I do not care that it is bankable ... I was very far from being ironic by saying that, I really like ;)
  5. Si c'est un Hbridge que tu pilotes tu ne dois pas lisser le PWM, c'est clair que ça ne fonctionnera pas. C'est des switchs en fait un Hbridge, c'est les phases qui le font fonctionner. En fait si on reprends, ton soucis à la base c'est le bruit... Mais quand? En déplacement? il vibre au repos? Le principe d'un Hbridge c'est de jouer sur les PWMs(dans le soft) pour changer la vitesse, le sens, tu peux même faire varier la décélération, je crois. Y'a peut-être des réglages prévus dans le MIOS pour ca, t'as regardé de ce coté là?
  6. Could be the soundtrack of a third Blade runner ;) This small seq is definitively interesting !
  7. 2 times the same kind of issue, coincidences are rare. Try another burner.
  8. Smart! What is the material used for the bottom part? It seems metallic but the color is like plywood.
  9. En petite interface, la Fastlane est la référence, bon choix! Pour le circuit je ne sais pas, je passe la main je n'ai pas de moto-fader. je vois bien le principe du circuit, c'est un filtre suivi d'un follower, donc un convertisseur PWM->Teznsion...mais dans le contexte toi seul sait. Si c'est une tension variable que tu veux pourquoi tu n'utilises pas l'interface AOUT?
  10. Vérifie tes câbles, In->Out Out->In, change d'interface si tu peux, redémarre ton PC ca peut aider. Vérifie que tu as bien placé R1 100ohm et que tu as bien 5V sur la pin 1 du PIC. Vérifie ton circuit, inversion etc...
  11. Pour que tu t'y retrouves facilement: tu telecharges ce zip Dans le dossier pic18f452, il y a deux sous dossier - 'burner', dedans le bootloader_v1_2b_pic18f452 à flasher avec ton PICKIT3. Qd c'est fait, tu connectes en MIDI, sous MIOS Studio doit apparaitre "MIOS8 core bootloader ready" (un truc comme ca). - Dans choose a .hex fie to upload, tu ouvres le fichier mios8_v1_9h_pic18f452 depuis le sous dossier 'midi', puis start... - Maintenant tu uploades le hex de l'appli... Done ;)
  12. Bonjour Mickael, On s'en fout des fautes ;) Le MIOS8 a 3 couches de firmware - le premier est le Bootloader(c'est l'equivalent du BIOS d'un PC), à charger avec ton PICKIT3. Une fois le bootloader chargé tu peux normalement acceder à ta box en midi avec MIOS Studio. - là tu charges le MIOS8(C'est ton OS). - POur finir tu charges ton Application, mbhp_mf_ng_v1_005 As-tu bien respecté ces etapes? Cordialement Bruno
  13. Hi, driving the TLC5958 with the Core is not an easy way, features are amazing but it will require some more electronic as interface for the GSCLK. I wrote a software driver for it, it works without too much process. ButI added a CPLD between the two. See my OLRE16 project: The wiki but I did not refresh it. The interfacing logic circuit is now on CPLD. Best. Bruno And great work with your controller!
  14. This is just a warning, it works... But ok to be sure... Don't change your structure. Just include the wchar.h library and add a (wchar_t *) to wmemset address target: if(edit & (1<<0))wmemset((wchar_t *)loop[track].PB, (u32)((8192<<16) + 8192), (sizeof (loop[track].PB))/4); // reset Pitch Bend Normally no more warning and it must work... wchar_t size depends on the machine and compiler... But 4 bytes wide, 32 bits here, that's the reason sizeof is divided by 4. Joyeux Noel !!! Bruno
  15. if (edit & 0x03) then you will copy only PB + Notes and at the same time, using bits is just a better way to detect if the whole track has to be copied and using memcpy only one time, for other values it's the same as you did before. "happy new sun year" to you too ;) best Bruno
  16. oups! change MIOS32_DOUT_PinSet( 59, (edit>>1) & 1); to MIOS32_DOUT_PinSet( 59, (edit>>3) & 1);
  17. ... sorry I was on the way back home... But Peter was here. This is what I propose you, I compile it successfully and call Edit function from App_Background without any Hardfault, I verify reset and copy subfunction by SendDebugMessage... All is fine. your whole modified project: http://www.midibox.org/dokuwiki/lib/exe/fetch.php?media=phatline:seq-melody-footboard_copie.zip in details: first better to use same struct as clipboard: //Card-Clip-Container store_t loop[8]; store_t loop_copy; //instead of // u16 SEQ_copy[512][8] = {{}}; //Copy actual Track into ClipboardBuffer // u16 MSQ_copy[512] = {}; //Copy actual Track into ClipboardBuffer // u16 PB_copy [512] = {}; //Copy actual Track into ClipboardBuffer // u16 tact_info_copy[32] = {}; //Copy bpm, loop length, tact and so on better using bits for edit flags, you will understand why after: // char edit[4] = {1,1,1,1}; //PB, SEQ, MSQ, Beatstructure, Edit Flags for copy paste clear u8 edit = 0xff; //PB, SEQ, MSQ, Beatstructure, Edit Flags for copy paste clear to initialise your tracks in APP_Init: //initalize 8 Tracks with standard values u8 a; edit= 0x0f; for ( a=0; a<8; a++ )Edit_Clip(a, 0, 0); This is what I did to check edit function at startup: void APP_Background(void){ #ifdef APP_EDIT_TEST edit= 0x0f; Edit_Clip(0, 0, 1); u16 c, x; for( c=0; c<512; c++ ) { MIOS32_MIDI_SendDebugMessage("PB: %d: %d to %d.", c, loop[0].PB[c] ,loop_copy.PB[c]); for(x=0; x<8; x++)MIOS32_MIDI_SendDebugMessage("SEQ: %d: %d to %d.", c, loop[0].SEQ[c][x] ,loop_copy.SEQ[c][x]); MIOS32_MIDI_SendDebugMessage("MSQ: %d: %d to %d.", c, loop[0].MSQ[c] ,loop_copy.MSQ[c]); MIOS32_MIDI_SendDebugMessage("leader: %d: %d to %d.", c, loop[0].leader,loop_copy.leader); MIOS32_MIDI_SendDebugMessage("virgin: %d: %d to %d.", c, loop[0].virgin,loop_copy.virgin); MIOS32_MIDI_SendDebugMessage("length: %d: %d to %d.", c, loop[0].length, loop_copy.length); MIOS32_MIDI_SendDebugMessage("decay: %d: %d to %d.", c, loop[0].decay, loop_copy.decay); MIOS32_MIDI_SendDebugMessage("rythm: %d: %d to %d.", c, loop[0].rythm, loop_copy.rythm); MIOS32_MIDI_SendDebugMessage("bpm: %d: %d to %d.", c, loop[0].bpm, loop_copy.bpm); } #endif // endless loop while( 1 ) {} } Result: Working with edit bits flags, You have to verify this cause I haven't got the necessary hardware. - In APP_SRIO_ServicePrepare MIOS32_DOUT_PinSet( 56, edit & 0x01); MIOS32_DOUT_PinSet( 57, (edit>>1) & 1); MIOS32_DOUT_PinSet( 58, (edit>>2) & 1); MIOS32_DOUT_PinSet( 59, (edit>>1) & 1); //instead of // MIOS32_DOUT_PinSet( 56, edit[0]); // MIOS32_DOUT_PinSet( 57, edit[1]); // MIOS32_DOUT_PinSet( 58, edit[2]); // MIOS32_DOUT_PinSet( 59, edit[3]); - In APP_DIN_NotifyToggle case 8: edit ^= (1<<0); break; // Act on: PB case 9: edit ^= (1<<1); break; // Act on: SEQ case 10: edit ^= (1<<2); break; // Act on: MSQ-CC case 11: edit ^= (1<<3); break; // Act on: Beat structure like Loop Length BPM and so on //instead of // case 8: edit[0] =! edit[0]; break; // Act on: PB // case 9: edit[1] =! edit[1]; break; // Act on: SEQ // case 10: edit[2] =! edit[2]; break; // Act on: MSQ-CC // case 11: edit[3] =! edit[3]; break; // Act on: Beat structure like Loop Length BPM and so on Now this is your modified edit function: Note: better to remove clip variable if you do not use it // E D I T C L I P D A T A static void Edit_Clip(u8 track, u16 clip, u16 job){ // clip is not used in this procedure better to remove it ;) switch(job) { // Reset(Clear) case 0: if(edit & (1<<0))wmemset(loop[track].PB, (u32)((8192<<16) + 8192), (sizeof (loop[track].PB))/4); // reset Pitch Bend if(edit & (1<<1))memset(loop[track].SEQ, 0, sizeof loop[track].SEQ); // reset Note if(edit & (1<<2))memset(loop[track].MSQ, 0, sizeof loop[track].MSQ); // reset Control Change if(edit & (1<<3)){ // reset track parameters loop[track].leader = 0; loop[track].virgin = 1; loop[track].length = 1; loop[track].decay = 60; //maximal 256 since we use u8 integer type loop[track].rythm = 4; loop[track].bpm = 120; } break; // Copy case 1: if(edit & 0x0f)memcpy(&loop_copy, &loop[track], sizeof loop_copy); // copy full track else{ if(edit & (1<<0))memcpy(loop_copy.PB, loop[track].PB, sizeof loop_copy.PB); // copy Pitch Bend if(edit & (1<<1))memcpy(loop_copy.SEQ, loop[track].SEQ, sizeof loop_copy.SEQ); // copy Note if(edit & (1<<2))memcpy(loop_copy.MSQ, loop[track].MSQ, sizeof loop_copy.MSQ); // copy Control Change if(edit & (1<<3)){ // copy track parameters loop_copy.leader = loop[track].leader; loop_copy.virgin = loop[track].virgin; loop_copy.length = loop[track].length; loop_copy.decay = loop[track].decay; loop_copy.rythm = loop[track].rythm; loop_copy.bpm = loop[track].bpm; } } break; // Paste case 2: if(edit & 0x0f)memcpy(&loop[track], &loop_copy, sizeof loop_copy); // paste full track else{ if(edit & (1<<0))memcpy(loop[track].PB, loop_copy.PB, sizeof loop[track].PB); // paste Pitch Bend if(edit & (1<<1))memcpy(loop[track].SEQ, loop_copy.SEQ, sizeof loop[track].SEQ); // paste Note if(edit & (1<<2))memcpy(loop[track].MSQ, loop_copy.MSQ, sizeof loop[track].MSQ); // paste Control Change if(edit & (1<<3)){ // paste track parameters loop[track].leader = loop_copy.leader; loop[track].virgin = loop_copy.virgin; loop[track].length = loop_copy.length; loop[track].decay = loop_copy.decay; loop[track].rythm = loop_copy.rythm; loop[track].bpm = loop_copy.bpm; } } break; } } This must be faster, as you can see, if edit has bit 0 to 3 @1 then the whole track will be copied or pasted in one unique memcpy ;) Voilà!
  18. FILE_WriteBuffer((u8 *)loop[track], sizeof(store_t)); for a single track... best!
  19. I will be off topic too... Hal! Keep the blank 17HP, we will fill it, I didn't forget... ;) https://www.tendance-adhesif.fr/product/Adhesif-Ch%C3%AAne Best Bruno
  20. It's a complicated question, I'm not a "C expert" too ;)... the only thing I know is that, in your case with a struct you can directly write from/read to without intermediate register, then program is faster... The best thing is to try and maybe measure it.
  21. Coooool :) Now, to perfect your code, you can use structures to read/write your data directly and in one line. ;) Will show you how this evening... Best Bruno
  22. Yes it's exactly the same result for both. The first uses your PB 16bits array directly, is elegant if it works. Have a look on (root)/trunk/apps/processing/midibox_cv_v2/src/mbcv_file_b.cpp , you will find this line: status |= FILE_ReadBuffer((u8 *)patch_buffer, 2*CV_PATCH_SIZE); where patch_buffer is declared as an array of u16, you can see that the length is multiplied by two(sizeof will do it for you); ... The second uses temporary and local u8 array PB8 (512 bytes size), must be slower and is ugly ;) For this last you have to define STEP_NUM: #define STEP_NUM 256 or replace it by 256 ;)
  23. //write u8 PB8[STEP_NUM*2]; for (i=0; i<STEP_NUM; i++){ PB8[i*2] = (u8)(PB[track][i] & 0xff); PB8[i*2+1] = (u8)(PB[track][i] >> 8); } FILE_WriteBuffer((u8 *)PB8 , sizeof(PB8)); //read u8 PB8[STEP_NUM*2]; FILE_ReadBuffer((u8 *)PB8 , sizeof(PB8)); for (i=0; i<STEP_NUM; i++){ PB[track][i] = (u16)((PB8[i*2+1] << 8) + PB8[i*2]); } much less beautiful
  24. Try: // write FILE_WriteBuffer((u8 *)PB[track], sizeof(PB[track]); // read FILE_ReadBuffer((u8 *)PB[track], sizeof(PB[track]); I did it and your project was compiled without error...
×
×
  • Create New...