Autor Beitrag
Norbert Stellberg
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 16.08.10 18:07 
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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Mo 16.08.10 18:17 
Probier mal

ausblenden 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

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Norbert Stellberg Threadstarter
Hält's aus hier
Beiträge: 6



BeitragVerfasst: Mo 16.08.10 21:30 
Hallo,

vielen Dank. Aber das hatte ich auch schon probiert.

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
Probier mal
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Di 17.08.10 00:36 
user profile iconNorbert Stellberg hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
BASS_ChannelSetSync(handle, BASS_SYNC_MIDI_EVENT, MIDI_EVENT_NOTE, @NoteSyncProc, 0);  //Set the NOTE event sync

procedure NoteSyncProc(handle: HSYNC; channel: DWORD; data: DWORD; user: Pointer); stdcall;
var chan, note, vel: Integer;
begin
  chan := HiWord(data);  //MIDI channel number
  note := LoByte(data);  //note
  vel := HiByte(data);  //velocity
  //do something with that information


Ich hoffe ich hab alles richtig gemacht, ist das erste mal das ich von C/C++ übersetzt habe und dass ich mit CallBacks arbeite.

user profile iconNorbert Stellberg hat folgendes geschrieben Zum zitierten Posting springen:

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:

ausblenden 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));  //Bitte nicht ausprobieren sonst kommen seeehr viele Fenster!
end;

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.