Skip to content

adil-adysh/android_midi

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

android_midi

android_midi is a Flutter plugin for advanced MIDI (Musical Instrument Digital Interface) control on Android devices. It provides a high-level API for device enumeration, connection management, and expressive MIDI message handling, powered by native C++ and Kotlin/Java code for optimal performance.

Features

  • Enumerate available MIDI devices (USB, virtual, etc.)
  • Open and close MIDI devices and ports
  • Send and receive MIDI messages (Note On/Off, Control Change, Program Change, Pitch Bend, Aftertouch, SysEx, raw data)
  • Real-time MIDI input/output streams
  • High-level musical helpers: play notes, chords, arpeggios, sequences, and phrases with tempo
  • Rich event modeling (MidiEvent, MidiPhrase, etc.) for expressive control
  • Native performance via JNI and C++

Installation

Add to your pubspec.yaml:

dependencies:
	android_midi: ^latest_version

Then run:

flutter pub get

Usage

Import the package:

import 'package:android_midi/android_midi.dart';

Device Enumeration & Connection

final devices = await AndroidMidi().listDevices();
final handle = await AndroidMidi().openMidiDevice(devices.first, devices.first.ports.first);

Sending MIDI Messages

await AndroidMidi().sendNoteOn(handle, 0, 60, 127); // Middle C, max velocity
await AndroidMidi().sendNoteOff(handle, 0, 60, 0);
await AndroidMidi().sendControlChange(handle, 0, 64, 127); // Sustain pedal
await AndroidMidi().sendProgramChange(handle, 0, 5); // Change instrument
await AndroidMidi().sendPitchBend(handle, 0, 8192); // Center position
await AndroidMidi().sendSystemExclusive(handle, [0x7D, 0x10, 0x01]); // Example SysEx

High-Level Musical Helpers

// Play a note for 500ms
await AndroidMidi().playNote(handle, 0, 60, 100, duration: Duration(milliseconds: 500));

// Play a chord
await AndroidMidi().playChord(handle, 0, [60, 64, 67], 100, duration: Duration(seconds: 1));

// Play an arpeggio
await AndroidMidi().playArpeggio(handle, 0, [60, 64, 67], 100, noteDuration: Duration(milliseconds: 200), delayBetweenNotes: Duration(milliseconds: 100));

// Play a musical phrase
final phrase = MidiPhrase(events: [...], tempo: 120.0);
await AndroidMidi().playPhrase(handle, phrase);

Receiving MIDI Data

AndroidMidi().receiveMidiStream(handle).listen((data) {
	// Handle incoming MIDI bytes
});

Refer to the example app in the example/ directory for more usage patterns and API details.

Platform Support

Android only. Native code is implemented in C++ and Kotlin/Java for best performance.

Contributing

Contributions, issues, and feature requests are welcome! Please open an issue or submit a pull request.

License

This project is licensed under the MIT License. See the LICENSE file for details.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors