Español
Fuente/ Codesnippets

Api Midi Per Sound Wiedergeben Winmmdll

 

Jörg
Sellmeyer
Como me el Profano-Syntax des Play-Befehls a unflexibel es, Yo después de Alternativen gesucht.
Nach ausführlichem Studium verschiedener Webseiten y el Code de Sebastian Sprengers Piano-Trainer [...]  Yo lo endlich rausbekommen, como Midi-Api funktioniert. Como lo sólo de XProfan11 se ejecuta, Yo auch una EXE beigefügt.
(en el Zip-Expediente es una aktualisiert Exe, con un pocos (rudimentären) grafischen Ausgaben el Töne)
Hier es el Resultat. Yo Por favor, en Tests y Rückmeldungen.
KompilierenMarcaSeparación
Code von Jörg Sellmeyer für die Profangemeinschaft

Proc MidiPlayInstrument

    Parameters hMidiDevice&,Instrument%,Channel%,Ton%,Volume%
    Declare b#
    Dim b#,8
    MidiOutShortMsg(hMidiDevice&,Instrument% * 256 + $C * 16 + Channel%)
     $C = Statusbyte zum Einstellen des Kanals
    Byte b#,0=$9 * 16 + Channel%,Ton%,Volume%,0
     $9 = Statusbyte zum Einschalten des Tones
    MidiOutShortMsg(hMidiDevice&,Long(b#,0))
    Dispose b#

EndProc

Proc MidiChannelVolume

EndProc

Proc PlayAccord

    Parameters hMidiDevice&,Instrument%,GrundTon%,Volume%
    MidiPlayInstrument(hMidiDevice&,Instrument%,5,GrundTon%,Volume%)
    MidiPlayInstrument(hMidiDevice&,Instrument%,6,GrundTon% + 5,Volume%)
    MidiPlayInstrument(hMidiDevice&,Instrument%,7,GrundTon% + 7,Volume%)

EndProc

WindowTitle "Virtual Keith Jarrett"
Cls
Set("Decimals",0)
Var hWinMMDll& = ImportDll("WINMM","")
Declare Dev#,lpHMidiOut#,shMsg#,Tick&
Dim lpHMidiOut#,16
Dim Dev#,52
print MidiOutGetNumDevs(0,Dev#,52),"Gerät(e) vorhanden"

If MidiOutGetNumDevs(0,Dev#,52) > 0

    ClearList

    WhileLoop MidiOutGetNumDevs(0,Dev#,52)

        MidiOutGetDevCapsA(0,Dev#,52)
        AddString Char$(Dev#,8,31)
        Print "Taste",&Loop,"für: q";Char$(Dev#,8,31);"q drücken"

    Wend

Else

    Print "Kein Midifähiges Gerät gefunden :("
    Print "Beliebige Eingabe beendet das Programm"
    WaitInput
    End

EndIf

Print "Welche Nummer?"
Declare Nr%
Input Nr%
Print "Device",Nr% - 1,"gewählt"
CaseNot Nr%:End
Case Nr% > MidiOutGetNumDevs(0,Dev#,52):End
MidiOutOpen(lpHMidiOut#,Nr% - 1,0,0,0)
Var Midi& = Long(lpHMidiOut#,0)
Randomize
Print "ESC zum Beenden drücken"
Declare n1%,n2%,n1alt%,n2alt%
Locate 8,1
Declare Takt&,Takte&

WhileLoop 1000

    Case IsKey(27):Break

    If &Loop Mod (1 + Rnd(6))

        n1% = 40 + Rnd(60)
        Case n1alt%:MidiPlayInstrument(Midi&,0,0,n1%,0)
        n1alt% = n1%
        MidiPlayInstrument(Midi&,Rnd(4),0,n1%,40 + Rnd(88))

    ElseIf &Loop Mod (1 + Rnd(6))

        n2% = 40 + Rnd(60)
        Case n2alt%:MidiPlayInstrument(Midi&,Rnd(4),1,n2alt%,40 + Rnd(88))
        n2alt% = n2%
        MidiPlayInstrument(Midi&,0,1,n2%,0)

    EndIf

    midiOutSetVolume(Midi&,MakeLong((78 + Rnd(50)) * 256,(78 + Rnd(50)) * 256))
    Tick& = &GetTickcount
    Sleep 125 + (Rnd(141) - 70)
    Tick& = &GetTickcount - Tick&
    Case Rnd(20) = 4:PlayAccord(Midi&,3,Rnd(40) + 30,80 + Rnd(48))

    If Takt& >= 1000

        Locate %CsrLin,1
        Print "                    "
        Print "                    "
        Print "                    "
        Locate 8,1
        Clear Takt&
        midiOutSetVolume(Midi&,$7F007F00)

    EndIf

    Add Takt&,Tick&
    Print Format$(" 000",Tick&),Format$("  000%",Tick& / 125 * 100),Format$("  0000",Takt&)

Wend

MidiOutReset(Midi&)
Locate 25,1
Print "Das war eine vom Computer qimprovisierteq Suite"
waitinput
FreeDll hWinMMDll&
MidiOutClose<
a class=s2>(Midi&) End

Ach sí: Bitte auch veces que aquí testen: [...] 

447 kB
Hochgeladen:01.09.2008
Ladeanzahl290
Descargar
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
01.09.2008  
 




Dieter
Zornow
En me hats sin Problemas funktioniert, habe sólo el código getestet
 
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai., Win 7 32 bit und Win 7 64 bit, mit XProfan X2
01.09.2008  
 



Funktioniert (furchtbar!) schön! Tal vez debería manchmal todavía zwischen Moll y Dur umhergeschalten voluntad - y mancher Multiseptimakkord (de y a) sería todos algo abrunden.
 
01.09.2008  
 




Jörg
Sellmeyer
IF
Funktioniert (furchtbar!) schön! Tal vez debería manchmal todavía zwischen Moll y Dur umhergeschalten voluntad - y mancher Multiseptimakkord (de y a) sería todos algo abrunden.


Wenn mein aktuelles Programa, para welches Yo el con el WINMM.DLL sólo veces ausgetüftelt habe, fertig es, voluntad Yo veces a la virtuellen Klavierspieler redactar, el Musik después de Wunsch juega. Mit Reglern para:
Klassik---------------------------+------------------------Pop

Straight-----------------------------------------+---------Jazzy

Rhythmisch-------------+-------------------------------Frei


 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
01.09.2008  
 



Einfach sólo una schöne Drum-Machine (welche se encima una Midi-Temporegler en el Geschwindigkeit ändern lässt) wäre wohl einmalig! Posesiones el con el Knobs al Synth rausbekommen y por lo tanto el Knob-Control programmiert gehabt. Das Control zeigt me el genaue Drehung - el Werte esta kann Yo also ansagen.
 
01.09.2008  
 




Jörg
Sellmeyer
An algo como Ähnlichem arbeite Yo gerade.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
01.09.2008  
 




Sebastian
Sprenger
Hi Jörg,
scheint a trabajo, aber ehrlich dijo kann Puedo usar el Harmonien incluso (qué fürn Jazz es el?? ) y el Ausgaben no viel anfangen.

Ein pocos Tipps voluntad Yo dir veces geben:

midiOutGetNumDevs  ha el falsche Parameterzahl (3 en lugar de 0; se en el ImportDLL  no überprüft? Apéndice: Si divulgar bastante überlege, kann lo wohl kaum...)
Usted puede para una Akkord ruhig denselben Kanal angeben (en una MIDI-Kanal puede mehrere verschiedene Töne gleichzeitig klingen).
Bitte no el Lautstärkeregelung meines Systems ändern!! Tal vez wusstest du aber simplemente sólo todavía no, cómo el Lautstärke uno Kanals ändert:
KompilierenMarcaSeparación
 $B = ControlChange
 $07 = ChannelVolume
midiOutShortMsg(hMidiDevice&, $07B0 | Channel% | Volume% << 16)re>
Saludo, Sebastian
 
Profan² 7.0e, XProfan 9, 11.2a, FreeProfan32
Windows Vista Home Premium 32-Bit, 2.8 Ghz, 4 GB RAM
Windows Me, 1.8 Ghz, 256 MB RAM
01.09.2008  
 




Jörg
Sellmeyer
¡Hola SSebastian,


midiOutGetNumDevs

Hm - aber como Yo doch drei Parámetro... Das Yo de paso de Deinem Piano Trainer y lo war el erste Función, el Yo verwendet habe, en überhaupt veces una bischen de lo que el a verstehen, qué como abläuft

Yo bin como siempre todavía schwer al rumexperimentieren. Diese ganzen Statusbits y Messages son ya algo undurchschaubar, finde Yo.
¿Cómo se puede uno porque una Instrument en el Stereobild mover? Oder es el Midikanal-Volume genauso geregelt, como en midiOutSetVolume?
Auf cada Fall Gracias para el Tips. Kann bien ser, Yo todavía una paarmal nachhake, wenns bastante es.

Saludo
Jörg

Ach así: el Zahlenausgaben son unerheblich, aber el Striche, (el allerdings sólo en el Exe vorkommen), puede ser como Noten(positionen) en el Takt ansehen.
 
Windows XP SP2 XProfan X4
... und hier mal was ganz anderes als Profan ...
02.09.2008  
 




Sebastian
Sprenger
Jörg Sellmeyer
aber como Yo doch drei Parámetro...

El drei Parámetro en midiOutGetDevCaps  son correcto. Usted übergibst aber a midiOutGetNumDevs  ebenfalls drei Parámetro, obwohl dafür no vorgesehen son.
Jörg Sellmeyer
¿Cómo se puede uno porque una Instrument en el Stereobild mover?

Ähnlich como ChannelVolume, sólo $0A en lugar de el $07:
KompilierenMarcaSeparación
 $B = ControlChange
 $0A = PanPot
midiOutShortMsg(hMidiDevice&, $0AB0 | Channel% | PanPot% << 16)re>
Beispielwerte:
0 = bastante links
64 = mittig
127 = bastante rechts

Jörg Sellmeyer
Kann bien ser, Yo todavía una paarmal nachhake, wenns bastante es.

Nur a - eigentlich voluntad Yo bastante gerne con Fragen gelöchert - zumindest, si yo no gerade en el Schule bin...
Saludo, Sebastian
 
Profan² 7.0e, XProfan 9, 11.2a, FreeProfan32
Windows Vista Home Premium 32-Bit, 2.8 Ghz, 4 GB RAM
Windows Me, 1.8 Ghz, 256 MB RAM
02.09.2008  
 




Frank
Abbing
Huch, grad sólo entdeckt, sorry.
Man, mein Computer es völlig unmusikalisch, hätte mehr de ihm esperado...
 
16.10.2008  
 



Zum Quelltext


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

12.781 Views

Untitledvor 0 min.
Sven Bader14.10.2021
p.specht10.11.2019
Michael W.26.02.2019
Jörg Sellmeyer22.01.2019
Más...

Themeninformationen



Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie