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)
→ Ссылка