Read audio data from the current source. Args: size: Number of bytes to read. Returns: audio_data: The read audio data as a bytearray, or empty if no data is available.
(self, size)
| 483 | logger.info("_disableStream: stream disabled") |
| 484 | |
| 485 | def _readAudio(self, size): |
| 486 | """ |
| 487 | Read audio data from the current source. |
| 488 | |
| 489 | Args: |
| 490 | size: Number of bytes to read. |
| 491 | Returns: |
| 492 | audio_data: The read audio data as a bytearray, or empty if no data is available. |
| 493 | """ |
| 494 | logger.debug(f"_readAudio: size={size} bytes") |
| 495 | |
| 496 | audio_data = bytearray() |
| 497 | |
| 498 | if not self.active: |
| 499 | logger.error("_readAudio: stream not active") |
| 500 | return audio_data |
| 501 | |
| 502 | if self.eos: |
| 503 | logger.debug("_readAudio: end of stream") |
| 504 | return audio_data |
| 505 | |
| 506 | try: |
| 507 | if self.filename == None: |
| 508 | # Read from microphone buffer |
| 509 | while len(self.audio_buffer) < size: |
| 510 | # Wait for enough data |
| 511 | time.sleep(0.01) # Wait 10ms |
| 512 | |
| 513 | # Now we have enough data |
| 514 | audio_data = bytearray(self.audio_buffer[:size]) |
| 515 | del self.audio_buffer[:size] |
| 516 | |
| 517 | logger.debug(f"_readAudio: read {len(audio_data)} bytes from microphone buffer") |
| 518 | |
| 519 | else: |
| 520 | # Read from wave file |
| 521 | frames_to_read = size // (self.channels * (self.sample_bits // 8)) |
| 522 | frames_data = self.wave_file.readframes(frames_to_read) |
| 523 | |
| 524 | if len(frames_data) > 0: |
| 525 | audio_data = bytearray(frames_data) |
| 526 | logger.debug(f"_readAudio: read {len(audio_data)} bytes from file") |
| 527 | else: |
| 528 | self.eos = True |
| 529 | logger.debug("_readAudio: end of file reached") |
| 530 | |
| 531 | except Exception as e: |
| 532 | logger.error(f"_readAudio: error reading audio data: {e}") |
| 533 | |
| 534 | return audio_data |
| 535 | |
| 536 | def _writeAudio(self, data): |
| 537 | """ |