> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cartesia.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# WebSocket Basic

> Basic WebSocket usage with websocket_connect() context manager.

<Tabs>
  <Tab title="Python">
    ```python theme={null}
    def tts_websocket_basic(client: Cartesia) -> None:
        """Basic WebSocket usage with websocket_connect() context manager."""
        with client.tts.websocket_connect() as connection:
            connection.send({
                "model_id": "sonic-3.5",
                "transcript": "Hello, world!",
                "voice": {"mode": "id", "id": "voice-id"},
                "output_format": {"container": "raw", "encoding": "pcm_f32le", "sample_rate": 44100},
            })

            import datetime
            filename = f"tts_websocket_basic_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.pcm"

            # Write chunks to file as they arrive.
            # You could also send chunks over the network, play them in real-time, etc.
            with open(filename, "wb") as f:
                for response in connection:
                    if response.type == "chunk" and response.audio:
                        f.write(response.audio)
                    elif response.done:
                        break

            print(f"Saved audio to {filename}")
            print(f"Play with:\n  $ ffplay -f f32le -ar 44100 {filename}")
    ```

    From [cartesia-python/examples/examples.py:196](https://github.com/cartesia-ai/cartesia-python/blob/main/examples/examples.py#L196)
  </Tab>

  <Tab title="Python (Async)">
    ```python theme={null}
    async def tts_websocket_basic_async(client: AsyncCartesia) -> None:
        """Basic WebSocket usage with websocket_connect() context manager."""
        async with client.tts.websocket_connect() as connection:
            await connection.send({
                "model_id": "sonic-3.5",
                "transcript": "Hello, world!",
                "voice": {"mode": "id", "id": "6ccbfb76-1fc6-48f7-b71d-91ac6298247b"},
                "output_format": {"container": "raw", "encoding": "pcm_f32le", "sample_rate": 44100},
            })

            filename = f"tts_ws_basic_async_{datetime.datetime.now().strftime('%Y%m%d_%H%M%S')}.pcm"

            with open(filename, "wb") as f:
                async for response in connection:
                    if response.type == "chunk" and response.audio:
                        f.write(response.audio)
                    elif response.done:
                        break
            
            print(f"Saved audio to {filename}")
            print(f"Play with: ffplay -f f32le -ar 44100 {filename}")
    ```

    From [cartesia-python/examples/async\_examples.py:109](https://github.com/cartesia-ai/cartesia-python/blob/main/examples/async_examples.py#L109)
  </Tab>

  <Tab title="TypeScript">
    ```typescript theme={null}
    async function ttsWebsocketBasic(client: Cartesia): Promise<void> {
      /** Basic WebSocket usage with websocket_connect() context manager. */
      const ws = await client.tts.websocket();
      ws.on('error', (err) => console.error('WS error:', err.message));

      const filename = `tts_websocket_basic_${timestamp()}.pcm`;
      const file = fs.createWriteStream(filename);

      for await (const event of ws.generate({
        model_id: 'sonic-3.5',
        transcript: 'Hello, world!',
        voice: { mode: 'id', id: '6ccbfb76-1fc6-48f7-b71d-91ac6298247b' },
        output_format: { container: 'raw', encoding: 'pcm_f32le', sample_rate: 44100 },
      })) {
        if (event.type === 'chunk') {
          if (event.audio) file.write(event.audio);
        }
      }

      file.end();
      ws.close();
      console.log(`Saved audio to ${filename}`);
      console.log(`Play with:\n  $ ffplay -f f32le -ar 44100 ${filename}`);
    }
    ```

    From [cartesia-js/examples/node\_examples.ts:48](https://github.com/cartesia-ai/cartesia-js/blob/main/examples/node_examples.ts#L48)
  </Tab>
</Tabs>

## Run this example

<Tabs>
  <Tab title="Python">
    ```sh theme={null}
    cd cartesia-python
    CARTESIA_API_KEY=YOUR_KEY python3 examples/examples.py tts_websocket_basic
    ```
  </Tab>

  <Tab title="Python (Async)">
    ```sh theme={null}
    cd cartesia-python
    CARTESIA_API_KEY=YOUR_KEY python3 examples/async_examples.py tts_websocket_basic_async
    ```
  </Tab>

  <Tab title="TypeScript">
    ```sh theme={null}
    cd cartesia-js
    CARTESIA_API_KEY=YOUR_KEY npx ts-node examples/node_examples.ts ttsWebsocketBasic
    ```
  </Tab>
</Tabs>
