Как найти индекс микрофона в питоне
Перейти к содержимому

Как найти индекс микрофона в питоне

Голосовой помощник на Python

Вы когда-нибудь задумывались, как здорово было бы иметь своего собственного ИИ-ассистента (типа Д.Ж.А.Р.В.И.С.)? Было бы гораздо легче отправлять письма, искать информацию в Википедии, не открывая браузер, и выполнять ещё много других действий с помощью одного только голоса.

В этом уроке мы узнаем, как написать код собственного голосового помощника на Python.

Перед тем, как начать, мы должны определиться, какими функциями должен обладать наш голосовой помощник:

  • Отправка электронных писем
  • Воспроизведение музыки
  • Запросы в Википедию
  • Открытие сайтов, таких как Google, YouTube, Stackoverflow, freecodecamp и т.д. в браузере
  • Открытие редактора кода или IDE одной голосовой командой

И всё это без ручного ввода запросов в браузере!

А теперь приступим, собственно, к написанию нашего помощника.

И да: не забудьте сперва придумать ему имя :з

Настройка среды

Я использую PyCharm, но вы можете выбрать абсолютно любой удобный вам редактор.

Сперва мы импортируем/установим все необходимые библиотеки:

  • pyttsx3;
  • datetime;
  • speech recognition;
  • wikipedia;
  • webbrowser;
  • os.path;
  • smtplib.

Определение функции воспроизведения речи

Интеллектуальному голосовому помощнику прежде всего полагается говорить. Чтобы бот говорил, мы определим функцию speak() , которая принимает на входе аудио и произносит его.

Теперь нам нужно аудио, чтобы обеспечить коммуникацию пользователя и ассистента. Для этого мы установим модуль pyttsx3 .

Что такое pyttsx3 ?

Это библиотека Python, которая поможет нам конвертировать текст в устную речь. Она работает оффлайн и доступна как для Python 3, так и для Python 2.

После успешной установки pyttsx3 нужно импортировать модуль в нашу программу.

Что такое sapi5? Microsoft Speech API (SAPI5) – технология для распознавания и синтеза речи, предоставленная Microsoft.

VoiceId помогает нам выбирать разные голоса:

  • voice[0].id = мужской голос
  • voice[1].id = женский голос

python logo

Английский для программистов

Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас

Создание функции speak()

Создание функции main()

Теперь определим функцию main() и вызовем функцию speak() внутри неё.

P.S. Я назову своего ассистента Friday (Пятница).

Всё, что вы передадите функции speak() , будет полностью преобразовано в звук. Поздравляю: наш голосовой помощник обрел свой голос и готов с нами болтать!

Создание функции wishme()

Теперь мы напишем функцию wishme() , благодаря которой наш голосовой помощник будет приветствовать нас разными способами в зависимости от времени на компьютере.

Чтобы предоставить нашему ассистенту информацию о времени, мы должны импортировать модуль datetime, делается это следующей командой:

Теперь напишем функцию wishme() :

Здесь мы сохраняем целочисленное значение текущего часа в переменную hour . Используем это значение в конструкции if-else :

Определение функции takeCommand():

Следующий важный аспект в нашем помощнике: он должен уметь принимать команду с помощью микрофона нашей системы. Для этого мы создадим функцию takeCommand() .

С помощью takeCommand() наш интеллектуальный ассистент сможет возвращать строку, принимая голосовые команды по микрофону.

Но перед определением takeCommand() мы должны установить модуль speechRecognition следующей командой:

После установки импортируем модуль в программу:

Начнём написание функции takeCommand() :

Мы успешно создали нашу функцию takeCommand() . Также мы добавим блок try-except для обработки ошибок.

А теперь мы наконец-то можем приступить к определению задач для получения необходимой информации.

Задача 1: поиск по Википедии

Чтобы отправлять поисковые запросы в Википедию, мы должны установить и импортировать в нашу программу модуль wikipedia .

Команда для установки:

После установки используем import , чтобы добавить модуль в программу:

В коде выше мы использовали if , чтобы проверить, есть ли в запросе пользователя слово «Википедия». Если слово присутствует, помощник прочитает и озвучит с помощью speak() первые 5 предложений из статьи в Википедии (можно поменять число предложений на любое другое).

Задача 2: открыть YouTube в браузере

Для открытия сайтов мы используем модуль webbrowser .

Это встроенный модуль, так что устанавливать его нам не придётся. Остаётся лишь импортировать его.

Здесь мы используем elif , чтобы проверить наличие «YouTube» в запросе. Предположим, что пользователь даёт команду «Открой YouTube». В этом случае условие в elif выполнится и код будет исполнен.

Задача 3: открыть Google-поиск в браузере

Открытие Google происходит по той же логике, что и с YouTube.

Задача 4: воспроизвести музыку

Чтобы проигрывать музыку, нужно импортировать модуль os :

В данном коде мы в первую очередь открываем директорию с музыкой пользователя и перечисляем все песни в директории с помощью модуля os .

os.startfile позволяет нам воспроизвести любую нашу песню. Также можно включить случайно выбранную композицию с помощью модуля random . Каждый раз, когда вы будете просить включить музыку, голосовой помощник будет запускать воспроизведение любой песни из указанной папки.

Задача 5: узнать время

В этом коде мы используем функцию datetime() и сохраняем текущее время в переменной strTime .

После сохранения времени в strTime мы передаем переменную в качестве аргумента в функцию speak() , чтобы там она превратилась в речь.

Задача 6: открыть StackOverflow

Делаем то же самое, что и в случае с Google/Youtube.

Задача 7: открыть freecodecamp

Делаем то же самое, что и в случае с Google/Youtube.

Задача 8: открыть PyCharm (или другую IDE):

Чтобы открыть PyCharm или любое другое приложение, нужно указать путь к нему.

Задача 9: отправить email

Чтобы послать электронное письмо, мы импортируем модуль smtplib.

Simple Mail Transfer Protocol (SMTP) — протокол, позволяющий нам отправлять электронные письма и маршрутизировать электронные письма между разными почтовыми серверами.

Метод sendmail представлен в модуле SMTP. Именно этот метод позволяет отправлять письма.

Он принимает 3 параметра:

  • sender: email-адрес отправителя.
  • receiver: email-адрес получателя.
  • message: строка с сообщением, которую нужно отправить одному или нескольким адресатам.

Теперь мы можем создать функцию sendEmail() , которой мы будем посылать письма.

Замечание: не забудьте включить опцию ‘ненадёжные приложения, у которых есть доступ к аккаунту’ в вашем Gmail-аккаунте. Иначе функция sendEmail не сработает нужным образом.

Вызываем sendEmail() внутри main() :

Мы используем блок try-except , чтобы обрабатывать все ошибки, которые могут произойти при отправлении писем.

Повторяем изученное

  • Сначала мы создали функцию wishme() , которая предоставляет функционал для приветствия пользователя в соответствии с системным временем.
  • После wishme() мы создали функцию takeCommand() , которая позволяет ассистенту принимать команды пользователя и действовать в соответствии с ними. Эта функция возвращает запрос пользователя в формате строки.
  • Мы проработали логику для открывания различных сайтов: Google, YouTube, Stackoverflow, freecodecamp, Wikipedia.
  • Мы также добавили возможность открывать IDE PyCharm и другие приложения.
  • В конце мы разработали функцию отправки электронных писем (без написания единого слова, разве не круто?)

И тут последует самый противоречивый вопрос…

Можно ли считать это искусственным интеллектом?

Технически нет, ведь этот помощник – всего лишь результат выполнения набора команд. Но если поподробнее разобраться в вопросе, можно узнать, что цель любого ИИ – просто облегчить человеческую работу, выполняя задания с эффективностью человека (или даже лучше).

А наш голосовой помощник в значительной степени решает эту задачу.

Так что финальный вердикт: это ИИ!

Конец!

Мои поздравления: мы успешно создали нашего личного голосового помощника и сделали ещё один шаг навстречу нашей лени!

How get sound input from microphone in python, and process it on the fly?

I’m trying to write a program in Python which would print a string every time it gets a tap in the microphone. When I say ‘tap’, I mean a loud sudden noise or something similar.

I searched in SO and found this post: Recognising tone of the audio

I think PyAudio library would fit my needs, but I’m not quite sure how to make my program wait for an audio signal (realtime microphone monitoring), and when I got one how to process it (do I need to use Fourier Transform like it was instructed in the above post)?

Thank you in advance for any help you could give me.

3 Answers 3

If you are using LINUX, you can use pyALSAAUDIO. For windows, we have PyAudio and there is also a library called SoundAnalyse.

I found an example for Linux here:

user avatar

. and when I got one how to process it (do I need to use Fourier Transform like it was instructed in the above post)?

If you want a «tap» then I think you are interested in amplitude more than frequency. So Fourier transforms probably aren’t useful for your particular goal. You probably want to make a running measurement of the short-term (say 10 ms) amplitude of the input, and detect when it suddenly increases by a certain delta. You would need to tune the parameters of:

  • what is the «short-term» amplitude measurement
  • what is the delta increase you look for
  • how quickly the delta change must occur

Although I said you’re not interested in frequency, you might want to do some filtering first, to filter out especially low and high frequency components. That might help you avoid some «false positives». You could do that with an FIR or IIR digital filter; Fourier isn’t necessary.

Распознавание речи в Python с использованием Google Speech API

Распознавание речи является важной функцией в нескольких используемых приложениях, таких как домашняя автоматизация, искусственный интеллект и т. Д. Цель этой статьи — дать представление о том, как использовать библиотеку SpeechRecognition в Python. Это полезно, поскольку его можно использовать на микроконтроллерах, таких как Raspberri Pis, с помощью внешнего микрофона.

Требуемые установки

Следующее должно быть установлено:

  1. Модуль распознавания речи Python:
  2. PyAudio: используйте следующую команду для пользователей Linux

Если версии в репозиториях слишком старые, установите pyaudio с помощью следующей команды

Используйте pip3 вместо pip для python3.
Пользователи Windows могут установить pyaudio, выполнив в терминале следующую команду

Речевой ввод с использованием микрофона и перевод речи в текст

    Настроить микрофон (для внешних микрофонов): рекомендуется указывать микрофон во время программы, чтобы избежать сбоев.
    Введите lsusb в терминале. Появится список подключенных устройств. Имя микрофона будет выглядеть так

Запишите это, так как оно будет использовано в программе.

Вышеуказанные шаги были реализованы ниже:

#Python 2.x программа для распознавания речи

import speech_recognition as sr

# введите название USB-микрофона, который вы нашли
#using lsusb
# следующее имя используется только в качестве примера

mic_name = «USB Device 0x46d:0x825: Audio (hw:1, 0)»

# Частота дискретизации — это частота записи значений.

#Chunk похож на буфер. Он хранит 2048 образцов (байтов данных)
#Вот.
# Рекомендуется использовать степени 2, такие как 1024 или 2048

# создать список всех звуковых карт / микрофонов

# следующий цикл предназначен для установки идентификатора устройства микрофона, который
# Мы специально хотим использовать, чтобы избежать двусмысленности.

for i, microphone_name in enumerate (mic_list):

if microphone_name = = mic_name:

# использовать микрофон в качестве источника для ввода. Здесь мы также указываем
# какой идентификатор устройства специально для поиска микрофона
# не работает, появится сообщение «device_id undefined»

with sr.Microphone(device_index = device_id, sample_rate = sample_rate,

chunk_size = chunk_size) as source:

# подождите секунду, чтобы распознаватель отрегулировал

# энергетический порог в зависимости от уровня окружающего шума

print «Say Something»

# слушает для ввода пользователя

print «you said: » + text

# ошибка возникает, когда Google не может понять, что было сказано

print ( «Google Speech Recognition could not understand audio» )

except sr.RequestError as e:

print («Could not request results from Google

Speech Recognition service; < 0 >«. format (e))

Переписать аудио файл в текст

Если у нас есть аудиофайл, который мы хотим перевести в текст, мы просто должны заменить источник аудиофайлом вместо микрофона.
Поместите аудиофайл и программу в одну папку для удобства. Это работает для файлов WAV, AIFF, FLAC.
Реализация была показана ниже

#Python 2.x программа для расшифровки аудио файла

import speech_recognition as sr

# использовать аудиофайл в качестве источника звука

with sr.AudioFile(AUDIO_FILE) as source:

# читает аудио файл. Здесь мы используем запись вместо

print ( «The audio file contains: » + r.recognize_google(audio))

print ( «Google Speech Recognition could not understand audio» )

except sr.RequestError as e:

print («Could not request results from Google Speech

Recognition service; < 0 >«. format (e))

Исправление проблем

Следующие проблемы обычно встречаются

    Приглушенный микрофон: это приводит к тому, что вход не принимается. Чтобы проверить это, вы можете использовать alsamixer.
    Может быть установлен с помощью

Типа amixer . Вывод будет выглядеть примерно так

Как видите, устройство захвата в данный момент выключено. Чтобы включить его, наберите alsamixer
Как вы можете видеть на первом изображении, оно отображает наши устройства воспроизведения. Нажмите F4, чтобы переключиться на захват устройств.

На втором изображении выделенная часть показывает, что устройство захвата отключено. Чтобы включить звук, нажмите пробел

Как видно на последнем снимке, выделенная часть подтверждает, что устройство захвата не отключено.

Второе изображение показывает выбор экрана для звуковой карты

Эта статья предоставлена Дипаком Шриватсавом . Если вы как GeeksforGeeks и хотели бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *