Einzelnen Beitrag anzeigen

Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Bass.dll kollidiert mit Midi Komponenten

  Alt 27. Jul 2012, 21:45
Kuck mal dieses Stückchen Code an:
Delphi-Quellcode:
case Event.Data1 of
   12 : BassPlayer.PlaySound(path+'C0.WAV',vol);
   13 : BassPlayer.PlaySound(path+'C#0.WAV',vol);
   14 : BassPlayer.PlaySound(path+'D0.WAV',vol);
      [...]
   117 : BassPlayer.PlaySound(path+'A8.WAV',vol);
end;
Ständige Wiederholungen von immer gleichem Code; das ist schlecht!
Mach' Dir eine Unterfunktion, die für jeden Midinote den Namen der Wav-Datei liefert:
Delphi-Quellcode:
function MidiNote2Wav(note:integer):string;
begin
  case note of
   12 : Result := 'C0.WAV';
   13 : Result := 'C#0.WAV';
   14 : result := 'D0.WAV';
      [...]
   117 : result := 'A8.WAV';
  end;
end;
Und dann baust du noch eine Prüfung ein ob die Datei überhaupt existiert:
Delphi-Quellcode:
procedure TForm1.MidiMessageInFile(event: PMidiEvent);
var
  temp:string;
  ex: boolean;
  vol: extended;
  note: integer;
  filename : string;
begin
  Inc(events);
  Label4.Caption := IntToStr(events);
...
  try
    note := Event^.data1;
    filename := path + MidiNote2Wav(note); // NEU
    if not FileExists(filename) then
      ShowMessageFmt('%s nicht vorhanden', [filename]);

    BassPlayer.PlaySound(filename,vol);
  finally
    FreeMem(event);
  end;
  ListBox1.Items.Add(IntToStr(shit));
  PlaySomething;
end;
  Mit Zitat antworten Zitat