diff --git a/src/agents/voice/result.py b/src/agents/voice/result.py index a01f7d762c..036dbc410f 100644 --- a/src/agents/voice/result.py +++ b/src/agents/voice/result.py @@ -104,7 +104,9 @@ def _transform_audio_buffer( # np.int16 needs 2-byte alignment; pad odd-length chunks safely. combined_buffer += b"\x00" - np_array = np.frombuffer(combined_buffer, dtype=np.int16) + # Provider PCM16 is little-endian regardless of host byte order. Decode it + # explicitly, then normalize to native int16 before exposing it to callers. + np_array = np.frombuffer(combined_buffer, dtype=np.dtype(" None: + result = StreamedAudioResult.__new__(StreamedAudioResult) + + raw = b"\x01\x02\x03\x04" + transformed = result._transform_audio_buffer([raw], np.int16) + + assert transformed.dtype == np.dtype(np.int16) + assert transformed.tolist() == [0x0201, 0x0403] + + +def test_transform_audio_buffer_float32_uses_little_endian_samples() -> None: + result = StreamedAudioResult.__new__(StreamedAudioResult) + + raw = b"\x01\x02\x03\x04" + transformed = result._transform_audio_buffer([raw], np.float32) + + assert transformed.dtype == np.dtype(np.float32) + assert transformed.shape == (2, 1) + np.testing.assert_allclose( + transformed[:, 0], + np.asarray([0x0201, 0x0403], dtype=np.float32) / 32767.0, + )