Ahojte, mám dotaz. Potřebuji nějakým způsobem udělat, aby se po skončení přehrávání MP3 souboru v TMediaPlayeru zavolala určitá procedura procedura, která otevře v tom samém přehrávači další MP3 (adresa dalšího souboru je předem napsaná). Jde ale o to, aby otevření a start přehrávání dalšího souboru bylo co nejrychlejěí.
Zkoušel jsem to pomocí Timeru který porovnává Position a Length na přehrávači a hlídá kdy se hodnoty vyrovnají, ale občas to nefunguje nebo to funguje podivně... existuje nějaké rychlejší řešení? Díky
Fórum › Delphi
TMediaPlayer - procedura po přehrátí MP3
Takový event jsem tam nenašel, není tam. Vyřešil jsem to jinak, ale nastal jiný problém:
Když takhle prohazuji několik souborů, u některých (obvzlášť u těch krátkých, cca do vteřiny) se stává že se začnou přehrávat od půlky, nepomáhá před spuštěním přehrávání ani Rewind ani .Position := 0...
Jelikož je to prográmek kterej je něco na způsob počítačového hlasatele v nádraží, tak když hlášení vypadá takho "Vlak ..át odjede od ..átého ..piště" tak je to divný. Lze nějak udělat, aby soubor se vždycky přehrál od úplněho začátku a přehrávač nepřeskakoval první kousíčky souborů? Dík
Na hlášení složené z více mp3 částí jsme kdysi "vymysleli" takovou "fintu". Využije se toho, že mp3 je stream. Ty samozřejmě víš, které soubory budeš přehrávat, takže před samotným přehráním je spojíš do jednoho souboru. Normálně ty soubory slepíš a výsledek přehraješ. Máš zaručené mezery, máš zaručené plynulé pokračování, máš zaručené, že se to nebude trhat, kousat, přeskakovat ...
Než to začneš smažit v Delphi, tak si to vyzkoušej v příkazovém řádku nebo například s pomocí TotalCommanderu. Princip je opravdu tak jednoduchý, jak jsem psal. Vezmeš ty soubory a slepíš je (spojíš je). Bajtově, surově, žádný slitování :smile1: . A pak ten výsledný přehraješ.
V Delphi to pak bude stejné ... otevřeš si (temp) soubor pro zápis, postupně budeš otevírat soubory (pro čtení) v pořadí, jak se mají přehrávat, budeš načítat jejich obsah a zapisovat ho do temp souboru. Výsledný soubor nakonec podstrčíš přehrávací komponentě.
To liborb : Tak jsem vyskoušel TotalCMD i příkazovej řádek:
copy kus1.mp3+kus2.mp3+kus3.mp3 vysledek.mp3
což funguje naprosto výborně, ale naučit to Delphi se mi nedaří, skouším to tak nějak se Stringy a kdovíjak, např takhle:
var kousek, vysledek: TFileStream
kousek := TFileStream.Create('nejaky_kousek.mp3', fmOpenRead or fmShareDenyWrite) ;
vysledek := TFileStream.Create('vysledek.mp3', fmCreate or fmShareExclusive) ;
vysledek.CopyFrom(kousek, kousek.Size) ;
vysledek.Free;
kousek.Free;
Ale vždycky se provede jenom to, že výsledné soubory se rovnají, čili ne že by se 'kousek' přidal na konec 'vysledku' ale obsah kousku nahradí obsah výsledku. Ještě jsem našel něco na způsob otevírání výsledku pomocí Append, ale to platí jenom na textové soubory. Neporadil by jsi mi jak Delphi naučit, aby přidával soubor na konec místo toho aby nahrazoval? ;)
Pokud něco takového nefunguje:
var kousek1, kousek2, kousek3, vysledek: TFileStream
kousek1 := TFileStream.Create('nejaky_kousek1.mp3', fmOpenRead or fmShareDenyWrite) ;
kousek2 := TFileStream.Create('nejaky_kousek2.mp3', fmOpenRead or fmShareDenyWrite) ;
kousek3 := TFileStream.Create('nejaky_kousek3.mp3', fmOpenRead or fmShareDenyWrite) ;
vysledek := TFileStream.Create('vysledek.mp3', fmCreate or fmShareExclusive) ;
vysledek.CopyFrom(kousek1, kousek1.Size) ;
vysledek.CopyFrom(kousek2, kousek2.Size) ;
vysledek.CopyFrom(kousek3, kousek3.Size) ;
vysledek.Free;
kousek1.Free;
kousek2.Free;
kousek3.Free;
tak použij WinAPI funkce CreateFile, ReadFile a WriteFile, protože s nimi to takto určitě půjde.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Přehrátí videa v openGL? — založil hlp
Přehrátí dvou wav souborů zároveň (paralelně) — založil Honza
Chybějící procedura — založil Ulu_Mulu