python - 如何使用pyAudio获得左输出

标签 python audio pyaudio

假设我有一首歌,它在我耳机的两个扬声器上播放。我想使用 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/

相关文章:

python - 以其他列组的最大值为条件计算新列

Python:列表理解以生成连续的偶数子列表

ios - iOS录音时如何将PCM缓存实时转为AAC数据?

python - 如何在 Mac OS X 10.7 的 virtualenv 中安装 PyAudio

python - 高频声音Python

python - 如何对 List 使用 Random Randint?

python - 使用 Numpy.loadtxt() 进行并行处理

c - 如何在不打开设备的情况下以编程方式在 Linux 中找出 ALSA 音频设备功能

android - 在 Android >= 2.3 浏览器中嵌入背景音频

python - ImportError 没有名为 pyaudio 的模块