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

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

Вопрос очень похож на stackoverflow.com/questions/260738/play-audio-with-python.

Jeremy Ruten 21.11.2008 02:43

Или это: stackoverflow.com/questions/276266/…

lpfavreau 21.11.2008 04:23
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
107
2
451 388
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

Пример звука 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 более гибкая

Claudiu 22.11.2008 23:07
Ответ принят как подходящий

Набор инструментов Snack Sound может воспроизводить файлы wav, au и mp3.

s = Sound() 
s.read('sound.wav') 
s.play()

Snack, похоже, не работает с какой-то встроенной системной средой

Xun Yang 24.09.2014 16:26

он также недоступен на Pypi :-(

Danimal 30.07.2015 15:33

Закуска вроде сдохла (последнее обновление 2005 г. - десять лет назад).

Olli 13.02.2016 13:37

Вы можете использовать 2to3.py для преобразования tkSnack.py в Python 3. Поместите tkSnack.py в папку «Lib» в вашем каталоге Python. Затем поместите папку snakelib в папку «tcl» в вашем каталоге Python. Проверено на Python 3.2.

jacobtohahn 23.12.2017 03:17

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

import pyglet

music = pyglet.resource.media('music.mp3')
music.play()

pyglet.app.run()

только одна проблема с этим примером: медиа-файл должен находиться по пути (python-)

Steen 02.06.2009 14:12

Это нормально, если вы не возражаете против того, чтобы пиглет взял на себя процесс python.

Tom 20.06.2014 04:09
pyglet.media.sources.riff.WAVEFormatException: Not a WAVE file
Schütze 09.08.2018 04:50

@Steen вы можете указать абсолютный путь к файлу при использовании music=pyglet.media.load(path) вместо music = pyglet.resource.media(path)

Sayyor Y 25.01.2021 09:07

Для 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)

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

Claudiu 23.11.2008 00:02

Избегайте oss, он старый. Я не думаю, что он у меня вообще установлен.

Jeffrey Aylesworth 30.01.2010 22:47

OSS не старый. Просто люди, занимающиеся Linux, решили заменить его на ALSA по причинам, которые больше связаны с политикой и эгоизмом, чем с разработкой программного обеспечения. Тем не менее, OSS остается единственной универсальной звуковой системой UNIX на разных платформах и, вероятно, останется таковой в обозримом будущем.

Martin Tournoij 14.07.2011 01:08

Я считаю, что это наиболее простой подход. Я до сих пор пользуюсь Windows и считаю это решение приемлемым

swdev 26.10.2013 19:26

этот ответ продолжает работать на Python 3 в Windows и Linux (если вы загружаете модуль ядра snd-pcm-oss: sudo modprobe snd-pcm-oss)

jfs 02.07.2015 15:47

Я начал с этого ответа, добавил в вариант, который также работает в OS X, и загрузил его как чистый питон, кроссплатформенный, единственный функциональный модуль в pypi, который называется звук. pip install playsound. Наслаждаться!

ArtOfWarfare 25.01.2016 07:42

Я получил FileNotFoundError: [Errno 2] Нет такого файла или каталога: '/ dev / dsp', должен ли этот ответ открывать другой файл на / dev?

lapisdecor 24.02.2017 06:41

Мне нравится 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 не может выполнять повторную выборку звука, поэтому микшер должен быть инициализирован в соответствии со значениями ваших аудиоресурсов. " - возможно, поэтому ваши ресурсы загружаются неправильно ...

Dominic Scheirlinck 13.03.2012 12:42

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 не использует правильную частоту дискретизации для волновых файлов, которые я использую

Octopus 21.07.2013 11:23

Не всегда работает, иногда выдает ошибку сегментации и т. д. Я не рекомендую это делать.

Schütze 09.08.2018 04:48

Я только что выпустил простую оболочку 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

Seph Reed 16.05.2016 11:08

Не работает с Python 3.

Schütze 09.08.2018 05:00

Это кажется смешным и надуманным, но вы всегда можете использовать Windows (или любую другую ОС, которую вы предпочитаете), чтобы управлять звуком за вас!

import os
os.system("start C:/thepathyouwant/file")

Простой, без расширений, несколько медленный и дрянной, но работающий.

Хороший. Открытие множества возможностей, зная, что у Python есть эта функция

swdev 26.10.2013 19:12

это не функция python, это вызов процесса в ОС. это не кроссплатформенный, и это ужасно дорого

ealfonso 19.05.2014 05:03

Кроссплатформенность: 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.

Louis Maddox 09.07.2014 16:00

ага, не работает osx: sh: start: command not found

Julio Marins 22.03.2016 05:11

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

RedX 07.11.2016 01:28

Это ужасный совет. Это медленно, возможно, небезопасно и в плохой форме.

Woodrow Douglass 09.07.2018 18:40

@ Хулио Маринс. Вы также можете использовать os.system('afplay yourfilehere.mp3') на Mac.

Nosrep 15.03.2019 21:07

Пожалуйста, ПОЖАЛУЙСТА, не делайте этого! Это худшая практика, которую вы могли сделать. 1. Не кросс-платформенный 2. subprocess.call 3. Просто не делайте этого.

Niwla23 13.06.2020 14:47

Другие вопросы по теме