Search the Community

Showing results for tags 'Ableton Live'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Found 2 results

  1. Hey MIDIbox community, first of all I want to thanks everybody participating in this project, since utilizing from the MIDIbox project really saved me a lot of time. In 2014 I started working on my DIY MIDI controller LambdaControl and can now proudly say that it is finished. I designed and build LambdaControl to support me during my upcoming live performances. Therefore, the controller consists of 10 channel that are fully integrated into Ableton Live. Each channel consists of a volume fader, six buttons for clip selection, four rotary potentiometers for effects, and an encoder with switch button functionality (could be used to control a looping mechanism). The normal components like the potentiometers or encoders are simply scanned by using the AINSER64 and DIN modules with a custom MIOS32 firmware. However, the special part of LambdaControl is the custom 10x6 RGB button matrix (based on button pads from Sparkfun), which is completely integrated into Ableton Live like a Novation Launchpad. For this purpose I connected a separate micro controller unit (MCU) via I2C to the MIDIbox core, which drives the RGB leds and reads the button inputs. The matrix MCU (16MHz Arduino Nano) can produce up to 4096 different colors by driving the matrix with a combination of multiplexing and Bit Angle Modulation (BAM). The matrix MCU still uses the shift registers of the DIN and DOUT modules to connect to the matrix rows and columns. This works really stable in the given scenario, but my implementation has some drawbacks like a low refresh rate or a relatively high input lag for the buttons (more in the documentation). This problems can be easily solved by using a MCU with more power or using a specialized IC like a TLC5958. However, it was a nice challenge to do everything in software on a limited hardware. Moreover, the parts used for the matrix MCU were with around 4€ really cheap. Additionally, I written a so called MIDI Remote Script, which integrates the by MIDI messages controllable RGB button matrix into Ableton Live. The MIDI Remote Scripts are python scripts that Live internally uses to integrate the different commercial MIDI controllers. The following picture shows that LambdaControl can be selected as every other control surface inside Live's preferences. The other screenshot shows the red rectangle that Live is rendering to visualize the position of LambdaControl's clip launcher that can be moved up and down by using the encoder on the master channel. I decided to release all files under open source licenses, such that other people can make us of my work. First of all you can find a complete documentation with more information and pictures on my website. Then I created four repositories on github for the different parts: Repository for the hardware related files like the faceplate or the 3D printable case MIOS32 firmware for the MIDIbox core Matrix MCU Firmware for the separate micro controller that drives the RGB matrix MIDI Remote Script for Ableton Live that integrates LambdaControl into the DAW I hope this information can help other people with their projects.
  2. i'm finally continuing my work on using liveapi to integrate mios32 and ableton live. this works by giving programmers a large set of functions they can call to manipulate damn near anything in live. another set of functions are automatically called by live, allowing you to track whatever is going on. this will let users play a live set without ever looking at a computer screen. the possibilities can be a lot more than that. to do this, i've made a protocol that works over midi and allows a midibox to seamlessly communicate with a liveapi script. on the programmer's side of it, you just have a simple set of functions to play with. look at it as a midibox API for LiveAPI, extending mios into live, and vice versa. currently this is being developed for live 7.0.14. i'm fairly confident that most of the code will work for live 8, and i'll try to get a new version going once this is complete. for a teaser, here are some of the functions at your disposal. keep in mind i haven't gotten to the clips, tracks, or track devices yet, but eventually you'll be able to go as far as bring clip or plugin parameter names into the midibox, and of course monitor what is going on with all of it. this list is growing by the day. functions you can call from mios: void MBLIVE_SONG_SetTransport(u8 state); void MBLIVE_SONG_GetTransport(); void MBLIVE_SONG_SetRecord(u8 state); void MBLIVE_SONG_GetRecord(); void MBLIVE_SONG_SetOverdub(u8 state); void MBLIVE_SONG_GetOverdub(); void MBLIVE_SONG_SetFollow(u8 state); void MBLIVE_SONG_GetFollow(); void MBLIVE_SONG_SetBackToArrangement(u8 state); void MBLIVE_SONG_GetBackToArrangement(); void MBLIVE_SONG_SetDrawMode(u8 state); void MBLIVE_SONG_GetDrawMode(); void MBLIVE_SONG_SetArrangementPosition(u8 mode, u16 val); void MBLIVE_SONG_GetArrangementPosition(); void MBLIVE_SONG_SetTriggerQuantization(u8 state); void MBLIVE_SONG_GetTriggerQuantization(); void MBLIVE_SONG_SetTempo(u8 mode, u16 value); void MBLIVE_SONG_GetTempo(); void MBLIVE_SONG_SetTempoNudgeDown(); void MBLIVE_SONG_SetTempoNudgeUp(); void MBLIVE_SONG_SetTimeSignatureNumerator(u8 mode); void MBLIVE_SONG_SetTimeSignatureDenominator(u8 mode); void MBLIVE_SONG_GetTimeSignature(); void MBLIVE_SONG_SetGrooveAmount(u8 mode); void MBLIVE_SONG_GetGrooveAmount(); void MBLIVE_SONG_SetMetronome(u8 state); void MBLIVE_SONG_GetMetronome(); void MBLIVE_SONG_SetLoopStart(u8 mode, u16 val); void MBLIVE_SONG_GetLoopStart(); void MBLIVE_SONG_SetLoopLength(u8 mode, u16 val); void MBLIVE_SONG_GetLoopLength(); void MBLIVE_SONG_SetPunchIn(u8 state); void MBLIVE_SONG_GetPunchIn(); void MBLIVE_SONG_SetPunchOut(u8 state); void MBLIVE_SONG_GetPunchOut(); void MBLIVE_SONG_SetSessionArrangementView(u8 state); void MBLIVE_SONG_GetSessionArrangementView(); void MBLIVE_SONG_SetClipDeviceView(u8 state); void MBLIVE_SONG_GetClipDeviceView(); void MBLIVE_SONG_SetBrowserView(u8 state); void MBLIVE_SONG_GetBrowserView(); void MBLIVE_SONG_SetDetailView(u8 state); void MBLIVE_SONG_GetDetailView(); void MBLIVE_SONG_GetTrackCount(); void MBLIVE_SONG_SetSelectedTrack(u8 track); void MBLIVE_SONG_GetSelectedTrack(); void MBLIVE_SONG_GetSceneCount(); void MBLIVE_SONG_SetSelectedScene(u8 scene); void MBLIVE_SONG_GetSelectedScene(); functions called by live: void MBLIVE_SONG_NotifyTransportChanged(u8 state); void MBLIVE_SONG_NotifyRecordChanged(u8 state); void MBLIVE_SONG_NotifyOverdubChanged(u8 state); void MBLIVE_SONG_NotifyFollowChanged(u8 state); void MBLIVE_SONG_NotifyBackToArrangementChanged(u8 state); void MBLIVE_SONG_NotifyDrawModeChanged(u8 state); void MBLIVE_SONG_NotifyArrangementPositionChanged(u32 val0, u8 val1, u8 val2); void MBLIVE_SONG_NotifyTriggerQuantizationChanged(u8 state); void MBLIVE_SONG_NotifyTempoChanged(u16 value); void MBLIVE_SONG_NotifyTimeSignatureChanged(u8 val0, u8 val1); void MBLIVE_SONG_NotifyGrooveAmountChanged(u8 value); void MBLIVE_SONG_NotifyMetronomeChanged(u8 state); void MBLIVE_SONG_NotifyLoopStartChanged(u32 val0, u8 val1, u8 val2); void MBLIVE_SONG_NotifyLoopLengthChanged(u32 val0, u8 val1, u8 val2); void MBLIVE_SONG_NotifyPunchInChanged(u8 state); void MBLIVE_SONG_NotifyPunchOutChanged(u8 state); void MBLIVE_SONG_NotifySessionArrangementViewChanged(u8 state); void MBLIVE_SONG_NotifyClipDeviceViewChanged(u8 state); void MBLIVE_SONG_NotifyBrowserViewChanged(u8 state); void MBLIVE_SONG_NotifyDetailViewChanged(u8 state); void MBLIVE_SONG_NotifyTrackCountChanged(u8 trackCount, u8 returnTrackCount); void MBLIVE_SONG_NotifySelectedTrackChanged(u8 track); void MBLIVE_SONG_NotifySceneCountChanged(u8 count); void MBLIVE_SONG_NotifySelectedSceneChanged(u8 scene);