Closed Dovyski closed 4 years ago
Acho que esse é um caminho bom para a implementação: https://blog-addpipe-com.cdn.ampproject.org/v/s/blog.addpipe.com/using-webaudiorecorder-js-to-record-audio-on-your-website/amp/?amp_js_v=a3&_gsa=1&usqp=mq331AQFKAGwASA%3D#aoh=15999553282037&csi=1&referrer=https%3A%2F%2Fwww.google.com&_tf=From%20%251%24s&share=https%3A%2F%2Fblog.addpipe.com%2Fusing-webaudiorecorder-js-to-record-audio-on-your-website%2F
Dando um feedback do progresso, o UI simplificado da tela está pronto, ela já está acessível pela seção Experimentos na tela Sobre e eu já comecei a implementar a gravação usando coisas nativas do JS.
Vide um GIF para melhor visualização:
Era pra estar pronto já, pois a gravação está funcionando, mas estou com dificuldade para salvar o áudio (que vem como um Blob).
Para salvar os dados localmente, tu pode converter eles para base64. Para enviar para o servidor, podemos mandar esse base64 mesmo via post.
O único detalhe que falta agora é armazenar o nome do áudio e o base64 numa lista que o app consiga obter quando precisa. Tentei utilizar o IndexedDB, mas tive algumas dificuldades. Portanto, farei uma solução provisória usando LocalStorage mesmo, pois é mais simples e assim a funcionalidade fica funcional. Após isso, mudo para o IndexedDB.
A funcionalidade foi feita utilizando js puro (navigator.mediaDevices
, localStorage
e DOM <audio>
) e já está disponível para testes. Fiz um vídeo mostrando ela funcionando e coloquei no Drive.
Por conta das características da implementação, é necessário realizar testes com o app em um celular para ver como os elementos puros vão se comportar num celular, visto que no navegador é natural que tudo funcione. No entanto, meus testes para rodar o app no celular não deram muito certo, infelizmente.
De qualquer forma, aguardo feedback do resultado.
O resultado ficou fantástico, parabéns, @andrewmsilva 💪 Essa feature será uma das primeiras que colocaremos em produção no app depois que o básico estiver implementado. Por agora, deixamos ela finalizada mas na memória para lapidação/ajuste quando as outras partes básicas estiverem lapidadas no app.
O app do practice precisa ser capaz de gravar audio do microfone do celular do usuário, da mesma forma que o whatsapp/telegram permitem isso. A diferença é que, no nosso caso, usaremos esses audios como narrações de materiais.
O objetivo dessa issue não é desenvolver a tela com a UI/UX necessária para o usuário final. Pelo contrário, o objetivo é desenvolver a funcionalidade básica, que funcione, para que possamos criar a tela depois.
Para isso, na página sobre, colocar em algum local a seção "Experimentos", e lá colocar um link para uma página nova chamada
record-audio.html
. Essa página deve conter um botão de gravar simples, com dois estados (gravar e parar gravação). Algo estilo o mostrado abaixo:"
Não precisa se preocupar com a UI, não é o foco.
Em relação a gravação, ela deve, obrigatoriamente, ser armazenada localmente utilizando IndexedDB. Eu recomendo que a lib idb seja usada para isso. O audio precisa ser armazenado no banco do indexedDb com informações sobre a data de criação e duração.
O usuário pode gravar quantos audios quiser, e todos eles ficam disponíveis para consulta. Os audios já gravados devem ser listados nessa página e o usuário pode ouvir o audio ou apagar ele.