1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #!/usr/bin/env python3
- import sys
- import wave
- import pyaudio
- def record_audio(seconds: int, filename: str) -> None:
- oformat = pyaudio.paInt16
- channels = 2
- rate = 44100
- chunk = 1024
- record_seconds = int(seconds)
- wave_output_filename = f"{filename}.wav"
- audio = pyaudio.PyAudio()
- # start Recording
- stream = audio.open(
- format=oformat,
- channels=channels,
- rate=rate,
- input=True,
- frames_per_buffer=chunk,
- )
- print(f"recording for {seconds} seconds ...")
- frames = []
- for i in range(0, int(rate / chunk * record_seconds)):
- data = stream.read(chunk)
- frames.append(data)
- s = i / (rate / chunk)
- if s % 1 < 0.025:
- if int(seconds - s) < 11:
- print(int(seconds - s) + 1, ' sec left')
- print(f"recording saved to {wave_output_filename}")
- # stop Recording
- stream.stop_stream()
- stream.close()
- audio.terminate()
- waveFile = wave.open(wave_output_filename, "wb")
- waveFile.setnchannels(channels)
- waveFile.setsampwidth(audio.get_sample_size(oformat))
- waveFile.setframerate(rate)
- waveFile.writeframes(b"".join(frames))
- waveFile.close()
- if __name__ == '__main__':
- args = sys.argv
- sec = args[1] if args[1:] else 15
- name = args[2] if args[2:] else 'recording'
- record_audio(int(sec), name)
|