Spec-Zone .ru
спецификации, руководства, описания, API
ADC домой > Ссылочная библиотека> Ссылка> Аудио> Core Audio> Ссылка Серверной инфраструктуры Core MIDI

 


MIDIDriver.h

Включает:
<CoreFoundation/CFPlugIn.h>
<CoreFoundation/CFPlugInCOM.h>
<CoreFoundation/CFRunLoop.h>
<CoreMIDI/CoreMIDI.h>

Обзор

Это - заголовочный файл для интерфейса драйвера MIDI OS X.

О драйверах MIDI

Драйверами MIDI является CFPlugIns, установленный в следующие места:

    /System/Library/Extensions      -- not recommended for non-Apple drivers, but
                                    necessary for compatibility with CoreMIDI 1.0
    
    /Library/Audio/MIDI Drivers     -- starting with CoreMIDI 1.1
    
    ~/Library/Audio/MIDI Drivers    -- starting with CoreMIDI 1.1

Обратитесь к документации CFPlugIn для получения дополнительной информации о плагинах.

Свойства пакета/плагина драйвера

Водительский пакет настройки должен включать настройки, напоминающие следующее:

    Bundle settings:
        CFBundleIdentifier              String          com.mycompany.midi.driver.mydevice
            (note that this will be the driver's persistent ID in MIDISetup's)
        CFPlugInDynamicRegistration     String          NO
        CFPlugInFactories               Dictionary      1 key/value pair
            [your new factory UUID]     String          [your factory function name]
        CFPlugInTypes                   Dictionary      1 key/value pair
            ECDE9574-0FE4-11D4-BB1A-0050E4CEA526        Array       1 object
                (this is kMIDIDriverTypeID)
                0                       String          [your new factory UUID]
    Build settings:
        WRAPPER_EXTENSION               plugin

Доступ драйвера к CoreMIDI API

Драйверы имеют доступ к большей части CoreMIDI API. Они должны соединиться с

CoreMIDIServer.framework, не CoreMIDI.framework.

В отличие от приложений, драйверы связываются с сервером непосредственно, не через Маха, обменивающегося сообщениями. Это требует некоторых ограничений на контексты от

который драйвер может вызвать сервер.

MIDI функции I/O MIDISend и MIDIReceived можно вызвать от любого потока.

Все другие функции CoreMIDI должны только быть вызваны от основного потока сервера, который является потоком, на котором драйвер создается и из который все вызовы к драйверу кроме

Отправьте (), сделаны.



COM-интерфейсы

MIDIDriverInterface

Интерфейс COM-стиля к драйверу MIDI.



Функции

MIDIDeviceCreate
MIDIDeviceDispose
MIDIDeviceListAddDevice
MIDIDeviceListDispose
MIDIDeviceListGetDevice
MIDIDeviceListGetNumberOfDevices
MIDIDriverEnableMonitoring
MIDIEndpointGetRefCons
MIDIEndpointSetRefCons
MIDIGetDriverDeviceList
MIDIGetDriverIORunLoop

MIDIDeviceCreate


extern OSStatus MIDIDeviceCreate(
    MIDIDriverRef owner, 
    CFStringRef name,
    CFStringRef manufacturer, 
    CFStringRef model,
    MIDIDeviceRef *outDevice) ;  
Параметры
owner

Драйвер, создающий устройство. NULL, если недрайвер.

name

Имя нового устройства.

manufacturer

Имя производителя устройства.

model

Имя модели устройства.

outDevice

По успешному возврату, точкам к недавно создаваемому устройству.

Возвращаемое значение

OSStatus заканчивается код.

Обсуждение

Драйверы вызывают эту функцию для создания новых объектов MIDIDevice, соответствующих присутствующим аппаратным средствам.

Недрайверы могут вызвать эту функцию с CoreMIDI 1.1, к

создайте внешние устройства.

Доступность
Представленный в OS X v10.0.

MIDIDeviceDispose


extern OSStatus MIDIDeviceDispose(
    MIDIDeviceRef device);  
Параметры
device

Устройство, которое будет расположено.

Возвращаемое значение

OSStatus заканчивается код.

Обсуждение

Драйверы могут вызвать эту функцию для расположения объектов MIDIDevice, еще не добавленных к системе через MIDISetupAddDevice.

Как только устройство было добавлено к системе с MIDISetupAddDevice, драйвер не должен использовать этот вызов для уничтожения его; это должно

используйте MIDISetupRemoveDevice, чтобы сделать так.

Недрайверы не имеют доступа к этой функции; они должны вызвать MIDISetupAddDevice и MIDISetupRemoveDevice.

Доступность
Представленный в OS X v10.3.

MIDIDeviceListAddDevice


extern OSStatus MIDIDeviceListAddDevice(
    MIDIDeviceListRef devList,
    MIDIDeviceRef dev) ;  
Параметры
devList

Список устройств.

dev

Устройство для добавления к списку.

Возвращаемое значение

OSStatus заканчивается код.

Обсуждение

Добавьте устройство к списку устройств.

Доступность
Представленный в OS X v10.0.

MIDIDeviceListDispose


extern OSStatus MIDIDeviceListDispose(
    MIDIDeviceListRef devList) ;  
Параметры
devList

Список устройств, который будет расположен.

Возвращаемое значение

OSStatus заканчивается код.

Обсуждение

Расположите список устройств, но не содержавшие устройства.

Доступность
Представленный в OS X v10.1.

MIDIDeviceListGetDevice


extern MIDIDeviceRef MIDIDeviceListGetDevice(
    MIDIDeviceListRef devList,
    ItemCount index0) ;  
Параметры
devList

Список устройств.

deviceIndex0

Индекс (0... MIDIDeviceListGetNumberOfDevices ()-1) устройства для возврата.

Возвращаемое значение

Ссылка на устройство или NULL, если произошла ошибка.

Обсуждение

Возвратите одно из устройств в списке устройств.

Доступность
Представленный в OS X v10.0.

MIDIDeviceListGetNumberOfDevices


extern ItemCount MIDIDeviceListGetNumberOfDevices(
    MIDIDeviceListRef devList) ;  
Параметры
devList

Список устройств.

Возвращаемое значение

Число устройств в списке, или 0, если произошла ошибка.

Обсуждение

Возвращает число устройств в списке устройств.

Доступность
Представленный в OS X v10.0.

MIDIDriverEnableMonitoring


extern OSStatus MIDIDriverEnableMonitoring(
    MIDIDriverRef driver,
    Boolean enabled) ;  
Параметры
driver

Драйвер, Функция монитора которого должна быть включена.

enabled

истина, чтобы позволить контролировать, ложь для отключения его.

Возвращаемое значение

OSStatus заканчивается код.

Обсуждение

Драйвер может выполнить этот вызов для имения передачи MIDIServer это каждый исходящий пакет MIDI всем местам назначения в системе (не просто те, которыми управляют

самостоятельно).

Доступность
Представленный в OS X v10.1.

MIDIEndpointGetRefCons


extern OSStatus MIDIEndpointGetRefCons(
    MIDIEndpointRef endpt, 
    void **ref1,
    void **ref2);  
Параметры
endpt

Конечная точка, refCons которой должны быть возвратом

ref1

На выходе, первом refCon.

ref2

На выходе, втором refCon.

Возвращаемое значение

OSStatus заканчивается код.

Обсуждение

Получите refCons, присвоенный конечным точкам

Доступность
Представленный в OS X v10.0.

MIDIEndpointSetRefCons


extern OSStatus MIDIEndpointSetRefCons(
    MIDIEndpointRef endpt, 
    void *ref1,
    void *ref2);  
Параметры
endpt

Конечная точка, refCons которой должны быть установлены

ref1

Первый refCon.

ref2

Второй refCon.

Возвращаемое значение

OSStatus заканчивается код.

Обсуждение

Драйверам нужен эффективный способ перевести из MIDIEndpoint (источник или место назначения) к их собственному внутреннему соответствию структур данных

та конечная точка. Эта функция обеспечивает путь к драйверу для присвоения его собственного refCons конечным точкам.

Эти refCons пасуются назад к драйверу в Отправлять () и Сброс ()

методы.

RefCons не являются персистентными (т.е. они не сохраняются как часть MIDISetup). Они должны быть повторно инициализированы в каждом вызове для Запуска ().

Типичное использование должно использовать один refCon для обращения к устройству, и секунда

относиться к порту на устройстве.

Доступность
Представленный в OS X v10.0.

MIDIGetDriverDeviceList


extern MIDIDeviceListRef MIDIGetDriverDeviceList(
    MIDIDriverRef driver) ;  
Параметры
driver

Драйвер, устройства которого должны быть возвращены.

Возвращаемое значение

Требуемый список устройств.

Обсуждение

Возвращает список устройств, которые находятся в текущем MIDISetup и создававшихся/владевшихся указанным драйвером.

Возвращенный список устройств должен быть расположен (использование MIDIDeviceListDispose)

вызывающей стороной.

Доступность
Представленный в OS X v10.1.

MIDIGetDriverIORunLoop


extern CFRunLoopRef MIDIGetDriverIORunLoop();  
Возвращаемое значение

CFRunLoopRef драйвера сервера поток I/O.

Обсуждение

Драйверы обычно должны получать асинхронные обратные вызовы завершения I/O на высокоприоритетном потоке. Сохранить драйверы от проблемы

создавая их собственные потоки с этой целью, и сделать эффективное использование системных ресурсов, MIDIServer обеспечивает поток который

драйверы могут использовать.

Драйверы должны выполнить как можно меньше работы в этом потоке; обычно, просто исключение из очереди и кодирующий исходящие пакеты и декодирующий входящие пакеты

в MIDIPacketLists, который будет передан MIDIReceived.

Это - поток приоритета в реальном времени и не должно использоваться ни для чего кроме I/O. Для задач более низкого приоритета драйверы могут использовать runloop который

было текущим, когда они были созданы.

Доступность
Представленный в OS X v10.0.

Константы


kMIDIDriverPropertyUsesSerial


extern const CFStringRef kMIDIDriverPropertyUsesSerial;  
Обсуждение

Эта константа, «MIDIDriverUsesSerial», когда определено к «YES» в водительском пакете, говорит MIDIServer, что драйвер использует последовательные порты и приемлем

присвойте последовательные порты ему.

Когда Запуск последовательного драйвера () метод вызывают, он должен использовать MIDIGetSerialPortOwner для обнаружения, какие последовательные порты он имеет

присвоенный использованию, и только используют те порты.

Новый для CoreMIDI 1.1.

Определения типов


MIDIDeviceListRef


#if __LP64__ 
typedef MIDIObjectRef MIDIDeviceListRef;  
#else 
typedef struct OpaqueMIDIDeviceList* MIDIDeviceListRef;  
#endif  
Обсуждение

MIDIDeviceListRef является списком MIDIDeviceRef. Устройства не принадлежат списку (т.е. расположение списка не располагает

устройства это ссылается).


MIDIDeviceListRef


#if __LP64__ 
typedef MIDIObjectRef MIDIDeviceListRef;  
#else 
typedef struct OpaqueMIDIDeviceList* MIDIDeviceListRef;  
#endif  
Обсуждение

MIDIDeviceListRef является списком MIDIDeviceRef. Устройства не принадлежат списку (т.е. расположение списка не располагает

устройства это ссылается).


MIDIDriverRef


typedef MIDIDriverInterface ** MIDIDriverRef;  
Обсуждение

Точки к указателю на MIDIDriverInterface, структура CFPlugIn (определенный в MIDIDriver.h) содержащий функцию

указатели для водительских методов. Только MIDIServer может вызвать водительские методы.

#defines


kMIDIDriverInterface2ID


UUID для версии 2 интерфейса драйвера MIDI.

#define kMIDIDriverInterface2ID \ 
    CFUUIDGetConstantUUIDWithBytes(NULL, 0x43, 0xC9, 0x8C, 0x3C, 0x30, 0x6C, 0x11, 0xD5, 0xAF, 0x73, 0x00, 0x30, 0x65, 0xA8, 0x30, 0x1E) 
Обсуждение

См. описание структуры MIDIDriverInterface для получения информации о различных версиях интерфейса драйвера MIDI.

Интерфейс драйвера версии 2 является доступным началом с CoreMIDI 1.1.


kMIDIDriverInterfaceID


UUID для версии 1 интерфейса драйвера MIDI.

#define kMIDIDriverInterfaceID \ 
    CFUUIDGetConstantUUIDWithBytes(NULL, 0x49, 0xDF, 0xCA, 0x9E, 0x0F, 0xE5, 0x11, 0xD4, 0x95, 0x0D, 0x00, 0x50, 0xE4, 0xCE, 0xA5, 0x26) 
Обсуждение

См. описание структуры MIDIDriverInterface для получения информации о различных версиях интерфейса драйвера MIDI.


kMIDIDriverTypeID


UUID для плагинов драйвера MIDI.

#define kMIDIDriverTypeID \ 
    CFUUIDGetConstantUUIDWithBytes(NULL, 0xEC, 0xDE, 0x95, 0x74, 0x0F, 0xE4, 0x11, 0xD4, 0xBB, 0x1A, 0x00, 0x50, 0xE4, 0xCE, 0xA5, 0x26) 
Обсуждение

kMIDIDriverTypeID должен быть введен в Ваши водительские настройки пакета следующим образом:

CFPlugInTypes                   Dictionary      1 key/value pair
	ECDE9574-0FE4-11D4-BB1A-0050E4CEA526        Array       1 object
		(this is kMIDIDriverTypeID)
		0                       String          [your new factory UUID]

Последнее обновление: 06.06.2008