use whisper
v0.2.0
React Hook for OpenAi Whisper API com gravador de fala, transcrição em tempo real e remoção de silêncio embutida
Use o que é o nativo do React está sendo desenvolvido.
Repositório: https://github.com/chengsokdara/use-whisper-native
Progresso: Chengsokdara/Use-Native#1
npm i @chengsokdara/use-whisper
yarn add @chengsokdara/use-whisper
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const {
recording ,
speaking ,
transcribing ,
transcript ,
pauseRecording ,
startRecording ,
stopRecording ,
} = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
} )
return (
< div >
< p > Recording: { recording } < / p >
< p > Speaking: { speaking } < / p >
< p > Transcribing: { transcribing } < / p >
< p > Transcribed Text: { transcript . text } < / p >
< button onClick = { ( ) => startRecording ( ) } > Start < / button >
< button onClick = { ( ) => pauseRecording ( ) } > Pause < / button >
< button onClick = { ( ) => stopRecording ( ) } > Stop < / button >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
/**
* you have more control like this
* do whatever you want with the recorded speech
* send it to your own custom server
* and return the response back to useWhisper
*/
const onTranscribe = ( blob : Blob ) => {
const base64 = await new Promise < string | ArrayBuffer | null > (
( resolve ) => {
const reader = new FileReader ( )
reader . onloadend = ( ) => resolve ( reader . result )
reader . readAsDataURL ( blob )
}
)
const body = JSON . stringify ( { file : base64 , model : 'whisper-1' } )
const headers = { 'Content-Type' : 'application/json' }
const { default : axios } = await import ( 'axios' )
const response = await axios . post ( '/api/whisper' , body , {
headers ,
} )
const { text } = await response . data
// you must return result from your server in Transcript format
return {
blob ,
text ,
}
}
const { transcript } = useWhisper ( {
// callback to handle transcription with custom server
onTranscribe ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
streaming : true ,
timeSlice : 1_000 , // 1 second
whisperConfig : {
language : 'en' ,
} ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
// use ffmpeg-wasp to remove silence from recorded speech
removeSilence : true ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
// will auto start recording speech upon component mounted
autoStart : true ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
nonStop : true , // keep recording as long as the user is speaking
stopTimeout : 5000 , // auto stop after 5 seconds
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
import { useWhisper } from '@chengsokdara/use-whisper'
const App = ( ) => {
const { transcript } = useWhisper ( {
apiKey : process . env . OPENAI_API_TOKEN , // YOUR_OPEN_AI_TOKEN
autoTranscribe : true ,
whisperConfig : {
prompt : 'previous conversation' , // you can pass previous conversation for context
response_format : 'text' , // output text instead of json
temperature : 0.8 , // random output
language : 'es' , // Spanish
} ,
} )
return (
< div >
< p > { transcript . text } < / p >
< / div >
)
}
A maioria dessas dependências é carregada preguiçosa, por isso é importada apenas quando é necessário
Nome | Tipo | Valor padrão | Descrição |
---|---|---|---|
APIKEY | corda | '' | Seu token de API Openai |
AutoStart | booleano | falso | gravação de fala inicial automática em montagem de componentes |
Autotranscribe | booleano | verdadeiro | deve transcrever automaticamente após parar de gravar |
modo | corda | transcrições | Control Whisper Mode Transcrições ou traduções, atualmente suportam apenas a tradução para o inglês |
sem parar | booleano | falso | Se verdadeiro, o registro parará automaticamente após o parada. No entanto, se o usuário continuar falando, o gravador continuará gravando |
Removesilência | booleano | falso | Remova o silêncio antes de enviar o arquivo para o OpenAI API |
StopTimeout | número | 5.000 ms | Se o ininterrupto for verdadeiro, isso se tornará necessário. Este controle quando a parada automática do gravador |
transmissão | booleano | falso | Transcrever o discurso em tempo real com base em tempo de tempo |
Licidade de tempo | número | 1000 ms | intervalo entre cada evento OndataAvailable |
WhisperConfig | Whisperapiconfig | indefinido | Config da transcrição da API sussurrada |
ondataavilable | (blob: blob) => void | indefinido | Função de retorno de chamada para receber o BLOB gravado em intervalo entre a lice |
Ontranscribe | (BLOB: BLOB) => PROMECIMENTO <RESCRIPT> | indefinido | Função de retorno de chamada para lidar com a transcrição em seu próprio servidor personalizado |
Nome | Tipo | Valor padrão | Descrição |
---|---|---|---|
incitar | corda | indefinido | Um texto opcional para orientar o estilo do modelo ou continuar um segmento de áudio anterior. O prompt deve corresponder ao idioma de áudio. |
Response_format | corda | JSON | O formato da saída da transcrição, em uma dessas opções: json, texto, srt, verbose_json ou vtt. |
temperatura | número | 0 | A temperatura de amostragem, entre 0 e 1. Valores mais altos como 0,8 tornarão a saída mais aleatória, enquanto valores mais baixos como 0,2 o tornarão mais focado e determinístico. Se definido como 0, o modelo usará a probabilidade de log para aumentar automaticamente a temperatura até que certos limites sejam atingidos. |
linguagem | corda | en | O idioma do áudio de entrada. O fornecimento da linguagem de entrada no formato ISO-639-1 melhorará a precisão e a latência. |
Nome | Tipo | Descrição |
---|---|---|
gravação | booleano | Estado de gravação de fala |
Falando | booleano | detectar quando o usuário está falando |
transcrição | booleano | Ao remover o silêncio do discurso e enviar solicitação para o OpenAi Whisper API |
transcrição | Transcrição | Retorno de objeto após a transcrição do sussurro completa |
pauserecording | Promessa | pausa gravação de fala |
Startrecording | Promessa | Inicie a gravação de fala |
StopRecording | Promessa | Pare de gravação de fala |
Nome | Tipo | Descrição |
---|---|---|
Blob | Blob | discurso gravado em JavaScript Blob |
texto | corda | Texto transcrito retornado da API Whisper |
Entre em contato comigo para o desenvolvimento de aplicativos web ou móvel usando o React ou React Native
https://chengsokdara.github.io