Кому-нибудь удалось воспроизвести каналы 5.1 с PyAudio?
Я написал программу для простого воспроизведения PCM (RAW, 16 бит / 48 кГц) со стандартного ввода.Предполагается использовать его как:
cat some_2ch.pcm | python my_player.py 1 2
- Входной поток: some_2ch.pcm
- Идентификатор устройства вывода: 1
- ВыходКаналы: 2
cat some_6ch.pcm | python my_player.py 1 6
- Входной поток: some_6ch.pcm
- Идентификатор устройства вывода: 1
- Выходные каналы:6
Я пытался воспроизвести 2, 4, 6 каналов с помощью этой программы, но она не работает при воспроизведении 6 каналов.Шумы во всех каналах, и они заставляют меня едва слышать музыку.
Поскольку проблема возникает только при 6-канальном воспроизведении, я подозревал, что моя звуковая карта работает неправильно, и попробовал другие звуковые карты, но появились шумы.
Я подтвердил, что мой файл PCM нормальный.(Я импортирую его в Audacity, и шума нет.)
Среда:
- Windows 8.1 и Debian 9
- Python 3.7.2
- PyAudio 0.2.11
- PortAudio v19
- 7.1-канальное звуковое USB-устройство (CMedia CM6206)
- 7.1-канальное встроенное звуковое устройство (Realtek ALC892)
Программа: my_player.py
import sys
import pyaudio
class MyPlayer(object):
def __init__(self, device_id, channels):
self.pcm_bit = pyaudio.paInt16
self.pcm_rate = 48000
self.dev_output = device_id
self.buf_size = 1024 * channels
self.channels = channels
def play(self):
pa = pyaudio.PyAudio()
stream = pa.open(format=self.pcm_bit,
rate=self.pcm_rate,
channels=self.channels,
frames_per_buffer=self.buf_size,
input=False,
output=True,
output_device_index=self.dev_output)
stream.start_stream()
# read data from stdin and play them
while stream.is_active():
buffer = sys.stdin.buffer.read(self.buf_size)
if len(buffer) == 0:
break
stream.write(buffer)
stream.stop_stream()
stream.close()
pa.terminate()
if __name__ == '__main__':
# usage: python my_player.py OUTPUT_DEVICE_ID CHANNELS
# example: cat audio6ch.pcm | python my_player.py 1 6
dev = int(sys.argv[1])
c = int(sys.argv[2])
mp = MyPlayer(dev, c)
mp.play()