Mostrar driver de entrada de aúdio

E ae galera tudo certo?

Estou desenvolvendo um capturador de telas, e gostaria de exibir o nome do driver de entrada de aúdio, ou seja mostrar o nome do dispositivo de captura de som, no caso o microfone, só eu não to conseguindo achar nada sobre isso, na verdade eu não sei o que digitar exatamente na busca, se alguém puder dar uma ajuda eu agradeço.

Abraço a todos.

Carinha, só pra te avisar, o java não é a melhor linguagem para fazer esse tipo de aplicação…

Lembrando, a idéia do java é que você faça uma aplicação que você compile em um lugar, e rode em qualquer lugar. Ou seja, em qualquer sistema operacional, e qualquer sistema, de um mainframe até um celular.

Para fazer isto, o que o pessoal do java fez? Criou uma “máquina virtual java”, que é onde todas as aplicações java rodam. Só que essa “máquina virtual java” não é capaz de acessar nada do sistema operacional sozinha: ela depende de implementações em outras linguagens, por exemplo, C, para fazer esses acessos.

Por exemplo, o acesso à tela do computador depende de implementação específica a cada plataforma, implicando em: programa “C”. … acesso a drivers de audio, idem. É o que eles chamam de Java Native Interface: a linguagem java acessando métodos nativos do sistema operacional através de um encapsulamento.

Percebeu a dor de cabeça que vc tá arrumando?

Bom, se você está pensando a essas alturas, “que !@#! que é esse java!”, pense no outro aspecto: você pode criar uma aplicação no windows que roda no IPad, no IPhone, e na sua geladeira se tiver o java embutido nela…

Sim, sim, eu estou ciente das sérias consequências que eu possa ter, hehehehehe, pois então eu estou desenvolvendo essa aplicação para rodar em linux, a parte de captura de tela, audio e a conversão das imagens capturadas em vídeo não está pronta ainda, mais eu já sei como fazer, eu só queria mostrar para o usuário o dispositivo de entrada de aúdio que ele tem, se tiver mais de uma, o usuario pode escolher qual usar.

Mas dizer que a maquina virtual não é capaz de acessar nada do sistema foi muito radical, não é bem assim!

Por mais incrível que pareça, é verdade, sim! :slight_smile: Para fazer qualquer acesso ao sistema operacional, a máquina virtual depende de chamadas a métodos nativos escritos em linguagem dependente do sistema operacional (tipicamente, C).

O que acontece é que a API do java já encapsulou essas chamadas a métodos nativos . Só que a API do java não é a máquina virtual…

Sim intendo, mas se nós sabemos qual plataforma o software irá trabalhar a coisa fica mais facil, fazer um software rodar em qualquer plataforma acredito que seja uma coisa impossível, com a ajuda das API muita coisa é possível em java, tem as API nativas do java e também tem aquelas API criadas por aquelas pessoas de bom coração que querem o bem da sociedade programadora (nossa viajei), as API estão ai para serem usadas, afinal pra que refazer um trabalho complexo que alguém já fez, o papel das API é esse facilitar a vida dos programadores.

Se for fazer aplicações java trabalhando unicamente com a JVM, realmente a coisa fica limitada ou muita complexa, ainda bem que as API’s existem.

[quote=Vinny]Sim intendo, mas se nós sabemos qual plataforma o software irá trabalhar a coisa fica mais facil, fazer um software rodar em qualquer plataforma acredito que seja uma coisa impossível, com a ajuda das API muita coisa é possível em java, tem as API nativas do java e também tem aquelas API criadas por aquelas pessoas de bom coração que querem o bem da sociedade programadora (nossa viajei), as API estão ai para serem usadas, afinal pra que refazer um trabalho complexo que alguém já fez, o papel das API é esse facilitar a vida dos programadores.

Se for fazer aplicações java trabalhando unicamente com a JVM, realmente a coisa fica limitada ou muita complexa, ainda bem que as API’s existem.[/quote]

Se a JVM é uma limitação por que não programar em C++ direto? Se a JVM é a limitação, por que você quer usar java então?

[quote=matheuslmota]
Se a JVM é uma limitação por que não programar em C++ direto? Se a JVM é a limitação, por que você quer usar java então?[/quote]

Eu so queria saber se tem como eu pegar o nome do dispositivo de entrada de audio em JAVA, queria uma indicação de um caminho para fazer isso, e não ficar discutindo em que linguagem programar, to fazendo em java pq TENHO que fazer em java.

JVM ser limitado foi algo grotesco que eu disse, só estava levando em cosideração o que eu intendi sobre o que o nosso amigo abmpicoli disse

Você tem duas opções.

  1. Usar JNA. Você pode escrever um código em C++ que faça o reconhecimento de dispositivos de audio instalados no computador e chamar esse código no Java usand JNa
  2. Usar uma linguagem que possua integração nativa com o Sistema Operacional, como C/C+, C#, Delphi etc.

Como você disse que tem que fazer isso em Java, você terá de usar C++ com JNA. (mesmo que você encontre alguma biblioteca milagrosa que faça isso em JAva, acredite, ela é feita em C ou C++. É impossível fazer isso com Java puro).

Você pode usa a função waveOutGetDevCaps. Se você quiser ver um exmplo de como usar essa função, veja a função CWaveDevice::Open() desse projeto que achei no google code.
Até mais.

Opa brigadão matheuslmota agora eu já tenho uma ponta a seguir para encontrar uma solução, quando eu terminar de implementá-la eu posto aqui para deixar de conhecimentos para aqueles que futuramente precisar.

Abraço