Какой самый простой способ воспроизвести звуковой файл (.wav) в Python? Под простейшим я подразумеваю как наиболее платформо-независимые, так и требующие наименьшего количества зависимостей. pygame - это, безусловно, вариант, но он кажется излишним только для звука.
Или это: stackoverflow.com/questions/276266/…






Пример звука pyMedia делает только то. Это должно быть все, что вам нужно.
import time, wave, pymedia.audio.sound as sound
f= wave.open( 'YOUR FILE NAME', 'rb' )
sampleRate= f.getframerate()
channels= f.getnchannels()
format= sound.AFMT_S16_LE
snd= sound.Output( sampleRate, channels, format )
s= f.readframes( 300000 )
snd.play( s )
хехе, это отлично работает, но пример закуски требует гораздо меньше строк кода! я уверен, что pymedia более гибкая
Набор инструментов Snack Sound может воспроизводить файлы wav, au и mp3.
s = Sound()
s.read('sound.wav')
s.play()
Snack, похоже, не работает с какой-то встроенной системной средой
он также недоступен на Pypi :-(
Закуска вроде сдохла (последнее обновление 2005 г. - десять лет назад).
Вы можете использовать 2to3.py для преобразования tkSnack.py в Python 3. Поместите tkSnack.py в папку «Lib» в вашем каталоге Python. Затем поместите папку snakelib в папку «tcl» в вашем каталоге Python. Проверено на Python 3.2.
Определенно используйте для этого Пиглет. Это своего рода большой пакет, но это чистый питон без модулей расширения. Это определенно будет проще всего в развертывании. У него также отличный формат и поддержка кодеков.
import pyglet
music = pyglet.resource.media('music.mp3')
music.play()
pyglet.app.run()
только одна проблема с этим примером: медиа-файл должен находиться по пути (python-)
Это нормально, если вы не возражаете против того, чтобы пиглет взял на себя процесс python.
pyglet.media.sources.riff.WAVEFormatException: Not a WAVE file @Steen вы можете указать абсолютный путь к файлу при использовании music=pyglet.media.load(path) вместо music = pyglet.resource.media(path)
Для Windows вы можете использовать winsound. Он встроен в
import winsound
winsound.PlaySound('sound.wav', winsound.SND_FILENAME)
Вы должны иметь возможность использовать ossaudiodev для Linux:
from wave import open as waveOpen
from ossaudiodev import open as ossOpen
s = waveOpen('tada.wav','rb')
(nc,sw,fr,nf,comptype, compname) = s.getparams( )
dsp = ossOpen('/dev/dsp','w')
try:
from ossaudiodev import AFMT_S16_NE
except ImportError:
from sys import byteorder
if byteorder == "little":
AFMT_S16_NE = ossaudiodev.AFMT_S16_LE
else:
AFMT_S16_NE = ossaudiodev.AFMT_S16_BE
dsp.setparameters(AFMT_S16_NE, nc, fr)
data = s.readframes(nf)
s.close()
dsp.write(data)
dsp.close()
(Предоставлено ossaudiodev: Билл Дандрета http://mail.python.org/pipermail/python-list/2004-October/288905.html)
это хорошо - кажется, легко создать оболочку, которая хотя бы работала для этих двух платформ.
Избегайте oss, он старый. Я не думаю, что он у меня вообще установлен.
OSS не старый. Просто люди, занимающиеся Linux, решили заменить его на ALSA по причинам, которые больше связаны с политикой и эгоизмом, чем с разработкой программного обеспечения. Тем не менее, OSS остается единственной универсальной звуковой системой UNIX на разных платформах и, вероятно, останется таковой в обозримом будущем.
Я считаю, что это наиболее простой подход. Я до сих пор пользуюсь Windows и считаю это решение приемлемым
этот ответ продолжает работать на Python 3 в Windows и Linux (если вы загружаете модуль ядра snd-pcm-oss: sudo modprobe snd-pcm-oss)
Я начал с этого ответа, добавил в вариант, который также работает в OS X, и загрузил его как чистый питон, кроссплатформенный, единственный функциональный модуль в pypi, который называется звук. pip install playsound. Наслаждаться!
Я получил FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/ dev / dsp', должен ли этот ответ открывать другой файл на / dev?
Мне нравится pygame, и команда ниже должна работать:
pygame.init()
pygame.mixer.Sound('sound.wav').play()
но его нет ни на одном из моих компьютеров, и помощь по этому вопросу ограничена. edit: Я понял, почему звук pygame не работает для меня, он не загружает большинство звуков правильно, атрибут length составляет ~ 0,0002, когда я их загружаю. возможно, загрузка их с использованием чего-то другого, кроме mygame, заставит его работать в целом.
с помощью pyglet я получаю ошибку "ресурс не найден". Используя приведенный выше пример, укажите как относительный, так и полный путь к файлам.
использование pyglet.media.load() вместо pyglet.resource.media() позволяет мне загружать файлы.
но sound.play() воспроизводит только первую долю секунды файла, если я не запустил pyglet.app.run(), который блокирует все остальное ...
Из руководства: «Модуль микшера должен быть инициализирован, как и другие модули pygame, но у него есть некоторые дополнительные условия. Функция pygame.mixer.init - инициализация модуля микшера принимает несколько дополнительных аргументов для управления скоростью воспроизведения и размером выборки. Pygame будет по умолчанию используются разумные значения, но pygame не может выполнять повторную выборку звука, поэтому микшер должен быть инициализирован в соответствии со значениями ваших аудиоресурсов. " - возможно, поэтому ваши ресурсы загружаются неправильно ...
wxPython поддерживает воспроизведение файлов wav в Windows и Unix - я не уверен, что это касается Mac. Однако, насколько я могу судить, он поддерживает только файлы wav - он не поддерживает другие распространенные форматы, такие как mp3 или ogg.
После того, как команда play () добавит задержку, скажем, 10 секунд или около того, она заработает.
import pygame
import time
pygame.init()
pygame.mixer.music.load("test.wav")
pygame.mixer.music.play()
time.sleep(10)
Также воспроизводятся файлы .mp3.
pygame не использует правильную частоту дискретизации для волновых файлов, которые я использую
Не всегда работает, иногда выдает ошибку сегментации и т. д. Я не рекомендую это делать.
Я только что выпустил простую оболочку python для sox, которая будет воспроизводить звук с помощью Python. Его очень легко установить, так как вам нужен Python 2.6 или выше, sox (легко получить двоичные файлы для большинства архитектур) и оболочка (https://github.com/standarddeviant/sound4python). Если у вас нет sox, перейдите сюда: http://sourceforge.net/projects/sox/files/sox/
Вы можете воспроизводить звук с его помощью:
from sound4python import sound
import random
a = []
for idx in xrange(1*16000):
a.append(random.randint(-16384,16384))
sound(a)
Имейте в виду, что единственные части, которые на самом деле задействованы в воспроизведении звука, это следующие:
from sound4python import sound
...
sound(a)
Для пользователей Linux, если требуется обработка данных pcm на низком уровне, попробуйте модуль alsaaudio. Внутри пакета также есть пример playwav.py.
ссылка larsimmisch.github.io/pyalsaaudio/libalsaaudio.html#playwav- py
Не работает с Python 3.
Это кажется смешным и надуманным, но вы всегда можете использовать Windows (или любую другую ОС, которую вы предпочитаете), чтобы управлять звуком за вас!
import os
os.system("start C:/thepathyouwant/file")
Простой, без расширений, несколько медленный и дрянной, но работающий.
Хороший. Открытие множества возможностей, зная, что у Python есть эта функция
это не функция python, это вызов процесса в ОС. это не кроссплатформенный, и это ужасно дорого
Кроссплатформенность: import sysfrom subprocess import callif sys.platform == 'linux2':call(["xdg-open","sound.mp3"])elif sys.platform == 'darwin':call(["afplay","sound.mp3"]) Что дорого - это тратить время на все эти неисправные звуковые библиотеки tbh. Замена xdg-open на mpg123 даст функциональность afplay в Linux.
ага, не работает osx: sh: start: command not found
Это действительно плохо, потому что (под Windows) я мог бы сделать действие по умолчанию для аудиофайлов открытым в аудиоредакторе. Звук никогда не воспроизводился, и по какой-то странной причине мой аудиоредактор всегда открывался ...
Это ужасный совет. Это медленно, возможно, небезопасно и в плохой форме.
@ Хулио Маринс. Вы также можете использовать os.system('afplay yourfilehere.mp3') на Mac.
Пожалуйста, ПОЖАЛУЙСТА, не делайте этого! Это худшая практика, которую вы могли сделать. 1. Не кросс-платформенный 2. subprocess.call 3. Просто не делайте этого.
Вопрос очень похож на stackoverflow.com/questions/260738/play-audio-with-python.