假设我有一首歌,它在我耳机的两个扬声器上播放。我想使用 pyAudio 编写代码,以便仅在扬声器上获得输出。喜欢那些videos演示左右检查。
我经历了this问题,但我认为这不能解决我的问题。另外,由于我是新成员,我无法对此发表评论,以进一步澄清。
我尝试根据上述链接问题实现解决方案,但没有给出正确答案。这是实现。
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', 'not compressed'))
创建一个单声道波形文件。这意味着左声道和右声道是相同的(事实上,没有左声道和右声道之分,只有 声道)。
要仅在一侧发出声音,您需要一个具有两个声道的立体声文件。参见 these examples .将 0 写入任一 channel ,使该侧“静音”。
我展示了一个如何在两侧之间实现淡入淡出的示例:
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 相乘。缺少这一步是只听到噪音的原因。
关于python - 如何使用pyAudio获得左输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54350229/