# Unity Socket Voice Chat Example 🎙️

This Unity project demonstrates a real-time voice chat system using:

- 🎧 **Microphone input with Opus codec (via Concentus)**
- 🔊 **Dynamic bandpass audio filtering**
- 📡 **WebSocket communication (via WebSocketSharp)**
- 🎮 **Unity AudioSource streaming with a circular buffer**

---

## Features

- ✅ Record microphone audio in real time.
- ✅ Apply a tunable bandpass filter to remove noise and improve voice clarity.
- ✅ Encode audio using Opus codec for low-latency transmission.
- ✅ Transmit voice data over a WebSocket connection.
- ✅ Decode and playback received voice with a continuous audio stream.

---

## Setup

### 🔧 Requirements

- Unity 2020.3 or newer (tested on Unity 2021+)
- [WebSocketSharp](https://github.com/sta/websocket-sharp) library
- [Concentus Opus codec for C#](https://github.com/lostromb/concentus)
- A WebSocket server (you can use a basic Python or Node.js echo server for testing)

---

## Project Structure

### 🎙️ `OpusMicRecorder.cs`

- Captures microphone audio.
- Applies a bandpass filter with adjustable `lowFreq` and `highFreq`.
- Encodes audio using Opus (20ms frame).
- Sends encoded data through `OnEncodedAudio` event.

### 📤 `OpusVoiceSender.cs`

- Connects to a WebSocket server.
- Listens for encoded audio from `OpusMicRecorder`.
- Sends voice packets via WebSocket.

### 📥 `OpusVoiceReceiverWithBuffer.cs`

- Connects to the same WebSocket server.
- Receives encoded Opus packets.
- Decodes them into PCM audio.
- Buffers the audio into a ring buffer for continuous playback using an `AudioSource`.

---

## Usage Instructions

### 1. Add Required Libraries

- Import `WebSocketSharp.dll` into your Unity project.
- Add the `Concentus` library (via Unity Package Manager or DLL).

### 2. Setup Scene

- Create an empty GameObject in your scene.
- Attach:
  - `OpusMicRecorder`
  - `OpusVoiceSender`
  - `OpusVoiceReceiverWithBuffer`


