Pular para o conteúdo principal

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: se input 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().

NomeValor de inputDescrição
Escolha automáticaautoO SDK escolhe o melhor dispositivo de entrada de audio com o mínimo de interação do usuário.
SpeechMikespeechmikeMicrofone externo USB SpeechMike®.
Microfone do sistemaosmicO 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 browserbrowsermicO 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 propriedades audioInputs e audioOutputs e suas entradas são read-only. Selecione dispositivo de entrada/saída de audio através de setAudioInput() e setAudioOutput().

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.