Python + PyAudio: Автоматический вывод звука, без записи в файл
Код:
import pyaudio
import wave
from playsound import playsound < ---- Воспроизводит файл
FORMAT = pyaudio.paInt16 # data type formate
CHANNELS = 1 # Adjust to your number of channels
RATE = 44100 # Sample Rate
CHUNK = 1024 # Block Size
RECORD_SECONDS = 5 # Record time
WAVE_OUTPUT_FILENAME = "file.wav"
audio = pyaudio.PyAudio()
stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
input_device_index=1, #< ----- Index device
frames_per_buffer=CHUNK)
print("Запись...")
frames = []
# Record for RECORD_SECONDS
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)
print("Запись сохранена")
# Stop Recording
stream.stop_stream()
stream.close()
audio.terminate()
waveFile = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
waveFile.setnchannels(CHANNELS)
waveFile.setsampwidth(audio.get_sample_size(FORMAT))
waveFile.setframerate(RATE)
waveFile.writeframes(b''.join(frames))
waveFile.close()
playsound("file.wav") < ---- Воспроизведение
Получить индекс устройства записи(микрофона):
import pyaudio
p = pyaudio.PyAudio()
for i in range(p.get_device_count()):
print(i, p.get_device_info_by_index(i)['name'])
Сразу добавлю, что в PyCharm у меня не работал 'PyAudio', использую 'Visual Code'
ТS: Хочу сделать передачу сигнала напрямую(сразу на колонки), без записи в файл. Похожее есть в windows прослушать с устройства.
Помогите.
Ответы (2 шт):
Автор решения: Yan Wolf
→ Ссылка
Нашел в официальной документации, вот такой код:
import sounddevice as sd
duration = 5.5 # seconds
def callback(indata, outdata, frames, time, status):
if status:
print(status)
outdata[:] = indata
with sd.RawStream(channels=2, dtype='int24', callback=callback):
sd.sleep(int(duration * 1000))
Я не понимаю где/как тут указать id устройств. Документация
Конкретно про Device Selection Я не могу понять как оно работает, помогите.
Автор решения: Masti
→ Ссылка
import pyaudio
FORMAT = pyaudio.paInt16 # data type formate
CHANNELS = 1 # Adjust to your number of channels
RATE = 44100 # Sample Rate
CHUNK = 1024 # Block Size
STREAM_SECONDS = 5 # Record time
audio = pyaudio.PyAudio()
in_stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
input_device_index=1, #< ----- Input index device
frames_per_buffer=CHUNK)
out_stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
output=True,
input_device_index=2, #< ----- Output index device
frames_per_buffer=CHUNK)
print("Stream started")
for i in range(0, int(RATE / CHUNK * STREAM_SECONDS)):
data = in_stream.read(CHUNK)
out_stream.write(data)