JSPM

  • Created
  • Published
  • Downloads 26840
  • Score
    100M100P100Q151278F
  • License MIT

A high-quality & reliable TTS React Hooks library

Package Exports

    This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@lobehub/tts) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

    Readme

    Lobe TTS

    A high-quality & reliable TTS/STT library for Server and Browser



    Documents Β· Changelog Β· Report Bug Β· Request Feature

    Table of contents

    TOC

    πŸ“– Introduction

    πŸ€– Lobe Chat supports Text-to-Speech (TTS) and Speech-to-Text (STT) technologies, enabling our application to convert text messages into clear voice outputs, allowing users to interact with our conversational agent as if they were talking to a real person. Users can choose from a variety of voices to pair with the agent.

    In the process of implementing this feature, we found that there was no satisfactory TTS (Text-to-Speech) frontend library available on the market. As a result, we invested a lot of effort, including data conversion, audio progress management, and speech visualization, among other tasks.

    [!NOTE]

    Therefore, we decided to refine our implementation and make it open source, hoping to assist developers who wish to implement TTS. @lobehub/tts is a high-quality TTS toolkit developed in TypeScript, which supports usage both on the server-side and in the browser.

    • Server-side: With just 15 lines of code, you can achieve high-quality voice generation capabilities comparable to OpenAI's TTS service. It currently supports EdgeSpeechTTS, MicrosoftTTS, OpenAITTS, and OpenAISTT.
    • Browser-side: It provides high-quality React Hooks and visual audio components, supporting common functions such as loading, playing, pausing, and dragging the timeline. Additionally, it offers a very rich set of capabilities for adjusting the audio track styles.

    πŸ“¦ Usage

    Generate Speech on server

    run the script below use Bun: bun index.js

    // index.js
    import { EdgeSpeechTTS } from '@lobehub/tts';
    import { Buffer } from 'buffer';
    import fs from 'fs';
    import path from 'path';
    
    // Instantiate EdgeSpeechTTS
    const tts = new EdgeSpeechTTS({ locale: 'en-US' });
    
    // Create speech synthesis request payload
    const payload = {
      input: 'This is a speech demonstration',
      options: {
        voice: 'en-US-GuyNeural',
      },
    };
    
    // Call create method to synthesize speech
    const response = await tts.create(payload);
    
    // generate speech file
    const mp3Buffer = Buffer.from(await response.arrayBuffer());
    const speechFile = path.resolve('./speech.mp3');
    
    fs.writeFileSync(speechFile, mp3Buffer);

    https://github.com/lobehub/lobe-tts/assets/28616219/3ab68c5a-2745-442e-8d66-ca410192ace1

    [!IMPORTANT]
    Run on Node.js

    As the Node.js environment lacks the WebSocket instance, we need to polyfill WebSocket. This can be done by importing the ws package.

    // import at the top of the file
    import WebSocket from 'ws';
    
    global.WebSocket = WebSocket;

    Use the React Component

    import { AudioPlayer, AudioVisualizer, useAudioPlayer } from '@lobehub/tts/react';
    
    export default () => {
      const { ref, isLoading, ...audio } = useAudioPlayer(url);
    
      return (
        <Flexbox align={'center'} gap={8}>
          <AudioPlayer audio={audio} isLoading={isLoading} style={{ width: '100%' }} />
          <AudioVisualizer audioRef={ref} isLoading={isLoading} />
        </Flexbox>
      );
    };

    https://github.com/lobehub/lobe-tts/assets/28616219/c2638383-314f-44c3-b358-8fbbd3028d61

    πŸ“¦ Installation

    [!IMPORTANT]
    This package is ESM only.

    To install @lobehub/tts, run the following command:

    $ pnpm i @lobehub/tts

    $ bun add @lobehub/tts

    Compile with Next.js

    [!NOTE]
    By work correct with Next.js SSR, add transpilePackages: ['@lobehub/tts'] to next.config.js. For example:

    const nextConfig = {
      transpilePackages: ['@lobehub/tts'],
    };

    ⌨️ Local Development

    You can use Github Codespaces for online development:

    Or clone it for local development:

    $ git clone https://github.com/lobehub/lobe-tts.git
    $ cd lobe-tts
    $ bun install
    $ bun dev

    🀝 Contributing

    Contributions of all types are more than welcome, if you are interested in contributing code, feel free to check out our GitHub Issues to get stuck in to show us what you’re made of.

    🩷 Sponsor

    Every bit counts and your one-time donation sparkles in our galaxy of support! You're a shooting star, making a swift and bright impact on our journey. Thank you for believing in us – your generosity guides us toward our mission, one brilliant flash at a time.

    More Products

    • 🀯 Lobe Chat - An open-source, extensible (Function Calling), high-performance chatbot framework. It supports one-click free deployment of your private ChatGPT/LLM web application.
    • πŸ…°οΈ Lobe Theme - The modern theme for stable diffusion webui, exquisite interface design, highly customizable UI, and efficiency boosting features.
    • 🧸 Lobe Vidol - Experience the magic of virtual idol creation with Lobe Vidol, enjoy the elegance of our Exquisite UI Design, dance along using MMD Dance Support, and engage in Smooth Conversations.

    Design Resources

    Development Resources

    • 🎀 Lobe TTS - A high-quality & reliable TTS/STT library for Server and Browser
    • 🌏 Lobe i18n - Automation ai tool for the i18n (internationalization) translation process.

    More Resources


    πŸ“ License

    Copyright Β© 2023 LobeHub.
    This project is MIT licensed.