GithubHelp home page GithubHelp logo

rainu / launchpad Goto Github PK

View Code? Open in Web Editor NEW
8.0 3.0 1.0 17 KB

Go library to make it easy to use the Novation Launchpad (S and MK2)

License: MIT License

Go 100.00%
launchpad novation-launchpad launchpads launchpad-mk2 api launchpad-api midi library

launchpad's Introduction

launchpad

A package allows you to talk to your Novation Launchpad S or Launchpad MK2 in Go. Light buttons or read your touches.

This library is currently only working with Launchpad S (Green-Red Launchpads) and Launchpad MK2 (RGB)

Usage

Initialize a new Launchpad. If there are no currently connected Launchpad device, initialization will fail with an error. You can fake a device by creating an input and output MIDI device and name them as Launchpad.

Drivers

For "cable" communication you need a Driver to connect with the MIDI system of your OS. Currently there are two multi-platform drivers available:

  • package gitlab.com/gomidi/rtmididrv based on rtmidi
  • package gitlab.com/gomidi/portmididrv based on portmidi

Portmidi is required to use this package.

$ apt-get install libportmidi-dev
# or
$ brew install portmidi
# or 
$ yay -S portmidi
package main

import (
    "github.com/rainu/launchpad"
	driver "gitlab.com/gomidi/portmididrv"
	"log"
)
func main() {
    pad, err := launchpad.NewLaunchpad(driver.New())
    if err != nil {
        log.Fatalf("Error initializing launchpad: %v", err)
    }
    defer pad.Close()
    
    // turn off all of the lights
    pad.Clear()
}

Coordinate system

The coordinate system is illustrated below.

+--------- arrow keys -----------+  +--- mode keys ---+
{0, 8} {1, 8} {2, 8} {3, 8} {4, 8} {5, 8} {6, 8} {7, 8} | ableton
----------------------------------------------------------------
----------------------------------------------------------------
{0, 0} {1, 0} {2, 0} {3, 0} {4, 0} {5, 0} {6, 0} {7, 0} | {8, 0} vol
----------------------------------------------------------------
{0, 1} {1, 1} {2, 1} {3, 1} {4, 1} {5, 1} {6, 1} {7, 1} | {8, 1} pan
----------------------------------------------------------------
{0, 2} {1, 2} {2, 2} {3, 2} {4, 2} {5, 2} {6, 2} {7, 2} | {8, 2} sndA
----------------------------------------------------------------
{0, 3} {1, 3} {2, 3} {3, 3} {4, 3} {5, 3} {6, 3} {7, 3} | {8, 3} sndB
----------------------------------------------------------------
{0, 4} {1, 4} {2, 4} {3, 4} {4, 4} {5, 4} {6, 4} {7, 4} | {8, 4} stop
----------------------------------------------------------------
{0, 5} {1, 5} {2, 5} {3, 5} {4, 5} {5, 5} {6, 5} {7, 5} | {8, 5} trk on
----------------------------------------------------------------
{0, 6} {1, 6} {2, 6} {3, 6} {4, 6} {5, 6} {6, 6} {7, 6} | {8, 6} solo
----------------------------------------------------------------
{0, 7} {1, 7} {2, 7} {3, 7} {4, 7} {5, 7} {6, 7} {7, 7} | {8, 7} arm
----------------------------------------------------------------

Demo: Light your touchs

A simple program to light every touch:

package main

import (
    "github.com/rainu/launchpad"
    driver "gitlab.com/gomidi/portmididrv"
    "log"
)
func main() {
    pad, err := launchpad.NewLaunchpad(driver.New())
    if err != nil {
        log.Fatal(err)
    }
    defer pad.Close()
    
    pad.Clear()
    
    hits, err := pad.ListenToHits()
    if err != nil {
        log.Fatal(err)
    }
    
    for {
        select {
        case hit := <-hits:
            pad.Light(hit.X, hit.Y, launchpad.ColorS{3, 3})
        }
    }
}

Demo: Write a scrolling text

A simple program to write text on the launchpad

package main

import (
    "github.com/rainu/launchpad"
    driver "gitlab.com/gomidi/portmididrv"
    "log"
)
func main() {
    pad, err := launchpad.NewLaunchpad(driver.New())
    if err != nil {
        log.Fatal(err)
    }
    defer pad.Close()
    
    pad.Clear()
    
    // Send Text-Loop
    pad.Text(launchpad.ColorS{3, 0}).Add(7, "Hello World!").Perform()
    
    marker, err := pad.ListenToScrollTextEndMarker()
    if err != nil {
        log.Fatal(err)
    }
    for {
        <-marker
        log.Printf("Scrolling text is ended now.")
    }
}

launchpad's People

Contributors

rainu avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

kepagarmendia

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.