Pergunte aqui
0

Macro para executar som no write ou calc

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

imagem do gravatar de Ronaldo Elias

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

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 SchiavinattoSchiavinatto ( 2018-11-01 23:47:52 +0100 )editar

1 Resposta

2

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

imagem do gravatar de Conrado

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

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 SchiavinattoSchiavinatto ( 2018-11-05 14:14:20 +0100 )editar

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

imagem do gravatar de SchiavinattoSchiavinatto ( 2018-11-05 14:31:28 +0100 )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 +0100 )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 +0100 )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 SchiavinattoSchiavinatto ( 2018-11-05 15:04:32 +0100 )editar

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

imagem do gravatar de ConradoConrado ( 2018-11-05 16:28:40 +0100 )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 +0100 )editar

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

imagem do gravatar de SchiavinattoSchiavinatto ( 2018-11-05 18:01:51 +0100 )editar

Obrigado pela instrução.

imagem do gravatar de Ronaldo EliasRonaldo Elias ( 2018-11-05 19:16:53 +0100 )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 +0100 )editar
1

Oi, @Conrado. Valeu!

imagem do gravatar de BetoBeto ( 2018-11-30 15:32:16 +0100 )editar
Login/Registrar para responder

Ferramentas de perguntas

1 seguidor

Estatísticas

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

Lidas: 104 vezes

Última atualização: Nov 05 '18