Ir para o conteúdo

 Voltar a Linguagem NCL
Tela cheia

Delay entre a execução de dois audios

25 de Março de 2008, 9:25 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 31 vezes

Olá pessoal,

estou tendo problemas para executar dois audios com um tempo de delay entre eles.

O que eu quero fazer: gostaria de exibir um audio em loop, porém com delay entre uma execução e outra, até a interação do usuário. Quando o usuário selecionar uma dada imagem o audio deve parar.

Problema encontrado: eu consigo exibir o audio em loop com delay, porém quando o usuário seleciona a imagem durante o 'tempo de delay' o audio continua em execução. O audio pára sua execução somente quando o usuário seleciona a imagem durante a execução do audio.

Gostaria de saber opiniões sobre o assunto.

Obrigada.

Aline Manera

 

 

Autor: Aline Manera


99 comentários

  • F2f3bd0120dfa3a5e181322e398bfb07?only path=false&size=50&d=404Bengt Karlsson(usuário não autenticado)
    25 de Março de 2008, 19:46

     

    Gostei do seu problema, comecei a tentar resolvê-lo aqui. Você explicou direitinho, ficou fácil de entender o que você não conseguiu fazer. Já tenho um código como o seu, uma media em loop e o meu connector de abort também não consegue encerrar o vídeo (usei um vídeo no lugar do áudio) durante o delay.

    A única solução que eu pensei, de imediato, seria o uso de um indicador, um nó de settings com um atributo variando entre 0 ou 1 mesmo, pra saber se o botão foi pressionado ou não, mas ficaria um pouco sujo. O connector de 'onEndStart' não pode fazer a checagem do valor, porque a condição é checada no final do vídeo e o botão é pressionado durante o delay. Talvez, se o seu connector iniciasse uma mídia intermediária, e essa mídia tivesse um connector 'onBeginAttNodeTestStartStop' que, no início da mídia intermediária, verificasse o nó de settings para saber se a 'flag' estava ativa, para aí sim iniciar o seu áudio e se encerrar, esta idéia funcionasse.

    Tirando a falha do meu exemplo, que este connector não encerraria a mídia intermediária quando o botão fosse pressionado, eu consigo visualizar uma solução para o seu problema seguindo esta idéia.

    Ficou meio bagunçado, é só um pensamento em voz alta, mas é uma opinião.

    []'s Bengt.

    • 3997f871fae2fc64c385e399f16a7836?only path=false&size=50&d=404Aline Manera(usuário não autenticado)
      26 de Março de 2008, 13:09

       

      Deu pra entender sim.Vou tentar fazer isso aqui...

      Mto Obrigada.

      Aline Manera 

       

      • F2f3bd0120dfa3a5e181322e398bfb07?only path=false&size=50&d=404Bengt Karlsson(usuário não autenticado)
        26 de Março de 2008, 16:35

         

        Nossa, li umas 3 vezes o que eu escrevi ontem e cada vez que eu lia, parecia mais errado o que eu escrevi...

        Tive uma ideia simples que funcionou. Ao inves de usar delay, sua aplicacao reveza entre seu audio e um no intermediario com duracao explicita do delay que vc quer. Quando o audio acaba, inicia o no, quando o no acaba, inicia o audio. A selecao da imagem aborta ambas. O que acha?

        E BEM menos sujo que a gambiarra que eu postei anteriormente, hehehe.

        []'s
         

        • 3997f871fae2fc64c385e399f16a7836?only path=false&size=50&d=404Aline Manera(usuário não autenticado)
          28 de Março de 2008, 14:00

           

          Parece ser mais simples. Esse nó intermediário seria um outro audio 'nulo' por exemplo ? Ou o que??

          Obrigada pela atenção.

          • F2f3bd0120dfa3a5e181322e398bfb07?only path=false&size=50&d=404Bengt Karlsson(usuário não autenticado)
            28 de Março de 2008, 18:42

             

            Eu usei uma imagem que já era utilizada na aplicação pra evitar carregar mais arquivos. Seria o mesmo que tocar o seu áudo, mas teria que colocar o 'soundLevel' pra 0, aí eu preferi usar a imagem mesmo.

            Mas talvez exista uma forma melhor de fazer isso, será que ninguém tem outra sugestão?

            []'s Bengt.

             

            • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
              31 de Março de 2008, 18:55

               

              Olá,

              Estava acompanhando o papo e postergando ao máximo a intervenção.

              O primeiro pensamento que tive foi usar um contexto. Depois que o preparei, notei que não funciona porque o problema desse exemplo é que a condição do elo já está satisfeita ao final do áudio (no exemplo abaixo usei um vídeo), então não tem como evitar o disparo da condição parando o contexto em que o elo está.

              Segue o código com contexto que NÃO FUNCIONA. A seguir, mando uma mensagem com uma nova idéia.

              <?xml version="1.0" encoding="ISO-8859-1"?>
              <ncl xsi:schemaLocation="http://www.ncl.org.br/NCL3.0/EDTVProfile www.​ncl.​org.​br/N​CL3.​0/pr​ofil​es/N​CL30​EDTV​.xsd​" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.ncl.org.br/NCL3.0/EDTVProfile" id="pLoopDelay">

              <!--
               Arquivos necessarios: abertura.mpg e botao_vermelho.gif no mesmo diretorio deste arquivo.
              -->

              <head>
               <regionBase>
                <region id="rgTV">
                 <region id="rgVideo" width="50%" height="50%"/>
                 <region id="rgBotao" width="10%" height="10%" zIndex="3"/>
                </region>
               </regionBase>
               
               <descriptorBase>
                <descriptor id="dVideo" region="rgVideo"/>
                <descriptor id="dBotao" region="rgBotao"/>
               </descriptorBase>

               <connectorBase>
                <causalConnector id="onENTERSelectionAbort">
                 <simpleCondition role="onSelection" key="ENTER"/>
                 <simpleAction role="abort"/>
                </causalConnector>
                <causalConnector id="onEndStartDelay3s">
                 <simpleCondition role="onEnd"/>
                 <simpleAction role="start" delay="3s"/>
                </causalConnector>
               </connectorBase>
              </head>
              <body>
               <port id="pMain1" component="cMain" interface="pVideo"/>
               <port id="pMain2" component="cMain" interface="pBotao"/>

               <context id="cMain">
                <port id="pVideo" component="video"/>
                <port id="pBotao" component="botao"/>
                <media id="video" src="abertura.mpg" descriptor="dVideo"/>
                <media id="botao" src="botao_vermelho.gif" descriptor="dBotao"/>
                <link xconnector="onEndStartDelay3s">
                 <linkParam name="delay" value="3s"/>
                 <bind role="onEnd" component="video"/>
                 <bind role="start" component="video"/>
                </link>
               </context>
               <link xconnector="onENTERSelectionAbort">
                <bind role="onSelection" component="cMain" interface="pBotao"/>
                <bind role="abort" component="cMain"/>
               </link>
              </body>
              </ncl>

               

              • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
                31 de Março de 2008, 19:12

                 

                Um equívoco ...

                No post anterior, não era necessária essa linha:

                <linkParam name="delay" value="3s"/>

                Isso porque não parametrizei os conectores para ficar mais simples (em detrimento a isso, o conector só funciona para o delay fixo de 3s).

                Em suma, a idéia seria parar o contexto em que está o botão e o vídeo (não usei áudio mas a idéia é a mesma) para parar o elo, mas isso não ocorre já que a condição já foi satisfeita.

                O resultado é que o comportamento é o esperado enquanto o vídeo está sendo exibido. Durante o delay, no entanto, o comportamento não é o esperado.

                P.S.: Para executar o exemplo acima, será necessário um vídeo abertura.mpg e outro botao_vermelho.gif.

                • 820d3515c25dc6c1319875ee4fed9224?only path=false&size=50&d=404Carlos de Salles Soares Neto(usuário não autenticado)
                  31 de Março de 2008, 20:40

                   

                  Deixe-me tentar dar um desfecho na trilha.

                  Uma solução que deve funcionar bem é fazer uma pausa no áudio.

                  A idéia em passos:

                  1) Colocar uma âncora no final do áudio (digamos que o id do áudio seja "audioNode"), chamaremos a âncora de "aPause";

                  <area id="aPause" begin="??? aqui coloca o segundo final do áudio ???" />

                  2) Colocar um elo para pausar o áudio no início da âncora aPause:

                  <link xconnector="onBeginPause">
                  <bind role="onBegin" component="audioNode" interface="aPause"/>
                  <bind role="pause" component=""audioNode"/>
                  </link>

                  3) Colocar um outro áudio para fazer o resume 3 segundos depois (ou quantos segundos quiser de intervalo):

                  <link xconnector="onBeginResumeDelay">
                  <bind role="onBegin" component="audioNode" interface="aPause">
                  <bindParam name="delay" value="3s"/>
                  </bind>
                  <bind role="resume" component=""audioNode"/>
                  </link>

                  4) E o loop continua igual:

                  <link xconnector="onEndStart">
                  <bind role="onEnd" component="audioNode"/>
                  <bind role="start" component="audioNode"/>
                  </link>

                  5) O resto fica igual.

                  Fica melhor assim? O que acham?

                  Gostei muito desta trilha por ela envolver uma séria dificuldade de concepção. Não é fácil para um programador NCL que está começando perceber como conceber uma idéia limpa.

                  Isso se deve principalmente porque a forma que todos pensariam a implementação é a forma que foi sugerida no início da trilha. Isso envolve um problema conceitual: por definição, não se pode evitar um elo cuja condição já foi disparada. Através da pausa do nó, o problema fica resolvido de forma mais simples.

                  Uma outra possível solução poderia envolver testar o estado do botão que aparece na tela antes de fazer o restart do áudio, mas sou discípulo da simplicidade.

                  Abraços,
                  Carlos

                  • F2f3bd0120dfa3a5e181322e398bfb07?only path=false&size=50&d=404Bengt Karlsson(usuário não autenticado)
                    2 de Abril de 2008, 15:38

                     

                    Agora sim uma forma de evitar que o nó de áudio se perca (encerre e recomece 'x' segundos depois) e que não seja preciso o uso de mais nós que não fazem nada.

                    Gostei da solução :)
                     

Concurso ITU-T de Aplicações para IPTV 2012

13 de Agosto de 2012, 19:38, por Desconhecido

Gostaríamos de lembrar aos possíveis interessados que o prazo de registro para participação no Concurso ITU-T de Aplicações para IPTV 2012 (IPTV Application Challenge) se encerra nesta semana, dia 15 de agosto de 2012. Já o prazo para a submissão de aplicações se encerra no dia 07 de setembro de 2012.



NCL Eclipse 1.6 disponível

10 de Janeiro de 2012, 21:19, por Desconhecido

Caros membros da Comunidade Ginga,



Concursos de Aplicações Ginga-NCL

22 de Setembro de 2011, 3:22, por Desconhecido

    Gostaríamos de relembra-los de que há dois concursos de aplicações Ginga-NCL com inscrições ainda abertas. O convite é aberto a toda a comunidade de desenvolvedores de aplicações para o Middleware Ginga-NCL, em nível internacional. São os seguintes concursos:



Novas versões: Ginga e Ginga-NCL Virtual Set-top Box (v.0.12.3)

1 de Agosto de 2011, 20:58, por Desconhecido



Algumas Boas Notícias da Comunidade Ginga

28 de Julho de 2011, 21:31, por Desconhecido

Autor: Roberto Azevedo