vibe/tests/stubs/fake_audio_recorder.py
Mathias Gesbert 5103019b01
v2.5.0 (#495)
Co-authored-by: Quentin Torroba <quentin.torroba@mistral.ai>
Co-authored-by: Clement Sirieix <clem.sirieix@gmail.com>
Co-authored-by: Kim-Adeline Miguel <kimadeline.miguel@mistral.ai>
Co-authored-by: Simon Van de Kerckhove <simon.vandekerckhove@mistral.ai>
Co-authored-by: Vincent Guilloux <vincent.guilloux@mistral.ai>
Co-authored-by: Michel Thomazo <michel.thomazo@mistral.ai>
Co-authored-by: Mistral Vibe <vibe@mistral.ai>
2026-03-16 17:51:47 +01:00

65 lines
1.8 KiB
Python

from __future__ import annotations
from collections.abc import AsyncGenerator, Callable
from vibe.core.audio_recorder import (
AlreadyRecordingError,
AudioRecording,
RecordingMode,
)
FAKE_WAV_DATA = b"RIFF\x00\x00\x00\x00WAVEfmt "
class FakeAudioRecorder:
def __init__(self, *, fake_wav_data: bytes = FAKE_WAV_DATA) -> None:
self._recording = False
self._peak = 0.0
self._mode = RecordingMode.BUFFER
self._fake_wav_data = fake_wav_data
self._stream_chunks: list[bytes] = []
@property
def is_recording(self) -> bool:
return self._recording
@property
def peak(self) -> float:
return self._peak
@property
def mode(self) -> RecordingMode:
return self._mode
def start(
self,
mode: RecordingMode,
*,
sample_rate: int = 48_000,
channels: int = 1,
max_duration: float = 300.0,
on_expire: Callable[[AudioRecording], object] | None = None,
) -> None:
if self._recording:
raise AlreadyRecordingError("Already recording")
self._recording = True
self._mode = mode
def stop(self, *, wait_for_queue_drained: bool = True) -> AudioRecording:
if not self._recording:
return AudioRecording(data=b"", duration=0.0)
self._recording = False
return AudioRecording(data=self._fake_wav_data, duration=1.0)
def cancel(self) -> None:
self._recording = False
async def audio_stream(self) -> AsyncGenerator[bytes, None]:
for chunk in self._stream_chunks:
yield chunk
def set_peak(self, value: float) -> None:
self._peak = value
def set_stream_chunks(self, chunks: list[bytes]) -> None:
self._stream_chunks = chunks