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

Как воспроизвести звук в python

  • автор:

winsound — Звуковой интерфейс для Windows¶

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

winsound. Beep ( frequency, duration ) ¶

Подает звуковой сигнал в динамик ПК. Параметр frequency определяет частоту звука в герцах и должен находиться в диапазоне от 37 до 32 767. Параметр duration указывает количество миллисекунд, в течение которых должен длиться звук. Если система не может подать звуковой сигнал в динамик, вызывается RuntimeError .

winsound. PlaySound ( sound, flags ) ¶

Вызывает базовую функцию PlaySound() из API платформы. Параметр sound может быть именем файла, псевдонимом системного звука, аудиоданными в формате байтоподобного объекта или None . Его интерпретация зависит от значения flags, которое может быть побитовой комбинацией констант, описанных ниже. Если параметр sound равен None , любой воспроизводимый в данный момент звук волны останавливается. Если система указывает на ошибку, вызывается RuntimeError .

winsound. MessageBeep ( type=MB_OK ) ¶

Вызов базовой функции MessageBeep() из API платформы. Воспроизводит звук, указанный в реестре. Аргумент type указывает, какой звук воспроизводить; возможные значения: -1 , MB_ICONASTERISK , MB_ICONEXCLAMATION , MB_ICONHAND , MB_ICONQUESTION и MB_OK , все они описаны ниже. Значение -1 производит «простой звуковой сигнал»; это последний запасной вариант, если звук нельзя воспроизвести иначе. Если система указывает на ошибку, вызывается RuntimeError .

Параметр sound — это имя WAV файла. Не используйте с SND_ALIAS .

Параметр sound — это имя звуковой ассоциации из реестра. Если в реестре нет такого имени, воспроизведите системный звук по умолчанию, если также не указан SND_NODEFAULT . Если звук по умолчанию не зарегистрирован, вызывается RuntimeError . Не используйте с SND_FILENAME .

Все системы Win32 поддерживают как минимум следующее; большинство систем поддерживают гораздо больше:

PlaySound() name Соответствующее имя звука панели управления
‘SystemAsterisk’ Звездочка
‘SystemExclamation’ Восклицание
‘SystemExit’ Выход из Windows
‘SystemHand’ Критическая остановка
‘SystemQuestion’ Вопрос
import winsound # Воспроизвести звук выхода из Windows. winsound.PlaySound("SystemExit", winsound.SND_ALIAS) # Вероятно, воспроизводится звук Windows по умолчанию, если он зарегистрирован (потому что # "*" вероятно, это не зарегистрированное название какого-либо звука). winsound.PlaySound("*", winsound.SND_ALIAS) 

winsound. SND_LOOP ¶

Воспроизведение звука повторно. Также необходимо использовать флаг SND_ASYNC , чтобы избежать блокировки. Нельзя использовать с SND_MEMORY .

Параметр sound для PlaySound() представляет собой образ памяти файла WAV, как байтоподобный объект .

Данный модуль не поддерживает асинхронное воспроизведение из образа памяти, поэтому комбинация этого флага и SND_ASYNC вызовет RuntimeError .

winsound. SND_PURGE ¶

Останавливает воспроизведение всех экземпляров указанного звука.

Данный флаг не поддерживается на современных Windows платформах.

winsound. SND_ASYNC ¶

Возвращение немедленно, позволяя звукам воспроизводиться асинхронно.

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

winsound. SND_NOSTOP ¶

Не прерывать воспроизводимые в данный момент звуки.

Немедленно вернуться, если звуковой драйвер занят.

Данный флаг не поддерживается на современных платформах Windows.

winsound. MB_ICONASTERISK ¶

Воспроизвести звук SystemDefault .

Воспроизвести звук SystemExclamation .

Воспроизвести звук SystemHand .

Воспроизвести звук SystemQuestion .

Воспроизвести звук SystemDefault .

Запись и воспроизведение звука через PyAudio

Звук в компьютере представляет собой последовательность значений амплитуды (громкости) реальной звуковой волны. Одно значение амплитуды в последовательности будем называть отсчетом (или фреймом).

Частота дискретизации — количество отсчетов на одну секунду записи (чем больше, тем выше качество). Стандартная частота дискретизации для CD — 44100.

Глубина звука — количество бит для хранения одного отсчета. Чем больше — тем точнее можно передать реальное значение амплитуды, а значит выше качество. Стандартное значение для CD — 16 бит (2 байта).

Количество каналов — количество звуковых дорожек внутри файла. В файле для стерео системы (т.е. обычной файле) на самом деле есть сразу две звуковые дорожки — для правого и левого динамика.

Поток — это буфер в памяти звукового устройства (записывающего или воспроизводящего), куда устройство времено складывает данные в ожидании момента, когда их заберет ваш скрипт.

CHUNK — количество отсчетов, которые будут считываться из потока за один раз.

Байт-строка — последовательность байт записанная в виде строки. Именно в таком виде данные будут считываться из потока.

Запись и воспроизведение звука с помощью PyAudio

import pyaudio FORMAT = pyaudio.paInt16 # глубина звука = 16 бит = 2 байта CHANNELS = 1 # моно RATE = 48000 # частота дискретизации - кол-во фреймов в секунду CHUNK = 4000 # кол-во фреймов за один "запрос" к микрофону - тк читаем по кусочкам RECORD_SECONDS = 5 # длительность записи # подключаемся к аудиокарте audio = pyaudio.PyAudio() # открываем поток для чтения данных с устройства записи по-умолчанию и задаем параметры in_stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) # открываем поток для записи на устройство вывода - динамик - с такими же параметрами out_stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, output=True) print("recording. ") audio_recording = b'' # пустая строка из байт # для каждого "запроса" for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): # RATE / CHUNK - кол-во запросов в секунду audio_recording += in_stream.read(CHUNK) # читаем строку из байт длиной CHUNK * FORMAT = 4000*2 байт print("finished recording") print("now playing. ") # отправляем все что записали на колонки out_stream.write(audio_recording) # отправляем на динамик # отключаемся от микрофона и динамика out_stream.stop_stream() out_stream.close() in_stream.stop_stream() in_stream.close() # отключаемся от аудиокарты audio.terminate()

Потоковая обработка звука с микрофона

В примере ниже мы используем библиотеку PyAudio чтобы получить доступ к микрофону и выводить на экран среднюю громкость звука за секунду.

import struct, pyaudio FORMAT = pyaudio.paInt16 # глубина звука = 16 бит = 2 байта CHANNELS = 1 # моно RATE = 48000 # частота дискретизации - кол-во фреймов в секунду CHUNK = 4000 # кол-во фреймов за один "запрос" к микрофону - тк читаем по кусочкам RECORD_SECONDS = 20 # длительность записи audio = pyaudio.PyAudio() # открываем поток для чтения данных с устройства записи по умолчанию # и задаем параметры stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print("recording. ") # каждую секунду for i in range(RECORD_SECONDS): s = 0 # сумма отсчетов за секунду # для каждого "запроса" for j in range(RATE // CHUNK): # RATE//CHUNK - количество "запросов" к микрофону в секунду data = stream.read(CHUNK) # читаем строку из байт длиной CHUNK * FORMAT = 4000*2 байт # здесь мы превращаем байты в список из чисел, каждые два байта превращаются в число frames = struct.unpack(" список из CHUNK отсчетов, h - это short int # суммируем модули отсчетов - они могут быть отрицательными, поэтому убираем минус for frame in frames: s += abs(frame) print(s // RATE) # выводим среднюю громкость секунды print("finished recording")

Как записать звук в файл?

import pyaudio import wave # частока дискретизации и размер кусочка для считывания FORMAT = pyaudio.paInt16 FRAMERATE = 44100 BUFFER = 4096 CHANNELS = 1 # моно # открываем файл music_file = wave.open("result2.wav", "wb") music_file.setnchannels(CHANNELS) music_file.setframerate(FRAMERATE) music_file.setsampwidth(FORMAT) # запрашиваем сигнал с микрофона audio = pyaudio.PyAudio() in_stream = audio.open(format=FORMAT, channels=CHANNELS, rate=FRAMERATE, input=True, frames_per_buffer=BUFFER) # длительность записи seconds = 5 for i in range(seconds * FRAMERATE // BUFFER): data = in_stream.read(BUFFER) music_file.writeframes(data) in_stream.stop_stream()

Как воспроизвести звук из файла?

import pyaudio import wave audio_file = wave.open("ИМЯ ФАЙЛА.wav") FORMAT = audio_file.getsampwidth() # глубина звука CHANNELS = audio_file.getnchannels() # количество каналов RATE = audio_file.getframerate() # частота дискретизации N_FRAMES = audio_file.getnframes() # кол-во отсчетов audio = pyaudio.PyAudio() # открываем поток для записи на устройство вывода - динамик - с такими же параметрами out_stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, output=True) out_stream.write(audio_file.readframes(N_FRAMES)) # отправляем на динамик audio.terminate()

Как воспроизводить и записывать аудио на Python

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

Давайте установим необходимые библиотеки для этого урока:

pip3 install playsound pyaudio pydub ffmpeg-python

Аудиоплеер

Во-первых, начнем с самого простого модуля звукового сопровождения?, playsound :

from playsound import playsound playsound("audio_file.mp3")

Да, этот модуль нам нужен и это, в основном, чистый Python, кроссплатформенный, однофункциональный модуль. В документации сказано, что работают расширения WAV и MP3, а также есть и другие форматы аудиозаписи.

Функция playsound() воспроизводит звук аудиофайла и блокирует его до тех пор, пока чтение файла не будет завершено. Можете передать block = False для того, что-бы функция работала асинхронно.

Другой альтернативой является использование библиотеки Pydub :

from pydub import AudioSegment from pydub.playback import play # читать файл MP3 song = AudioSegment.from_mp3("audio_file.mp3") # song = AudioSegment.from_wav("audio_file.wav") # you can also read from other formats such as MP4 # song = AudioSegment.from_file("audio_file.mp4", "mp4") play(song)

Примечание: на вашем компьютере должен быть установлен ffmpeg , чтобы использовать функцию AudioSegment.from_file() , которая поддерживает все форматы, поддерживаемые ffmpeg.

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

Если вы хотите воспроизводить аудио с помощью PyAudio, пройдите по этой ссылке.

Диктофон

Для записи голоса воспользуемся библиотекой PyAudio, так как это наиболее удобный подход:

import pyaudio import wave # имя файла для записи filename = "recorded.wav" # установить размер блока в 1024 сэмпла chunk = 1024 # образец формата FORMAT = pyaudio.paInt16 # моно, если хотите стере измените на 2 channels = 1 # 44100 сэмплов в секунду sample_rate = 44100 record_seconds = 5 # initialize PyAudio object p = pyaudio.PyAudio() # открыть объект потока как ввод и вывод stream = p.open(format=FORMAT, channels=channels, rate=sample_rate, input=True, output=True, frames_per_buffer=chunk) frames = [] print("Recording. ") for i in range(int(44100 / chunk * record_seconds)): data = stream.read(chunk) # если вы хотите слышать свой голос во время записи # stream.write(data) frames.append(data) print("Finished recording.") # остановить и закрыть поток stream.stop_stream() stream.close() # завершить работу объекта pyaudio p.terminate() # сохранить аудиофайл # открываем файл в режиме 'запись байтов' wf = wave.open(filename, "wb") # установить каналы wf.setnchannels(channels) # установить формат образца wf.setsampwidth(p.get_sample_size(FORMAT)) # установить частоту дискретизации wf.setframerate(sample_rate) # записываем кадры как байты wf.writeframes(b"".join(frames)) # закрыть файл wf.close()

Приведенный выше код в основном инициализирует объект PyAudio , а затем мы открываем объект потока, который позволяет нам записывать с микрофона с помощью метода stream.read() . После того, как мы закончили запись, используем встроенный волновой модуль для записи аудиофайла WAV на диск.

Если вы установите input = True в методе p.open() , то сможете использовать stream.read() для записи с микрофона. Кроме того, если вы установите output = True , то сможете использовать stream.write() для воспроизведения через динамик.

Заключение

Хорошо, здесь вы узнали, как воспроизводить аудиофайлы с помощью библиотек playsound , Pydub и PyAudio, а также записывать голос с помощью PyAudio.

Для вас есть большая задача — объединить звук с устройством записи экрана и получите инструмент Python, который одновременно записывает голос и экран. Нужно будет использовать поток, который записывает звук, и другой поток для записи экрана, удачи!

Print Friendly, PDF & Email

Как воспроизводить и записывать аудио на Python , опубликовано К ВВ, лицензия — Creative Commons Attribution-NonCommercial 4.0 International.
Респект и уважуха

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

Для отправки комментария вам необходимо авторизоваться.

Ограничение ответственности

Информация на сайте предоставляется «как есть», без всяких гарантий, включая гарантию применимости в определенных целях, коммерческой пригодности и т.п. В текстах могут быть технические неточности и ошибки. Автор не может гарантировать полноты, достоверности и актуальности всей информации, не несет ответственности за последствия использования сайта третьими лицами. Автор не делает никаких заявлений, не дает никаких гарантий и оценок относительно того, что результаты, размещенные на сайте и описанные в заявлениях относительно будущих результатов, будут достигнуты. Автор не несет ответственности за убытки, возникшие у пользователей или третьих лиц в результате использования ими сайта, включая упущенную выгоду. Автор не несет ответственности за убытки, возникшие в результате действий пользователей, явно не соответствующих обычным правилам работы с информацией в сети Интернет. Пользуясь сайтом, вы принимаете и соглашаетесь со всеми нашими правилами, включая «Ограничение ответственности».

Рекомендую

Link’s QR code

Время, где сейчас

До восхода не будить и при пожаре выносить в первую очередь, а после заката звонить только в экстренных случаях:

Скоро, скоро Новый год

Рубрики

Отче наш

Отче наш, Иже еси́ на небесе́х! Да святи́тся имя Твое́, да прии́дет Ца́рствие Твое, да будет воля Твоя, я́ко на небеси́ и на земли́. Хлеб наш насу́щный даждь нам днесь; и оста́ви нам до́лги наша, я́коже и мы оставля́ем должнико́м нашим; и не введи́ нас во искушение, но изба́ви нас от лука́ваго

Под контролем

  1. Академия студенчества
  2. ИЛИМК
  3. Офис академического письма
  4. МАЛиМК
  5. НОЦ Лингво-инновационных технологий
  6. Партнерская сеть «Институт Пушкина»
  7. Центр делового образования
  8. Центр «Лингва»
  9. Управление инновациями и инвестициями
  10. Финансовый менеджмент
  11. Кафедра ИТЭ
  12. Кафедра ЦЭИИТ
  13. Бизнес-информатика + Кванториум
  14. ВКР: Бизнес-информатика
  15. Бизнес-информатика on-line
  16. Бизнес-информатика — драйв цифровой трансформации
  17. ЭУ-160
  18. ЭУ-235
  19. ЭУ-320
  20. ЭУ-442
  21. ЭУ-419 (архив)
  22. ЭУ-444, 461 (архив)
  23. ЭУ-459 (архив)
  24. ЭУ-434 (архив)
  25. Магистры Бизнес-информатики
  26. Магистратура ВШЭУ
  27. Технологическая площадка
  28. Digital Experience Workshop
  29. Cтэк технологий Web-разработки: шаг за шагом
  30. Абитуриент ВШЭУ — 2018
  31. Школа бизнеса ВШЭУ
  32. Кибер-студент
  33. Зеркало сайта
  34. ИТ-марафон
  35. Покори свой Олимп
  36. Digital Experience
  37. ООО «ЮЖУРАЛСЕРВИС»
  38. Школа перспективных технологий
  39. Бизнес‑информатике 15 лет

Можно ли в python воспроизвести звук при этом чтобы на экране не открывался проигрывать аудио? Какая библиотека нужна?

Да, можно воспроизвести звук в Python без открытия окна проигрывания. Для этого можно использовать библиотеку pyaudio.

Пример кода для воспроизведения звука:

import pyaudio 
import wave

# Открываем файл аудио
wave_file = wave.open("sound.wav", "rb")

# Инициализируем PyAudio
p = pyaudio.PyAudio()

# Открываем поток для воспроизведения
stream = p.open(
format=p.get_format_from_width(wave_file.getsampwidth()),
channels=wave_file.getnchannels(),
rate=wave_file.getframerate(),
output=True,
)

# Воспроизводим аудио
data = wave_file.readframes(1024)
while data:
stream.write(data)
data = wave_file.readframes(1024)

# Закрываем поток и PyAudio
stream.stop_stream()
stream.close()
p.terminate()

Документация к PyAufio https://people.csail.mit.edu/hubert/pyaudio/docs/

Остальные ответы

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

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