Ir para o conteúdo
  • 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

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.