useWhisper完全指南:如何用React Hook轻松实现实时语音转录功能
useWhisper完全指南:如何用React Hook轻松实现实时语音转录功能
useWhisper是一个强大的React Hook,专为OpenAI Whisper API设计,内置语音录制、实时转录和静音消除功能。它让开发者能够轻松地在React应用中集成专业级别的语音识别能力,无需深入了解复杂的音频处理细节。
🌟 为什么选择useWhisper?
useWhisper提供了一站式的语音转录解决方案,主要优势包括:
- 简单易用:作为React Hook,它可以无缝集成到你的组件中,几行代码即可实现语音转录功能
- 实时处理:支持实时流式转录,让用户体验更加流畅
- 智能静音消除:自动检测并移除录音中的静音部分,提高转录准确性
- 高度可配置:提供丰富的配置选项,满足不同场景需求
- TypeScript支持:完整的类型定义,提供更好的开发体验
🚀 快速开始
安装步骤
首先,你需要通过npm或yarn安装useWhisper包:
npm install @chengsokdara/use-whisper
# 或者
yarn add @chengsokdara/use-whisper
基本使用示例
以下是一个简单的使用示例,展示如何在React组件中集成useWhisper:
import { useWhisper } from '@chengsokdara/use-whisper';
function VoiceTranscriber() {
const {
recording,
transcript,
startRecording,
stopRecording,
pauseRecording
} = useWhisper({
apiKey: 'your-openai-api-key',
autoTranscribe: true,
removeSilence: true
});
return (
<div>
<h2>语音转录器</h2>
<button onClick={startRecording} disabled={recording}>
开始录音
</button>
<button onClick={pauseRecording} disabled={!recording}>
暂停录音
</button>
<button onClick={stopRecording} disabled={!recording}>
停止录音
</button>
<div>
<h3>转录结果:</h3>
<p>{transcript.text}</p>
</div>
</div>
);
}
⚙️ 配置选项详解
useWhisper提供了丰富的配置选项,让你可以根据需求自定义转录行为。主要配置项包括:
核心配置
| 选项 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| apiKey | string | '' | OpenAI API密钥 |
| autoStart | boolean | false | 组件挂载后是否自动开始录音 |
| autoTranscribe | boolean | true | 是否自动进行转录 |
| mode | 'transcriptions' | 'translations' | 'transcriptions' | 工作模式:转录或翻译 |
| removeSilence | boolean | false | 是否移除录音中的静音部分 |
高级配置
// 完整的配置类型定义
export type UseWhisperConfig = {
apiKey?: string;
autoStart?: boolean;
autoTranscribe?: boolean;
mode?: 'transcriptions' | 'translations';
nonStop?: boolean;
removeSilence?: boolean;
stopTimeout?: number;
streaming?: boolean;
timeSlice?: number;
whisperConfig?: WhisperApiConfig;
onDataAvailable?: (blob: Blob) => void;
onTranscribe?: (blob: Blob) => Promise<UseWhisperTranscript>;
}
Whisper API配置
你可以通过whisperConfig选项直接配置Whisper API的参数:
export type WhisperApiConfig = {
model?: 'whisper-1' | string;
prompt?: string;
response_format?: 'json' | 'text' | 'srt' | 'verbose_json' | 'vtt';
temperature?: number;
language?: string;
}
📝 Hook返回值
useWhisper Hook返回以下状态和方法:
export type UseWhisperReturn = {
recording: boolean; // 是否正在录音
speaking: boolean; // 是否检测到说话
transcribing: boolean; // 是否正在转录
transcript: UseWhisperTranscript; // 转录结果
pauseRecording: () => Promise<void>; // 暂停录音
startRecording: () => Promise<void>; // 开始录音
stopRecording: () => Promise<void>; // 停止录音
}
转录结果对象包含:
blob: 录音的Blob对象text: 转录的文本结果
💡 实用场景示例
1. 实时会议转录
function MeetingTranscriber() {
const {
transcript,
startRecording,
stopRecording
} = useWhisper({
apiKey: process.env.REACT_APP_OPENAI_KEY,
autoTranscribe: true,
streaming: true,
timeSlice: 2000,
removeSilence: true,
whisperConfig: {
language: 'en',
response_format: 'text'
}
});
return (
<div className="meeting-transcriber">
<h2>会议实时转录</h2>
<div className="controls">
<button onClick={startRecording}>开始会议转录</button>
<button onClick={stopRecording}>结束转录</button>
</div>
<div className="transcript">
<h3>会议记录:</h3>
<pre>{transcript.text || '等待发言...'}</pre>
</div>
</div>
);
}
2. 多语言翻译转录
function MultilingualTranscriber() {
const [language, setLanguage] = useState('es');
const {
transcript,
startRecording,
stopRecording,
recording
} = useWhisper({
apiKey: process.env.REACT_APP_OPENAI_KEY,
mode: 'translations', // 使用翻译模式
autoTranscribe: true,
whisperConfig: {
language,
}
});
return (
<div>
<h2>多语言翻译转录</h2>
<select value={language} onChange={(e) => setLanguage(e.target.value)}>
<option value="es">西班牙语</option>
<option value="fr">法语</option>
<option value="de">德语</option>
<option value="zh">中文</option>
</select>
<div className="controls">
<button onClick={startRecording} disabled={recording}>开始</button>
<button onClick={stopRecording} disabled={!recording}>停止</button>
</div>
<div className="result">
<h3>翻译结果:</h3>
<p>{transcript.text}</p>
</div>
</div>
);
}
🛠️ 常见问题解决
API密钥安全
不要在客户端代码中直接暴露你的OpenAI API密钥。在生产环境中,建议通过后端服务器代理API请求:
// 安全的使用方式
const { transcript, startRecording, stopRecording } = useWhisper({
// 不直接提供apiKey
onTranscribe: async (blob) => {
// 将音频blob发送到你的后端
const formData = new FormData();
formData.append('audio', blob, 'recording.mp3');
const response = await fetch('/api/transcribe', {
method: 'POST',
body: formData
});
const result = await response.json();
return { text: result.transcript, blob };
}
});
浏览器兼容性
useWhisper依赖于浏览器的MediaRecorder API和Web Audio API,确保在支持这些API的浏览器中使用。对于不支持的浏览器,可以提供降级体验或提示用户更换浏览器。
性能优化
- 当不需要实时转录时,将
streaming设置为false - 适当调整
timeSlice值,平衡实时性和性能消耗 - 在移动设备上使用时,考虑降低采样率或禁用一些高级功能
📚 深入了解
useWhisper的核心实现位于src/useWhisper.ts文件中,主要包含以下功能模块:
- 音频录制与处理
- 静音检测与消除
- Whisper API交互
- 状态管理与生命周期处理
如果你想深入了解其工作原理或贡献代码,可以查看项目源代码和类型定义文件src/types.ts。
🎯 总结
useWhisper为React开发者提供了一个简单而强大的方式来集成语音转录功能。无论是构建会议记录应用、语音助手还是无障碍工具,useWhisper都能帮助你快速实现专业级别的语音识别功能。
通过合理配置和使用这个Hook,你可以为用户提供流畅、高效的语音交互体验,而无需处理复杂的音频处理和API调用细节。
现在就尝试在你的项目中集成useWhisper,开启语音交互的新可能吧!
更多推荐



所有评论(0)