如何使用pyAudi获得左输出

2024-09-30 18:29:57 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有一首歌,它在我耳机的两个扬声器上播放。我想用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秒的剪辑包含噪音作为输出,这是不期望的。实际输出应该只在一个通道上播放音频,可以是左声道,也可以是右声道。在


Tags: 代码fromimportratesinwavethisvideos
1条回答
网友
1楼 · 发布于 2024-09-30 18:29:57

wv.setparams((1, 2, RATE, 0, 'NONE', 'not compressed'))创建一个单波文件。这意味着左声道和右声道是相同的(事实上,左声道和右声道并不只是声道)。在

要使声音只在一边,你需要一个立体声文件与两个通道。见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。错过这一步就是听到噪音的原因。在

相关问题 更多 >