Python音频操作工具PyAudio上手教程详解 "_blank" href="http://freenet.mcnabhosting.com/python/pyPortAudio/">pyPortAudio / fastaudio :PortAudio  v18  API的Python绑定。

  •  tkSnack :Tcl / Tk和Python的跨平台声音工具包。
  • 2.安装

    目前的版本是 PyAudio v0.2.11 。在大多数平台上使用pip安装PyAudio。对于v0.2.9之前的版本,PyAudio分发安装二进制文件,这些文件 存档在这里 。

    微软Windows

    使用 pip 安装:

    python -m pip install pyaudio

    笔记:

    • 如果pip尚未与您的Python安装捆绑在一起,请 在此处 获取 。
    • pip将获取并安装PyAudio轮(预先打包的二进制文件)。目前,有车轮兼容Python 2.7,3.4,3.5和3.6 的 官方发行版 。对于这些版本,可以使用32位和64位车轮。
    • 这些二进制文件包括使用MinGW构建的PortAudio v19 v190600_20161030。它们仅支持Windows MME API, 包括对DirectX,ASIO等的支持。如果需要支持未包含的API,则需要编译PortAudio和PyAudio。 Apple Mac OS X.

    使用 Homebrew 安装必备的portaudio库,然后使用pip安装PyAudio:

    brew install portaudio 
    pip install pyaudio

    笔记:

    • 如果尚未安装,请下载  Homebrew 。
    • pip将下载PyAudio源代码并为您的Python版本构建它。
    • Homebrew和构建PyAudio还需要安装Xcode命令行工具( 更多信息 )。

    Debian / Ubuntu

    使用包管理器安装PyAudio:

    sudo apt-get install python-pyaudio python3-pyaudio

    如果没有最新版本的PyAudio,请使用pip安装它:

    pip install pyaudio

    笔记:

    • pip将下载PyAudio源并为您的系统构建它。请务必事先安装portaudio库开发包( portaudio19-dev )和python开发包( python-all-dev )。
    • 为了更好地隔离系统包,请考虑在virtualenv中 安装PyAudio 。

     PyAudio来源

    源代码可从Python Package Index(PyPI)下载: pypi.python.org/pypi/PyAudio 。

    或克隆git存储库:

    git clone  https://people.csail.mit.edu/hubert/git/pyaudio.git

    要从源代码构建PyAudio,您还需要构建 PortAudio v19 。有关为各种平台构建PyAudio的一些说明,请参阅 编译提示 。要使用Microsoft Visual Studio构建PyAudio,请查看Sebastian Audet的 说明 。

    3.示例

    1).采集音频

    下面以一段代码演示如何从计算机麦克风采集一段音频,采集音频时长 4s,保存文件 output.wav

    使用了tqdm模块,可以方便显示出来读取过程,如下:

    * recording
    100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 172/172 [00:03<00:00, 43.40it/s] 
    * done recording
    import pyaudio
    import wave
    from tqdm import tqdm
    def 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("* recording")
      for i in tqdm(range(0, int(RATE / CHUNK * record_second))):
        data = stream.read(CHUNK)
        wf.writeframes(data)
      print("* done recording")
      stream.stop_stream()
      stream.close()
      p.terminate()
      wf.close()
    record_audio("output.wav",record_second=4)

    要使用PyAudio,首先使用 pyaudio.PyAudio()

    (1)实例化PyAudio ,它设置portaudio系统。

    要录制或播放音频,请使用 pyaudio.PyAudio.open()

    (2)在所需设备上打开所需音频参数的流。这设置了 pyaudio.Stream 播放或录制音频。

    通过使用流式传输 pyaudio.Stream.write() 音频数据或使用流式传输音频数据来播放音频  pyaudio.Stream.read()

    (3)请注意,在“阻止模式”中,每个 pyaudio.Stream.write() 或  pyaudio.Stream.read() 阻止直到所有给定/请求的帧都被播放/记录。或者,要动态生成音频数据或立即处理录制的音频数据,请使用下面概述的“回调模式”。

    使用 pyaudio.Stream.stop_stream() 暂停播放/录制,并 pyaudio.Stream.close() 终止流。(4)

    最后,使用 pyaudio.PyAudio.terminate() (5)终止portaudio会话

    2).播放音频

    下面使用播放的功能来播放1)中保存的音频 output.wav

    通过tqdm,显示播放进度条,如下:

    100%|██████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 172/172 [00:03<00:00, 43.40it/s]
    """PyAudio Example: Play a WAVE file."""
    import pyaudio
    import wave
    from tqdm import tqdm
    def 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()
    play_audio("output.wav")

    2).以回调方式播放音频

    当需要在执行其他程序时同时播放音频,可以使用回调的方式播放,示例代码如下:

    """PyAudio Example: Play a WAVE file."""
    import pyaudio
    import wave
    from tqdm import tqdm
    import time
    def 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")

    Reference:

    1. http://people.csail.mit.edu/hubert/pyaudio/

    总结

    以上所述是小编给大家介绍的Python音频操作工具PyAudio上手教程详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
    如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

    广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
    免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!

    稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!

    昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。

    这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。

    而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?