亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Python音頻操作工具PyAudio上手教程!

系統 1522 0

0.引子

當需要使用Python處理音頻數據時,使用python讀取與播放聲音必不可少,下面介紹一個好用的處理音頻PyAudio工具包。

PyAudio是Python開源工具包,由名思義,是提供對語音操作的工具包。提供錄音播放處理等功能,可以視作語音領域的OpenCv。

1.簡介

Python學習交流群:1004391443

PyAudio為跨平臺音頻I / O庫 PortAudio 提供 Python 綁定。使用PyAudio,您可以輕松地使用Python在各種平臺上播放和錄制音頻,例如GNU / Linux,Microsoft Windows和Apple Mac OS X / macOS。

PyAudio的靈感來自:

  • 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")

          

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲欧洲综合网 | 亚洲欧美在线精品一区二区 | 天天在线欧美精品免费看 | 色涩在线| 99久久精品无码一区二区毛片 | 97视频在线观看视频在线精品 | 亚洲免费观看视频 | 一道本一区二区三区 | 国产精品久久久久乳精品爆 | 狠狠干欧美 | 手机看片日韩高清国产欧美 | 久久精品国产亚洲片 | 免费中文字幕视频 | 日本九九视频 | 色综合网址 | 欧美精品在线看 | 高清亚洲综合色成在线播放放 | 日本狠狠操 | 欧美亚洲日本在线 | 中文字幕在线日本 | 国产看色免费 | 三区在线观看 | 久99久精品免费视频热77 | 国产欧美一区二区三区精品 | 天天爱添天天爱添天天爱添 | 精品乱久久 | 日韩毛片在线观看 | 亚洲欧美日韩国产色另类 | 久久精品亚洲精品国产色婷 | 久久996re热这里有精品 | 欧美十区| 亚洲一区二区三区首页 | 亚洲乱码视频 | 国产成人久久精品激情91 | 国产一级做性视频 | 日韩精品亚洲精品485页 | 久草精品视频 | 天天摸天天操 | 久久这里只有精品免费视频 | 在线看一级片 | 伊人丁香狠狠色综合久久 |