aud_midi_apple 0.1.1 copy "aud_midi_apple: ^0.1.1" to clipboard
aud_midi_apple: ^0.1.1 copied to clipboard

CoreMIDI, CoreBluetooth and network session backend for aud_midi on macOS and iOS

example/aud_midi_apple_example.dart

// @license
// Copyright (c) Audanika
//
// Use of this source code is governed by terms that can be
// found in the LICENSE file in the root of this package.

import 'package:aud_midi_apple/aud_midi_apple.dart';
import 'package:aud_midi_core/aud_midi_core.dart';
import 'package:aud_midi_standard/aud_midi_standard.dart';

// Lists the CoreMIDI ports, opens all inputs and plays a MIDI 2.0 note on a
// virtual source that other apps can listen to. In apps, the engine of
// aud_midi_core hosts the backend; this host just prints.
Future<void> main() async {
  final backend = AppleMidiBackend();
  await backend.start(_PrintingHost());

  for (final port in backend.ports) {
    print(
      '${port.id} ${port.direction.name} ${port.name} '
      '(${port.transport.name}, ${port.protocol.name}, ${port.state.name})',
    );
    if (port.isInput) await backend.openPort(port.id);
  }

  final source = await backend.create(
    MidiVirtualPortSpec(
      name: 'aud_midi_apple example',
      direction: MidiDirection.output,
      protocol: MidiProtocol.midi2,
    ),
  );
  // MIDI 2.0 Note On and Note Off of middle C on group 0, channel 0. A
  // virtual source sends at once; the engine schedules for such ports.
  const clock = MidiSystemClock();
  await backend.send(
    source.id,
    MidiUmpPacket(words: const [0x40903c00, 0xc8000000], time: clock.now()),
  );
  await Future<void>.delayed(const Duration(milliseconds: 500));
  await backend.send(
    source.id,
    MidiUmpPacket(words: const [0x40803c00, 0x00000000], time: clock.now()),
  );

  await Future<void>.delayed(const Duration(seconds: 1));
  await backend.stop();
}

final class _PrintingHost implements MidiBackendHost {
  @override
  final MidiClock clock = const MidiSystemClock();

  @override
  void portsChanged(List<MidiPortEvent> events) => events.forEach(print);

  @override
  void received(MidiPortId port, MidiPacket packet) => print('$port $packet');

  @override
  void diagnostic(MidiDiagnostic diagnostic) => print(diagnostic);
}
0
likes
160
points
389
downloads

Documentation

API reference

Publisher

verified publisheraudanika.com

Weekly Downloads

CoreMIDI, CoreBluetooth and network session backend for aud_midi on macOS and iOS

Repository (GitHub)
View/report issues

Topics

#midi #audio #music

License

MIT (license)

Dependencies

aud_midi_core, aud_midi_standard, code_assets, ffi, hooks, native_toolchain_c, objective_c

More

Packages that depend on aud_midi_apple