Как получить левый вывод, используя pyAudio - PullRequest
0 голосов
/ 24 января 2019

Предположим, у меня есть песня, которая воспроизводится на обоих динамиках моих наушников. Я хочу написать код, используя 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-секундный клип, содержащий шум в качестве вывода, что не ожидается. Фактический выход должен воспроизводить звук только на одном канале, либо слева, либо справа.

1 Ответ

0 голосов
/ 24 января 2019

wv.setparams((1, 2, RATE, 0, 'NONE', 'not compressed')) создает моноволновой файл. Это означает, что левый и правый каналы одинаковы (на самом деле левый и правый каналы не являются просто каналом).

Чтобы звук звучал только с одной стороны, вам нужен стереофайл с двумя каналами. См. эти примеры . Запишите 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. Пропуск этого шага - причина слышать только шум.

...