Pergunte aqui
0

Macro para executar som no write ou calc

perguntadas 2018-11-01 23:22:11 +0200

imagem do gravatar de Ronaldo Elias

updated 2019-03-01 18:10:33 +0200

Boa noite,

Tem alguma macro para executar som no write ou calc. Agradeço.

editar alterar tag assinalar como ofensivo fechar mesclar Excluir

Comentários

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-11-01 23:47:52 +0200 )editar

1 Resposta

2

respondidas 2018-11-05 13:46:42 +0200

imagem do gravatar de Conrado

updated 2018-11-05 17:59:34 +0200

Olá @Ronaldo Elias,

Tem este também:

REM  *****  BASIC  *****

Sub Main
   PlaySound("C:\Users\Public\Music\Sample Music\Alert.mp3")
End Sub

Sub PlaySound(i_soundpath as string)
     dim oPlayer1 as object
     dim sUrlSound as string
     dim oSounMgr as object
     Dim Time as Double

     'if  bInit then
     if not isnull(oSounMgr) then
         S_Start_New
         exit sub
     endif

     'sUrlSound = F_get_Sound_URL("MySound.mp3")
     sUrlSound = ConvertToUrl(i_soundpath)

     If not fileexists(sUrlSound) Then       
         msgbox sUrlSound & " does not exist",16
     else
        If GetGuiType() = 1 Then
            oSounMgr = CreateUnoService("com.sun.star.media.Manager_DirectX")
        Else
        '.comp. was not documented !!
            oSounMgr = CreateUnoService("com.sun.star.comp.media.Manager_GStreamer")
                                        'com.sun.star.media.Manager_GStreamer
        End If
        If IsNull(oSounMgr) Then
           msgbox "Sound Mgr not set",16
        else
            oPlayer1 = oSounMgr.createPlayer(sUrlSound)
            oPlayer1.setMediaTime(0.0)
            oPlayer1.setVolumeDB(-10)
            'msgbox oPlayer1.getduration()
            Time = oPlayer1.getduration() * 1000 'Pega o tempo do áudio e multiplica por 1000 para ser utilizado na instrução Wait, processada em milisegundos
            oPlayer1.setPlayBackLoop( 0 )
            oPlayer1.start(0)

           'Aguarda o tempo do áudio para dar continuídade com o procedimento
           Wait Time

           oPlayer1 = nothing
           oSounMgr = nothing
           msgbox "som encerrado",16
        End If
     End If
End Sub

Fonte: https://forum.openoffice.org/en/forum...

@Beto, este código está em libre, e funciona com mp3.


A pedidos do @Gilberto SChivinatto, alterei a instrução para que pegasse o tempo do áudio multiplicado por 1000, e adicionei o procedimento Wait (lido em milisegundos), para que após o tempo de execução do áudio, ele finalize o procedimento.

Segue arquivo

editar assinalar como ofensivo Excluir Link mais

Comentários

Muito bom @Conrado, funcionando.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-11-05 14:14:20 +0200 )editar

@Conrado, Não querendo abusar, sabe como desligar, pois mesmo acabando a musica a macro permanece ligada.

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-11-05 14:31:28 +0200 )editar

@Gilberto Schiavinatto , pelo teste que fiz aqui, a música fica tocando até que ela termine seu tempo, mesmo pausando a macro. Vou dar uma analisada e mais uma fuçada para fazer uns testes. Vou colocar um som de alerta para verificar também.

imagem do gravatar de ConradoConrado ( 2018-11-05 14:33:01 +0200 )editar

@Gilberto Schivinatto, fiz um download de um áudio de 2s de alerta neste site http://soundbible.com/tags-alert.html . Coloquei a macro para rodar, e acionou o áudio apenas no tempo do som. Esta parte do código, é a responsável pela continuação da macro até que o som termine:

 while oPlayer1.isplaying()
              doevents
 wend

Enquanto o som tocar, ela fica repetindo While, Wend - doesevents (faça o procedimento, traduzindo o código)

imagem do gravatar de ConradoConrado ( 2018-11-05 14:40:01 +0200 )editar

Se acionar uma segunda macro via Botão, funciona, mas se for diretamente onde se escreve a macro esta bloqueada, a musica da macro anterior, mesmo terminada fica ativa.

Descrição da imagem

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-11-05 15:04:32 +0200 )editar

@Gilberto Schiavinatto, você chegou a testar com a correção que fiz?

imagem do gravatar de ConradoConrado ( 2018-11-05 16:28:40 +0200 )editar

Ótimo @Gilberto Schiavinatto, só uma pergunta, fez o teste com áudio maior que 2s? (avaliando no caso do 2000 ms colocado como Integer). Na versão que coloquei, ele aguarda exatamente o tempo que o áudio tem, em double no caso, por conta de áudios com tempos quebrados. Fiz os testes com a versão que corrigi, e a macro finaliza normalmente. Outra coisa, está multiplicando o tempo do áudio por 2s (2000 ms). Caso o áudio tenha 5 min (300s) ficará com 600s o procedimento WAIT

imagem do gravatar de ConradoConrado ( 2018-11-05 17:19:50 +0200 )editar

Ok @Conrado, entendi/executei errado, desculpe-me o seu esta Ok....

imagem do gravatar de Gilberto SchiavinattoGilberto Schiavinatto ( 2018-11-05 18:01:51 +0200 )editar

Obrigado pela instrução.

imagem do gravatar de Ronaldo EliasRonaldo Elias ( 2018-11-05 19:16:53 +0200 )editar

@Gilberto Schiavinatto, sem problemas, estamos todos aqui para aprender...essa para mim é nova também.

@Ronaldo Elias, se deu certo a instrução, indique como resposta correta para que outras pessoas possam identificar também. Agradeço.

imagem do gravatar de ConradoConrado ( 2018-11-05 19:38:23 +0200 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

Perguntadas: 2018-11-01 23:22:11 +0200

Lidas: 50 vezes

Última atualização: Nov 05 '18