@lakshmideepak/voicesdk
v1.3.3
Published
SDK for audio streaming using Socket.IO
Maintainers
Readme
VoiceSDK 🎤
A simple SDK to integrate real-time voice streaming with your backend using WebRTC, WebSocket, and AudioWorklets. It captures microphone input, streams audio to your server, and handles responses in real-time.
✅ Features
- 🎤 Real-time microphone capture
- 🔊 Audio level meter
- 🔗 Easy integration with backend (WebSocket)
- ⚡ Works with HTML, React, or any frontend
📥 Installation
You can use the VoiceSDK via CDN for HTML projects or install it via npm for modern JavaScript frameworks.
Using CDN (for HTML projects)
<script src="https://unpkg.com/js-base64"></script>
<script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
<script>
window.jsBase64 = { Base64: window.Base64 };
window.socket_io_esm_min_js = { io: window.io };
</script>
<script src="https://cdn.jsdelivr.net/npm/@lakshmideepak/voicesdk@latest/dist/voice-sdk.umd.js"></script>Using npm (for React or other frameworks)
npm install @lakshmideepak/voicesdk⚡ Usage
1. HTML Example
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Voice SDK Demo</title>
</head>
<body>
<h1>Voice SDK Demo</h1>
<button id="startBtn">Start</button>
<button id="stopBtn">Stop</button>
<p>Status: <span id="status">disconnected</span></p>
<p>Mic Level: <span id="level">0</span></p>
<p id="error"></p>
<script src="https://unpkg.com/js-base64"></script>
<script src="https://cdn.socket.io/4.7.5/socket.io.min.js"></script>
<script>
window.jsBase64 = { Base64: window.Base64 };
window.socket_io_esm_min_js = { io: window.io };
</script>
<script src="https://cdn.jsdelivr.net/npm/@lakshmideepak/voicesdk@latest/dist/voice-sdk.umd.js"></script>
<script>
const voice = window.VoiceSDK({
serverUrl: "https://your-server-url.com",
token: "YOUR_JWT_TOKEN",
username: "your-username",
onStatus: (s) => {
document.getElementById("status").textContent = s;
},
onAudioLevel: (lvl) => {
document.getElementById("level").textContent = Math.round(lvl);
},
onModelSpeaking: (speaking) => {
console.log("Bot speaking:", speaking);
},
});
document.getElementById("startBtn").onclick = () => voice.start();
document.getElementById("stopBtn").onclick = () => voice.stop();
</script>
</body>
</html>2. React Example
import { useEffect, useState, useRef } from "react";
export default function App() {
const [status, setStatus] = useState("disconnected");
const [level, setLevel] = useState(0);
const [error, setError] = useState("");
const voiceRef = useRef(null);
useEffect(() => {
const voice = window.VoiceSDK({
serverUrl: import.meta.env.VITE_APP_API,
token: import.meta.env.VITE_APP_BOT_TOKEN,
username: import.meta.env.VITE_APP_USER_NAME,
onStatus: (s) => setStatus(s),
onAudioLevel: (lvl) => setLevel(Math.round(lvl)),
onModelSpeaking: (speaking) => console.log("Bot speaking:", speaking),
});
voiceRef.current = voice;
return () => voice.stop();
}, []);
return (
<div>
<h1>Voice SDK Demo</h1>
<button onClick={() => voiceRef.current.start()}>Start</button>
<button onClick={() => voiceRef.current.stop()}>Stop</button>
<p>Status: {status}</p>
<p>Mic Level: {level}</p>
{error && <p style={{ color: "red" }}>{error}</p>}
</div>
);
}📦 API Reference
VoiceSDK(options)
| Option | Type | Required | Description |
| ----------------- | ------ | -------- | --------------------------------------------------------- |
| serverUrl | string | ✅ Yes | Your backend server WebSocket URL |
| token | string | ✅ Yes | JWT authentication token |
| username | string | ✅ Yes | Username identifier |
| onStatus | fn | ❌ No | Callback for status changes (connected, disconnected) |
| onAudioLevel | fn | ❌ No | Callback for microphone input level |
| onModelSpeaking | fn | ❌ No | Callback when the AI model starts/stops speaking |
Methods
| Method | Description |
| ---------- | ----------------------------------------------- |
| .start() | Starts capturing mic and streaming audio |
| .stop() | Stops capturing mic and disconnects from server |
📜 License
MIT License © 2025 Lakshmi Deepak
