Jump to content

TK.

Administrators
  • Posts

    15,247
  • Joined

Everything posted by TK.

  1. Yes, thats correct It will change, once you press the exec button Best Regards, Thorsten.
  2. TK.

    4*20 LCD

    Hi, could work - even I never designed the firmware for 4x20 Best Regards, Thorsten.
  3. you can already select specific note ranges for each patch (and each oscillator) seperately, either in JSynthLib, or from the CS (CFG menu), therefore an additional software is not required for such things. Best Regards, Thorsten.
  4. Lies Dir am besten mal das README.txt des mk_syx.zip packets durch. In den midibox64e*.ini Dateien findest Du auch ein paar Konfigurationsbeispiele Ich wuerde Dir auch empfehlen, die Buttons mit der MIDIO128 Applikation zu testen. Jeder Button wird eine andere Note senden, die Encoder werden zwei verschiedene Noten senden. Falls nicht, gibt es mit der Hardware ein Problem Gruss, Thorsten.
  5. Hi Robin, there are two things, which lead to the error. One thing is, that you are trying to put illegal characters into the table. Characters are quoted with a ', and just single ASCII bytes, and hex codes - typical usecase for a character: MIOS_LCD_PrintChar('A'); Another thing is, that the array is not accessed correctly. Since you want to select a single element, you have to write status[pot] and byte[pot] In addition, it isn't a good idea to create a new array with constant definitions each time when AIN_NotifyChange is called. It's better to put such static arrays outside the function, and to declare them as "const" This leads to the effect, that the compiler will put a table into program flash - in a similar way you know from midio_presets.inc So, here a code snippet which should work: ///////////////////////////////////////////////////////////////////////////// // This function is called by MIOS when a pot has been moved ///////////////////////////////////////////////////////////////////////////// const unsigned char midi_status[8] = {0xB1, 0xB1, 0xB1, 0xB0, 0xB0, 0xB0, 0xB2, 0xB1}; const unsigned char midi_byte[8] = {0x08, 0x0B, 0x09, 0x0B, 0x07, 0x08, 0x0B, 0x01}; void AIN_NotifyChange(unsigned char pin, unsigned int pin_value) __wparam { //Send Midi Control to Sound Module eg B1 08 XX, B0 0B YY etc if( pin >= 0 && pin <=7 ){ MIOS_MIDI_TxBufferPut(midi_status[pin]); MIOS_MIDI_TxBufferPut(midi_byte[pin]); MIOS_MIDI_TxBufferPut(pin_value); } } [/code] Best Regards, Thorsten.
  6. Yes, there are at least 4 prepared "F" (function) buttons, which can be assigned to customized functions. However, it's possible to use the remaining DINs (up to 128 inputs are provided by MIOS) for even more F buttons. Example for direct jump into Shuffle Menu (the appr. hook can be found in seq_buttons.inc) ;; -------------------------------------------------------------------------- ;; F1 button --- implement your favourite function here! ;; -------------------------------------------------------------------------- SEQ_BUTTON_F1 ;; do nothing if button has been depressed IFSET MIOS_PARAMETER2, 0, return ;; branch to the groove menu movlw CS_MENU_PAGE_GROOVE goto CS_M_HLP_ChangePage [/code] Direct control of shuffle: you could add an encoder, and forward the absolute encoder value to the CC handler. A list of available CC parameters can be found here: http://www.ucapps.de/midibox_seq/mbseq_cc_implementation.txt Realization: [code] ;; -------------------------------------------------------------------------- ;; This function is called by USER_ENC_NotifyChange when an encoder has ;; been moved. Input: ;; o Encoder number in WREG and MIOS_PARAMETER1 ;; o signed incrementer value in MIOS_PARAMETER2: ;; - is positive when encoder has been turned clockwise ;; - is negative when encoder has been turned counter clockwise ;; -------------------------------------------------------------------------- SEQ_ENC_Handler ;; exception if the 18th encoder has been moved movlw 18-1 IFNEQ MIOS_PARAMETER1, ACCESS, rgoto SEQ_ENC_Handler_NoShuffle call MIOS_ENC_Abs7bitGet ; get absolute value of encoder movwf MIOS_PARAMETER1 ; -> forward to CC#40...CC#43 movlw 40 ; CC#40 to control groove of Track 1 call SEQ_CCIN_Set movlw 41 ; CC#41 to control groove of Track 2 call SEQ_CCIN_Set movlw 42 ; CC#42 to control groove of Track 3 call SEQ_CCIN_Set movlw 43 ; CC#43 to control groove of Track 4 goto SEQ_CCIN_Set SEQ_ENC_Handler_NoShuffle Best Regards, Thorsten.
  7. If you could send me some drum patches until this weekend, this would be nice. I just thought about the technical realization, and came to he conclusion, that with some acceptable compromisses I could create a first version very fast (maybe at saturday afternoon :) Here some specs I wrote down: Project Name: MIDIbox SID-D (MBSID-D) Key features: * drum sounds playable from a single MIDI channel (by default channel 10) * in addition to the MIDI channel, also the note range can be specified, so that multiple MBSID-D modules can be assigned to different note ranges within channel 10 * will use the same patch structure like a normal MBSID - this saves me from creating new, dedicated tools (JSynthLib) * this means also, that drum sounds can be edited from a normal MBSID control surface via remote * in addition, MBSID-D should also provide a control surface which should be similar to a common MBSID control surface, just downstripped to the drum parameters. Hardware compatible with Step C (but there are also limitations, see below) * 4 drum kits per BankStick, each drum kit consists of 30 drum sounds * only one oscillator per drum voice * Software Engine will provide following dedicatedfunctions for each voice seperately: 32 step wavetable with 3 tracks, 2 LFOs, 1 EG * BankStick required! Up to 8 BankSticks (for 32 drum kits!) * dynamic switching between the patches depending on the MIDI notes being played * this means that a sequencer has direct access to all 30 drum sounds of a drum kit, but only 3 sounds can be played at the same time at each module. If more than three notes are played, the 'oldest' sound will be dropped (exception: grouped percussions) - Re-use MBFM * the firmware should provide drum groups, e.g. to combine an open HiHat with closed HiHat - grouped percussions should not change the oscillator - Re-use MBFM * each drum voice uses following parameters of a common MBSID patch structure: [tt] CC # | Hex | Description | Range | Reset =====+=====+==============================================+=============+====== 1 | 01h | Modulation Wheel | 0-127: val | 0 -----+-----+----------------------------------------------+-------------+------ 2 | 02h | Velocity Init Value | 0-127: val | 0 3 | 03h | Modulation Wheel Init Value | 0-127: val | 0 -----+-----+----------------------------------------------+-------------+------ 13 | 0Dh | Velocity Depth | 0- 63: neg | 127 | | negative depth (0-63) inverts the effect | 64: off | | | | 64-127: pos | 14 | 0Eh | Modulation Wheel Depth | 0- 63: neg | 127 | | negative depth (0-63) inverts the effect | 64: off | | | | 64-127: pos | -----+-----+----------------------------------------------+-------------+------ 17 | 11h | Voice Transpose | 0- 63: neg | 64 | | | 64: off | | | | 64-127: pos | -----+-----+----------------------------------------------+-------------+------ 21 | 15h | Voice Finetune | 0- 63: neg | 64 | | | 64: off | | | | 64-127: pos | -----+-----+----------------------------------------------+-------------+------ 25 | 19h | Oscillator Pitchrange in Number of Notes | 0: off | 2 | | Used by PitchBender and Finetune | 1-127: val | -----+-----+----------------------------------------------+-------------+------ 33 | 21h | Oscillator Waveform | | 4 | | Bit 0: Triangle | | | | Bit 1: Saw | | | | Bit 2: Pulse | | | | Bit 3: Noise (disables all other waveforms)| | | | Bit 4: Disable Voice | | | | Bit 5: Sync (*) | | | | Bit 6: Ringmodulator (*) | | | | (* not sure, if sync and ringmod makes sense)| | -----+-----+----------------------------------------------+-------------+------ 37 | 25h | Oscillator Pulsewidth | 0- 63: neg | 64 | | | 64: off | | | | 64-127: pos | -----+-----+----------------------------------------------+-------------+------ 44 | 2Ch | Filter Channel | | 0 | | Bit 0: Filter for Voice off | | 46 | 2Eh | Global Filter CutOff frequency | 0-127: val | 127 47 | 2Fh | Global Filter Resonance | 0-127: val | 0 -----+-----+----------------------------------------------+-------------+------ 49 | 31h | Voice Attack | 0-127: val | 0 -----+-----+----------------------------------------------+-------------+------ 53 | 35h | Voice Decay | 0-127: val | 0 -----+-----+----------------------------------------------+-------------+------ 57 | 39h | Voice Sustain | 0-127: val | 127 -----+-----+----------------------------------------------+-------------+------ 61 | 3Dh | Voice Release | 0-127: val | 0 -----+-----+----------------------------------------------+-------------+------ 64 | 40h | LFO1 Rate | 0: off | 0 | | | 1-127: val | 65 | 41h | LFO2 Rate | see above | 0 -----+-----+----------------------------------------------+-------------+------ 72 | 48h | LFO1 Depth | 0- 63: neg | 64 | | negative depth (0-63) inverts the waveform | 64: off | | | | 64-127: pos | 73 | 49h | LFO2 Depth | see above | 64 -----+-----+----------------------------------------------+-------------+------ 78 | 4Eh | ENV1 Depth | see above | 64 -----+-----+----------------------------------------------+-------------+------ 80 | 50h | LFO1 Mode | | 3 | | Bit 0: Enable LFO | | | | Bit 6-4: Waveform | | | | 0: Sine | | | | 1: Triangle | | | | 2: Saw | | | | 3: Pulse | | | | 4: Random | | | | 5: analog input | | 81 | 51h | LFO2 Mode | | -----+-----+----------------------------------------------+-------------+------ 86 | 56h | Envelope 1 Curve | 0-63: neg | 64 | | Note: Curve must be enabled seperately | 0: lin | | | for Attack/Decay/Release parameter w/ CC#110 | 64-127: pos | -----+-----+----------------------------------------------+-------------+------ 88 | 58h | Envelope 1 Attack | 0-127: val | 0 89 | 59h | Envelope 1 Decay | 0-127: val | 0 90 | 5Ah | Envelope 1 Sustain | 0-127: val | 0 91 | 5Bh | Envelope 1 Release | 0-127: val | 0 -----+-----+----------------------------------------------+-------------+------ 97 | 61h | Assigned LFOs for Pitch of Voice | | 1 | | Bit 0: LFO1 controls Note Pitch on/off | | | | Bit 1: LFO2 controls Note Pitch on/off | | -----+-----+----------------------------------------------+-------------+------ 101 | 65h | Assigned LFOs for Pulsewidth of Voice | | 2 | | Bit 0: LFO1 controls PulseWidth on/off | | | | Bit 1: LFO2 controls PulseWidth on/off | | -----+-----+----------------------------------------------+-------------+------ 105 | 69h | Assigned Envelopes for Voice | | 0 | | Bit 0: ENV1 controls Pitch | | | | Bit 1: - | | | | Bit 2: - | | | | Bit 3: - | | | | Bit 4: ENV1 controls PulseWidth | | | | Bit 5: - | | -----+-----+----------------------------------------------+-------------+------ 108 | 6Ch | Assigned LFOs for Global Filter CutOff Frequency | | 4 | | Bit 0: LFO1 controls CutOff on/off | | | | Bit 1: LFO2 controls CutOff on/off | | -----+-----+----------------------------------------------+-------------+------ 109 | 6Dh | Assigned Envelopes for Global Filter | | 0 | | Bit 0: ENV1 controls CutOff | | -----+-----+----------------------------------------------+-------------+------ 110 | 6Eh | Use curve parameter on ENV1 | | 0 | | Bit 0: ENV1, Attack | | | | Bit 1: ENV1, Decay | | | | Bit 2: ENV1, Release | | -----+-----+----------------------------------------------+-------------+------ 111 | 6Fh | Sound Engine Options | | 0 | | Bit 0-7: reserved | | -----+-----+----------------------------------------------+-------------+------ 117 | 75h | Assign Velocity to Controller | 0: off | 0 | | | 1-127: Ctrl | 118 | 76h | Assign Modulation Wheel to Controller | 0: off | 0 | | | 2-127: Ctrl | -----+-----+----------------------------------------------+-------------+------ 120 | 78h | Voice Wavetable Rate | 1-127: val | 0 | | | 0: off | 121 | 79h | Assign Wavetable Parameter #1 to Controller | 0: off | 0 | | | 1-127: Ctrl | 122 | 7Ah | Assign Wavetable Parameter #2 to Controller | 0: off | 0 | | | 2-127: Ctrl | 123 | 7Bh | Assign Wavetable Parameter #3 to Controller | 0: off | 0 | | | 1-127: Ctrl | -----+-----+----------------------------------------------+-------------+------ 124 | 7Ch | Oscillator Phase synchronization | 0: off | | | | 1: on | -----+-----+----------------------------------------------+-------------+------ 125 | 7Dh | MIDI Sync (synchronizes LFOs/ENVs/WTs | 0: intern | 0 | | to MIDI clock) | 7: all | | | Bit 0: sync Wavtable Sequencer | | | | Bit 1: sync LFOs | | | | Bit 2: sync Envelopes | | | | | | | | Examples: 01: sync only sequencer, | | | | 02: sync only LFOs | | | | 06: sync LFOs and envelopes | | [/tt] In addition, following parameters should be globally available in a Drum Kit: Volume Global CutOff and Resonance Global Frequency Transpose Global Filter Configuration (LP/BP/HP) Split Layer (Lower Note, Higher Note) Layer Note Transpose Drumkit can be selected via Program Change Event (0..31) This gives us following possibilities: * MBSID-D can be used standalone or as MIDI slave of Step A, B or C interface * a complete Step C (4 SIDs) can be partitionized like desired. For Example: use two SIDs with MBSID firmware, and two SIDs with MBSID-D firmware - one MBSID-D assigned to note range ...B-2, the other to Note Range C-3... * Or use MBSID-D as standalone drum expander(s) without CS in addition to your normal MBSID setup. So long you don't want to edit the drum sound parameters, you can connect the MIDI-INs of your MBSID-D(s) in parallel to the MIDI IN of your normal MBSID * It won't be possible to edit parameters of slaves from a "master MBSID-D" (reason: see my posting from 19.11.) * patches edited on a normal MBSID can be partly re-used for the MBSID-D. No conversion is required, just only the restrictions (see parameter list above) have to be taken into account I don't know, how much I can reduce the normal firmware, but perhaps there will be enough memory free for an additional 8-track drum sequencer - these sequences could be saved in one of the BankSticks! :) (maybe I should this take into account for the 303 Control Extension) Best Regards, Thorsten.
  8. Hi, in v1.7 it's not possible anymore. Instead, the analog inputs are used as 6th waveform by the LFOs. This means higher flexibility! Input 1 is routed to LFO1, Input 2 to LFO2, etc... Sample frequency is controlled with the LFO rate, the intensity with the LFO depth For the SID it doesn't make sense to modulate the resonance due to the low resolution (4 bit, very steppy). The resonance isn't that good anyhow. Normaly I'm either using 0 or 15 ;-) But with the Analog Waveform feature of the LFOs you can modulate frequencies (perfect for synched or ringmodulated sounds!!!), pulse width (fat, sweeping sounds), and cutoff. And you can combine the sweeps in the modulation matrix. Now tell me that this isn't the better solution? ;-) Best Regards, Thorsten.
  9. alright - in order to do this, you would have to switch to Layer C. Then you can increase the gate time, until you reach the multi triggering values. However, I must admit, that the usage of this solution is not very exact during live playing - but I don't know a better solution without dramatically changing the user interface. The gate layer provides 128 different note constellations for each step, a big plus for flexibility, a minus for people who just want to switch between two of them. :-/ Yes, you are right. MBSEQ is not the sequencer that suits your needs! Best Regards, Thorsten.
  10. Without loosing too much words --- everybody of us is dreaming about such a huge console, no? :-) Francois wrote: Click here for more pictures: http://www.midibox.org/midibox_gallery/francois_c_album/
  11. Spiel mal ein bisschen mit dem mk_syx Script herum, vielleicht findest Du so heraus, woran es liegt. Gruss, Thorsten.
  12. Yes, just reverse also the motor polarity, this will work without disadvantages Best Regards, Thorsten.
  13. You know, how to desolder a 7805? Best Regards, Thorsten.
  14. Hi Greg, yes, you can always enable/disable notes with the general purpose buttons, and the LEDs are always rotating like you expect it from a step sequencer. Btw.: did you read the description about the special drum mode? -> http://www.ucapps.de/midibox_seq_tutorial3.html for drum mode, the additional encoders are required. It's to difficult for me to provide much more hardware options. There is a thread running somewhere in the forum about a dedicated drum sequencer firmware with less control elements (not supported from my side), but I guess that the interest wasn't that high. use tribbled or quadrupled notes I can only say, that the clock (internal or external doesn't matter) is dividable from 1..16 What do you mean exactly with "roll"? (I don't want to give you a wrong answer...) to say it clearly: initially the MBSEQ was not designed as a drum sequencer. In the meantime drums can be played quite good, but due to the user interface it's not the optimum solution. MBSEQ provides some possiblilities which you've never seen on a drum sequencer, e.g. the morphing feature is very powerful: it allows you to sweep between two patterns stepless. You can define thresholds for each note seperately (the ModWheel level, at which the sequencer will play the note of the second pattern), which allows very the creation of very dynamic and versatile sequences - live of course. Also the use of the arpeggiator (which works different compares from the machines you propably know as an arpeggiator) allows to create great drum sequences with a keyboard. Combine the Arpeggiator with one of the two morphing modes, hit some keys and sweep the modwheel. Remember that 16 tracks can run at the same time... all with totally independent settings... I can only say: killer!!! ;-) But all these features are mostly not the ones for which people are searching, when they are asking for just another TB808/TB909 sequencer clone. I think that this should stay the topic of other DIY projects Best Regards, Thorsten.
  15. It's interesting, that the guys have the same objections, so I guess that I'm not so wrong when I'm saying, that an ARM7 derivative is not sufficient for controlling so much SIDs Suggestion: start with an easy to handle microcontroller in order to get some more experiences about the general approach. Using MIOS with the C wrapper isn't a bad idea for the beginning. Or just use your Linux PC, and control a SID via the parallel port? If you are not able to realize something useful with such an proven environment, you will never be able to realize your own. Then... after maybe one year or so, you should have a clear imagination about the requirements for the ideal SoC of your project. Then start to design a board, setup the programming environment, etc... I especially mention this, because I read many articles in this forum, and got many emails in the last years from people who wrote about their great plans with powerful chips. Interestingly the success stories are very rare - thats the big problem, when people are thinking, that they can just skip the longsome learning process that other people had to go Best Regards, Thorsten.
  16. Ich meinte den Code, den man bspw. im mk_syx Script eingeben wuerde, und der hier dokumentiert ist: http://www.ucapps.de/midibox64e/midibox64e_sfb_table.txt Ich habe es nun auch mal mit Serge's Editor ausprobiert - funktioniert problemlos. Was machst Du anders? Gruss, Thorsten.
  17. die MIDI streams muessen intern sowieso gemerged werden, somit wuerde das Geraet dann auch standalone funktionieren Gruss, Thorsten.
  18. A special drum firmware is a nice idea, but who creates the sounds? There are some percussion patches in the SID preset library, but they don't sound as good as those we know from the favourite C64 tunes. So, if somebody could try to optimize the drum sounds (it's not due to a lack of MBSID engine possibilities, but just my personal lack of knowledge on drum sound programming), I could think about the requirements for a firmware variation. Currently, the only solution is to use a single core for each drum sound, or to sample the sounds, and to play them with a sampler. But I guess that a special firmware could allow to play drums on 3 oscillators indepently, and to provide the same dynamic allocation like MBFM, which means: 3 oscillators could quickly switch between the sound settings, and therefore play any drum sound without changing the patch, just selected by the note number) However, first it's your turn: give me at least 128 drum patches! :) Best Regards, Thorsten.
  19. I don't want to demotivate you, in fact I also already thought about the use of an ARM based core for MIDIbox projects (see also http://www.midibox.org/forum/index.php?topic=3305.msg22398#msg22398). Based on the experiences I made with this processor so far (I attented a programming course some time ago, but I'm mainly working with TriCore), I can only say, that MIPS are not everything. If the PIC CPU (or AVR, this doesn't matter here) is clocked with the same frequency like a ARM core, you will notice, that PIC/AVR perform better on special tasks, especially on bit manipulations and IO transactions, because they provide special instructions for such operations. Also the interrupt handling of ARM is really ugly, the interrupt latency is higher, task switching is slow. Ok, this has been optimized with ARM 9 core... GCC compiler: nice solution, but not as good as the original ARM compiler (from ARM). Propably you have to write a lot of routines in assembler, in order to achive a performance to handle more than two SIDs. ARM assembler doesn't make fun (due to RISC architecture) Keep also in mind that the IO requires some additional hardware, since the chip is supplied with 1.8V and/or 3.3V - at least for the LCD an external IO tristate driver will be required, and for the SIDs of course So, I guess that you won't be happy with an ARM7 derivative, especially when you are planning to program in C, and if you want to use Linux as the operating system (or do you really favor unstable synth timings before an operating system, which loads a little ARM7 more than really required?) I guess that with an ARM9 based derivate, clocked with 150 MHz and higher, you will be able to do much more than with dedicated PIC cores for each SIDs Just my thoughts - I could be wrong, but I just want to express, that an ARM doesn't really satisfy me yet. It's not a real microcontroller, it's more a computing engine. Best Regards, Thorsten. P.S.: when I'm speaking of the handling of SIDs, I don't only mean to access them via MIDI, but also to provide the same software implemented sound engine capabilities like the real MBSID. Ok, so long you only forward incoming notes the SID registers, and access sound parameters via CC, and if you only provide some simple modulation capabilities, then you are propably able to handle 8 SIDs and more... but you just don't get enough out of the SIDs, just some cheap sounds Compare this with "HardSID" (the PC based solution), which provides a slower update cycle than MIDIbox SID, even it's running on pentium processors ;-)
  20. "wavetable sequencer" is a term of old C64 days - it's not a sampler, but a sequencer which can playback sequences of waveforms very fast. In old days this method was used to realize percussive sounds, I'm using the same method to modulate any CC, and also to trigger notes (like with a common step sequencer) -> see also http://www.midibox.org/forum/index.php?topic=3356.0 Best Regards, Thorsten.
  21. habe gestern das ESI M8U getestet - es verwendet den WinXP Legacy Treiber! Somit bietet es zwar die gleichen Latenz- und Jitterwerte wie das MBHP_USB, ist es aber nicht Multiclient faehig. Fuer mich persoenlich ist es somit nicht mehr interessant, und ich werde vielleicht doch mal wieder mein eigenes 8x8 Interface fokusieren, und zur Not die USB IN/Out Ports doppeln Gruss, Thorsten.
  22. Ich wuesste nicht, warum das mit dieser Konfiguration nicht funktionieren sollte (ich benutze ja die DEC/INC Buttons in meiner eigenen Konfiguration...) - welche SFB Codes verwendest Du genau? Gruss, Thorsten.
  23. Hi Kris, thanks for letting us know! Looking forward for the pictures! :) Best Regards, Thorsten.
  24. Hi Roger, yes, you can realize this with Meta events - there is also an example which demonstrates this: just open "mb64_meta.inc" (MIDIO128: midio_meta.inc), and search for "DoubleNote" Best Regards, Thorsten.
  25. Hallo, also bei mir funktioniert es... Hast Du vielleicht in main.asm eine illegale Einstellung gewaehlt? Fuer DEFAULT_ENCODER_GROUP_WIDTH sind nur folgende Werte gueltig: [tt] ; Width of a group - normaly matches with the number of connected encoders, but ; the MB64E_LCD_PrintGroupNumber function in mb64e_bank.inc only supports ; group widths which are a power of two (1, 2, 4, 8, 16, 32, 64) #define DEFAULT_ENCODER_GROUP_WIDTH 16 [/tt] somit muesstest Du in Deinem Fall DEFAULT_ENCODER_GROUP_WIDTH auf 16 einstellen Gruss, Thorsten.
×
×
  • Create New...