python - 如何在PyAudio中获取 channel 数据

标签 python playback pyaudio

我想从PyAudio中的声音数据中获取左右声道的数据。我有一维形状数组,但不知道其中哪些来自 channel

我尝试将前半部分数据更改为零。我有沉默。 我试图将每个第二个数字更改为零。我有沉默。 在文档中我看到 PyAudio 有一个参数“output_channels”。我认为它有多个输出 channel 。

import pyaudio
import numpy as np
CHUNK = 102
WIDTH = 2
#CHUNK = 10404
#RATE = 192000
CHANNELS = 2
RATE = 44100
p = pyaudio.PyAudio()
stream = p.open(format=p.get_format_from_width(WIDTH),
            channels=CHANNELS,
            rate=RATE,
            input=True,
            output=True,
            frames_per_buffer=CHUNK)
frames_per_buffer = 44100
data=[]
n=0
a=np.zeros(CHUNK*CHANNELS*WIDTH)
for i in range(1000):
    data.append(stream.read(CHUNK))
    for m in range(CHUNK):
        a[m]=data[0][m]
    s_0=[]
    for m in range(int(CHUNK*CHANNELS*WIDTH)):
        s_0.append(int(data[0][m]))
    a=np.asarray(s_0)
    a=a.reshape(int(CHUNK*WIDTH), 2)
    a_T = np.transpose(a)
    a_T[1][:] = 0
    a = np.transpose(a_T)
    a = a.reshape(CHUNK*CHANNELS*WIDTH)
    s_2=[]
    for m in range(CHUNK*CHANNELS*WIDTH):
        s_2.append(int(a[m]))
    sound=[bytes(s_2)]
    stream.write(sound.pop(0), CHUNK)
    data=[]
print('s_0')
s_0[0:20]
print('s_2')
s_2[0:20]

如果我更改数据,声音不会播放

最佳答案

这可以从立体声文件中获取 channel 0:

import pyaudio
import wave
import numpy as np
chunk = 1024

# open up a wave
wf = wave.open('/home/jeremy/Music/440.wav', 'rb')
swidth = wf.getsampwidth()
RATE = wf.getframerate()    
# open stream
p = pyaudio.PyAudio()
channels = wf.getnchannels()
stream = p.open(format =
                p.get_format_from_width(wf.getsampwidth()),
                channels = channels,
                rate = RATE,
                output = True)
# read some data
data = wf.readframes(chunk)
while len(data) == chunk*swidth*channels:
    # write data out to the audio stream
    stream.write(data)
    indata = np.fromstring(data, dtype='int16')
    # deinterleave, select 1 channel
    channel0 = indata[0::channels]
    data = wf.readframes(chunk)
if data:
    stream.write(data)
stream.close()
p.terminate()

关于python - 如何在PyAudio中获取 channel 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56918526/

相关文章:

python - 在对象中实现打包/解包

用于快速、无缝循环许多短音轨的 Python 音频库

scala - Play 框架隐藏了初始异常

python - IOError 输入溢出 : Record audio with Tkinter interface

python - 从 PostgreSQL 存储过程导入 Python 文件

python - 如何使用python Elasticsearch客户端upsert api

python - 在 Python 中获取文本文件的换行统计信息

swift - 稍微延迟播放声音

android - 使用 UDP 和 Python 服务器从 Android 到 PC 的音频流中的噪声

python : PortAudio + Opus encoding/decoding