Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi
Con un prezzo di 2.999 euro, il Panasonic Z95BEG entra nella fascia ultra-premium dei TV OLED: pannello Primary RGB Tandem, sistema di raffreddamento ThermalFlow, audio Technics integrato e funzioni gaming avanzate lo pongono come un punto di riferimento
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione
Abbiamo provato per diverse settimane il nuovo Magic V5 di HONOR, uno smartphone pieghevole che ci ha davvero stupito. Il device è il più sottile (solo 4.1mm) ma non gli manca praticamente nulla. Potenza garantita dallo Snapdragon 8 Elite, fotocamere di ottima qualità e batteria in silicio-carbonio che garantisce un'ottima autonomia. E il Prezzo? Vi diciamo tutto nella nostra recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-02-2013, 07:45   #1
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
[c++]Ricezione di program change midi da tastiera musicale a pc

Ciao.
Mi addentro in un discorso un po' particolare in quanto io sono programmatore ma per hobby sono anche musicista (suono tastiere elettroniche).
Ora io ho una tastiera che può essere collegata al pc via usb e viene vista come una periferica midi.
La tastiera quando si fanno certe operazioni invia dei messaggi midi di program change agli altri dispositi collegati alle sue porte midi.
Ora immaginiamo che al posto di collegare un altro strumento midi alla tastiera , io collego le uscite midi della mia tastiera agli ingressi midi di una scheda audio usb esterna (m-audio audiophile usb).
Ecco la domanda. Come faccio tramite linguaggio C++ (uso c++ builder 6) a scrivere un programma che acceda alla periferica midi vista da windows e si metta in ascolto dei messaggi midi che arrivano (program change), e mi scriva tutti questi messaggi (normalmente codici alfanumerici) in un file? è possibile?
Grazie!
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2013, 08:41   #2
sottovento
Senior Member
 
L'Avatar di sottovento
 
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
Hai gia' controllato

http://stackoverflow.com/questions/5...me-application

e

http://stackoverflow.com/questions/3...sb-midi-device

Sembrano proprio fare al caso tuo
__________________
In God we trust; all others bring data
sottovento è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2013, 08:49   #3
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
dai un occhio qui http://code.msdn.microsoft.com/windo...earchText&ac=8
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2013, 10:15   #4
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
non sono molto pratico di programmazioni con periferiche windows usb e midi mi date un example code?
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2013, 11:28   #5
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
anch'io suonicchio un D50 ed uso borland builder 6 , conviene iniziare a postare qualche link utile http://msdn.microsoft.com/en-us/library/ms712058.aspx
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2013, 14:20   #6
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
devo importare qualche libreria particolare in c++ builder?
Mi puoi dare una mano a scrivere il codice?
La tastiera quando premo il tasto incrimato manda un messaggio di program change (penso sulla porta midi keyboard). leggendo il manuale questo messaggio dovrebbe contenere anche un numero che è quello che mi interessa recuperare da programma...
Come procedo?
Considerato che collego la tastiera nei midi della scheda audio esterna audiophile usb come faccio a eccedervi da programma?
come richiamo da pc la periferica audiophile usb sezione midi da c++?
qualcuno ha già fatto di queste prove?
ho bisogno di qualcuno che mi aiuti non so da che parte cominciare.
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2013, 15:35   #7
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
il seguente codice si compila tranquillamente con BCB6, non avendo collegato una tastiera MIDI non posso testarlo: fammi sapere

Codice:
#include <conio.h>     /* include for kbhit() and getch() functions */
#include <stdio.h>     /* for printf() function */

#include <windows.h>   /* required before including mmsystem.h */
#include <mmsystem.h>  /* multimedia functions (such as MIDI) for Windows */

int main(int argc, char** argv) {
   int ckey;           // storage for the current keyboard key being pressed
   int notestate = 0;  // keeping track of when the note is on or off
   int velocity = 100; // MIDI note velocity parameter value
   int midiport;       // select which MIDI output port to open
   int flag;           // monitor the status of returning functions
   HMIDIOUT device;    // MIDI device interface for sending MIDI output
 
   // variable which is both an integer and an array of characters:
   union { unsigned long word; unsigned char data[4]; } message;
   // message.data[0] = command byte of the MIDI message, for example: 0x90
   // message.data[1] = first data byte of the MIDI message, for example: 60
   // message.data[2] = second data byte of the MIDI message, for example 100
   // message.data[3] = not used for any MIDI messages, so set to 0
   message.data[0] = 0x90;  // MIDI note-on message (requires to data bytes)
   message.data[1] = 60;    // MIDI note-on message: Key number (60 = middle C)
   message.data[2] = 100;   // MIDI note-on message: Key velocity (100 = loud)
   message.data[3] = 0;     // Unused parameter

   // Assign the MIDI output port number (from input or default to 0)
   if (argc < 2) {
      midiport = 0;
   } else {
      midiport = atoi(argv[1]);
   }
   printf("MIDI output port set to %d.\n", midiport);

   // Open the MIDI output port
   flag = midiOutOpen(&device, midiport, 0, 0, CALLBACK_NULL);
   if (flag != MMSYSERR_NOERROR) {
      printf("Error opening MIDI Output.\n");
      return 1;
   }

   // Main event loop
   printf("Press \"q\" to quit.\n");
   while (1) {         // event loop
      if (kbhit()) {   // If a key on the computer keyboard has been pressed 
         ckey = getch();
         if (notestate == 0) {
            // Note is currently off, turn on note.
            message.data[2] = velocity;
            notestate = 1;
            printf("Note turned ON.\n");
         } else {
            // Note is currently on, turn off note.
            message.data[2] = 0;  // 0 velocity = note off
            notestate = 0;
            printf("Note turned OFF.\n");
         }
         flag = midiOutShortMsg(device, message.word);
         if (flag != MMSYSERR_NOERROR) {
            printf("Warning: MIDI Output is not open.\n");
         }
         if (ckey == 'q') break;
      }
   }

   // turn any MIDI notes currently playing:
   midiOutReset(device);

   // Remove any data in MIDI device and close the MIDI Output port
   midiOutClose(device);

   return 0;
}
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2013, 17:50   #8
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
devo ancora testarlo però mi domando una cosa
1. Come faccio nel codice a sciegliere la scheda audio esterna?
2. Come faccio a leggere se è stato inviato un program change e cosa contiene quel messaggio? Grazie!
penso dovrei leggere il message data che mi invia la tastiera , non modificarlo.
A me interessa leggere i messaggi che arrivano di program change

Ultima modifica di gokuss4 : 02-02-2013 alle 17:54.
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2013, 18:41   #9
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
devi provare il codice e vedere cosa ti ritornano le varie funzioni. Io non ho sottomano una interfaccia MIDI con la quale fare delle prove ma credo che col codice che ti ho postato e con un minimo sforzo da parte tua, si riesca ad ottenere ciò che chiedi.

Dovrebbe essere la midiOutOpen() a fare tutto il lavoro ma devi approfondire il suo funzionamento.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 02-02-2013, 21:29   #10
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
ho installato un midi device di prova.
Ho provato con midi-ox per vedere se riceveva segnali e qui tutto ok
Penso di essere riuscito a capire come aprire la periferica midi corretta.
Ma ora non capisco come stampare a video all'infinito lo stream dei messaggi midi che escono dal device e entrano nel pc...
Ho bisogno di aiuto.
Stavo dando un occhiata alle funzioni dispobili.
ma sembra non ce ne sia nessuna che faccia al caso mio.
Poi una volta che sarò riuscito a capire come stampare tutti i messaggi in entrata (come fa midi-ox) resta da capire come distinguere quelli che si riferiscono a un program change.
Grazie per l'aiuto
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 11:10   #11
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
help.
Per me fare questa cosa è molto importante
grazie a chi mi darà una mano
Buona domenica
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 19:17   #12
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
hai provato a compilare il codice che ti ho postato ed eseguirlo?
Che succede se premi qualche tasto sulla tastiera?
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 19:31   #13
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
non fa niente.
O per lo meno se premo invio sulla tastiera del pc cambia da note on a note off
Ma non è quello deve fare.
Io voglio che si metta in ascolto dei messaggi che arrivano e li stampi a video.
ora come ora non reagisce a input dalla tastiera musicale.
Vorrei ottenere la stampa di tutti i messaggi ... un po come dovrebbe fare midi-ox per esempio.
Grazie mille per l'aiuto che mi stai dando.
per me è molto importante questo programma
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 19:59   #14
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Quote:
Originariamente inviato da gokuss4 Guarda i messaggi
non fa niente.
O per lo meno se premo invio sulla tastiera del pc cambia da note on a note off
Ma non è quello deve fare.
Io voglio che si metta in ascolto dei messaggi che arrivano e li stampi a video.
ora come ora non reagisce a input dalla tastiera musicale.
Vorrei ottenere la stampa di tutti i messaggi ... un po come dovrebbe fare midi-ox per esempio.
Grazie mille per l'aiuto che mi stai dando.
per me è molto importante questo programma
chi cambia da note ON a note OFF la tastiera?


flag = midiOutShortMsg(device, message.word);

Ultima modifica di misterx : 03-02-2013 alle 20:03.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 20:42   #15
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
nessuno ho solo detto che se premo invio sulla tastiera del pc si alternano i due messaggi....
dalla tastiera musicale se schiaccio non succede niente...
un altra cosa:
"The midiOutShortMsg function sends a short MIDI message to the specified MIDI output device."
a quanto pare invia un messaggio su un output device giusto?
Io però devo fare il contrario , ricevere un messaggio che arriva dall'output ...
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 20:46   #16
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
certo, però inizia prima a vedere se PC e tastiera comunicano tra lloro, magari cambiando il tipo di messaggio e poi usi la funzione complementare per leggere messaggi che a naso dovrebbe essere una cosa del tipo midiInShortMsg()
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 03-02-2013, 21:15   #17
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
per cambiare tipo di messaggio come faccio'
perchè guardando il codice lui mette message.word.
che vuol dire .WORD?
si riferisce al vettore message?
io i vettori li chiamo message[0],message[1]... per accedere ai dati
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2013, 11:01   #18
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx

se guaradi la spiegazione i 4 data da 8 bit vengono trasformati in una parola lunga 32 bit.

message.data[0] = 0x90;
message.data[1] = 60;
message.data[2] = 100;
message.data[3] = 0;


High e Low in decimale vengono ordinati in questo modo0
0 -- 100 -- 60 -- 144 = 11001000011110010010000

ed inviati quindi alla periferica midi

p.s.
però questa trattazione tecnica non ci serve per inviare comandi alla tastiera

Ultima modifica di misterx : 04-02-2013 alle 13:25.
misterx è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2013, 21:06   #19
gokuss4
Junior Member
 
Iscritto dal: May 2008
Messaggi: 16
ho provato ma non ottengo nessun risultato.
Sto cominciando a non capirci più nulla...
Non c'è qualche metodo più semplice?
Magari appoggiandosi a midi-ox o un altro linguaggio?
Pensavo fosse semplice recuperare il messaggio di program change invece
gokuss4 è offline   Rispondi citando il messaggio o parte di esso
Old 04-02-2013, 21:29   #20
misterx
Senior Member
 
Iscritto dal: Apr 2001
Città: Milano
Messaggi: 3736
Ti assicuro che a questo livello è ancora semplice. Hai provato a lanciare l'eseguibile passando come argomento 1 ?
misterx è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Recensione Google Pixel 10 Pro XL: uno zoom 100x assurdo sempre in tasca (e molto altro) Recensione Google Pixel 10 Pro XL: uno zoom 100x...
Lenovo IdeaPad Slim 3: un notebook Snapdragon X economico Lenovo IdeaPad Slim 3: un notebook Snapdragon X ...
Arriva Veeam Software Appliance: protezi...
MSI PRO MP252: un ottimo monitor 24,5'' ...
Blackwell B30A: la GPU che la Cina vuole...
Il trifoldable di Samsung potrebbe non e...
Il gioco più venduto su Xbox &egr...
Rubati i filmati di oltre 2.000 videocam...
Battlefield 6 sarà molto violento...
Fastweb + Vodafone: arriva la prima offe...
Netflix lancia la possibilità di ...
Digital Foundry elogia il livello tecnic...
Roborock alza l'asticella a IFA 2025: H6...
Instagram: arriva finalmente l'app nativ...
Alpha Trion, Ultra Magnus e Orion Pax: i...
15 anni di Amazon: ecco come ottenere su...
Il nuovo progetto IA di Apple potrebbe e...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 15:07.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v