Entwickler-Ecke
Multimedia / Grafik - BASS_MIDI_StreamEvent + MIDI_EVENT_NOTE
Norbert Stellberg - Mo 16.08.10 18:07
Titel: BASS_MIDI_StreamEvent + MIDI_EVENT_NOTE
Hallo,
ich habe mal wieder ein BASS Unverständnis.
Aus einem laufenden Midifile möchte ich die Velocity extrahieren.
Ich habe das so gemacht:
Dies läuft in einem Timer:
b:boolean; Note,Vol,vv: DWord;
for i := 0 to 15 do
begin
b:= BASS_MIDI_StreamEvent(Chan,i,MIDI_EVENT_NOTE,vv);
if b then
begin
Note := (vv and $FF);
Vol := (vv Shr 8 ) and $ff;
end;
end;
Laut Doku sollte das richtig sein.
Aber ich erhalte für Note immer der Wert 160 und für Vol immer 255
Was mache ich da falsch? Kann mir jemand helfen?
Mit freundlichen Grüßen
Norbert
elundril - Mo 16.08.10 18:17
Probier mal
Delphi-Quelltext
1: 2:
| Note := LoByte(vv); Vol := HiByte(vv); |
und verwende bitte die [
delphi][/delphi]-Tags für deine Quelltexte hier im Forum.
lg elundril
Norbert Stellberg - Mo 16.08.10 21:30
Hallo,
vielen Dank. Aber das hatte ich auch schon probiert.
elundril hat folgendes geschrieben : |
Probier mal
Delphi-Quelltext 1: 2:
| Note := LoByte(vv); Vol := HiByte(vv); |
|
Im Bass Forum sagte man mit:
dass das so gehen müsse:
BASS_ChannelSetSync(handle, BASS_SYNC_MIDI_EVENT, MIDI_EVENT_NOTE, NoteSyncProc, NULL); // set the NOTE event sync
void CALLBACK NoteSyncProc(HSYNC handle, DWORD channel, DWORD data, void *user)
{
int chan=HIWORD(data); // MIDI channel number
int note=LOBYTE(data); // note
int vel=HIBYTE(data); // velocity
// do something with that information...
}
Und da das wohl C ist, hab ich da keine Ahnung von.
Kannst Du da nochmal helfen?
Und:
Wofür ist das "delphi /delphi" Welche Bewandnis hat das?
Sorry, Ich bin halt ein Newbie........
Mit freundlichen Grüßen
Norbert
elundril - Di 17.08.10 00:36
Norbert Stellberg hat folgendes geschrieben : |
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| BASS_ChannelSetSync(handle, BASS_SYNC_MIDI_EVENT, MIDI_EVENT_NOTE, NoteSyncProc, NULL); // set the NOTE event sync
void CALLBACK NoteSyncProc(HSYNC handle, DWORD channel, DWORD data, void *user) { int chan=HIWORD(data); // MIDI channel number int note=LOBYTE(data); // note int vel=HIBYTE(data); // velocity // do something with that information... } |
Und da das wohl C ist, hab ich da keine Ahnung von.
Kannst Du da nochmal helfen?
|
Ich kann zwar selbst kein C/C++ aber ich versuch es mal:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| BASS_ChannelSetSync(handle, BASS_SYNC_MIDI_EVENT, MIDI_EVENT_NOTE, @NoteSyncProc, 0); procedure NoteSyncProc(handle: HSYNC; channel: DWORD; data: DWORD; user: Pointer); stdcall; var chan, note, vel: Integer; begin chan := HiWord(data); note := LoByte(data); vel := HiByte(data); |
Ich hoffe ich hab alles richtig gemacht, ist das erste mal das ich von C/C++ übersetzt habe und dass ich mit CallBacks arbeite.
Norbert Stellberg hat folgendes geschrieben : |
Und:
Wofür ist das "delphi /delphi" Welche Bewandnis hat das?
Sorry, Ich bin halt ein Newbie........
Mit freundlichen Grüßen
Norbert |
Damit mein ich du sollt vor den Quelltext den du hier im Forum postest ein [
delphi] schreiben und nach dem Quelltext ein [/delphi]. Dann wird dein Quelltext hervorgehoben, so wie hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure foo(var Omfg: String); var i: integer; begin for i := 0 to MaxInt do Showmessage(IntToStr(i)); end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!