Dispositivos de entrada/saída de audio
O SDK permite o uso de diversos dispositivos de entrada de audio, incluise microfones externos USB como o SpeechMike®.
Escolhendo um dispositivo
Dispositivos de audio podem ser escolhidos tanto durante inicialização do SDK quanto em tempo de execução, enquanto a aplicação estiver funcionando.
Durante a inicialização
Você pode configurar o dispositivo de entrada de audio durante a inicialização do SDK através do atributo input
passado ao método init()
:
var recognition = new IaraSpeechRecognition();
// Inicializa o SDK
recognition.init({
userId: 'meu@email.com',
apiToken: '197765800edb8affcb44a7ae7b4ff0a3',
input: 'auto' // Dispositivo de entrada de audio
});
Sistemas operacionais e browsers possuem requisitos únicos de privacidade e funcionamento de captura de audio. Por essa razão, o SDK abstrai possíveis complicações através da opção input: 'auto'
(default), que é a escolha automática do dispositivo de entrada.
Se input: 'auto'
for usado como dispositivo de entrada de audio, o SDK tentará configurar o melhor dispositivo de entrada para o ambiente do usuário com a menor interação possível.
Dica: seinput
não for informado na inicialização,input: 'auto'
é utilizado. Essa é a forma mais flexível de escolha do dispositivo de entrada de audio.
Com o uso de input: 'auto'
, por exemplo, se um SpeechMike® for encontrado em alguma entrada USB, o SDK tentará usá-lo. Em computadores Mac, por exemplo, dependendo da versão do sistema operacional, a captura de audio pode ser feita sem interação com o usuário, ou através do browser com interação do usuário.
Em casos como esse, no qual o SDK não conseguir configurar o dispositivo de captura de audio sem intervenção do usuário, as solicitações necessárias serão emitidas, ex.: solicitar ao usuário que autorize a captura de audio através do microfone acessível pelo browser.
Forçando a inicialização com um dispositivo de audio particular
Se sua aplicação depende de um dispositivo de entrada em específico, você pode forçar que ele seja escolhido durante a inicialização. O exemplo abaixo exige um SpeechMike® como dispositivo de entrada, produzindo um erro de inicialização caso ele não esteja disponível:
var recognition = new IaraSpeechRecognition();
// Inicializa o SDK
recognition.init({
userId: 'meu@email.com',
apiToken: '197765800edb8affcb44a7ae7b4ff0a3',
input: 'speechmike' // força a utilização do SpeechMike® como
// dispositivo de entrada de audio
}).fail(function(e) {
console.error('Dispositivo de entrada SpeechMike® não disponível!');
});
Dispositivos disponíveis na inicialização
A tabela abaixo mostra a lista de valores que podem ser usados no atributo input
passado ao método init()
.
Nome | Valor de input | Descrição |
---|---|---|
Escolha automática | auto | O SDK escolhe o melhor dispositivo de entrada de audio com o mínimo de interação do usuário. |
SpeechMike | speechmike | Microfone externo USB SpeechMike®. |
Microfone do sistema | osmic | O dispositivo de entrada de audio padrão do sistema, ex.: microne frontal do notebook. Se osmic for utilizado, o usuário não precisará autorizar a captura de audio porque ela não será feita pelo browser, mas a nível de sistema operacional. |
Microfone do browser | browsermic | O dispositivo de entrada de audio padrão disponibilizado pelo browser através da chamada navigator.mediaDevices.getUserMedia() . Se browsermic for utilizada, o usuário precisará autorizar a captura de audio através de uma interação com o browser. |
Em tempo de execução
Dispositivos de entrada e saída de audio podem ser escolhidos a qualquer momento em tempo de execução através da chamada aos métodos setAudioInput()
e setAudioOutput()
, respectivamente.
Tanto setAudioInput()
quanto setAudioOutput()
recebem dois parâmetro: o id do dispositivo de audio a ser usado, e uma função de callback, invocada quando a operação foi finalizada.
O exemplo abaixo mostra a seleção de um dispositivo de audio fictício de id 12345
:
var recognition = new IaraSpeechRecognition();
// Inicializa o SDK
recognition.init({
userId: 'meu@email.com',
apiToken: '197765800edb8affcb44a7ae7b4ff0a3',
}).done(function(e) {
recognition.setAudioInput(12345, function() {
console.log('Dispositivo de audio selecionado');
});
});
Listando dispositivos de audio disponíveis
Depois de inicializado, os dispositivos de audio de entrada e saída existentes no computador do usuário podem ser consultados através das propriedades audioInputs
e audioOutputs
do reconhecedor.
O exemplo abaixo lista todos os dispositivos de entrada e saída de audio disponíveis:
var recognition = new IaraSpeechRecognition();
// Inicializa o SDK
recognition.init({
userId: 'meu@email.com',
apiToken: '197765800edb8affcb44a7ae7b4ff0a3',
}).done(function(e) {
var i, device;
for(i = 0; i < recognition.audioInputs.length; i++) {
device = recognition.audioInputs[i];
console.log('Dispositivo de entrada: ', device.id, device.name, device.selected);
}
for(i = 0; i < recognition.audioOutputs.length; i++) {
device = recognition.audioOutputs[i];
console.log('Dispositivo de saída: ', device.id, device.name, device.selected);
}
});
A propriedade id
do dispositivo de audio é o id esperado por setAudioInput()
e setAudioOutput()
para a seleção de dispositivos.
A propriedade selected
dos dispositivos de audio listados por audioInputs
e audioOutputs
indicam se o dispositivo em questão está em uso ou não. Essa propriedade é somente-leitura (read-only). Alterações feitas nelas não terão efeito e serão sobrescritas pelo reconhecedor periodicamente.
Se você deseja escolher um dispositivo de entrada/saída de audio, utilize setAudioInput()
e setAudioOutput()
.
IMPORTANTE: as propriedadesaudioInputs
eaudioOutputs
e suas entradas são read-only. Selecione dispositivo de entrada/saída de audio através desetAudioInput()
esetAudioOutput()
.
Testando dispositivos de audio
Saber se dispositivos de audio estão propriamente configurados e funcionando é essencial para aplicações de reconhecimento de voz. Por essa razão, o reconhecedor da Iara disponibiliza o método testAudioInputOutput()
.
Esse método grava audio do dispositivo de entrada (por N
segundos), depois reproduz esse audio utilizando o dispositivo de saída. O teste é semelhante às chamadas de teste realizadas por aplicativos de video-chamada, como o Skype.
O exemplo abaixo mostra um teste de audio de 3 segundos:
function gravacaoFinalizada() {
console.log('Gravação finalizada. Iniciando reprodução.');
}
function reproducacaoFinalizada() {
console.log('Reprodução finalizada. Você ouviu algo?');
}
var recognition = new IaraSpeechRecognition();
recognition.init({
userId: 'meu@email.com',
apiToken: '197765800edb8affcb44a7ae7b4ff0a3',
}).done(function(e) {
// Inicia o teste de entrada/saída de audio por 3 segundos.
// Durante o tempo estipulado, o SDK irá gravar o audio do dispositivo de entrada.
// Em seguida, a função `gravacaoFinalizada()` será chamada e o audio gravado será
// reproduzido. Quando a reprodução do audio for concluída, a função
// `reproducacaoFinalizada()` será chamada. Se tudo correr bem, o usuário deve ouvir
// aquilo que foi gravado.
recognition.testAudioInputOutput(3, gravacaoFinalizada, reproducacaoFinalizada);
});
O exemplo audio-devices-test
contém códigos prontos referentes ao teste de dispositivos de audio.