62 lines
2.2 KiB
Swift
Vendored
62 lines
2.2 KiB
Swift
Vendored
import Flutter
|
|
import UIKit
|
|
import AVFoundation
|
|
|
|
public class SwiftFlutterMidiPlugin: NSObject, FlutterPlugin {
|
|
var message = "Please Send Message"
|
|
var _arguments = [String: Any]()
|
|
var au: AudioUnitMIDISynth!
|
|
|
|
public static func register(with registrar: FlutterPluginRegistrar) {
|
|
let channel = FlutterMethodChannel(name: "flutter_midi", binaryMessenger: registrar.messenger())
|
|
let instance = SwiftFlutterMidiPlugin()
|
|
registrar.addMethodCallDelegate(instance, channel: channel)
|
|
}
|
|
|
|
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
|
|
switch call.method {
|
|
case "prepare_midi":
|
|
let map = call.arguments as? Dictionary<String, String>
|
|
let data = map?["path"]
|
|
let url = URL(fileURLWithPath: data!)
|
|
au = AudioUnitMIDISynth(soundfont: url)
|
|
print("Valid URL: \(url)")
|
|
let message = "Prepared Sound Font"
|
|
result(message)
|
|
case "change_sound":
|
|
let map = call.arguments as? Dictionary<String, String>
|
|
let data = map?["path"]
|
|
let url = URL(fileURLWithPath: data!)
|
|
au.prepare(soundfont: url)
|
|
print("Valid URL: \(url)")
|
|
let message = "Prepared Sound Font"
|
|
result(message)
|
|
case "unmute":
|
|
do {
|
|
try AVAudioSession.sharedInstance().setCategory(AVAudioSession.Category.playback)
|
|
} catch {
|
|
print(error)
|
|
}
|
|
let message = "unmuted Device"
|
|
result(message)
|
|
case "play_midi_note":
|
|
_arguments = call.arguments as! [String : Any];
|
|
let midi = _arguments["note"] as? Int
|
|
let velocity = _arguments["velocity"] as? Int
|
|
au.playPitch(midi: midi ?? 60, velocity: velocity ?? 64)
|
|
let message = "Playing: \(String(describing: midi!))"
|
|
result(message)
|
|
case "stop_midi_note":
|
|
_arguments = call.arguments as! [String : Any];
|
|
let midi = _arguments["note"] as? Int
|
|
let velocity = _arguments["velocity"] as? Int
|
|
au.stopPitch(midi: midi ?? 60, velocity: velocity ?? 64)
|
|
let message = "Stopped: \(String(describing: midi!))"
|
|
result(message)
|
|
default:
|
|
result(FlutterMethodNotImplemented)
|
|
break
|
|
}
|
|
}
|
|
}
|