{"_id":"@elizaos/plugin-simple-voice-root","_rev":"4-45af1ed4f8030d351cb37c11a97efb98","name":"@elizaos/plugin-simple-voice-root","dist-tags":{"next":"2.0.0-alpha.1","latest":"2.0.0-alpha.1"},"versions":{"2.0.0-alpha.1":{"name":"@elizaos/plugin-simple-voice-root","version":"2.0.0-alpha.1","keywords":["elizaos","plugin","tts","text-to-speech","sam","retro","voice-synthesis","1980s"],"author":{"name":"ElizaOS Team"},"license":"MIT","_id":"@elizaos/plugin-simple-voice-root@2.0.0-alpha.1","maintainers":[{"name":"shawticus","email":"shawmakesmagic@gmail.com"},{"name":"shakkernerd","email":"shakkerdroid@gmail.com"},{"name":"wtfsayo","email":"hi@sayo.wtf"},{"name":"odilitime","email":"janesmith@airmail.cc"},{"name":"cjft","email":"cjft@trimboli.io"}],"homepage":"https://github.com/ai16z/eliza#readme","bugs":{"url":"https://github.com/ai16z/eliza/issues"},"dist":{"shasum":"be0910805e0386a54b0e33186981efa932cedd1e","tarball":"https://registry.npmjs.org/@elizaos/plugin-simple-voice-root/-/plugin-simple-voice-root-2.0.0-alpha.1.tgz","fileCount":83,"integrity":"sha512-nhZZcZndRDnhbvPv9PnkQnSs/QrC+RvLonR+fX6VPTdvOvHd5khLp2BdycWgjd77dKtEvBgqdCT6lmFYGwdCWA==","signatures":[{"sig":"MEUCIEzriMGivFNODODnxNGBRneenWZxS6z6XMlzDC7qW67lAiEAryxFzeWf+n5/lDSzk+IirCxe8pMidrzVTLJTfZLJgqA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":495945},"main":"typescript/dist/index.js","type":"module","types":"typescript/dist/index.d.ts","exports":{".":{"types":"./typescript/dist/index.d.ts","import":"./typescript/dist/index.js","default":"./typescript/dist/index.js"},"./rust":{"import":"./rust/pkg/node/elizaos_plugin_plugin_simple_voice.js"},"./package.json":"./package.json"},"gitHead":"05d4ca11d769db8c7f54a722ee24b2ce2b951543","scripts":{"dev":"cd typescript && bun --hot build.ts","lint":"bunx @biomejs/biome check --write ./typescript","test":"bun run test:ts && bun run test:rust && bun run test:python","build":"bun run build:ts && bun run build:rust && bun run build:python","clean":"rm -rf typescript/dist python/dist rust/target .turbo node_modules","test:ts":"cd typescript && vitest run || echo 'TypeScript tests skipped - no tests found'","build:ts":"cd typescript && bun run build.ts","lint:rust":"test -d rust && cd rust && cargo clippy --all-targets --fix --allow-dirty --allow-staged -- -D warnings && cargo fmt || echo 'Rust lint skipped'","test:rust":"test -d rust && cd rust && cargo test || echo 'Rust tests skipped'","typecheck":"tsc --noEmit -p typescript/tsconfig.json","build:rust":"test -d rust && cd rust && cargo build --release || echo 'Rust build skipped - no rust directory'","lint:check":"bunx @biomejs/biome check ./typescript","lint:python":"test -d python && cd python && ruff check --fix . && ruff format . || echo 'Python lint skipped'","test:python":"test -d python && cd python && pip install pytest-xprocess pytest-asyncio pytest-cov --quiet && pytest || echo 'Python tests skipped'","build:python":"test -d python && cd python && (python3 -m build 2>/dev/null || pyproject-build) || echo 'Python build skipped - no python directory'","lint:python:fix":"test -d python && cd python && ruff check --fix . && ruff format . || echo 'Python lint fix skipped'"},"_npmUser":{"name":"shawticus","email":"shawmakesmagic@gmail.com"},"repository":{"url":"git+https://github.com/ai16z/eliza.git","type":"git","directory":"plugins/plugin-simple-voice/typescript"},"_npmVersion":"lerna/9.0.3/node@v22.20.0+arm64 (darwin)","description":"Retro 1980s SAM Text-to-Speech plugin for ElizaOS agents","directories":{},"_nodeVersion":"22.20.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"@types/bun":"^1.3.5","typescript":"^5.9.3","@types/node":"^25.0.3","@biomejs/biome":"^2.3.11"},"peerDependencies":{"@elizaos/core":"2.0.0-alpha.1"},"_npmOperationalInternal":{"tmp":"tmp/plugin-simple-voice-root_2.0.0-alpha.1_1769034097301_0.27935406737165014","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-01-21T22:21:37.167Z","modified":"2026-06-16T05:15:13.616Z","2.0.0-alpha.1":"2026-01-21T22:21:37.475Z"},"bugs":{"url":"https://github.com/ai16z/eliza/issues"},"author":{"name":"ElizaOS Team"},"license":"MIT","homepage":"https://github.com/ai16z/eliza#readme","keywords":["elizaos","plugin","tts","text-to-speech","sam","retro","voice-synthesis","1980s"],"repository":{"url":"git+https://github.com/ai16z/eliza.git","type":"git","directory":"plugins/plugin-simple-voice/typescript"},"description":"Retro 1980s SAM Text-to-Speech plugin for ElizaOS agents","maintainers":[{"email":"shawmakesmagic@gmail.com","name":"shawticus"},{"email":"janesmith@airmail.cc","name":"odilitime"}],"readme":"# @elizaos/plugin-simple-voice\n\nRetro 1980s SAM (Software Automatic Mouth) Text-to-Speech plugin for ElizaOS agents.\n\nAvailable in **TypeScript**, **Python**, and **Rust**.\n\n## Overview\n\nSAM was a speech synthesizer from the 1980s known for its distinctive robotic voice. This plugin provides formant-based synthesis across three languages with identical APIs and feature parity.\n\n## Features\n\n- 🎙️ Authentic retro voice synthesis\n- 🔊 Hardware bridge integration for audio output\n- ⚙️ Voice parameter control (speed, pitch, throat, mouth)\n- 🎯 Natural language trigger detection\n- 🎵 WAV format output\n\n## Voice Parameters\n\n| Parameter | Range  | Default | Description        |\n| --------- | ------ | ------- | ------------------ |\n| Speed     | 20-200 | 72      | Speaking rate      |\n| Pitch     | 0-255  | 64      | Voice pitch        |\n| Throat    | 0-255  | 128     | Throat resonance   |\n| Mouth     | 0-255  | 128     | Mouth articulation |\n\n## Trigger Phrases\n\nThe SAY_ALOUD action responds to:\n\n- `say aloud`, `speak`, `read aloud`\n- `announce`, `proclaim`, `voice`\n- `say \"quoted text\"`, `speak 'quoted text'`\n- Voice modifiers: `higher voice`, `robotic`, `slower`\n\n## Usage\n\n### TypeScript\n\n```typescript\nimport { simpleVoicePlugin, SamTTSService } from \"@elizaos/plugin-simple-voice\";\n\n// As plugin\nconst runtime = new AgentRuntime({ plugins: [simpleVoicePlugin] });\n\n// Direct usage\nconst service = new SamTTSService(runtime);\nconst audio = service.generateAudio(\"Hello world\", {\n  speed: 72,\n  pitch: 64,\n  throat: 128,\n  mouth: 128,\n});\nconst wav = service.createWAVBuffer(audio);\n```\n\n### Python\n\n```python\nfrom eliza_plugin_simple_voice import SamTTSService, SamTTSOptions\n\nservice = SamTTSService()\naudio = service.generate_audio(\"Hello world\", SamTTSOptions(speed=72))\nwav = service.create_wav_buffer(audio)\n```\n\n### Rust\n\n```rust\nuse eliza_plugin_simple_voice::{SamTTSService, SamTTSOptions};\n\nlet service = SamTTSService::default();\nlet audio = service.generate_audio(\"Hello world\", Some(SamTTSOptions::default()));\nlet wav = service.create_wav_buffer(&audio, 22050);\n```\n\n## Installation\n\n```bash\n# TypeScript\ncd typescript && bun install && bun run build\n\n# Python\ncd python && pip install -e .\n\n# Rust\ncd rust && cargo build --release\n```\n\n## Testing\n\n```bash\n# TypeScript\ncd typescript && npx vitest\n\n# Python\ncd python && pytest\n\n# Rust\ncd rust && cargo test\n```\n\n## Architecture\n\n```\nplugin-simple-voice/\n├── typescript/          # TypeScript implementation\n│   ├── src/\n│   │   ├── index.ts\n│   │   ├── types.ts\n│   │   ├── actions/sayAloud.ts\n│   │   └── services/SamTTSService.ts\n│   └── package.json\n├── python/              # Python implementation\n│   ├── src/eliza_plugin_simple_voice/\n│   │   ├── __init__.py\n│   │   ├── types.py\n│   │   ├── sam_engine.py\n│   │   ├── actions/say_aloud.py\n│   │   └── services/sam_tts_service.py\n│   └── pyproject.toml\n└── rust/                # Rust implementation\n    ├── src/\n    │   ├── lib.rs\n    │   ├── types.rs\n    │   ├── sam_engine.rs\n    │   ├── actions/say_aloud.rs\n    │   └── services/sam_tts_service.rs\n    └── Cargo.toml\n```\n\n## Audio Pipeline\n\n```\nText → Phoneme Conversion → Formant Synthesis → 8-bit PCM → WAV → Hardware Bridge\n```\n\n## License\n\nMIT\n","readmeFilename":"README.md"}