Přehrávání mp3 ve VB   zodpovězená otázka

VB.NET

Dobrý den přátelé,

používám VB2005EE. S využitím diskusního fóra jsem si do jednoduché aplikace začlenil Windows Media Player. Zajimalo by mě, zda můžu nějakým jednoduchým způsobem z WMP získat čas přehrávané skladby a přiřadit jej nějakému labelu...ideální by ovšem bylo mít v labelu aktuální zbývající čas do konce skladby. Jsem začátečník, díky:)

Voráč

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Přiznám se, že s WPM jsem ještě nepracoval a tudíž nemám ty zkušenosti.

Ale Vámi popisované lze velice jednoduše udělat za pomocí DirectX:

nejprve si do referencí projektu přidejte knihovny MS.DirectX a MS DirectX.AudioVideoPlayback

Pak už stačí do aplikace dát něco takového:


Imports Microsoft.DirectX.AudioVideoPlayback

Public Class Form1
    Private WithEvents casovac As New Timer
    Private WithEvents aud As Audio
    
 Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
    aud = New Audio("c:\skladba.mp3")

    Label1.Text = aud.Duration.ToString   ' zobrazí délku skladby (v sekundách)
    Label2.Text = Label1.Text             ' dtto
    casovac.Interval = 50                 ' jak často budeme měnit údaj zbývajícího času skladby
    casovac.Start()                       ' spustíme časovač
    aud.Play()                            ' spustíme přehrávání
 End Sub


' vždy když uplyne nastavený čas časovače, zaktualizujeme zbývající čas skladby
Private Sub casovac_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles casovac.Tick
 Label2.Text = (aud.Duration - aud.CurrentPosition).ToString
 casovac.Start()                           ' znovu spustíme odpočítávání
End Sub
End Class

samozřejmě je to pouze idea - jednak by bylo dobré zobrazený čas převést na minuty, sekundy,...

dále je nutné ošetřit ukončení skladby (zastavit časovač,...) - ale to se dá velice dobře odchytit jako událost přehravače

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji za radu, která je jako většina Vašich příspěvků dokonalost sama:) jen jsem se zasekl hned nazačátku:( V referencích projektu jsem nenašel knihovny MS.DirectX a MS DirectX.AudioVideoPlayback. Jsou názvy přesné?

Měl jsem pak ještě jeden bláhový sen v podobě získání informací z ID3 Tagu. V diskusích jsem našel link, ale informace z něj budou asi pro programátory jiného kalibru:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mrkněte tady do nabídky Grafika / DirectX a tam najdete, co potřebujete.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Takže názvy jsou přesné, jenom s tím, že tam není MS ale vypsání Microsoft... (Chtěl jsem si jen ušetřit psaní)

Pokud jste to nenalezl, jsou jen dvě možnosti. Buď na PC nemáte nainstalováno DirectX, nebo jste se špatně koukal.

Tu první variantu velice jednoduše napravíte instalací ze stránek Microsoftu.

K té druhé - jenom pro požádek:

V solution exploreru poklepejte na řádek "My Project"

Otevře se Vám záložka s nastavením projektu.

vlevo si vyberte záložku References

Pod prvním oknem naleznete tlačítko Add - na to zmáčkněte

Objeví se Vám formulář "Add Reference, kde hned na první záložce označení ".NET" sjeďte o něco níže a zde byste měl nalézt několik knihoven s názvem začínajícím Microsoft.DirectX... a jsou zde i ty původně zmiňocvané.

S tím ID tagem Vám, bohužel, neporadím, ale obávám se, že toto je už vlastnost konkrétního formátu (mp3) a tudíž ne relativně obecného přehravače. Proto pro tuto vlastnost asi budete muset jít cestou nějaké speciální API funkce, resp. znát přesnou specifikaci formátu a ze souboru si to vytáhnout sám - ale to už skutečně jen hádám.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Tak tak, DirectX nebyl nainstalován. Už mi vše běhá jak má, jen jestli se můžu zeptat k tomu odchycení konce skladby pomocí události přehravače. Můžete mi to malinko přiblížit.

1000ré díky Voráč:)

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To jsem rád, ža jsem Vám mohl trošku pomoci.

S těma událostma je to celkem jednoduché.

Pro základní funkčnost jsem v té minulé ukázce mohl uvést deklaraci proměnné audiopřehravače jednodušeji, a to

Private aud As Audio

Fungovalo by to úplně stejně.

Pokud ale uvedete deklaraci s tím, že řeknete systému, že má u nově vzniklé instance třídy odposlouchávat různé události, tedy

Private WithEvents aud As Audio

pak se Vám otevřou dveře i k využití dalších možností, které třída nabízí.

Máte-li tu proměnnou deklarovánu tím druhým způsobem (včetně withevents), pak Vám doporučuji jednoduchou cestu:

Nad oknem s kódem třídy Form1 (nebo kde to máte konkrétně umístěno) rozklikněte levý combobox (defaultně se v něm zobrazuje název Vašeho formuláře) a měl byste v něm nalézt položku aud (pokud jste si svou proměnnou nenazval jinak).

A teď koukněte do comboboxu hned vedle (ten pravý, ve kterém asi budete mít defaultně napsáno (Declarations) a objevíte zde všechny události, které daná třída generuje a které tedy můžete odchytávat.

Jinak řečeno, když z tohoto seznamu vyberete třeba tu událost Ending, tak se Vám vygeneruje celá kostra zachytávací funkce:

Private Sub aud_Ending(ByVal sender As Object, ByVal e As System.EventArgs) Handles aud.Ending

End Sub

do jejíhož těla si můžete vložit jakoukoliv funkčnost, jaká Vás napadne (upozornit uživatele, že to skončilo, znepřístupnit tlačítko STOP a naopak zpřístupnit PLAY, atd, atd..)

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ještě bych Vám doporučil stránku, na kterou jsem právě náhodou narazil, a kde byste mohl najít námět jak na ty další vychytávky (ID3 Tag apod.) Je to sice pro C#, ale myslím, že nebude až takový problém z toho tu funkcionalitu přežvýkat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Není nad to, když radím stránku a odkaz zapomenu připojit, co? Jo holt to už bude tím věkem. Omlouvám se a napravuji: http://www.netstudent.cz/%c4%8cl%c3%a1nk...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Konečně jsem se opět dostal k počítači a můžu pokračovat ve svém programátorském trápení, které mě mimochodem celkem baví:) Děkuji Vám za všechny Vaše rady! Budu je v průběhu víkendu zpracovávat:)

Ještě jednou dííííííííííK!!!!

Voráč

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback