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, который одновременно записывает голос и экран. Нужно будет использовать поток, который записывает звук, и другой поток для записи экрана, удачи!

Как воспроизводить и записывать аудио на Python , опубликовано К ВВ, лицензия — Creative Commons Attribution-NonCommercial 4.0 International.
Респект и уважуха
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Ограничение ответственности
Информация на сайте предоставляется «как есть», без всяких гарантий, включая гарантию применимости в определенных целях, коммерческой пригодности и т.п. В текстах могут быть технические неточности и ошибки. Автор не может гарантировать полноты, достоверности и актуальности всей информации, не несет ответственности за последствия использования сайта третьими лицами. Автор не делает никаких заявлений, не дает никаких гарантий и оценок относительно того, что результаты, размещенные на сайте и описанные в заявлениях относительно будущих результатов, будут достигнуты. Автор не несет ответственности за убытки, возникшие у пользователей или третьих лиц в результате использования ими сайта, включая упущенную выгоду. Автор не несет ответственности за убытки, возникшие в результате действий пользователей, явно не соответствующих обычным правилам работы с информацией в сети Интернет. Пользуясь сайтом, вы принимаете и соглашаетесь со всеми нашими правилами, включая «Ограничение ответственности».
Рекомендую
Link’s QR code
Время, где сейчас
До восхода не будить и при пожаре выносить в первую очередь, а после заката звонить только в экстренных случаях:
Скоро, скоро Новый год
Рубрики
Отче наш
Отче наш, Иже еси́ на небесе́х! Да святи́тся имя Твое́, да прии́дет Ца́рствие Твое, да будет воля Твоя, я́ко на небеси́ и на земли́. Хлеб наш насу́щный даждь нам днесь; и оста́ви нам до́лги наша, я́коже и мы оставля́ем должнико́м нашим; и не введи́ нас во искушение, но изба́ви нас от лука́ваго
Под контролем
- Академия студенчества
- ИЛИМК
- Офис академического письма
- МАЛиМК
- НОЦ Лингво-инновационных технологий
- Партнерская сеть «Институт Пушкина»
- Центр делового образования
- Центр «Лингва»
- Управление инновациями и инвестициями
- Финансовый менеджмент
- Кафедра ИТЭ
- Кафедра ЦЭИИТ
- Бизнес-информатика + Кванториум
- ВКР: Бизнес-информатика
- Бизнес-информатика on-line
- Бизнес-информатика — драйв цифровой трансформации
- ЭУ-160
- ЭУ-235
- ЭУ-320
- ЭУ-442
- ЭУ-419 (архив)
- ЭУ-444, 461 (архив)
- ЭУ-459 (архив)
- ЭУ-434 (архив)
- Магистры Бизнес-информатики
- Магистратура ВШЭУ
- Технологическая площадка
- Digital Experience Workshop
- Cтэк технологий Web-разработки: шаг за шагом
- Абитуриент ВШЭУ — 2018
- Школа бизнеса ВШЭУ
- Кибер-студент
- Зеркало сайта
- ИТ-марафон
- Покори свой Олимп
- Digital Experience
- ООО «ЮЖУРАЛСЕРВИС»
- Школа перспективных технологий
- Бизнес‑информатике 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/
Остальные ответы