У меня есть следующий код, где я хочу, чтобы функция Mymidinotifyproc была вызвана, чтобы уведомить меня о изменениях в устройствах MIDI, подключенных к устройствам iOS.
Однако, как ни странно, это никогда не вызывается, когда я подключаю или отключаю устройства - в чем может быть проблема? < /p>
Спасибо. Помогите очень ценить. < /p>
void MyMIDINotifyProc (const MIDINotification *message, void *refCon) {
printf("MIDI Notify, messageId=%d,", (int)message->messageID);
}
/* csound MIDI input open callback, sets the device for input */
static int MidiInDeviceOpen(CSOUND *csound, void **userData, const char *dev)
{
int k = 0;
//6counter++;
endpoints = 0;
CFStringRef name = NULL, cname = NULL, pname = NULL;
CFStringEncoding defaultEncoding = CFStringGetSystemEncoding();
MIDIClientRef mclient = NULL;
MIDIPortRef mport = NULL;
MIDIEndpointRef endpoint;
MIDIdata *mdata = (MIDIdata *) malloc(DSIZE*sizeof(MIDIdata));
OSStatus ret;
cdata *refcon = (cdata *) malloc(sizeof(cdata));
memset(mdata, 0, sizeof(MIDIdata)*DSIZE);
refcon->mdata = mdata;
refcon->p = 0;
refcon->q = 0;
refcon->pnot = refcon->pchn = 0;
cname = CFStringCreateWithCString(NULL, "my client", defaultEncoding);
ret = MIDIClientCreate(cname, MyMIDINotifyProc, refcon, &mclient);
if(!ret){
/* MIDI output port */
pname = CFStringCreateWithCString(NULL, "outport", defaultEncoding);
ret = MIDIInputPortCreate(mclient, pname, ReadProc, refcon, &mport);
if(!ret){
/* sources, we connect to all available input sources */
endpoints = MIDIGetNumberOfSources();
csoundMessage(csound, "midi srcs %d\n", endpoints);
midiDevicesArray = malloc(endpoints*sizeof(CFStringRef));
for(k=0; k < endpoints; k++){
endpoint = MIDIGetSource(k);
void *srcRefCon = endpoint;
MIDIPortConnectSource(mport, endpoint, srcRefCon);
// insert into dictionary instead ?
midiDevicesArray[k] = ConnectedEndpointName(endpoint);
}
}
}
refcon->mclient = mclient;
*userData = (void*) refcon;
if(name) CFRelease(name);
if(pname) CFRelease(pname);
if(cname) CFRelease(cname);
/* report success */
return 0;
}
Подробнее здесь: https://stackoverflow.com/questions/190 ... ing-called
MidicLientCreate notifyproc не вызывается ⇐ IOS
Программируем под IOS
1748841773
Anonymous
У меня есть следующий код, где я хочу, чтобы функция Mymidinotifyproc была вызвана, чтобы уведомить меня о изменениях в устройствах MIDI, подключенных к устройствам iOS.
Однако, как ни странно, это никогда не вызывается, когда я подключаю или отключаю устройства - в чем может быть проблема? < /p>
Спасибо. Помогите очень ценить. < /p>
void MyMIDINotifyProc (const MIDINotification *message, void *refCon) {
printf("MIDI Notify, messageId=%d,", (int)message->messageID);
}
/* csound MIDI input open callback, sets the device for input */
static int MidiInDeviceOpen(CSOUND *csound, void **userData, const char *dev)
{
int k = 0;
//6counter++;
endpoints = 0;
CFStringRef name = NULL, cname = NULL, pname = NULL;
CFStringEncoding defaultEncoding = CFStringGetSystemEncoding();
MIDIClientRef mclient = NULL;
MIDIPortRef mport = NULL;
MIDIEndpointRef endpoint;
MIDIdata *mdata = (MIDIdata *) malloc(DSIZE*sizeof(MIDIdata));
OSStatus ret;
cdata *refcon = (cdata *) malloc(sizeof(cdata));
memset(mdata, 0, sizeof(MIDIdata)*DSIZE);
refcon->mdata = mdata;
refcon->p = 0;
refcon->q = 0;
refcon->pnot = refcon->pchn = 0;
cname = CFStringCreateWithCString(NULL, "my client", defaultEncoding);
ret = MIDIClientCreate(cname, MyMIDINotifyProc, refcon, &mclient);
if(!ret){
/* MIDI output port */
pname = CFStringCreateWithCString(NULL, "outport", defaultEncoding);
ret = MIDIInputPortCreate(mclient, pname, ReadProc, refcon, &mport);
if(!ret){
/* sources, we connect to all available input sources */
endpoints = MIDIGetNumberOfSources();
csoundMessage(csound, "midi srcs %d\n", endpoints);
midiDevicesArray = malloc(endpoints*sizeof(CFStringRef));
for(k=0; k < endpoints; k++){
endpoint = MIDIGetSource(k);
void *srcRefCon = endpoint;
MIDIPortConnectSource(mport, endpoint, srcRefCon);
// insert into dictionary instead ?
midiDevicesArray[k] = ConnectedEndpointName(endpoint);
}
}
}
refcon->mclient = mclient;
*userData = (void*) refcon;
if(name) CFRelease(name);
if(pname) CFRelease(pname);
if(cname) CFRelease(cname);
/* report success */
return 0;
}
Подробнее здесь: [url]https://stackoverflow.com/questions/19002598/midiclientcreate-notifyproc-not-getting-called[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия