假设我有一首歌,同时在耳机的两个扬声器上播放。我想使用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秒的剪辑,其中包含噪音作为输出,这是不期望的。实际输出只能在一个声道上播放音频,无论是左声道还是右声道。
答案 0 :(得分:0)
wv.setparams((1, 2, RATE, 0, 'NONE', 'not compressed'))
创建一个单声道文件。这意味着左声道和右声道是相同的(实际上, the 声道没有左声道和右声道)。
要仅在一侧发出声音,您需要具有两个通道的立体声文件。参见these examples。将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。错过此步骤是听到噪音的原因。