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

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

  • автор:

Как по-простому воспроизвести mp3 на python?

Идеальным вариантом был бы какой-нибудь одинокий модуль, умеющий это делать на linux и windows
Получилось сделать это через pygame, но если mp3 файл загружать прямо перед воспроизведением, то звук трещит
Пытался сделать через pyaudio, но не нашел примеров как воспроизводить mp3, везде только wav

python 3.3
Спасибо!

Glaciuse
29.12.13 14:27:53 MSK

какой-нибудь одинокий модуль, умеющий это делать на linux и windows

import subprocess class coolplayer(): def __init__(self, path_to_file): self.path_to_file = path_to_file def play(self): cmd = "aplay %s" % self.path_to_file subprocess.Popen(cmd, shell=True) return 0 if __name__ == '__main__': # How to use: coolplayer('C:\Музычка\рэпчик\пацаны_душевночетают.MP3').play() 

Siado ★★★★★
( 29.12.13 15:01:29 MSK )

PyAudio это же биндинг к PortAudio? Тогда его не советую: использовал его и в результате оказалось проще работать непосредственно с ALSA, чем разбираться с нюансами, которые добавляет PortAudio. А в питоне их может стать еще больше.

Для такой задачи лучше наверное взять биндинги к gstreamer или vlc.

Но еще лучше ИМХО вызвать внешнюю утилиту, как советуют выше. aplay правда mp3 не умеет, но есть, например, mplayer и ffplay.

Как воспроизвести аудио (.mp3) на Python

16 октября 2015 г. Archy Просмотров: 44504 RSS 4
Python для начинающих audio python, mp3 audio python, mp3 python

mp3 python

В данной статье мы покажем как можно воспроизвести аудио файлы в разных библиотеках на Python. Python универсальный язык программирование и в нем можно манипулировать не только текстом и цифрами но и аудио-видео файлами. Ниже мы покажем код как работать с mp3 в разных библиотеках.

Библиотека PyGame

Что же такое Pygame? Pygame — это кроссплатформенная библиотека языка Python, предназначенная для написания компьютерных игр и мультимедиа приложений. PyGame базируется на библиотеке SDL.

import pygame pygame.init() song = pygame.mixer.Sound('file.mp3') clock = pygame.time.Clock() song.play() while True: clock.tick(60) pygame.quit()

На создание скрипта с нуля для манипуляции аудио файлов может уйти много времени. Если вам нужно просто обрезать песню онлайн вы можете использовать онлайн редактор mp3 файлов. Такие аудио редакторы позволяют быстро обрезать песню и скачать ее онлайн.

Библиотека Pyglet

Pyglet предоставляет собой API для работы с мультимедийными данными в приложениях, написанных с помощью Python. Это OpenGL библиотека, которая работает на нескольких платформах. Она в основном используется для разработки игровых и других графически насыщенных приложений.

import pyglet song = pyglet.media.load('file.mp3') song.play() pyglet.app.run()

Библиотека GStreamer

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

import pygst pygst.require('0.10') import gst import gobject import os mainloop = gobject.MainLoop() pl = gst.element_factory_make("playbin", "player") pl.set_property('uri','file://'+os.path.abspath('file.mp3')) pl.set_state(gst.STATE_PLAYING) mainloop.run()

Еще записи по теме

  • Runscript – утилита для запуска python скриптов
  • Парсер HTML страниц на Python
  • Как определить мощности виртуального сервера для своего проекта?
  • Генераторы списков в Python
  • Абстрактные методы в Python
  • Создание своего веб-фреймворка на Python — Часть 1
  • Работаем с ssh в Python

Комментариев: 4

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

P.S.: проверял и в python2,7 и python3
второй вариант работает. спасибо

Первый метод будет работать так import time from pygame import mixer # Load the popular external library mixer.init() mixer.music.load(‘music.mp3’) mixer.music.play() time.sleep(5) поток не должен завершаться до окончания проигрывания

Запись и воспроизведение звука через 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, используя библиотеку PyGame. Все работает отлично, однако, вопреки выражению: «Работает — не трожь», я решил добавить фоновую музыку для игры. Вот тут и начались проблемы, я пробовал разные библиотеки для проигрывания звуков, такие как: playsound , pyglet , но везде возникала одна и та же проблема. При запуске самой игры, начинала проигрываться музыка, однако делать все игровые действия (ходить персонажем и т.д) я не мог. Я пробовал создавать отдельную функцию для воспроизведения и активировать ее в разных частях кода (в конце, в начале, середине), однако проблема оставалась. Хотелось бы узнать, какую библиотеку можно использовать или как использовать те, которые прововал я, только чтобы я мог выполнять все действия в игре, но при этом играла музыка.

Отслеживать
задан 12 апр 2020 в 10:10
h4cktivist h4cktivist
710 1 1 золотой знак 7 7 серебряных знаков 23 23 бронзовых знака

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Можно же делать звуки прямо в pygame

Включить звуковой эффект один раз

pygame.mixer.music.load('boom.mp3') pygame.mixer.music.play(0) 

Проигрывать постоянно по кругу (для фона)

pygame.mixer.music.load('foo.mp3') pygame.mixer.music.play(-1) 

Добавить следующую музыку в очередь:

pygame.mixer.music.queue('next_song.mp3') 
pygame.mixer.music.stop() 

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

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