GithubHelp home page GithubHelp logo

sampi / finger Goto Github PK

View Code? Open in Web Editor NEW
19.0 3.0 2.0 1.71 MB

Recreation of the OP-1's Finger sequencer using the Web MIDI API

Home Page: https://finger.sampi.io/

JavaScript 20.30% HTML 79.50% CSS 0.20%
web midi op-1 teenage engineering teenage-engineering finger sequencer

finger's Introduction

Welcome to the OP-1 Finger Sequencer simulator

Try it out!

https://finger.sampi.io

YouTube video

YouTube demo

Quick start instructions

  1. Plug an OP-Z into your computer or Android phone
  2. Open https://finger.sampi.io in Google Chrome
  3. Play some notes on the module track

Instructions

You can control the sequencer by connecting one or more MIDI devices to your computer. Input will be taken from every connected MIDI device on the control channel (default: MIDI channel 14), Output will be sent to two separate channels for drums (default: MIDI channel 1) and synths (default: MIDI channel 8).

Best used with an OP-Z, the left half of the musical keyboard will correspond to drum patterns, the right half will control the synth patterns.

To change the MIDI channels, you can use the UI:

  • To change the Drum MIDI output channel: Click on the green drum icon on the bottom left of the screen.
  • To change the Control MIDI input channel: Click on the white piano icon on the very bottom of the screen.
  • To change the Synth MIDI output channel: Click on the blue synth icon on the bottom right of the screen.

Changing settings is possible by changing the attributes of the <finger-sequencer> element:

  • To set the BPM: document.querySelector('finger-sequencer').setAttribute('bpm', 125);

Have fun playing!

Browser compatibility: Any browser with support for the Web MIDI API (Google Chrome (desktop & Android), Android Browser, Samsung Internet)

Copyright notice: All of the visual artwork and sequencer patterns were made by Teenage Engineering, I am just using it for fun here.

Troubleshooting

If nothing happens when you play notes, try to reload the page. MIDI devices are only recognized during load.

Technical info

The code itself is chaotic, because this is a prototype made over a couple of days.

Important/interesting files

Contains the main SVG and imports all the necessary files.

This is the main script, handling the incoming notes and animating the gorilla and the synth dude, as well as the sequencer.

This script displays and controls the MIDI channel settings on the bottom of the page.

This script makes it easier to listen to MIDI notes and send them.

These are the factory preset patterns of the Finger Sequencer from the OP-1.

This is a very basic quick script that captures MIDI input and prints it out as an Array to the dev console.

(Some of the) Web APIs used

  • Web Components (Custom Elements, Shadow DOM, HTML Templates)
  • Web MIDI
  • Web Animations
  • CSS Custom Properties
  • ES Modules
  • Custom Events
  • Service Workers
  • Cache
  • Web App Manifest

finger's People

Contributors

sampi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Forkers

tolsi zizwar

finger's Issues

Fix unstable clock

requestAnimationFrame is not the best choice for keeping time, but it's the best choice if I want my UI to be in sync with the music.

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.