|
23 | 23 | FORMAT = np.int16 |
24 | 24 | CHANNELS = 1 |
25 | 25 | ENERGY_THRESHOLD = 0.015 # RMS threshold for barge‑in while assistant is speaking |
26 | | -PREBUFFER_CHUNKS = 3 # initial jitter buffer (~120ms with 40ms chunks) |
27 | | -FADE_OUT_MS = 12 # short fade to avoid clicks when interrupting |
| 26 | +PREBUFFER_CHUNKS = 3 # initial jitter buffer (~120ms with 40ms chunks) |
| 27 | +FADE_OUT_MS = 12 # short fade to avoid clicks when interrupting |
28 | 28 |
|
29 | 29 | # Set up logging for OpenAI agents SDK |
30 | 30 | # logging.basicConfig( |
@@ -108,14 +108,18 @@ def _output_callback(self, outdata, frames: int, time, status) -> None: |
108 | 108 |
|
109 | 109 | samples, item_id, content_index = self.current_audio_chunk |
110 | 110 | samples_filled = 0 |
111 | | - while samples_filled < len(outdata) and self.fade_done_samples < self.fade_total_samples: |
| 111 | + while ( |
| 112 | + samples_filled < len(outdata) and self.fade_done_samples < self.fade_total_samples |
| 113 | + ): |
112 | 114 | remaining_output = len(outdata) - samples_filled |
113 | 115 | remaining_fade = self.fade_total_samples - self.fade_done_samples |
114 | 116 | n = min(remaining_output, remaining_fade) |
115 | 117 |
|
116 | 118 | src = samples[self.chunk_position : self.chunk_position + n].astype(np.float32) |
117 | 119 | # Linear ramp from current level down to 0 across remaining fade samples |
118 | | - idx = np.arange(self.fade_done_samples, self.fade_done_samples + n, dtype=np.float32) |
| 120 | + idx = np.arange( |
| 121 | + self.fade_done_samples, self.fade_done_samples + n, dtype=np.float32 |
| 122 | + ) |
119 | 123 | gain = 1.0 - (idx / float(self.fade_total_samples)) |
120 | 124 | ramped = np.clip(src * gain, -32768.0, 32767.0).astype(np.int16) |
121 | 125 | outdata[samples_filled : samples_filled + n, 0] = ramped |
@@ -155,7 +159,10 @@ def _output_callback(self, outdata, frames: int, time, status) -> None: |
155 | 159 | if self.current_audio_chunk is None: |
156 | 160 | try: |
157 | 161 | # Respect a small jitter buffer before starting playback |
158 | | - if self.prebuffering and self.output_queue.qsize() < self.prebuffer_target_chunks: |
| 162 | + if ( |
| 163 | + self.prebuffering |
| 164 | + and self.output_queue.qsize() < self.prebuffer_target_chunks |
| 165 | + ): |
159 | 166 | break |
160 | 167 | self.prebuffering = False |
161 | 168 | self.current_audio_chunk = self.output_queue.get_nowait() |
|
0 commit comments