| |
|
|
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ónCode 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: [...] |
|
|
| 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. |
|
|
| |
|
|
|
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. |
|
|
| |
|
|
|
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... |
|
|
| |
|
|