GamerPlayer pt1

 



GAMERPLAYER


Gravar um audio ou gravar uma tela não é uma tarefa complicada.

Porem sincronizar o audio e o video é sim muito difícil ,ao meu ver e não foi uma tarefa fácil esta aplicação utiliza a plataforma jdk8 apesar de eu estar utilizando o nb27 a plataforma  não é a atual
acredito que neste exato momento é o JDK 27 esta será a ultima pastagem utilizando o JFX no jdk8 aqui no blog

Porque apesar de ser uma plataforma estável os níveis de segurança foram completamente atualizados Portanto não faz sentido continuar programando no jdk8 já que os aplicativos podem não funcionar no JDK atual.

  eu escolhi uma taxa de 48000, 16, 2,para audios e  18000hz  16bit 2 canais estéreo pra ser gravado como audio do sistema no momento da gravação da tela isso pesa muito na memoria porem pode ser melhorado e bem sincronizado pra o que precisamos

No momento apenas pra fazer gravação de voz pelo microfone foi escolhido a mesma taxa de audio mais com uma diferencia ,onde a gravação é feita apenas com 1 canal no modo mono ficaria muito leve com uma qualidade de audio razoavelmente boa pra configuração de um i3 acredito que em um i5 ja nao vai ter nenhum problema de compatibilidade


A gravação da tela utilizando uma biblioteca JavaCV é muito ampla e este artigo não aborda tudo que é necessário a intenção primeiramente reconhecimentos de objetos  porem porem não neste artigo

 Mais de acordo com os documentos da Oracle  a gravação pesa muito quando utilizadas com varias threads acaba tendo error se nao bem configurada na hora de escrever o código

o java fx precisa ler e grava utilizando algumas codificações especificas 

tive alguns problemas que duraram dias pra ser resolvidos porem algumas informações ja foram repassadas na roadmap do javafx 2.0 onde declara quais arquivos e containes de audio e videos são suportados

https://docs.oracle.com/javafx/2/api/javafx/scene/media/package-summary.html

nesta aplicaçao é utilizado este formato pra ser utilizado na gravaçao...asim a aplicaçao poderar ser gravada e visualizada em grande parte dos leitores de audio e video ...inclusive em varios outros dispositivos


 


eu nao tenho muita experiencial em gravações de audio utilizando o java porem precisava criar um aplicativo ou dispositivo que permita gravar a tela enquanto eu jogo um MMX5 em um emulador de psx2 porem utilizei enquanto jogava em emuladores de snes e n64 tambem e obtive bons resultados.

Meu computador no momento que estou testando o aplicativo é um Win10 64x , i3 ,3.0ghz e 4gb de memoria e placa e video acoplada na placa mae ...quando estou gravando a 9.0 fps do Game Player0.1 a um atraso ou adianto no momento da gravação mesmo utilizando 60 fps da emulação do emulador do ps1... 

Em um outro notebook com configuração de um win11 64x i5 3.0ghz com 8 de RAM nao ouve atraso no audio com 8 de fps no GamePlayer a 60 fps do emulador.. mais acredito que ate o final dos artigos isso ja devo ter corrigido este pequeno detalhe (error) .


Nao achei muitos artigos na Internet mais alguns dizem que pra ter uma gravação perfeita é necessário uma boa configuração no código alem de  que algumas fornecedores de placa de video possuem chips dedicados na placa de video para fazer esta compactação na hora da gravação de alguns videos e audios, algumas placas de audio também tem esta função e geralmente elas nao fazem a compressão de audio e video utilizando a memoria e processador da cpu...ela utiliza a memoria da própria placa de video e audio por isso nao a error no momento da gravação portanto cada chip é responsável por guardar estes bufereds para ser compactados e gravados

este aplicativo é feito na possibilidade de poder gravar a tela do dispositivo enquanto o dispositivo é utilizado também pode gravar audio do microfone  é possível gravar e identificar rosto ou objectos a frente da webcam ate mesmo reconhecer voz ...mais nem todos estes processos vao ser explicado mais acredito que deixarei alguns links que pode ajudar se voce esta a procura destas informações também vou fazer uma atualização assim que terminar outros projetos.

As bibliotecas e recursos que nao tiver neste artigo vais estar no próximo com a plataforma  atualizada.


video do aplicativo





 Como estou com muito ocupado pra criar projetos e poder praticar eu desenvolvi esta aplicaçao nas horas que tenho nos "finais de semana". Nao tive muito problema para escrever o código porque a Oracle disponibiliza uma ampla documentação. As classes e bibliotecas necessárias para o desenvolvimento de javasond e javacv como é uma aplicação de pratica e estudo nao acho que seja necessário utilizar algum recurso de IA pra fazer o meu codigo... entao talvez o aplicativo nao fique tao interessante e talvez com certeza vai ser bam mais fácil entender...

Se desejar ler alguns materiais antes de iniciar este artigo

JavaFX livro JavaFX_Introduction_by_example

Javasond https://docs.oracle.com/javase/tutorial/sound/index.html

https://docs.oracle.com/javase/8/docs/technotes/guides/sound/programmer_guide/contents.html

ou um dos meus preferidos  como o javafx 1.2

o javafx martering 

ou o projavafx  platform


Espero que você tenha uma boa leitura e goste deste artigo


 acredito que explicar todas classes utilizadas e a maneira que foram utilizadas ficaria extremamente trabalhoso ,eu precisaria de tempo pra preparar um conteúdo completo porem nas próximas atualizaçoes deste aplicativo pode ter algo mais completo.


 ... o java 8 mudou muito  hoje, estamos na versão 26 o acesso a jvm pelo javafx mudou um pouco alem do mais as bibliotecas e classes jrs apartir da 16 serão preciso ter   permissão ou assinaturas necessárias  para funcionar correctamente...portanto mesmo que o aplicativo consiga se ser executado pela jvm algumas bibliotecas e classes podem não ser lidas e acabar gerando error " quebrando "o aplicativo e nao fornecendo as permiçoes  necesarias para acessar as librarys


Isso vai acontecer porque o aplicativo utiliza o javasdk independente alem de librarys como jakarta e javacv para reconhecimento de rostos e gravação e o javasond para gravação  audio do microfone e sistema e o ffpeg para juntar arquivos de audio e video

"Uma soluçao é utilizar a jdk8 por padrao acredito que pra quem utiliza marvem para seus projetos padrao consiga estas bibliotecas de maneiras mais estavel porem pra algumas bibliotecas e recursos especificos o java pode esta trabalhando nisso pra uma atualizaçao em brevemente... "

Apesar que o javafx estar voltando ser uma opção para o java sendo incluído novamente na jdk como uma biblioteca de interface rica "Tambem pode ser possível baixar uma sdk independente oferecida pela comunidades da oracle , glum , opemFX  e outras comunidades

Este aplicativo foi escrito no apache netbens 25 utilizando o JDK8, ja que o requisito mínimo era a estabilidade do projeto porem agora a questão e se poderemos utilizar futuramente apartir do javafx 27 ou JDK27 ..... porque testei no JDK 26 e utilizando o SDK do JFX26 para a interface gráfica

Porem acredito que sim as classes das bibliotecas podem ser acessadas  através de assinaturas ou de algumas configurações da VMOptions

espero que faça uma boa leitura :s


 estrutura da interface e controle




a classe  Sondsjfx é a classe principal atravez dela iremos acessar todas a outras classes principalmente a de gravação de tela ou reconhecimento de rostos

nao tive a preocupação de criar classes  private todas poderiam ser acessadas como  publicas








controles e medias de e audio de vídeos no Javafx

"O JFX nao possui mais pacotes capaz de capturar audios do sistema e nem gravar" porem sempre foi possivel acessar pacotes da library javasond

Isso vai ser aplicado assim que possível por enquanto vamos comentar como utilizar controles medias no javafx ,para poder acessar os audios e vídeos gerados na tela atravez do javacv e do javasond

primeiramente trataremos o audio 

longe de uma aplicaçao super avançada eu gostaria de lembrar que alem da própria documentação o javafx tem alguns artigo comentado no livro javafx definitivo volume 2 possui exemplos muito interessante de como utilizar javafx media, entao neste artigo é utilizado uma cleasse dedicada as midias geradas pela aplicação

em questão sobre o fxml ou css pode se   voce pode obtyer mais detalhes aqui


Gravação de audio do microfone e do sistema

para gravar um audio no java existe algumas maneira mais neste artigo iremos utilizar as classes necessárias contidas no pacote do opencv e do javasond ou seja podemos utilizar uma library pra isso ou apenas utilizar as classes que estao disponíveis apartir no jdk1.5

diagrama de classes do javasond

quando estou construindo um sistema como este imagino algumas situações como "e se o microfone não estiver ligado ou se estiver sendo utilizado por outra aplicação?" algumas situações precisaram ser contornadas por tanto vou deixar esta ancora aqui pra comentarmos mais tarde 

a partir daqui precisamos saber algumas definições necessarias para compreender como funcionar o javasond



confirmaçao de miofone ligado

fiz uma clase especifica pra cer assessada atravez da clase principal ,esta classe acesssa as classes nessessarias pra verificar se o microfone esta ligado ou pra poder parar a gravaçao do microfone...alem de  controlar algumas funçoes emcapsulada sprimeira mente criaremos uma tarefa task para executar e escutar os botoes de pause e rec (Gravaçao de audio)

assim que o aplicativo é iniciado 
a um verificador que acessa a classe de gravaçao de audio e executa o metodo emcapsulado para verificaçao repare:
na classe sondfx.java criamos uma clase e uma funçao de chamada

public static recs_fx  rec=new recs_fx();//rec de audio
 recs_fx.setVerifycador( );//verificar o rec

na classe recfx (classe responsavel por gravar o audio parar a gravaçao e verificar microfones e parametros)

esta funçao vai iniciar uma tarefa task para manter leve a aplicaçao de manaira quase inmmperceptiva
iniciando  linha de audio com os parametros corretos de gravaçao do audio format conceguimis fazer uma escuta de teste assim o audio format quando iniciado e finalizado corretamente pode reconhecer uma linha de entrada no microfone informando se o microfone esta ligado ou nao
 porem apenas isso nao vai garantir uma gravaçao portanto aqui fica outra ancora pra o proximo artigo 
indentificar os hardware e drives de audio e entrada mixer no sistema
classes nessessarias
basicas nessessarias pra criaçao
 rec
...

 
  
teremos um resultado assim



precisamos criar uma FileChoise pra escolha do arquivo e um player para reprodução do audio gerado no aplicativo :) 
eu fiz um porem gostaria de  relembrar um dos melhores exemplos de livros que nos da comunidade javafx ja tivemos  que é o livro
JavaFX_2.0_Introduction_by_example 

bom lembrar que no exemplo mostrava cores randonicas em clicles criamos em um no de cada phases e magnitudes de um spectrum de uma mediaplayer
vou deixar um exemplo onde pode se filtrar em quais magnitude ou pahses o circle vai ser criado
reparei que algumas phases e magnitudes não são tao perseptiveis e nao é tão interessante serem lançadas como objeto na execução do aplicativo ...










simplesmente simples não?

criada todo encapsulamento das classes de audio podemos seguir para o codigo responsável por gravar os videos




 codigo Scene do gravador











O player para assistir os videos gravados

O JFX por padrão nao reproduz alguns arquivos de video, audio ou que estejam mau configurados

codigo javafx player




Downloads
 Projeto executavel  aqui
Jar aqui
GIT aqui

Comentários