record 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/env python3
  2. import sys
  3. import wave
  4. import pyaudio
  5. def record_audio(seconds: int, filename: str) -> None:
  6. oformat = pyaudio.paInt16
  7. channels = 2
  8. rate = 44100
  9. chunk = 1024
  10. record_seconds = int(seconds)
  11. wave_output_filename = f"{filename}.wav"
  12. audio = pyaudio.PyAudio()
  13. # start Recording
  14. stream = audio.open(
  15. format=oformat,
  16. channels=channels,
  17. rate=rate,
  18. input=True,
  19. frames_per_buffer=chunk,
  20. )
  21. print(f"recording for {seconds} seconds ...")
  22. frames = []
  23. for i in range(0, int(rate / chunk * record_seconds)):
  24. data = stream.read(chunk)
  25. frames.append(data)
  26. s = i / (rate / chunk)
  27. if s % 1 < 0.025:
  28. if int(seconds - s) < 11:
  29. print(int(seconds - s) + 1, ' sec left')
  30. print(f"recording saved to {wave_output_filename}")
  31. # stop Recording
  32. stream.stop_stream()
  33. stream.close()
  34. audio.terminate()
  35. waveFile = wave.open(wave_output_filename, "wb")
  36. waveFile.setnchannels(channels)
  37. waveFile.setsampwidth(audio.get_sample_size(oformat))
  38. waveFile.setframerate(rate)
  39. waveFile.writeframes(b"".join(frames))
  40. waveFile.close()
  41. if __name__ == '__main__':
  42. args = sys.argv
  43. sec = args[1] if args[1:] else 15
  44. name = args[2] if args[2:] else 'recording'
  45. record_audio(int(sec), name)