-
Posts
1,281 -
Joined
-
Last visited
-
Days Won
71
Content Type
Profiles
Forums
Blogs
Gallery
Posts posted by Phatline
-
-
15 hours ago, Antichambre said:
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...
should it does it the same? incl(track) (step) cant wait to try it at home.many thx.4that. mike.
14 hours ago, Antichambre said://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
-
how ever the endgoal is:
128 Program-Change/Songs a 4clips = 512clips
8tracks a 512 clips
fileformat: [track]-[clip].sq >>> each clip is a single file which can be called
when i Programchange, it loads the first row of clips >>> clip = PC*4 >>>
to load a other clip i need to built a 8x8 blm first: the plan is:
----------------tr0 tr1 tr2 tr3 tr4 tr5 tr6 tr7
last PC x - Play-Clip from last Song
empty grid x x x x x x x x - Indicate that there is no Song to choose
clip.row0 x x x - Play Clips[tr0][cliprow0] of actual song....
clip.row1 x -
clip.row2 x
clip.row3
empty grid x x x x x x x x
next PC x - Play Clips from next song....
so its a bit of ableton like... but more song structured.
-
On 13.12.2017 at 5:57 PM, Antichambre said:
What is the calling procedure? can you send me (PM) the project? I need a bigger view.
I think structure can resolve write and read but I need to know how it is called.
I'm not at home, nothing to do in the night in my hotel room, I can write something even if I haven't got any hardware to test it...
Bestfile is up to date in wiki: http://www.midibox.org/dokuwiki/lib/exe/fetch.php?media=phatline:seq-melody-footboard.zip
when cleaned up this are the Functions involved >
1.APP_DIN_NotifyToggle >>> set a Flag to 1 (Hi)
2.TASK_Blink_Decay >>> wait 250ms, then send a Call to: SD(SaveNextFlag, SongNrStor, 2) = TRACK0, Song-PC0, store command
3.SD(u8 track, u16 clip, u16 job) >>> writing, reading, or initalizing files...
// local prototype of the task function static void TASK_Blink_Decay(void *pvParameters); static void SD(u8 track, u16 clip, u16 job); void APP_DIN_NotifyToggle(u32 pin, u32 pin_value){ //1.STORE-LOAD-BUTTON-ACTION if(pin_value == 0) { switch(pin) { case 6: StoreFlag = 1; break; case 14: LoadFlag = 1; break; }}} static void SD(u8 track, u16 clip, u16 job){ //3.Job1=load all, Job2=store all, Job3=initalize card //STORE if(job == 2) { //Fill CC-Array of Clip CC_SD[0] = clip_is_virgin; CC_SD[1] = Rythm; CC_SD[2] = Loop_Length[track]; CC_SD[3] = BPM; CC_SD[4] = SetDecayTime[track]; MUTEX_SDCARD_TAKE; //Write to File sprintf(filepathS, "sq/%d-%d.sq", track, clip); FILE_WriteOpen (filepathS, 1); FILE_WriteBuffer((u8 *)file_typeBank, 4); //"SQ01" = 4 Positons FILE_WriteBuffer((u8 *)CC_SD, 32); //Track Variables like Looplenght FILE_WriteBuffer((u8 *)Sequence[track], 2048); //u8 Sequence[8][256][8]={{{}}}; //8Tracks, 256Steps, 8NotePolyphony for(i=0; i<256; i++)FILE_WriteHWord (PB[track][i]); //write Pitchbend u16 values directly FILE_WriteClose (); MUTEX_SDCARD_GIVE; //SD-Card is now free 4 apbess SongNrLoad = SongNrStor; //transfair load nr 2 store nr. SD_Done_StoreFlag = 1;} //LOAD if(job == 1) {//Load all Data- whole Program-Change-Patterns MUTEX_SDCARD_TAKE; //NOTE-Data of Clip sprintf(filepathL, "sq/%d-%d.sq", track, clip); FILE_ReadOpen (&midifile_fi, filepathL); FILE_ReadBuffer((u8 *)file_typeBank, 4); FILE_ReadBuffer((u8 *)CC_SD, 32); FILE_ReadBuffer((u8 *)Sequence[track], 2048); //u8 Sequence[8][256][8] for(i=0; i<256; i++)FILE_ReadHWord (&PB[track][i]); //read Pitchbend u16 values directly FILE_ReadClose (&midifile_fi); MUTEX_SDCARD_GIVE; //Paste Variables from Array clip_is_virgin = CC_SD[0]; Rythm = CC_SD[1]; Loop_Length[track] = CC_SD[2]; BPM = CC_SD[3]; SetDecayTime[track] = CC_SD[4]; //SEQ_BPM_Set(BPM); NeedSync = 1; //update ClockCounter when ready... SongNrStor = SongNrLoad; //transfair load nr 2 store nr. SD_Done_Load_Flag = 1;} //SD-Card Initalize - Files if((job == 3) && (clip < 8)){//CHECK SD-Card/Initalize Card .... .... }//End While }//End TICK 0 >>> 1ms Task...
-
7 hours ago, Antichambre said:
How do you init PB as aray of int or pointer?
If array of int:for(i=0; i<256; i++)FILE_WriteHWord (PB[track][i]); //write Pitchbend u16 values directly for(i=0; i<256; i++)FILE_ReadHWord (&PB[track][i]); //read Pitchbend u16 values directly
u16 PB[8][256] = {{}};
dont working, LCD hangs.... by just sending a ... SD(0,0,2 or 1) .... i decoppelt already the Load/Store button to directly act on the SD-Function (with counters in milliseconds) which solved issues but not the pitchbend thing...
static void SD(u8 track, u16 clip, u16 job){ //STORE if(job == 2) { MUTEX_SDCARD_TAKE; //Write to File sprintf(filepathS, "sq/%d-%d.sq", track, clip); FILE_WriteOpen (filepathS, 1); FILE_WriteBuffer((u8 *)file_typeBank, 4); //"SQ01" = 4 Positons FILE_WriteBuffer((u8 *)CC_SD, 32); //Track Variables like Looplenght FILE_WriteBuffer((u8 *)Sequence[track], 2048); //u8 Sequence[8][256][8]={{{}}}; / for(i=0; i<256; i++)FILE_WriteHWord (PB[track][i]); //write Pitchbend u16 values directly FILE_WriteClose (); MUTEX_SDCARD_GIVE; //SD-Card is now free SD_Done_StoreFlag = 1;} //LOAD if(job == 1) { MUTEX_SDCARD_TAKE; //READ FILE sprintf(filepathL, "sq/%d-%d.sq", track, clip); FILE_ReadOpen (&midifile_fi, filepathL); FILE_ReadBuffer((u8 *)file_typeBank, 4); FILE_ReadBuffer((u8 *)CC_SD, 32); FILE_ReadBuffer((u8 *)Sequence[track], 2048); //u8 Sequence[8][256][8] for(i=0; i<256; i++)FILE_ReadHWord (&PB[track][i]); //read Pitchbend u16 values directly FILE_ReadClose (&midifile_fi); MUTEX_SDCARD_GIVE; SD_Done_Load_Flag = 1;}
-
this line stops my lcd from reacting and nothing will be written:
for(i=0; i<256; i++){ //16bit pitchbend to 2x8bit -saveable with Writebuffer PB8[0][i] = PB[track][i] & 0xff; PB8[1][i] = PB[track][i] >> 8;}
when used in:
for (track=0; track<8; track++){ //count thru all tracks for(i=0; i<256; i++){ //16bit pitchbend to 2x8bit -saveable with Writebuffer PB8[0][i] = PB[track][i] & 0xff; PB8[1][i] = PB[track][i] >> 8;} MUTEX_SDCARD_TAKE; //Write to File sprintf(filepathS, "sq/%d-%d.sq", track, SongNrStor*4); FILE_WriteOpen (filepathS, 1); FILE_WriteBuffer((u8 *)file_typeBank, 4); //"SQ01" = 4 Positons FILE_WriteBuffer((u8 *)CC_SD, 32); //Track Variables like Looplenght FILE_WriteBuffer((u8 *)Sequence[track], 2048); //u8 Sequence[8][256][8] FILE_WriteBuffer((u8 *)PB8, 512); //2x256 FILE_WriteClose (); MUTEX_SDCARD_GIVE; //SD-Card is now free 4 apbess }
, if i delete this lines: all files are written/loadet fine,
maybe the bitshift takes to long... or sd access is to slow... or code is just waste...
-
4 hours ago, Antichambre said:
You can try to write your 256 16bit values directly.
#define STEP_NUM 256 u16 PB[STEP_NUM]; //populate PB //... //write PB for(i=0; i<STEP_NUM ; i++)FILE_WriteHWord(PB[i]);
hm having troubles by Reading the HWORD - compiler error:
make (im Verzeichnis: /home/...) rm -f project.hex Creating object file for app.c app.c: In function 'SD': app.c:857:40: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] ------------------------------------------------------------------------------- Application successfully built for:....
app.c:857:40 isthis line:
for(i=0; i<256; i++){FILE_ReadHWord ((u16 *)PB[track][i]);} //read Pitchbend u16 values directly ??
u16* and u16
by using this code
//STORE if((job == 2) && (track == 8)) {//Store all Data- whole Program-Change-Patterns MUTEX_SDCARD_TAKE; for (track=0; track<8; track++){ //count thru all tracks //Write to File sprintf(filepathS, "sq/%d-%d.sq", track, clip); FILE_WriteOpen (filepathS, 1); FILE_WriteBuffer((u8 *)file_typeBank, 4); //"SQ01" = 4 Positons FILE_WriteBuffer((u8 *)CC_SD, 32); //Track Variables like Looplenght FILE_WriteBuffer((u8 *)Sequence[track], 2048); //8Tracks, 256Steps, 8NotePolyphony for(i=0; i<256; i++){FILE_WriteHWord(PB[track][i]);} //write Pitchbend u16 values directly //FILE_WriteBuffer((u8 *)PB8, 1024); //2x8Bit Pitchbendvalue...2 x 512 Steps= 1024 Blocks FILE_WriteClose (); } MUTEX_SDCARD_GIVE; } //LOAD if((job == 1) && (track == 8)) {//Load all Data- whole Program-Change-Patterns MUTEX_SDCARD_TAKE; for (track=0; track<8; track++){ //NOTE-Data of Clip sprintf(filepathL, "sq/%d-%d.sq", track, clip); FILE_ReadOpen (&midifile_fi, filepathL); FILE_ReadBuffer((u8 *)file_typeBank, 4); FILE_ReadBuffer((u8 *)CC_SD, 32); // ALL OTHER VARIABLES are saved in this ARRAY (CC_SD[128]) FILE_ReadBuffer((u8 *)Sequence[track], 2048); ////8Tracks, 256Steps, 8NotePolyphony u16 i = 0; for(i=0; i<256; i++){FILE_ReadHWord ((u16 *)PB[track][i]);} //write Pitchbend u16 values directly FILE_ReadClose (&midifile_fi); } MUTEX_SDCARD_GIVE; } }
-
hi
save my patches with FILE_WriteBuffer like this:
// 16Bit Pitchbend-value to 2x8Bit value - to get a saveable format PB8[0] = * ((unsigned char *)&PB[track]); //low byte PB8[1] = * ((unsigned char *)((&PB[track])+1)); //hi byte //Fill CC-Array of Clip CC_SD[0] = clip_is_virgin; CC_SD[1] = Rythm; CC_SD[2] = Loop_Length[track]; CC_SD[3] = BPM; CC_SD[4] = SetDecayTime[track]; //Note-Data of Clip sprintf(filepathS, "sq/%d-%d.sq", track, clip); //First Pattern --- will be later copied 511 times! sq/8-512.pb FILE_WriteOpen (filepathS, 1); FILE_WriteBuffer((u8 *)file_typeBank, 4); //"SQ01" = 4 Positons FILE_WriteBuffer((u8 *)CC_SD, 32); //Track Variables like Looplenght FILE_WriteBuffer((u8 *)PB8, 512); //2x8Bit Pitchbendvalue x 256 Steps = 512 Blocks FILE_WriteBuffer((u8 *)Sequence[track], 2048); //Track, 256Steps, 8NotePolyphony 1x256x8 = 2048 Blocks FILE_WriteClose ();
i want to save the Pitchband also, i but this is 16bit, and that cant be Written, i need 8Bit Values, so my my 16Bit Pitchband-Variable is named PB[track]
it is done by:
// 16Bit Pitchbend-value to 2x8Bit value - to get a saveable format PB8[0] = * ((unsigned char *)&PB[track]); //low byte PB8[1] = * ((unsigned char *)((&PB[track])+1)); //hi byte
so far ok, QUESTION is: how to combine low and hi byte back to the 16bit Variable PB[track]? (after FILE_ReadBuffer is done)
next question is how to split a multiy-array in low and hi bytes variables: for example PB[track][256] --- which is the Pitchbend-Information - over 256 Steps in a Sequence.
thx 4 helpß
-
On 7.12.2017 at 0:07 PM, zener said:
..
switching / jumping between the 2 "cores" onfly to use for example in live performance , when during the sequencer "core" run the song
good point! its far better the ui is updated directly via srio then via midi sysex cc or notes.. 32th blinking of 16x2 trigger indicatos bling and blang via midi making trouble... for example i have connected a sequencer to a blm(acts as controller) but all trigger indicators are leds from the sequencer to give timed indication
isnt there any mb bus? from core to core
-
On 4.12.2017 at 4:01 PM, zener said:
After a number of years running up-down-in-out of dozens and dozens and dozens of threads ,
thousand of posts and hours dedicated / missed
to get all info and helps necessary to complete a MidiBox Unit (Hui controller ,"NG", Sequencer),
at the end for all projects a very extensive knowledge of the C-Code is essential for get a full working unit (unfortunately)
,
i.m.h.o. MidiBox is a great project because the true "Force" of this device is the possibility to obtain a customized device controller not available on the market ,
(ok so true it require a large number of hours for soldering and assembly (time is money!!! ) + parts cost )
considered that many used midi-usb controllers can be found today for very low price , seem to really not have logical "sense" start with a MidiBox project ,
But (as wrote above) the fact that a customized controller device not available on the market can be obtained with the MidiBox projects
give to this Device a very strong "force point" ,
that said ,
the "issue" about the extensive knowledge of the C-Code required is a so big limit / stumbling block for a large number of "potential" users
,
that have the sufficient electronic knowledge for assembly/soldering the hardware required ,
but not for the software settings/customizations ,
then the question is :
There is really not a way to make the "software" project part more "friendly" and simple ? 8-I
oh i had the same, thoughts back in the days... not knowing what a external c-function is, and where the hell they are - thats a thing to learn first to get a point how TK arrange things...
since i learned how to wiki, i also document that - for me to remember - and for other to get some inspiration.
hmm i see three options:
* learn how to NG-Script
* learn no NG-Script - learn C instead + get the compiler running on your Computer
* ask someone who do the programming for you... but if you want to change something after - you probably have to script or c again.
i personally never learned c in shool or mentor...
back in the days when max4live come up, i startet with graphical programming (Without c), t
he programm i created, i later programmed on TK MIOS32, and i learned only the c-things i needet to get the programm running which i already know -via internet youtube and google researching- i was knowing what i need and want... i cant learn anything that i dont need @ the moment ... i am no expert too, but i make my own devices and jam with my bandmate every week since years...
a "only musican" should just ask a friend to help him
a musican which want to use custom or setup a custom midicontroller - have to explore that matter and that take time and entusiasm
-
not use a mpx16...
hmm lot of your quests cant handle a akai mpx16, but its small, has envelops, it depends on your "typical"-sampling time for a patch... because here it is very limited! and it has a lot of BAD things like: https://www.reddit.com/r/synthesizers/comments/61ivbx/akai_mpx16s_midi_implementation_is_shit/
-
-
-
i need rackmount . with desktop case or simular would be fine. not too deep
-
na 300mm dont fit in my flight cases. thought more in the size of your desktop cases. they dont fit?
-
is there a case for the rackmount panel?
-
multitrack record, recorded with zoom livetrack12,
made with one JP8080 for all tracks (also drums)
overdubed with the Midi-Clock to Audio, Audio to Midi-Clock technology in order to drive a midibox seq light multiple once after a nother...
info about midi-clock to audio:
and wiki:
http://wiki.midibox.org/doku.php?id=clock2audio2clock
-
cool idea... i also want such device.
-
-
i want to connect one Encoder directly to J5a
i know that in my Code i have to
initalize this pins:
// initialize pin 2 of J5A, as Digital input with internal Pull-UP //connect to ground MIOS32_BOARD_J5_PinInit(0, MIOS32_BOARD_PIN_MODE_INPUT_PU); MIOS32_BOARD_J5_PinInit(1, MIOS32_BOARD_PIN_MODE_INPUT_PU);
and i also can observe the state of the J5a pin by putting following code into APP_Background:
MIOS32_BOARD_J5_PinGet(0) MIOS32_BOARD_J5_PinGet(1)
all clear so far, and working good with buttons (with hardware debouncing ):
how does a Encoder-Code look like (without any Acceleration), and how does Hardware debouncing look like (the same like for buttons?), i want to use as less code then possible...
thx 4 any tips
-
-
na directly recording midi wasnt the way, but first convert it to audio pulses on a DOUT-Pin, and then record it, when playback it go thru a Schmitt Trigger into a DIN-Pin, the strip down mios-functions and code, it is running thight, HURRAAY
i solved it this way:
-
is it possible to convert a Midiclock-Stream to audio?
and convert this audio-recording back to midiclock?
so i could use one of the RECorder-channels for the midi (clock start stop notes and so on)
are there already devices out there? i can remember that 30 years ago such things as midi tape exist... or is it maybe a cheap trick that can be solved with an optocopler an opamp and a few lines of code?
its done
VIDEO-Overdubbing a JP8080:
-
so pa0 to 3.3v then -thnx
-
to gnd or to 3.3v?
nice.what is your website?
mike
store 16bit variable to 8bit FILE_Writebuffer
in MIOS programming (C)
Posted · Edited by Phatline
thx has worked:
FILE_ReadBuffer((u8 *)Sequence[track], sizeof(Sequence[track])); //u8 Sequence[8][512][8]
FILE_WriteBuffer((u8 *)Sequence[track], sizeof(Sequence[track])); //u8 Sequence[8][512][8]
call: SD(track, clip, job);
for example: SD(6,1,2); //track 6 dont matter, ProgramChange 1, Load all Clips
SD(0,7,1);//track 0, ProgramChange 7, Load single Clip (clip 7-0.sq)
SD(0,1,3);//track 0 , ProgramChange 1, Store single Clip (clip 1-0.sq)
SD(2,1,4);//track 2 dont matter, ProgramChange 1, Store all Clips
SD(2,1,5);//track 2 dont matter, ProgramChange 1 dont matter, Copy track 0-0.sq 512x8 times on SD-Card = Make filestructure = initalize SD-Card > take 20 Minutes
full code: http://wiki.midibox.org/lib/exe/fetch.php?media=phatline:seq-melody-footboard.zip
relativly stripped down the SD-Management is done by:
maybe that helps anyone, or me in the future...