O Problema do delay de reprodução no PyGame
0
0

O Problema do delay de reprodução no PyGame

Um dos problemas que enfrentei, duas vezes, durante o desenvolvimento do meu projeto Loopyng (problema esse que comentei e expliquei a…

Renato
0 min
0
0

O Problema do delay de reprodução no PyGame 🕓🐍

Um dos problemas que enfrentei, duas vezes, durante o desenvolvimento do meu projeto Loopyng (problema esse que comentei e expliquei a solução no vídeo sobre o projeto) foi o atraso de um segundo que a função mixer.Sound.play(arquivo_de_audio), da biblioteca PyGame, tem para reproduzir um som. No caso do meu projeto esse atraso, mesmo que pequeno, seria completamente crucial para a funcionalidade correta do programa. O programa em questão tinha como objetivo replicar a funcionalidade de uma loop Station, ou seja, gravação e reprodução em looping e SEM PAUSAS de um audio.

O Problema

Aparentemente a biblioteca PyGame, muito usada para projetos com reprodução de sons , tem uma função de play que, como eu já comentei, foi implementada com um delay de um segundo durante o inicio/final da reprodução de um áudio, impedindo assim que a reprodução seja contínua. Vamos dizer que você vai fazer um joguinho por exemplo, e assim como em jogos antigos você quer que tenha uma música de fundo que toca eternamente para que a mesma entre na cabeça do jogador e mantenha-o imerso na experiência. Você decide usa a função do pyaudios para que, dentro de um laço While, reproduza a musica eternamente.

Mas, quando você coloca a função em prática existe o maldito do delay de 1 segundo entre as reproduções, o que quebra completamente o clima que você queria.

A Solução

A solução, assim que eu te explicar pode parecer óbvia, mas eu demorei um pouco pra ter essa ideia, confesso. Para contornarmos esse obstáculo faremos exatamente isso, contornar o delay: a ideia é conseguir prever o atraso e reproduzir nosso próximo áudio ( ou re-reproduzir o mesmo áudio) no momento preciso de acordo com o que previmos.

Deixa eu te explicar melhor: iremos, com a função get_lenght( ), do próprio PyGame, pegar o tamanho exato do nosso arquivo de áudio, faremos o programa esperar exatamente esse tempo e ai reproduzir nosso áudio novamente, já que a função play da biblioteca reproduz o nosso áudio + 1 segundo de silencio. Segue uma ilustraçãozinha que fiz para explicar essa solução no vídeo sobre o projeto.

Email image

frame da animação que fiz para explicar a resolução no vídeo sobre o Projeto em questão

traduzindo pra código seria mais ou menos isso:

Eu estava construindo esse programa com TKinter, um sistema de interfaces gráficas usado em python, por isso talvez o código pareça estranho, porem a única diferença é na chamada da função init_loop() dentro de init_loop, mas com python comum essa chamada ficaria:

Conclusão

Esse artigo também esta sendo postado no LinkedIn. Esse post é mais voltado para quem está com o mesmo problema que tive, pois na época não achei nada a respeito desse obstáculo que tive, então acho importante ajudar a comunidade de alguma forma. Esse é meu primeiro artigo e por isso ele não foi escrito com maestria como outros que vemos por aqui. Outro motivo para esse texto ter sido escrito é para divulgar o vídeo que fiz sobre o projeto onde tive esse problema, segue o link: Assista aqui. Espero que tenha gostado da leitura ou que o texto tenha te ajudado a resolver algum problema semelhante, espero encontrar e resolver problemas mais complexos para que assim eu possa trazer mais posts como esse.

By Renato Cesar on July 11, 2020.