Python 如何使用pyAudio获得左输出

Python 如何使用pyAudio获得左输出,python,audio,pyaudio,Python,Audio,Pyaudio,假设我有一首歌,它在我耳机的两个扬声器上播放。我想用pyAudio编写一个代码,这样我就只能在扬声器上获得输出。就像那些演示左右检查的人 我问过这个问题,但我认为这并不能解决我的问题。此外,由于我是一名新成员,我不能就此发表评论,以作进一步澄清 我试图从上面的链接问题中实现一个解决方案,但它没有给我正确的答案。下面是实现 from struct import pack from math import sin, pi import wave import random RATE=44100

假设我有一首歌,它在我耳机的两个扬声器上播放。我想用pyAudio编写一个代码,这样我就只能在扬声器上获得输出。就像那些演示左右检查的人

我问过这个问题,但我认为这并不能解决我的问题。此外,由于我是一名新成员,我不能就此发表评论,以作进一步澄清

我试图从上面的链接问题中实现一个解决方案,但它没有给我正确的答案。下面是实现

from struct import pack
from math import sin, pi
import wave
import random

RATE=44100

## GENERATE MONO FILE ##
wv = wave.open('music.wav', 'w')
wv.setparams((1, 2, RATE, 0, 'NONE', 'not compressed'))
maxVol=2**15-1.0 #maximum amplitude
wvData=bytes()

for i in range(0, RATE*3):
    # print(type(pack('h', int(maxVol*sin(i*500/RATE)))))
    wvData+=pack('h', int(maxVol*sin(i*500.0/RATE))) #500Hz

wv.writeframes(wvData)
wv.close()
我得到了一个3秒的剪辑,其中包含噪声作为输出,这是出乎意料的。实际输出只能在一个频道上播放音频,可以是左声道,也可以是右声道。

wv.setparams((1,2,RATE,0,'NONE','notcompressed'))
创建一个单波文件。这意味着左侧和右侧通道是相同的(事实上,没有左侧和右侧通道,只有通道)

要只在一侧发声,您需要一个带有两个声道的立体声文件。看见将0写入任一通道以使该侧“静音”

我展示了一个如何在两侧之间实现渐变的示例:

for i in range(0, RATE * 3):
    percent = (float(i) / (RATE * 3 - 1)) # for fade effect
    wvData += pack('h', int((1 - percent) * maxVol * sin(2 * pi * i * 500.0 / RATE)))
    wvData += pack('h', int(percent * maxVol * sin(2 * pi * i * 488.0 / RATE)))

还要注意的是,
sin()
函数以弧度为参数,因此必须将该值乘以2pi。错过这一步是只听到噪音的原因。

不确定pyAduio是否真的能做到这一点。除了与图书馆合作并彻底阅读文档之外,我对这一评论没有任何依据。您可以做的是控制操作系统中的实际输出接收器。这可以通过或类似方式实现。感谢@Torxed提供的信息。然而,根据问题,每个帧有两个通道。我猜这些通道基本上是左输出和右输出(我不知道这是否正确)。也许如果我们能做点什么,删除其中一个,那么我想这是可能的。这个问题是关于源媒体的,是的,它有两个频道。但播放也可能需要多个频道,我认为pyAudio不允许您控制单个输出频道。您可能可以操纵原始源媒体-当然可以。但这与获得pyAudio的左/右声道(输出/混音)不同。这个问题是否仍然与您有关@KaptainKirk?