Skip to content

Commit

Permalink
feat: basic interfacing
Browse files Browse the repository at this point in the history
  • Loading branch information
dicagno committed Jul 16, 2023
0 parents commit 36f231b
Show file tree
Hide file tree
Showing 6 changed files with 372 additions and 0 deletions.
266 changes: 266 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,266 @@
# Created by https://www.toptal.com/developers/gitignore/api/webstorm+iml,node,macos,dotenv
# Edit at https://www.toptal.com/developers/gitignore?templates=webstorm+iml,node,macos,dotenv

### dotenv ###
.env

### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride

# Icon must end with two \r
Icon


# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent

# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

### macOS Patch ###
# iCloud generated files
*.icloud

### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage
*.lcov

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)
web_modules/

# TypeScript cache
*.tsbuildinfo

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional stylelint cache
.stylelintcache

# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variable files
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache

# Next.js build output
.next
out

# Nuxt.js build / generate output
.nuxt
dist

# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public

# vuepress build output
.vuepress/dist

# vuepress v2.x temp and cache directory
.temp

# Docusaurus cache and generated files
.docusaurus

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# TernJS port file
.tern-port

# Stores VSCode versions used for testing VSCode extensions
.vscode-test

# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*

### Node Patch ###
# Serverless Webpack directories
.webpack/

# Optional stylelint cache

# SvelteKit build / generate output
.svelte-kit

### WebStorm+iml ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839

# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf

# AWS User-specific
.idea/**/aws.xml

# Generated files
.idea/**/contentModel.xml

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr

# CMake
cmake-build-*/

# Mongo Explorer plugin
.idea/**/mongoSettings.xml

# File-based project format
*.iws

# IntelliJ
out/

# mpeltonen/sbt-idea plugin
.idea_modules/

# JIRA plugin
atlassian-ide-plugin.xml

# Cursive Clojure plugin
.idea/replstate.xml

# SonarLint plugin
.idea/sonarlint/

# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

# Editor-based Rest Client
.idea/httpRequests

# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser

### WebStorm+iml Patch ###
# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023

*.iml
modules.xml
.idea/misc.xml
*.ipr

# End of https://www.toptal.com/developers/gitignore/api/webstorm+iml,node,macos,dotenv
8 changes: 8 additions & 0 deletions .idea/.gitignore

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 14 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Web MIDI Example</title>
</head>
<body>
<h1>Web MIDI Example</h1>
<button id="connectBtn">Connect MIDI Device</button>

<script src="main.js"></script>
</body>
</html>
72 changes: 72 additions & 0 deletions main.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
let launchpads = [];

const LED_VALUES = {
OFF: 12,
RED_LOW: 13,
RED: 15,
AMBER_LOW: 29,
AMBER: 63,
YELLOW: 62,
GREEN_LOW: 28,
GREEN: 60
}

document.addEventListener('DOMContentLoaded', () => {
// Check if Web MIDI is supported
if (navigator.requestMIDIAccess) {
// Prompt the user to connect a MIDI device
const connectBtn = document.getElementById('connectBtn');
connectBtn.addEventListener('click', connectMIDI);
} else {
console.log('Web MIDI is not supported in this browser.');
}

// navigator.permissions.query({ name: "midi", sysex: true }).then((result) => {
// if (result.state === "granted") {
// const connectBtn = document.getElementById('connectBtn');
// connectBtn.addEventListener('click', connectMIDI);
// } else if (result.state === "prompt") {
// // Using API will prompt for permission
// }
// // Permission was denied by user prompt or permission policy
// });
});

function connectMIDI() {
navigator.requestMIDIAccess()
.then(onMIDISuccess)
.catch(onMIDIFailure);
}

function onMIDISuccess(midiAccess) {
const outputs = midiAccess.outputs.values();
for (let output of outputs) {
console.log(output)
if(output.name === 'Launchpad') {
launchpads.push(output);
//input.onmidimessage = onMIDIMessage;
}
let message = [0x90, 0, LED_VALUES.GREEN];
output.send(message);

message[1] = 1;
message[2] = LED_VALUES.AMBER;
output.send(message)

message[1] = 2;
message[2] = LED_VALUES.RED;
output.send(message)
}

console.log('MIDI connection established.');
}

function onMIDIFailure(error) {
console.error('MIDI connection failed:', error);
}

function onMIDIMessage(event) {
// Handle MIDI messages here
// For example:
console.log('MIDI Message:', event.data);
}
6 changes: 6 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"name": "web-midi-sequencer",
"version": "1.0.0",
"main": "index.js",
"license": "MIT"
}

0 comments on commit 36f231b

Please sign in to comment.