簡體   English   中英

Python:使用 PyAudio(或其他東西)進行實時音頻流?

[英]Python: Realtime audio streaming with PyAudio (or something else)?

目前我正在使用 NumPy 從 NumPy 數組生成 WAV 文件。 我想知道是否可以在實際寫入硬盤之前實時播放 NumPy 數組。 我發現的所有使用 PyAudio 的示例都依賴於首先將 NumPy 數組寫入 WAV 文件,但我希望有一個預覽功能,它只是將 NumPy 數組輸出到音頻輸出。

也應該是跨平台的。 我正在使用 Python 3(Anaconda 發行版)。

這已經奏效了! 感謝幫助!

def generate_sample(self, ob, preview):
    print("* Generating sample...")
    tone_out = array(ob, dtype=int16)

    if preview:
        print("* Previewing audio file...")

        bytestream = tone_out.tobytes()
        pya = pyaudio.PyAudio()
        stream = pya.open(format=pya.get_format_from_width(width=2), channels=1, rate=OUTPUT_SAMPLE_RATE, output=True)
        stream.write(bytestream)
        stream.stop_stream()
        stream.close()

        pya.terminate()
        print("* Preview completed!")
    else:
        write('sound.wav', SAMPLE_RATE, tone_out)
        print("* Wrote audio file!")

現在看起來很簡單,但是當你不太了解 Python 時,它看起來就像地獄。

這對於python-sounddevice來說非常簡單:

import sounddevice as sd
sd.play(myarray, 44100)

正如您在示例中所見,pyaudio 只是從 WAV 文件中讀取數據並將其寫入流。

沒有必要先寫一個 WAV 文件,你只需要一個正確格式的數據流

我正在添加下面的示例,以防鏈接失效(請注意,我沒有編寫此代碼):

"""PyAudio Example: Play a WAVE file."""

import pyaudio
import wave
import sys

CHUNK = 1024

if len(sys.argv) < 2:
    print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0])
    sys.exit(-1)

wf = wave.open(sys.argv[1], 'rb')

p = pyaudio.PyAudio()

stream = p.open(format=p.get_format_from_width(wf.getsampwidth()),
                channels=wf.getnchannels(),
                rate=wf.getframerate(),
                output=True)

data = wf.readframes(CHUNK)

while data != '':
    stream.write(data)
    data = wf.readframes(CHUNK)

stream.stop_stream()
stream.close()

p.terminate()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM