У меня USB mi c и raspberry pi. Вот что я пытаюсь сделать.
У меня есть файл «musi c .wav», в котором звуковая дорожка настроена на левый канал, и у меня есть USB mi c, подключенный к raspberry pi.
Когда я играю "musi c .wav" и говорю на mi c. Я слышу musi c в левом динамике и голос mi c в левом и правом динамиках.
Я пробовал приведенный ниже код и пробовал разные способы, не смог добиться ограничения голоса только в правом динамике.
Может кто-нибудь мне поможет, как ограничить musi c только в левом динамике и голос только в правом динамике с использованием python языка?
Код ниже для голоса с микрофона, поступающего в оба динамика. Необходимо ограничить только правый динамик. Пожалуйста, помогите !!
import pyaudio
import os
import numpy as np
chunk=2800
RATE=44100
p=pyaudio.PyAudio()
#input stream setup
stream=p.open(format = pyaudio.paInt16,rate=RATE,channels=1,
input_device_index = 1, input=True, frames_per_buffer=chunk)
#the code below is from the pyAudio library documentation referenced
#below
#output stream setup
player=p.open(format = pyaudio.paInt16,rate=RATE,channels=1,
output=True, frames_per_buffer=chunk)
while True: #Used to continuously stream audio
try:
data=np.fromstring(stream.read(chunk,exception_on_overflow
=False),dtype=np.int16)
player.write(data,chunk)
except IOError:
continue
#closes streams
stream.stop_stream()
stream.close()
p.terminate
ОБНОВЛЕНИЕ: После многих попыток я выполнил приведенный ниже код: Теперь голос нечеткий, но я все еще попадая в оба динамика ... Я также поменял "плеер" - выходной канал на 2 .. Не повезло !!
import pyaudio
import os
import numpy as np
chunk=2800
RATE=44100
p=pyaudio.PyAudio()
#input stream setup
stream=p.open(format = pyaudio.paInt16,rate=RATE,channels=1,
input_device_index = 1, input=True, frames_per_buffer=chunk)
player=p.open(format = pyaudio.paInt16,rate=RATE,channels=1,
output=True,
frames_per_buffer=chunk) #tried changing channels=2
while True: #Used to continuously stream audio
try:
data=np.fromstring(stream.read(chunk,exception_on_overflow =
False),dtype=np.int16)
chunk_length = int(len(data)/2)
result = np.reshape(data, (chunk_length, 2),order='f')
#result = np.reshape(data, (chunk_length, 2))
print(result)
rightchannel=result[:, 1] #I need right
#leftchannel=result[:, 0]
print(rightchannel)
player.write(rightchannel,chunk_length)
#player.write(result,chunk)
except IOError:
continue
ОБНОВЛЕНИЕ 2:
stream=p.open(format = pyaudio.paInt16,rate=RATE,channels=1,
input_device_index = 1, input=True, frames_per_buffer=chunk)
player=p.open(format = pyaudio.paInt16,rate=RATE,channels=2,
output=True,
frames_per_buffer=chunk)
while True: #Used to continuously stream audio
try:
data=np.fromstring(stream.read(chunk,exception_on_overflow =
False),dtype=np.int16)
chunk_length = int(len(data)/2)
result = np.reshape(data, (chunk_length, 2))
print(result)
rightchannel=result[:, 1] #I need right
#leftchannel=result[:, 0]
print(rightchannel)
player.write(rightchannel,chunk)
except IOError:
continue
**ERROR**>>>>
[[185 179]
[183 175]
[190 197]
...,
[156 156]
[149 144]
[145 146]]
[179 175 197 ..., 156 144 146]
Traceback (most recent call last):
File
"/home/pi/RKR_MainAudioBase/Audio_GUI_RKR/MicFuncFiles/recorder.py",
line 25, in <module>
player.write(rightchannel,chunk)
File "/usr/lib/python3/dist-packages/pyaudio.py", line 586, in write
exception_on_underflow)
ValueError: ndarray is not C-contiguous