Um dos problemas que enfrentei, duas vezes, durante o desenvolvimento do meu projeto Loopyng (problema esse que comentei e expliquei a…
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. | ||
| ||
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. |