安装pyaudio

sudo apt-get install python-pyaudio python3-pyaudio

声音录制

import pyaudioimport wavedef record_audio(wave_out_path,record_second):  CHUNK = 1024  FORMAT = pyaudio.paInt16  CHANNELS = 2  RATE = 44100  p = pyaudio.PyAudio()  stream = p.open(format=FORMAT,          channels=CHANNELS,          rate=RATE,          input=True,          frames_per_buffer=CHUNK)  wf = wave.open(wave_out_path, 'wb')  wf.setnchannels(CHANNELS)  wf.setsampwidth(p.get_sample_size(FORMAT))  wf.setframerate(RATE)  print("设置参数完毕")  print("开始录制声音")  # int(RATE / CHUNK * record_second)录制时间内,需要读取多少次数据  # CHUNK一次采样数据多少  # RATE一秒采样多少  for _ in range(0, int(RATE / CHUNK * record_second)):    data = stream.read(CHUNK)    wf.writeframes(data)        print("录制完成")    stream.stop_stream()  stream.close()  p.terminate()  wf.close()if __name__ == '__main__':    record_audio("output.wav",record_second=4)

声音播放

import pyaudioimport wavefrom tqdm import tqdmdef play_audio(wave_path):  CHUNK = 1024  wf = wave.open(wave_path, 'rb')  # instantiate PyAudio (1)  p = pyaudio.PyAudio()  # open stream (2)  stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),          channels=wf.getnchannels(),          rate=wf.getframerate(),          output=True)    # read data  data = wf.readframes(CHUNK)  # play stream (3)  datas = []  while len(data) > 0:    data = wf.readframes(CHUNK)    datas.append(data)  for d in tqdm(datas):    stream.write(d)  # stop stream (4)  stream.stop_stream()  stream.close()  # close PyAudio (5)  p.terminate()if __name__ == '__main__':    play_audio("output.wav")

在执行其他程序时同时播放音频,可以使用回调的方式播放

import pyaudioimport wavefrom tqdm import tqdmimport timedef play_audio_callback(wave_path):  CHUNK = 1024  wf = wave.open(wave_path, 'rb')  # instantiate PyAudio (1)  p = pyaudio.PyAudio()  def callback(in_data, frame_count, time_info, status):    data = wf.readframes(frame_count)    return (data, pyaudio.paContinue)  # open stream (2)  stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),          channels=wf.getnchannels(),          rate=wf.getframerate(),          output=True,          stream_callback=callback)  # read data  stream.start_stream()  while stream.is_active():    time.sleep(0.1)  # stop stream (4)  stream.stop_stream()  stream.close()  # close PyAudio (5)  p.terminate()play_audio_callback("output.wav")

               

©著作权归作者所有:来自51CTO博客作者东方佑的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 数字化采样仪的革新与发展:SP Devices推出基于Kintex UltraScale
  2. 迎战SDR、EW应用: Curtiss-Wright推出专用计算机系统——MPMC-935
  3. 基于Zedboard的开源软件定义无线电(SDR)设备:Panoradio!
  4. 苹果Mac好用的录屏软件:Filmage Screen
  5. 深度学习进阶NLP:word2vec的高速化
  6. Android(安卓)录制桌面视频 screenrecord
  7. Android(安卓)MediaRecorder 录制视频 start failed 的原因及解
  8. android 屏幕录像
  9. Android原始视频格式YUV,NV12,NV21,YV12,YU12(I420)

随机推荐

  1. C++精选面试题,一定要了解
  2. 怎么判断两个文件是否是同一个文件 (代码)
  3. 深度解析C++的函数模板与类模板
  4. 如何快速生成数据的文本路径呢?C++实现文
  5. 如何使用LINQ、Lambda 表达式 、委托快速
  6. C#中将DataGridView中的数据导入到Csv文
  7. C#学习记录:编写高质量代码改善整理建议9-
  8. c# 如何生成自定义图片?c# 生成自定义图片
  9. C#学习记录:编写高质量代码改善整理建议4-
  10. c++中string&char *&char[]之间如何转换(