audio_debug_server.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import socket
  2. import wave
  3. import argparse
  4. '''
  5. Create a UDP socket and bind it to the server's IP:8000.
  6. Listen for incoming messages and print them to the console.
  7. Save the audio to a WAV file.
  8. '''
  9. def main(samplerate, channels):
  10. # Create a UDP socket
  11. server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  12. server_socket.bind(('0.0.0.0', 8000))
  13. # Create WAV file with parameters
  14. filename = f"{samplerate}_{channels}.wav"
  15. wav_file = wave.open(filename, "wb")
  16. wav_file.setnchannels(channels) # channels parameter
  17. wav_file.setsampwidth(2) # 2 bytes per sample (16-bit)
  18. wav_file.setframerate(samplerate) # samplerate parameter
  19. print(f"Start saving audio from 0.0.0.0:8000 to {filename}...")
  20. try:
  21. while True:
  22. # Receive a message from the client
  23. message, address = server_socket.recvfrom(8000)
  24. # Write PCM data to WAV file
  25. wav_file.writeframes(message)
  26. # Print length of the message
  27. print(f"Received {len(message)} bytes from {address}")
  28. except KeyboardInterrupt:
  29. print("\nStopping recording...")
  30. finally:
  31. # Close files and socket
  32. wav_file.close()
  33. server_socket.close()
  34. print(f"WAV file '{filename}' saved successfully")
  35. if __name__ == "__main__":
  36. parser = argparse.ArgumentParser(description='UDP音频数据接收器,保存为WAV文件')
  37. parser.add_argument('--samplerate', '-s', type=int, default=16000,
  38. help='采样率 (默认: 16000)')
  39. parser.add_argument('--channels', '-c', type=int, default=2,
  40. help='声道数 (默认: 2)')
  41. args = parser.parse_args()
  42. main(args.samplerate, args.channels)