Python:使用PyAudio(或其他)实时音频流?

时间:2015-07-28 11:03:13

标签: python audio numpy audio-streaming

目前我正在使用NumPy从NumPy阵列生成WAV文件。我想知道在它实际写入硬盘之前是否可以实时播放NumPy阵列。我发现使用PyAudio的所有示例都依赖于首先将NumPy数组写入WAV文件,但是我希望有一个预览函数,它只是将NumPy数组吐出到音频输出。

也应该是跨平台的。我正在使用Python 3(Anaconda发行版)。

3 个答案:

答案 0 :(得分:8)

这已经奏效了!谢谢你的帮助!

{{1}}

现在看起来很简单,但是当你不太了解Python时,它似乎很糟糕。

答案 1 :(得分:4)

使用python-sounddevice非常简单:

You can also use PreparedStatement  for the same.

String ColumnsArray[] = {"columnName"};
String sqlQuery = " " // write your insert query here
PreparedStatement pstmt = conn.prepareStatement(sql,ColumnsArray);
pstmt.setString(1, "anyvalue");

pstmt.execute();
ResultSet rs = pstmt.getGeneratedKeys();
if(rs.next())
long key = rs.getLong(1);

答案 2 :(得分:2)

正如您在examples中看到的那样,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()