Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale
Forte di soluzioni tecniche specifiche, il notebook Acer TravelMate P4 14 abbina dimensioni compatte e buona robustezza per rispondere alle necessità specifiche degli utenti aziendali. La piattaforma AMD Ryzen 7 Pro assicura prestazioni elevate con i tipici ambiti di produttività personale e sul lavoro, mantenendo un'elevata autonomia.
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque
Dal salotto al giardino, il nuovo proiettore laser di Hisense promette esperienze cinematografiche in qualsiasi contesto: qualità d’immagine, semplicità d’uso, versatilità e prezzo competitivo il suo poker d'assi
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


Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il convertibile di classe Lenovo ThinkPad X1 2-in-1 G10 Aura Edition: il c...
Intervista a Stop Killing Games: distruggere videogiochi è come bruciare la musica di Mozart Intervista a Stop Killing Games: distruggere vid...
Xbox: dal prossimo mese verifica dell'id...
Corsair AI Workstation 300: poco pi&ugra...
Addio a Elio Marioli, un pioniere della ...
L'IA sta già diminuendo il potere...
Guida autonoma? Gli ADAS falliscono e in...
Skechers lancia le scarpe per bambini co...
Revolut e Audi F1: un’alleanza rivoluzio...
Gestione attività di Windows 11 d...
Amazon lancia il nuovo videocitofono Bli...
Robot aspirapolvere al top: i nuovi DEEB...
Opera vs Microsoft: la guerra dei browse...
Router e ripetitori FRITZ! in offerta su...
Spotify vola a quota 700 milioni di uten...
Microsoft pronta ad abbandonare il launc...
Windows 11, arriva una feature multimoni...
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: 03:20.


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