# `Codex.Voice.Events`
[🔗](https://github.com/nshkrdotcom/codex_sdk/blob/v0.18.1/lib/codex/voice/events.ex#L1)

Voice stream event types for the voice pipeline.

These events are emitted by the `VoicePipeline` during voice processing:

- `VoiceStreamEventAudio` - Audio data from the pipeline
- `VoiceStreamEventLifecycle` - Lifecycle events (turn started/ended, session ended)
- `VoiceStreamEventError` - Error events

## Example

    for event <- VoicePipeline.stream(input) do
      case event do
        %VoiceStreamEventAudio{data: data} ->
          play_audio(data)

        %VoiceStreamEventLifecycle{event: :turn_ended} ->
          IO.puts("Turn ended")

        %VoiceStreamEventError{error: error} ->
          Logger.error("Voice error: #{inspect(error)}")
      end
    end

# `t`

```elixir
@type t() ::
  Codex.Voice.Events.VoiceStreamEventAudio.t()
  | Codex.Voice.Events.VoiceStreamEventLifecycle.t()
  | Codex.Voice.Events.VoiceStreamEventError.t()
```

A voice stream event from the pipeline.

# `audio`

```elixir
@spec audio(binary() | nil) :: Codex.Voice.Events.VoiceStreamEventAudio.t()
```

Create an audio event.

## Examples

    iex> event = Codex.Voice.Events.audio(<<1, 2, 3>>)
    iex> event.type
    :voice_stream_event_audio
    iex> event.data
    <<1, 2, 3>>

# `error`

```elixir
@spec error(Exception.t()) :: Codex.Voice.Events.VoiceStreamEventError.t()
```

Create an error event.

## Examples

    iex> error = %RuntimeError{message: "test"}
    iex> event = Codex.Voice.Events.error(error)
    iex> event.type
    :voice_stream_event_error

# `lifecycle`

```elixir
@spec lifecycle(Codex.Voice.Events.VoiceStreamEventLifecycle.lifecycle_event()) ::
  Codex.Voice.Events.VoiceStreamEventLifecycle.t()
```

Create a lifecycle event.

## Examples

    iex> event = Codex.Voice.Events.lifecycle(:turn_ended)
    iex> event.type
    :voice_stream_event_lifecycle
    iex> event.event
    :turn_ended

---

*Consult [api-reference.md](api-reference.md) for complete listing*
