TMediaPlayer - procedura po přehrátí MP3 – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

TMediaPlayer - procedura po přehrátí MP3 – Delphi – Fórum – Programujte.comTMediaPlayer - procedura po přehrátí MP3 – Delphi – Fórum – Programujte.com

 

Navara0
Návštěvník
7. 7. 2010   #1
-
0
-

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

Nahlásit jako SPAM
IP: 85.70.13.–
KIIV
~ Moderátor
+43
God of flame
7. 7. 2010   #2
-
0
-

ja bych zkusil pohledat, jestli tam neni event konec songu.. nevim nejaky onPlayEnd nebo tak

Nahlásit jako SPAM
IP: 94.142.234.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Navara0
Návštěvník
8. 7. 2010   #3
-
0
-

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

Nahlásit jako SPAM
IP: 85.70.13.–
liborb
~ Redaktor
+18
Guru
8. 7. 2010   #4
-
0
-

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 ...

Nahlásit jako SPAM
IP: 85.207.166.–
Navara0
Návštěvník
8. 7. 2010   #5
-
0
-

Liborb: Ahoj, prosímtě nemohl bys mi tu metodu trošku přiblížit, popřípadě ukázat nějaký příklad kódu? Nevím jak mám soubory spojit či co s nimi provést. Díky ;-)

Nahlásit jako SPAM
IP: 85.70.13.–
liborb
~ Redaktor
+18
Guru
9. 7. 2010   #6
-
0
-

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ě.

Nahlásit jako SPAM
IP: 85.207.166.–
Navara0
Návštěvník
11. 7. 2010   #7
-
0
-

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? ;)

Nahlásit jako SPAM
IP: 85.70.13.–
liborb
~ Redaktor
+18
Guru
12. 7. 2010   #8
-
0
-

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.

Nahlásit jako SPAM
IP: 85.207.166.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý