Autor Beitrag
blackdrake
Hält's aus hier
Beiträge: 8

Windows XP Professional
D7 Enterprise
BeitragVerfasst: Fr 03.06.05 19:25 
Hallo.

Ich habe einen MediaPlayer programmiert und möchte Dateien vor dem abspielen testen.

Der wichtigste Test ist, ob eine Datei überhaupt eine Audio-Datei ist. Leider habe ich keine Liste der akzeptierten Dateiendungen bei TMediaPlayer gefunden.

Ich habe im Moment folgenden Test gemacht:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
    // Dateien auflisten
    res := FindFirst(Path+'*.*', 0, sr);
    try
      while (res = 0) do
      begin
        if (sr.name <> '.') and (sr.name <> '..') then
        begin
          try
            mediaplayer.FileName := Path+sr.name;
            showmessage(inttostr(mediaplayer.Length));
            // mediaplayer.play;
            lstSongs.items.Add(copy(sr.Name, 0, length(sr.name)-4));
          except
          end;
        end;
        res := FindNext(sr);
      end;
    finally
      FindClose(sr);
    end;


Leider funktioniert das nicht. Die MCI-Exception, die durch eine kaputte Datei hervorgerufen wird, wird nicht abgefangen, obwohl try-except!
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 04.06.05 09:40 
wie währes wenn du nach den endungen gehtst ?
ich glaueb der MediaPlayer kann folgende abspielen:
- Mpeg
- Mp3
- Midi
- Avi
- Rmi
di packst du in einer variabel z.b. so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
function isAudioFile(FileName:TFileName):Boolean;
var
  extList,ext:String;
begin
  extList:='.MPEG.MP3.MIDI.AVI.RMI';
  ext:=UpperCase(ExtractFileExt(FileName)) // in Große buchstaben umwandeln
  if Pos(ext, extList) > 0 then // ist in der liste ?
    result:=True // Ja
  else
    result:=False; // Nein
end;

_________________
MFG
Michael Springwald, "kann kein englisch...."
blackdrake Threadstarter
Hält's aus hier
Beiträge: 8

Windows XP Professional
D7 Enterprise
BeitragVerfasst: Mo 06.06.05 18:38 
Gut, ich werde es mal mit dieser Dateierweiterungsliste versuchen.

Leider unterstützt die MediaPlayer-Komponente nicht jeden WAV-Typ. Windows-PCM scheint beispielsweise nicht zu funktionieren. Wie könnte man die MCI-Meldung trotzdem abfangen und ersetzen?
mimi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3458

Ubuntu, Win XP
Lazarus
BeitragVerfasst: Sa 11.06.05 15:05 
evtl. mit einem try except block ?

_________________
MFG
Michael Springwald, "kann kein englisch...."
blackdrake Threadstarter
Hält's aus hier
Beiträge: 8

Windows XP Professional
D7 Enterprise
BeitragVerfasst: Sa 11.06.05 16:23 
Hallo. Den try-except blockt habe ich schon versucht. Der MCI-Fehler kommt trotzdem.

Beispiel:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure Fehler();
begin
  mediaplayer1.FileName := '';
  try
    mediaplayer1.Open;
  except
    on EMCIDeviceError do showmessage('Fehler');
  end;
end;
alias5000
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 2145

WinXP Prof SP2, Ubuntu 9.04
C/C++(Code::Blocks, VS.NET),A51(Keil),Object Pascal(D2005PE, Turbo Delphi Explorer) C# (VS 2008 Express)
BeitragVerfasst: Sa 11.06.05 16:50 
Ich hab die Lösung. Die unterstützten Dateien hängen immer von den installierten MCI-Codecs ab. D.h. es kann passieren, das auf einem PC mp3 nicht unterstützt werden, auf einem anderen schon. Dafür hab ich irgendwann einmal eine Function geschrieben. Die unterstützten Filter werden in der Win.ini gespeichert. Das Result ist ein Filterstring für einen TOpenDiaqlog. In die Uses-Klausel muss noch : inifiles

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
function GetMCIFilter(Win_iniPath: string; var FilterIndex: integer): string;
var inifile: TIniFile;
sl: TStringList;
i: integer;
s: string;
begin
FilterIndex := 27895;
inifile:= TIniFile.Create((Win_iniPath + 'Win.ini'));
try sl := TStringList.Create;
  try
      if inifile.SectionExists('MCI Extensions.BAK') then
      inifile.ReadSection('MCI Extensions.BAK', sl)
      else if inifile.SectionExists('mci extensions') then inifile.ReadSection('mci extensions', sl);
  finally
  inifile.Free;
  end;
  if sl.Count <> 0 then begin
    for i := 0 to (sl.Count - 1) do begin
        if i = 0 then begin
          s := sl.Strings[i] + ' -Dateien|*.' + sl.Strings[i];
        end
        else begin
          s := s + '|' + sl.Strings[i] + ' -Dateien|*.'  + sl.Strings[i];
        end;
    end;
    i:= 0;
    s := s + '|Alle unterstützten Dateitypen|';
    FilterIndex := (sl.Count + 1);
    for i := 0 to (sl.Count - 1) do begin
      if i <> (sl.Count - 1) then
      s := s + '*.' + sl.Strings[i] + '; '
      else
      s := s + '*.' + sl.Strings[i];
      //if i = 0 then
      //s := s + '*.' + sl.Strings[i]
    end;
    //s := s + '; *.wav; *.mid; *.midi; *.avi';
    //sl.CaseSensitive := false;
    //if (sl.IndexOf('wav') = -1) then s := s + '|Wav -Dateien|*.wav';
    //if (sl.IndexOf('mid') = -1) then s := s + '|Mid(i) -Dateien|*.mid, *.midi';
    //if (sl.IndexOf('avi') = -1) then s := s + '|Avi -Dateien|*.avi';
  end else begin
  s := 'MP3- Track(*.mp3)|*.mp3|{Wav-Dateien(*.wav)|*.wav|AVI-Video(*.avi)|}*.avi|Alle Dateien(*.*)|*.*|MPEG-Video(*.mpg)|*.mpg|CD-Audio(*.cda)|*.cda' + '|Alle unterstützten Typen(*.mp3, *.wav, *.avi, *.mpg, *.cda, *.mid, *.midi, *.wma)|*.mp3;*.wav;*.avi;*.mpg;*.cda;*.mid;*.midi;*.wma|Midi-Files(*.mid, *.midi)|*.mid;*.midi|Windows Media Audio(*.wma)|*.wma';
  FilterIndex := 7;
  end;
finally
sl.Free;
end;
Result := s;
if FilterIndex = 27895 then FilterIndex := 0;
end;

_________________
Programmers never die, they just GOSUB without RETURN