Как выводить аудио на микрофон?
У меня есть код который получает звук с микрофона и воспроизводит его
r = sr.Recognizer()
with sr.Microphone(device_index = 1) as source:
audio = r.listen(source)
engine = pt.init()
try:
txt = r.recognize_google(audio, language = 'ru-RU').lower()
print(f"[LOG] Уловил: {txt}")
engine.say(txt)
engine.runAndWait()
except:
print("Я вас не раслышал, повторите?")
Но мне нужно чтобы это выводилось через микрофон и его мог использовать дискорд. Как это сделать через python?
Ответы (2 шт):
Это возможно, но не на 100% в python, так как требует установки другого программного обеспечения.
Первое, что нужно скачать https://www.vb-audio.com/Cable/, это создаст «Виртуальный аудиокабель», по которому программы могут воспроизводить музыку на устройстве ввода (которое выглядит как динамик), и он будет передавать ее на устройство вывода (что-то вроде микрофона).
Затем запустите эту команду в cmd: pip install pygame == 2.0.0.dev8 (или py -m pip install pygame == 2.0.0.dev8, в зависимости от вашей установки python) [Также причина, по которой это версия dev, заключается в том, что некоторые функции требуются только в sdl2, тогда как основная ветвь использует sdl1)
Потом:
>>> from pygame._sdl2 import get_num_audio_devices, get_audio_device_name #Get playback device names
>>> from pygame import mixer #Playing sound
>>> mixer.init() #Initialize the mixer, this will allow the next command to work
>>> [get_audio_device_name(x, 0).decode() for x in range(get_num_audio_devices(0))] #Returns playback devices
['Headphones (Oculus Virtual Audio Device)', 'MONITOR (2- NVIDIA High Definition Audio)', 'Speakers (High Definition Audio Device)', 'Speakers (NVIDIA RTX Voice)', 'CABLE Input (VB-Audio Virtual Cable)']
>>> mixer.quit() #Quit the mixer as it's initialized on your main playback device
>>> mixer.init(devicename='CABLE Input (VB-Audio Virtual Cable)') #Initialize it with the correct device
>>> mixer.music.load("Megalovania.mp3") #Load the mp3
>>> mixer.music.play() #Play it
speech_recognition
не сможет вывести аудио в микрофон самостоятельно, он является только 'приемником', для этого воспользуйтесь sounddevice
pip install sounddevice
import argparse
import keyboard
import sounddevice as sd
import numpy
assert numpy
def int_or_str(text):
"""Helper function for argument parsing."""
try:
return int(text)
except ValueError:
return text
parser = argparse.ArgumentParser(add_help=False)
parser.add_argument(
'-l', '--list-devices', action='store_true',
help='show list of audio devices and exit')
args, remaining = parser.parse_known_args()
if args.list_devices:
print(sd.query_devices())
parser.exit(0)
parser = argparse.ArgumentParser(
description=__doc__,
formatter_class=argparse.RawDescriptionHelpFormatter,
parents=[parser])
parser.add_argument(
'-i', '--input-device', type=int_or_str,
help='input device (numeric ID or substring)')
parser.add_argument(
'-o', '--output-device', type=int_or_str,
help='output device (numeric ID or substring)')
parser.add_argument(
'-c', '--channels', type=int, default=2,
help='number of channels')
parser.add_argument('--dtype', help='audio data type')
parser.add_argument('--samplerate', type=float, help='sampling rate')
parser.add_argument('--blocksize', type=int, help='block size')
parser.add_argument('--latency', type=float, help='latency in seconds')
args = parser.parse_args(remaining)
sd.default.device = None
def callback(indata, outdata, frames, time, status):
if status:
print(status)
outdata[:] = indata
with sd.Stream(device=(args.input_device, args.output_device),
samplerate=args.samplerate, blocksize=args.blocksize,
dtype=args.dtype, latency=args.latency,
channels=args.channels, callback=callback):
print('#' * 80)
print('press q quit')
print('#' * 80)
keyboard.wait('q')
Когда sd.default.device = None
Код будет использовать устройства по умолчанию.
Узнать какие устройства доступны сейчас:
import sounddevice as sd
print(sd.query_devices())
Вывод:
0 Microsoft Sound Mapper - Input, MME (2 in, 0 out)
> 1 Микрофон (Logitech PRO X Gaming, MME (2 in, 0 out)
2 Line 1(Micro1) (Virtual Audio C, MME (2 in, 0 out)
3 Microsoft Sound Mapper - Output, MME (0 in, 2 out)
< 4 Динамики (Logitech PRO X Gaming, MME (0 in, 2 out)
5 Line 1(Audio1) (Virtual Audio C, MME (0 in, 2 out)
6 Первичный драйвер записи звука, Windows DirectSound (2 in, 0 out)
7 Микрофон (Logitech PRO X Gaming Headset), Windows DirectSound (2 in, 0 out)
8 Line 1(Micro1) (Virtual Audio Cable), Windows DirectSound (2 in, 0 out)
9 Первичный звуковой драйвер, Windows DirectSound (0 in, 8 out)
10 Динамики (Logitech PRO X Gaming Headset), Windows DirectSound (0 in, 8 out)
Например : sd.default.device = 1,4 -> input,output
Вся подробная документация на сайте проекта SoundDevice