- # pyaudio
- # Callback Mode Audio I/O
- # Blocking Mode Audio I/O
- Как воспроизводить и записывать аудио на Python
- Аудиоплеер
- Диктофон
- Заключение
- Добавить комментарий Отменить ответ
- Ограничение ответственности
- Рекомендую
- Link’s QR code
- Время, где сейчас
- До восхода не будить и при пожаре выносить в первую очередь, а после заката звонить только в экстренных случаях:
- Скоро, скоро Новый год
- Рубрики
- Отче наш
- Под контролем
# pyaudio
PyAudio provides Python bindings for PortAudio, the cross-platform audio I/O library. With PyAudio, you can easily use Python to play and record audio on a variety of platforms. PyAudio is inspired by:
1.pyPortAudio/fastaudio: Python bindings for PortAudio v18 API.
2.tkSnack: cross-platform sound toolkit for Tcl/Tk and Python.
# Callback Mode Audio I/O
"""PyAudio Example: Play a wave file (callback version).""" import pyaudio import wave import time import sys if len(sys.argv) 2: print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0]) sys.exit(-1) wf = wave.open(sys.argv[1], 'rb') # instantiate PyAudio (1) p = pyaudio.PyAudio() # define callback (2) def callback(in_data, frame_count, time_info, status): data = wf.readframes(frame_count) return (data, pyaudio.paContinue) # open stream using callback (3) stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True, stream_callback=callback) # start the stream (4) stream.start_stream() # wait for stream to finish (5) while stream.is_active(): time.sleep(0.1) # stop stream (6) stream.stop_stream() stream.close() wf.close() # close PyAudio (7) p.terminate()
In callback mode, PyAudio will call a specified callback function (2) whenever it needs new audio data (to play) and/or when there is new (recorded) audio data available. Note that PyAudio calls the callback function in a separate thread. The function has the following signature callback(, , , ) and must return a tuple containing frame_count frames of audio data and a flag signifying whether there are more frames to play/record.
Start processing the audio stream using pyaudio.Stream.start_stream() (4), which will call the callback function repeatedly until that function returns pyaudio.paComplete.
To keep the stream active, the main thread must not terminate, e.g., by sleeping (5).
# Blocking Mode Audio I/O
«»»PyAudio Example: Play a wave file.»»»
import pyaudio import wave import sys CHUNK = 1024 if len(sys.argv) 2: print("Plays a wave file.\n\nUsage: %s filename.wav" % sys.argv[0]) sys.exit(-1) wf = wave.open(sys.argv[1], 'rb') # instantiate PyAudio (1) p = pyaudio.PyAudio() # open stream (2) stream = p.open(format=p.get_format_from_width(wf.getsampwidth()), channels=wf.getnchannels(), rate=wf.getframerate(), output=True) # read data data = wf.readframes(CHUNK) # play stream (3) while len(data) > 0: stream.write(data) data = wf.readframes(CHUNK) # stop stream (4) stream.stop_stream() stream.close() # close PyAudio (5) p.terminate()
To use PyAudio, first instantiate PyAudio using pyaudio.PyAudio() (1), which sets up the portaudio system.
To record or play audio, open a stream on the desired device with the desired audio parameters using pyaudio.PyAudio.open() (2). This sets up a pyaudio.Stream to play or record audio.
Play audio by writing audio data to the stream using pyaudio.Stream.write(), or read audio data from the stream using pyaudio.Stream.read(). (3)
Note that in “blocking mode”, each pyaudio.Stream.write() or pyaudio.Stream.read() blocks until all the given/requested frames have been played/recorded. Alternatively, to generate audio data on the fly or immediately process recorded audio data, use the “callback mode”(refer the example on call back mode)
Use pyaudio.Stream.stop_stream() to pause playing/recording, and pyaudio.Stream.close() to terminate the stream. (4)
Finally, terminate the portaudio session using pyaudio.PyAudio.terminate() (5)
Как воспроизводить и записывать аудио на 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, который одновременно записывает голос и экран. Нужно будет использовать поток, который записывает звук, и другой поток для записи экрана, удачи!
Добавить комментарий Отменить ответ
Ограничение ответственности
Информация на сайте предоставляется «как есть», без всяких гарантий, включая гарантию применимости в определенных целях, коммерческой пригодности и т.п. В текстах могут быть технические неточности и ошибки. Автор не может гарантировать полноты, достоверности и актуальности всей информации, не несет ответственности за последствия использования сайта третьими лицами. Автор не делает никаких заявлений, не дает никаких гарантий и оценок относительно того, что результаты, размещенные на сайте и описанные в заявлениях относительно будущих результатов, будут достигнуты. Автор не несет ответственности за убытки, возникшие у пользователей или третьих лиц в результате использования ими сайта, включая упущенную выгоду. Автор не несет ответственности за убытки, возникшие в результате действий пользователей, явно не соответствующих обычным правилам работы с информацией в сети Интернет. Пользуясь сайтом, вы принимаете и соглашаетесь со всеми нашими правилами, включая «Ограничение ответственности».
Рекомендую
Link’s QR code
Время, где сейчас
До восхода не будить и при пожаре выносить в первую очередь, а после заката звонить только в экстренных случаях:
Скоро, скоро Новый год
Рубрики
Отче наш
Отче наш, Иже еси́ на небесе́х! Да святи́тся имя Твое́, да прии́дет Ца́рствие Твое, да будет воля Твоя, я́ко на небеси́ и на земли́. Хлеб наш насу́щный даждь нам днесь; и оста́ви нам до́лги наша, я́коже и мы оставля́ем должнико́м нашим; и не введи́ нас во искушение, но изба́ви нас от лука́ваго
Под контролем
- Академия студенчества
- ИЛИМК
- Офис академического письма
- МАЛиМК
- НОЦ Лингво-инновационных технологий
- Партнерская сеть «Институт Пушкина»
- Центр делового образования
- Центр «Лингва»
- Управление инновациями и инвестициями
- Финансовый менеджмент
- Кафедра ИТЭ
- Кафедра ЦЭИИТ
- Бизнес-информатика + Кванториум
- ВКР: Бизнес-информатика
- Бизнес-информатика on-line
- Бизнес-информатика — драйв цифровой трансформации
- ЭУ-160
- ЭУ-235
- ЭУ-320
- ЭУ-442
- ЭУ-419 (архив)
- ЭУ-444, 461 (архив)
- ЭУ-459 (архив)
- ЭУ-434 (архив)
- Магистры Бизнес-информатики
- Магистратура ВШЭУ
- Технологическая площадка
- Digital Experience Workshop
- Cтэк технологий Web-разработки: шаг за шагом
- Абитуриент ВШЭУ — 2018
- Школа бизнеса ВШЭУ
- Кибер-студент
- Зеркало сайта
- ИТ-марафон
- Покори свой Олимп
- Digital Experience
- ООО «ЮЖУРАЛСЕРВИС»
- Школа перспективных технологий
- Бизнес‑информатике 15 лет