@lakshmiprasanth/react-voice-to-text
Version:
A modern React package for voice-to-text conversion with real-time speech recognition and file upload support
515 lines (408 loc) âĸ 10.4 kB
Markdown
A modern React package for voice-to-text conversion with real-time speech recognition and file upload support. Built with TypeScript and optimized for browser environments.
- **đ¤ Real-time Voice Recording** - Record and transcribe speech in real-time
- **đ File Upload Support** - Upload audio files for transcription
- **đ Multi-language Support** - Support for 60+ languages
- **⥠React Hooks** - Easy-to-use hooks for voice recognition
- **đ¨ Beautiful UI Components** - Pre-built, customizable React components
- **đą Responsive Design** - Works on desktop and mobile devices
- **đ§ TypeScript Support** - Full TypeScript definitions included
- **đ¯ Web Speech API** - Uses native browser speech recognition
```bash
npm install @lakshmiprasanth/react-voice-to-text
yarn add @lakshmiprasanth/react-voice-to-text
```
```jsx
import React from 'react';
import { VoiceToTextConverter } from '@lakshmiprasanth/react-voice-to-text';
function App() {
return (
<div className="App">
<VoiceToTextConverter />
</div>
);
}
```
```jsx
import React from 'react';
import { useVoiceToText } from '@lakshmiprasanth/react-voice-to-text';
function VoiceRecorder() {
const {
isInitialized,
isRecording,
results,
error,
startRecording,
stopRecording,
clearResults
} = useVoiceToText();
return (
<div>
<button
onClick={isRecording ? stopRecording : startRecording}
disabled={!isInitialized}
>
{isRecording ? 'Stop Recording' : 'Start Recording'}
</button>
{error && <p>Error: {error}</p>}
<div>
{results.map((result, index) => (
<p key={index}>
{result.transcript} (Confidence: {(result.confidence * 100).toFixed(1)}%)
</p>
))}
</div>
</div>
);
}
```
The main component that provides a complete voice-to-text interface.
```jsx
import { VoiceToTextConverter } from '@lakshmiprasanth/react-voice-to-text';
<VoiceToTextConverter
showFileUpload={true}
showVoiceRecorder={true}
showResults={true}
defaultLanguage="en-US"
onResult={(result) => console.log('New result:', result)}
onError={(error) => console.error('Error:', error)}
/>
```
A component for real-time voice recording.
```jsx
import { VoiceRecorder } from '@lakshmiprasanth/react-voice-to-text';
<VoiceRecorder
language="en-US"
continuous={true}
interimResults={true}
onResult={(result) => console.log('Result:', result)}
onError={(error) => console.error('Error:', error)}
/>
```
A component for uploading and converting audio files.
```jsx
import { FileUpload } from '@lakshmiprasanth/react-voice-to-text';
<FileUpload
acceptedFormats={['audio/*']}
maxFileSize={50 * 1024 * 1024} // 50MB
onConvert={(file, language) => {
console.log('Converting file:', file.name);
}}
onError={(error) => console.error('Error:', error)}
/>
```
A component for displaying transcription results.
```jsx
import { ResultsDisplay } from '@lakshmiprasanth/react-voice-to-text';
<ResultsDisplay
results={results}
error={error}
showConfidence={true}
showStatus={true}
maxResults={50}
onClear={() => setResults([])}
/>
```
The main hook for voice-to-text functionality.
```jsx
import { useVoiceToText } from '@lakshmiprasanth/react-voice-to-text';
const {
isInitialized,
isRecording,
isProcessing,
results,
error,
browserSupport,
startRecording,
stopRecording,
clearResults,
clearError,
updateConfig,
getConfig
} = useVoiceToText({
defaultRecognitionConfig: {
language: 'en-US',
continuous: true,
interimResults: true
},
onResult: (result) => console.log('Result:', result),
onError: (error) => console.error('Error:', error)
});
```
A simplified hook for voice recording.
```jsx
import { useVoiceRecorder } from '@lakshmiprasanth/react-voice-to-text';
const {
isInitialized,
isRecording,
results,
error,
startRecording,
stopRecording,
clearResults
} = useVoiceRecorder({
language: 'en-US',
continuous: true,
interimResults: true
});
```
A hook for file upload functionality.
```jsx
import { useFileUpload } from '@lakshmiprasanth/react-voice-to-text';
const {
selectedFile,
isConverting,
results,
error,
selectFile,
convertFile,
clearFile,
clearResults,
validateFile
} = useFileUpload({
acceptedFormats: ['audio/*'],
maxFileSize: 50 * 1024 * 1024,
onConvert: async (file, language) => {
// Handle file conversion
}
});
```
A low-level hook for direct speech recognition.
```jsx
import { useSpeechRecognition } from '@lakshmiprasanth/react-voice-to-text';
const {
isSupported,
isListening,
transcript,
finalTranscript,
interimTranscript,
error,
start,
stop,
abort,
reset
} = useSpeechRecognition({
language: 'en-US',
continuous: true,
interimResults: true
});
```
All components come with built-in styles, but you can customize them using CSS classes or styled-components.
```jsx
<VoiceRecorder
className="my-custom-recorder"
style={{
backgroundColor: '#f0f0f0',
borderRadius: '12px',
padding: '20px'
}}
/>
```
```css
.my-custom-recorder {
background: linear-gradient(135deg,
color: white;
border-radius: 16px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1);
}
.my-custom-recorder button {
background: rgba(255, 255, 255, 0.2);
border: 1px solid rgba(255, 255, 255, 0.3);
color: white;
}
```
The package supports 60+ languages. Here are some popular ones:
- English (US) - `en-US`
- English (UK) - `en-GB`
- Spanish - `es-ES`
- French - `fr-FR`
- German - `de-DE`
- Italian - `it-IT`
- Portuguese (Brazil) - `pt-BR`
- Japanese - `ja-JP`
- Korean - `ko-KR`
- Chinese (Simplified) - `zh-CN`
- Russian - `ru-RU`
- Arabic - `ar-SA`
```jsx
import { VoiceToTextProvider } from '@lakshmiprasanth/react-voice-to-text';
<VoiceToTextProvider
options={{
defaultRecognitionConfig: {
language: 'en-US',
continuous: true,
interimResults: true,
maxAlternatives: 3
},
debug: false
}}
onResult={(result) => console.log('Result:', result)}
onError={(error) => console.error('Error:', error)}
onStart={() => console.log('Recording started')}
onStop={() => console.log('Recording stopped')}
>
<YourApp />
</VoiceToTextProvider>
```
```jsx
import React from 'react';
import { useVoiceToText, RecordingControls, ResultsDisplay } from '@lakshmiprasanth/react-voice-to-text';
function CustomVoiceRecorder() {
const {
isInitialized,
isRecording,
results,
error,
startRecording,
stopRecording,
clearResults
} = useVoiceToText();
return (
<div className="custom-recorder">
<h2>Custom Voice Recorder</h2>
<RecordingControls
isRecording={isRecording}
onStart={startRecording}
onStop={stopRecording}
disabled={!isInitialized}
startText="đ¤ Start"
stopText="âšī¸ Stop"
/>
<ResultsDisplay
results={results}
error={error}
onClear={clearResults}
showConfidence={true}
showStatus={true}
/>
</div>
);
}
```
```jsx
import React from 'react';
import { useFileUpload, LanguageSelector } from '@lakshmiprasanth/react-voice-to-text';
function CustomFileUpload() {
const {
selectedFile,
isConverting,
results,
error,
selectFile,
convertFile,
clearResults
} = useFileUpload();
const [language, setLanguage] = useState('en-US');
const handleFileChange = (event) => {
const file = event.target.files[0];
if (file) {
selectFile(file);
}
};
return (
<div className="custom-file-upload">
<h2>Custom File Upload</h2>
<LanguageSelector
value={language}
onChange={setLanguage}
showLabel={true}
label="Select Language"
/>
<input
type="file"
accept="audio/*"
onChange={handleFileChange}
disabled={isConverting}
/>
{selectedFile && (
<div>
<p>Selected: {selectedFile.name}</p>
<button
onClick={() => convertFile(language)}
disabled={isConverting}
>
{isConverting ? 'Converting...' : 'Convert'}
</button>
</div>
)}
{error && <p className="error">Error: {error}</p>}
{results.length > 0 && (
<div>
<h3>Results:</h3>
{results.map((result, index) => (
<p key={index}>{result.transcript}</p>
))}
</div>
)}
</div>
);
}
```
The package uses the Web Speech API, which is supported in:
- â
Chrome 25+
- â
Safari 14.1+
- â
Edge 79+
- â
Firefox (limited support)
- â Internet Explorer
The package works on mobile devices, but requires HTTPS in production for microphone access.
```bash
git clone https://github.com/prasanth-sasuke/react-voice-to-text.git
cd react-voice-to-text
npm install
```
```bash
npm run build
```
```bash
npm test
```
```bash
npm run storybook
```
MIT License - see [LICENSE](LICENSE) file for details.
Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for details.
- đ§ Email: support@example.com
- đ Issues: [GitHub Issues](https://github.com/prasanth-sasuke/react-voice-to-text/issues)
- đ Documentation: [GitHub Wiki](https://github.com/prasanth-sasuke/react-voice-to-text/wiki)
- Web Speech API for speech recognition
- React team for the amazing framework
- TypeScript team for type safety
- All contributors and users
---
Made with â¤ī¸ for the React community