@lanlinling/audio-providers
v0.0.1
Published
Multi-provider TTS + ASR adapter registry (OpenAI, Azure, GLM, Qwen, MiniMax, Doubao, ElevenLabs, VoxCPM, Lemonade / Whisper) — extracted from OpenMAIC.
Downloads
214
Readme
@lanlinling/audio-providers
Multi-provider TTS + ASR adapter registry — OpenAI, Azure, GLM, Qwen, MiniMax, Doubao, ElevenLabs, VoxCPM, Lemonade, Whisper. Extracted from OpenMAIC.
Install
{
"dependencies": {
"@lanlinling/audio-providers": "github:bluemomo112/ai-providers#path:packages/audio-providers"
}
}# pnpm-workspace.yaml
onlyBuiltDependencies:
- "@lanlinling/audio-providers"Does it read API keys from my environment?
No. You always pass apiKey (and baseUrl where relevant) explicitly
in the config object — nothing here reads process.env for credentials.
import 'dotenv/config';
import { generateTTS, transcribeAudio } from '@lanlinling/audio-providers';
const tts = await generateTTS(
{
providerId: 'qwen-tts',
modelId: 'qwen3-tts-flash',
apiKey: process.env.DASHSCOPE_API_KEY!,
voice: 'Cherry',
},
'你好,这是一个语音合成测试。',
);
// tts.audio: Uint8Array, tts.format: 'wav'
const asr = await transcribeAudio(
{ providerId: 'qwen-asr', modelId: 'qwen3-asr-flash', apiKey: process.env.DASHSCOPE_API_KEY! },
Buffer.from(tts.audio),
);
console.log(asr.text);This is the exact TTS→ASR round trip this package was smoke-tested with (real DashScope calls — synthesized audio transcribed back to the original text, verbatim).
Usage
import {
TTS_PROVIDERS,
ASR_PROVIDERS,
getAllTTSProviders,
getTTSVoices,
generateTTS,
transcribeAudio,
TTSRateLimitError,
} from '@lanlinling/audio-providers';
// Inspect what's built in
console.log(Object.keys(TTS_PROVIDERS)); // 10 TTS providers
console.log(Object.keys(ASR_PROVIDERS)); // 6 ASR providers
console.log(getTTSVoices('minimax-tts')); // voice list for a provider
try {
await generateTTS({ providerId: 'doubao-tts', apiKey: '...', voice: '...' }, 'text');
} catch (err) {
if (err instanceof TTSRateLimitError) {
// provider-specific rate-limit/concurrency-quota error — retry/backoff
}
}Doubao TTS: two auth shapes, one API key field
generateTTS() picks the auth mode automatically from the shape of the
apiKey you pass:
- Contains a colon (
"appId:accessKey") → old-console two-header auth. - No colon → new-console single
X-Api-Keyauth.
See TROUBLESHOOTING.md for this and other provider-specific gotchas (VoxCPM/Lemonade being self-hosted, MiniMax quota errors, etc.).
