{"id":24752442,"url":"https://github.com/willwade/go-tts-wrapper","last_synced_at":"2025-03-23T04:26:16.218Z","repository":{"id":271378515,"uuid":"913239046","full_name":"willwade/go-tts-wrapper","owner":"willwade","description":"A wrapper for TTS in go","archived":false,"fork":false,"pushed_at":"2025-01-07T10:31:03.000Z","size":35,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-27T09:30:49.830Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/willwade.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-07T09:51:27.000Z","updated_at":"2025-01-07T10:31:06.000Z","dependencies_parsed_at":"2025-01-07T11:23:42.525Z","dependency_job_id":"f5a18cda-3ed8-4103-b9c1-7b055c1c0d9e","html_url":"https://github.com/willwade/go-tts-wrapper","commit_stats":null,"previous_names":["willwade/go-tts-wrapper"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willwade%2Fgo-tts-wrapper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willwade%2Fgo-tts-wrapper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willwade%2Fgo-tts-wrapper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willwade%2Fgo-tts-wrapper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/willwade","download_url":"https://codeload.github.com/willwade/go-tts-wrapper/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245055133,"owners_count":20553623,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-01-28T10:49:56.620Z","updated_at":"2025-03-23T04:26:16.186Z","avatar_url":"https://github.com/willwade.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go Text-to-Speech Wrapper\n\n! Warning ! WIP. \n\n\nA flexible Go library that provides a unified interface for multiple text-to-speech (TTS) providers including AWS Polly, Google Cloud TTS, Microsoft Azure, IBM Watson, ElevenLabs, eSpeak-NG, and Sherpa-ONNX.\n\n## Features\n\n- Multiple TTS provider support\n- Unified interface for all providers\n- Real-time audio playback\n- SSML support (where available)\n- Voice selection\n- Audio control (pause/resume/stop)\n- Configurable speech properties (rate, pitch, volume)\n- Audio device selection\n- Caching support\n\n## Installation\n\n```bash\ngo get github.com/willwade/go-tts-wrapper\n```\n\n## Basic Usage\n\n```go\npackage main\n\nimport (\n    \"context\"\n    \"log\"\n\n    \"github.com/willwade/go-tts-wrapper/pkg/tts\"\n    _ \"github.com/willwade/go-tts-wrapper/pkg/tts/providers/aws\"    // Import AWS provider\n    _ \"github.com/willwade/go-tts-wrapper/pkg/tts/providers/google\" // Import Google provider\n)\n\nfunc main() {\n    // Create a configuration for your chosen provider\n    config := tts.TTSConfig{\n        APIKey:       \"your-api-key\",\n        Region:       \"us-west-1\",    // Required for AWS, Azure\n        LanguageCode: \"en-US\",\n        VoiceID:      \"en-US-Standard-A\",\n    }\n\n    // Create a provider (e.g., Google Cloud TTS)\n    provider, err := tts.NewTTSProvider(tts.ProviderGoogle, config)\n    if err != nil {\n        log.Fatal(err)\n    }\n\n    // Speak some text\n    err = provider.Speak(context.Background(), \"Hello, world!\")\n    if err != nil {\n        log.Fatal(err)\n    }\n}\n```\n\n## Configuration\n\nYou can configure the TTS wrapper using either code or a JSON configuration file:\n\n```go\n// Load configuration from file\nconfig, err := config.LoadConfig(\"config.json\")\nif err != nil {\n    log.Fatal(err)\n}\n```\n\nExample config.json:\n```json\n{\n    \"providers\": {\n        \"aws\": {\n            \"apiKey\": \"YOUR_AWS_ACCESS_KEY\",\n            \"region\": \"us-west-1\",\n            \"voiceId\": \"Joanna\"\n        },\n        \"google\": {\n            \"languageCode\": \"en-US\",\n            \"voiceId\": \"en-US-Standard-A\"\n        }\n    },\n    \"audio\": {\n        \"rate\": 1.0,\n        \"pitch\": 1.0,\n        \"volume\": 1.0,\n        \"deviceId\": \"\"\n    },\n    \"cache\": {\n        \"enabled\": true,\n        \"directory\": \"./cache\",\n        \"maxSize\": 1073741824,\n        \"ttl\": 86400,\n        \"filePattern\": \"tts-{hash}.mp3\"\n    }\n}\n```\n\n## Provider-Specific Configuration\n\n### AWS Polly\n```go\nconfig := tts.TTSConfig{\n    APIKey:  \"YOUR_AWS_ACCESS_KEY\",    // AWS credentials should be configured\n    Region:  \"us-west-1\",\n    VoiceID: \"Joanna\",\n}\nprovider, _ := tts.NewTTSProvider(tts.ProviderAWS, config)\n```\n\n### Google Cloud TTS\n```go\nconfig := tts.TTSConfig{\n    // Use GOOGLE_APPLICATION_CREDENTIALS environment variable\n    LanguageCode: \"en-US\",\n    VoiceID:     \"en-US-Standard-A\",\n}\nprovider, _ := tts.NewTTSProvider(tts.ProviderGoogle, config)\n```\n\n### Microsoft Azure\n```go\nconfig := tts.TTSConfig{\n    APIKey:  \"YOUR_AZURE_KEY\",\n    Region:  \"eastus\",\n    VoiceID: \"en-US-JennyNeural\",\n}\nprovider, _ := tts.NewTTSProvider(tts.ProviderMicrosoft, config)\n```\n\n### IBM Watson\n```go\nconfig := tts.TTSConfig{\n    APIKey:  \"YOUR_IBM_KEY\",\n    Region:  \"us-south\",\n    VoiceID: \"en-US_AllisonV3Voice\",\n}\nprovider, _ := tts.NewTTSProvider(tts.ProviderIBM, config)\n```\n\n### ElevenLabs\n```go\nconfig := tts.TTSConfig{\n    APIKey:  \"YOUR_ELEVENLABS_KEY\",\n    VoiceID: \"voice-id\",\n}\nprovider, _ := tts.NewTTSProvider(tts.ProviderElevenLabs, config)\n```\n\n### eSpeak-NG (Local)\n```go\nconfig := tts.TTSConfig{\n    VoiceID: \"en\",  // Language/voice code\n}\nprovider, _ := tts.NewTTSProvider(tts.ProviderESpeak, config)\n```\n\n### Sherpa-ONNX (Local)\n```go\nconfig := tts.TTSConfig{\n    Engine: \"/path/to/model.onnx\",  // Path to VITS model\n}\nprovider, _ := tts.NewTTSProvider(tts.ProviderSherpaONNX, config)\n```\n\n## Advanced Usage\n\n### Using SSML\n```go\nssml := `\u003cspeak\u003e\n    Hello \u003cbreak time=\"1s\"/\u003e World!\n    \u003cprosody rate=\"slow\"\u003eThis is slower\u003c/prosody\u003e\n\u003c/speak\u003e`\n\nerr := provider.SpeakSSML(context.Background(), ssml)\n```\n\n### Listing Available Voices\n```go\nvoices, err := provider.GetVoices(context.Background())\nif err != nil {\n    log.Fatal(err)\n}\n\nfor _, voice := range voices {\n    fmt.Printf(\"ID: %s, Name: %s, Language: %s\\n\", \n        voice.ID, voice.Name, voice.Language)\n}\n```\n\n### Audio Device Selection\n```go\n// List available audio devices\ndevices, err := tts.ListAudioDevices()\nif err != nil {\n    log.Fatal(err)\n}\n\n// Set output device\nprovider.SetOutputDevice(devices[0].ID)\n```\n\n### Controlling Audio Playback\n```go\n// Start speaking\nprovider.Speak(context.Background(), \"This is a long text...\")\n\n// Pause playback\nprovider.PauseAudio()\n\n// Resume playback\nprovider.ResumeAudio()\n\n// Stop playback\nprovider.StopAudio()\n```\n\n### Adjusting Speech Properties\n```go\nprovider.SetProperty(\"rate\", 1.5)    // Speed up speech\nprovider.SetProperty(\"pitch\", 0.8)   // Lower pitch\nprovider.SetProperty(\"volume\", 1.2)  // Increase volume\n```\n\n## Dependencies\n\n- PortAudio for audio playback\n- Provider-specific SDKs (automatically managed through Go modules)\n- For eSpeak-NG: `espeak-ng` binary must be installed on the system\n- For Sherpa-ONNX: Requires ONNX runtime and model files\n\n## Contributing\n\nPlease see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to contribute to this project.\n\n## License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillwade%2Fgo-tts-wrapper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwillwade%2Fgo-tts-wrapper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillwade%2Fgo-tts-wrapper/lists"}