utils.py 685 B

1234567891011121314151617181920212223242526272829
  1. import io
  2. import wave
  3. from dataclasses import dataclass
  4. from typing import Literal, Optional, Tuple
  5. import numpy as np
  6. @dataclass
  7. class InferenceResult:
  8. code: Literal["header", "segment", "error", "final"]
  9. audio: Optional[Tuple[int, np.ndarray]]
  10. error: Optional[Exception]
  11. def wav_chunk_header(
  12. sample_rate: int = 44100, bit_depth: int = 16, channels: int = 1
  13. ) -> bytes:
  14. buffer = io.BytesIO()
  15. with wave.open(buffer, "wb") as wav_file:
  16. wav_file.setnchannels(channels)
  17. wav_file.setsampwidth(bit_depth // 8)
  18. wav_file.setframerate(sample_rate)
  19. wav_header_bytes = buffer.getvalue()
  20. buffer.close()
  21. return wav_header_bytes