ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pyaudio与优美的声音

2021-04-22 23:54:13  阅读:212  来源: 互联网

标签:__ 声音 优美 stream wf pyaudio wave data CHUNK


安装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")

               

标签:__,声音,优美,stream,wf,pyaudio,wave,data,CHUNK
来源: https://blog.51cto.com/u_15177056/2726144

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有