Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

malainhocf

Tocar wma ou mp3 no VB.NET

Recommended Posts

malainhocf

Só falta uma coisa para resolver o caso

tenho o seguinte código, onde está o erro

Private Sub Carregar()
        Dim OFD As String
        OFD = "C:\msucias\musica.wma"
        WMP.URL = OFD

        Randomize()
        WMP.settings.volume = 100
        WMP.settings.balance = 50
        Tocar()
    End Sub

Eu queria que ele toque o arquivo na que está no caminho c:\musicas\musica.wma

O que estou a fazer de errado ?


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
renafi

E o que tens no método Tocar()?

Qual é o erro ao certo?


Oracle Certified Professional - AdministraçãoOracle Certified Professional - Pl/sqlMCPD - Microsoft Certified Professional DeveloperMCTS - Microsoft Certified Technology Specialist

Share this post


Link to post
Share on other sites
malainhocf

Olá, boa noite

O que eu pretendo é que a seguir a tocar um musica toque outra

Como posso fazer isso ?

Tentei o seguinte mas não funcionou

Private Sub AxWindowsMediaPlayer1_EndOfStream(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_EndOfStreamEvent) Handles AxWindowsMediaPlayer1.EndOfStream
        Carregar()
    End Sub

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
malainhocf

Olá, boa noite

Existe um evento para saber quando um arquivo wma ou mp3 acabou de tocar

Porque eu queria tocar uma musica após a outra a assim sempre sem parar

Como faço isso ?

É tipo uma playlist

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
ribeiro55

Cuidado com os múltiplos posts para dizer exactamente a mesma coisa.

Usa EDIT mais vezes.

O evento que julgaste ser o indicado apenas funciona para streams que se façam da web.

Para o que pretendes podes utilizar o "playstatechanged".

Quando a música chega ao fim, o playstate passa para Stopped.

Um exemplo para recomeçar a música quando chega ao fim:

       If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsStopped Then
            AxWindowsMediaPlayer1.Ctlcontrols.play()
        End If

Se chamares o método Stop() o playstate também é stopped, por isso tens de fazer umas flags para controlar se foi o user que fez stop ou se a música chegou ao fim.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
malainhocf

Não funciona

Fiz assim e não funcionou

Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
        If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsStopped Then
            Carregar()

            AxWindowsMediaPlayer1.Ctlcontrols.play()
        End If
    End Sub


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
ribeiro55

Quando eu faço posts com código, garanto sempre que o código vai testado. Aliás, costumo fazer copy-paste do código para aqui assim que fica a trabalhar.

O evento é disparado, sem dúvida, portanto é qualquer coisa dentro desse Carregar().

Mostra lá o que é o Carregar().


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
malainhocf

Olá,

Eu acredito que o teu código seja testado, mas aqui no meu PC não está a funcionar

O carregar é o mesmo que está na wiki

Eu fiz um msgbox("novo") no evento e não apareceu caixa nenuma


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
ribeiro55

PlayerStateChange tem de ser chamado. Não há hipótese nenhuma de não ser disparado. Alguma coisa estás a fazer de errado.

Saca o projecto inteiro aqui.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
malainhocf

Aqui está todo o meu código

.......

Public Class frmMusica

    Public idx As Integer = 0

    Public arraymusicas() As String

    Public sorte As Integer

    Public WMP As New WMPLib.WindowsMediaPlayer

    Public Function Rand(ByVal Low As Long, _
                     ByVal High As Long) As Long
        Randomize()
        Rand = Int((High - Low + 1) * Rnd()) + Low
    End Function

    Private Sub frmMusica_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each Fich As String In FileIO.FileSystem.GetFiles("i:\musica_wma\", FileIO.SearchOption.SearchAllSubDirectories, "*.wma")
            ReDim Preserve arraymusicas(idx)
            arraymusicas(idx) = Fich
            idx = idx + 1
        Next

        sorte = Rand(0, idx - 1)

        Carregar()
    End Sub

    Private Sub Carregar()
        Dim OFD As String
        OFD = arraymusicas(sorte)
        WMP.URL = OFD

        Randomize()
        WMP.settings.volume = 100
        WMP.settings.balance = 50
        Tocar()
    End Sub

    Private Sub Tocar()
        WMP.controls.play()
    End Sub

    Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
        If AxWindowsMediaPlayer1.playState = WMPLib.WMPPlayState.wmppsStopped Then
            AxWindowsMediaPlayer1.Ctlcontrols.play()
        End If
    End Sub
End Class

..................................

Qual será o problema ?


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
ribeiro55

Sacaste o projecto e fizeste o teste?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
ribeiro55

Corre o projecto. Vê se lá ele repete a musica quando chega ao fim.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
malainhocf

Olá a todos, boa tarde,

Há uma maneira de resolver o meu problema doutra maneira

Em vez de procurar o evento de fim da musica para começar outra

Podemos ir por outro caminho

Qual

Cada musica tem um inicio e um fim da musica em termos de tempo em segundos.

Como faria para no ultimo segundo da musica começasse a tocar outra musica aleatóriamente

Obrigado pela ajuda


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
ribeiro55

Se correres, integralmente, o projecto que te disponibilizei para download, não acontece o que pretendes?

Sim, é outra abordagem. Dá de novo uma vista de olhos no artigo que te dei sobre o controlo do Windows Media Player e encontras maneira de apanhar o tempo total e actual da media que está carregada no momento.


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
malainhocf

Olá, saquei o projecto que tu mandas-te mas o projecto que tu mandas-te era para abrir uma janela para escolher um arquivo. O que eu pretendo é que esse arquivo seja aleatório

Quanto a outra maneira de resolver o problema fiz isto

Dim total As Double = WMP.currentMedia.duration

MsgBox(total)

Quando corro o projecto retorna 0

Não sei como resolver o problema

Obrigado


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites
ribeiro55

AH, não é aleatório mas funciona, certo?

Logo, o evento é disparado.

O problema está noutro sítio.

Podes recapitular como estás a fazer esse carregamento aleatório?


Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Share this post


Link to post
Share on other sites
malainhocf

Olá Ribeiro e restantes membros,

O meu código todo é este

...........................................................

Public Class frmMusica

    Public idx As Integer = 0

    Public arraymusicas() As String

    Public sorte As Integer

    Public WMP As New WMPLib.WindowsMediaPlayer

    Public Function Rand(ByVal Low As Long, _
                     ByVal High As Long) As Long
        Randomize()
        Rand = Int((High - Low + 1) * Rnd()) + Low
    End Function

    Private Sub frmMusica_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        For Each Fich As String In FileIO.FileSystem.GetFiles("i:\musica_wma\", FileIO.SearchOption.SearchAllSubDirectories, "*.wma")
            ReDim Preserve arraymusicas(idx)
            arraymusicas(idx) = Fich
            idx = idx + 1
        Next

        sorte = Rand(0, idx - 1)

        Carregar()
    End Sub

    Private Sub Carregar()
        Dim OFD As String
        OFD = arraymusicas(sorte)
        WMP.URL = OFD

        Randomize()
        WMP.settings.volume = 100
        WMP.settings.balance = 50

        Tocar()
    End Sub

    Private Sub Tocar()
        WMP.controls.play()
    End Sub


    Private Sub AxWindowsMediaPlayer1_PlayStateChange(ByVal sender As Object, ByVal e As AxWMPLib._WMPOCXEvents_PlayStateChangeEvent) Handles AxWindowsMediaPlayer1.PlayStateChange
        sorte = Rand(0, idx - 1)

        Carregar()
    End Sub
End Class

...........................................................

Qual será o problema ?


Cumprimentos

Cesar Oliveira

Desenvolvo websites e aplicações web

http://www.profissionalweb.net

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.