Domanda

Sto scrivendo un programma che converte OSC in MIDI, consentendo alle applicazioni abilitate OSC (come il touchosc sul mio iPhone) di controllare le applicazioni abilitate MIDI (Sibelius, Ableton Live e così via).

Sto usando Python per creare un server OSC e convertire da OSC in MIDI. Per portare MIDI all'applicazione in questione, sto producendo MIDI al driver Apple IAC, che viene quindi abilitato come input all'interno del programma in questione.

Qualcuno sa di un mezzo per configurare a livello di programmazione i dispositivi MIDI Mac? In particolare, devo abilitare il driver IAC, che è disabilitato per impostazione predefinita.

Usando Filemon, ho osservato che Audio MIDI Setup.App modifica questo file quando si abilita/disabilita il driver IAC:

~/Preferences/Byhost/com.apple.midi.0017f2cxxxx.plist

Il numero 0017f2cxxxxx è il mio sistema ioplatformuuid. È un semplice elenco di proprietà XML, ma sono diffidente nel scrivere direttamente. Anche se lo facessi, presumibilmente avrei dovuto causare il processo del server MIDI per rileggerlo in qualche modo?

Infine, sto diventando sempre più consapevole del fatto che l'uso del driver IAC è una bella soluzione Naff - per un inizio funziona solo su Mac! Idealmente, scriverei un driver midi loopback e tutti i miei problemi sarebbero risolti ...

È stato utile?

Soluzione

Il tuo sospetto di scrivere direttamente al plist è corretto - probabilmente non dovresti farlo. Non sono sicuro al 100% di questo, ma ho la sensazione che il plist rifletta lo stato del dispositivo MIDI, ma alterarlo non aprirà o chiuderà quel dispositivo MIDI di cui hai bisogno.

Per aprire effettivamente il dispositivo MIDI, potresti usare qualcosa di simile Pygame. L'ho usato per alcuni progetti relativi all'audio e l'SDK è molto semplice e facile da lavorare. Poiché Python non ha un grande supporto per MIDI direttamente, questa è probabilmente la tua scommessa migliore (a corto di scrivere tu stesso il modulo Python C, il che sarebbe piuttosto doloroso).

Per quanto riguarda IAC, è un peccato che gli altri sistemi operativi non vengano con dispositivi MIDI virtuali come questo. IAC è molto utile e bravo in quello che fa. Quindi, mentre fai affidamento su IAC per qualcosa del genere non sarebbe multipiattaforma, è possibile scrivere uno strato di astrazione per manipolare il dispositivo di loopback. Per gli utenti di Windows, è possibile consigliare un file dispositivo di loopback MIDI gratuito da utilizzare con il tuo software.

Altri suggerimenti

Se vuoi inviare OSC a MIDI, è meglio creare una porta MIDI virtuale nel software, piuttosto cercando di configurare in remoto un IAC. Questa porta virtuale verrà visualizzata in Ableton ecc. In modo da poterlo controllare a livello di programmazione.

Puoi farlo usando il Rtmidi-Python biblioteca (o più anziana e leggermente diversa Pyrtmidi) - Entrambi basati sulla piattaforma crociata rtmidi Lib che prevede l'invio semplice di controllo MIDI e note:

import rtmidi_python as rtmidi

vmidi_out = rtmidi.MidiOut()
vmidi_out.open_virtual_port('My Virtual MIDI Output Port')

vmidi_out.send_message([0x90, 48, 100]) # Note on
vmidi_out.send_message([176, 7, 100]) # Control Change - Volume 

Lo stesso Pygame usa Portmidi sotto il cappuccio. Se non hai bisogno di tutta la libreria Pygame, forse questo può essere utile per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top