record.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #coding:utf-8
  2. import pyaudio
  3. import wave
  4. import json
  5. import signal
  6. import sys
  7. import os
  8. RECORD_RATE = 16000
  9. RECORD_CHANNELS = 2
  10. RECORD_WIDTH = 2
  11. CHUNK = 1024
  12. RECORD_SECONDS = 60
  13. WAVE_OUTPUT_FILENAME = "./output.wav"
  14. #RECORD_DEVICE_NAME = "seeed-2mic-voicecard"
  15. RECORD_DEVICE_NAME = "USB Camera-B4.09.24.1"
  16. p = pyaudio.PyAudio()
  17. stream = p.open(
  18. rate=RECORD_RATE,
  19. format=p.get_format_from_width(RECORD_WIDTH),
  20. channels=RECORD_CHANNELS,
  21. input=True,
  22. start=False)
  23. wave_file = wave.open(WAVE_OUTPUT_FILENAME, "wb")
  24. def record():
  25. wave_file.setnchannels(RECORD_CHANNELS)
  26. wave_file.setsampwidth(2)
  27. wave_file.setframerate(RECORD_RATE)
  28. stream.start_stream()
  29. print("* recording")
  30. for i in range(0, int(RECORD_RATE / CHUNK * RECORD_SECONDS)):
  31. data = stream.read(CHUNK)
  32. wave_file.writeframes(data)
  33. print("* done recording")
  34. stream.stop_stream()
  35. wave_file.close()
  36. # audio_data should be raw_data
  37. return("record end")
  38. def sigint_handler(signum, frame):
  39. stream.stop_stream()
  40. stream.close()
  41. p.terminate()
  42. wave_file.close()
  43. print 'catched interrupt signal!'
  44. sys.exit(0)
  45. # 注册ctrl-c中断
  46. signal.signal(signal.SIGINT, sigint_handler)
  47. print p.get_device_count()
  48. device_index=-1
  49. for index in range(0,p.get_device_count()):
  50. info=p.get_device_info_by_index(index)
  51. device_name = info.get("name")
  52. print device_name
  53. print "\n"
  54. if device_name.find(RECORD_DEVICE_NAME) != -1:
  55. device_index=index
  56. break
  57. if device_index != -1:
  58. print "find the device"
  59. stream.close()
  60. stream = p.open(
  61. rate=RECORD_RATE,
  62. format=p.get_format_from_width(RECORD_WIDTH),
  63. channels=RECORD_CHANNELS,
  64. input=True,
  65. input_device_index = device_index,
  66. start=False)
  67. else:
  68. print "don't find the device"
  69. record()