Как открыть файл mp3 в python

Обновлено: 07.07.2024

Как я могу воспроизвести звук (это будет как звук в 1 секунду) из скрипта Python?

Было бы лучше, если бы он не зависел от платформы, но для начала он должен работать на Mac.

Я знаю, что могу просто выполнить afplay file.mp3 команду из Python, но можно ли сделать это в чистом Python? Мне также было бы лучше, если бы он не полагался на внешние библиотеки.

Pyglet имеет возможность воспроизводить звук через внешнюю библиотеку под названием AVbin . Pyglet - это оболочка ctypes для собственных системных вызовов на каждой поддерживаемой платформе. К сожалению, я не думаю, что что-нибудь в стандартной библиотеке будет воспроизводить звук. Если вам нужна портативная звуковая библиотека Python, попробуйте PyAudio . У него определенно есть порт для Mac. Что касается мр3 файлов: это, конечно, можно сделать на "сыром" Python, только боюсь, вам придется все кодировать самостоятельно :). Если вы можете позволить себе какую-то внешнюю библиотеку, я нашел здесь образец PyAudio - PyLame .

Не похоже, что он может воспроизводить файлы .mp3 без внешних библиотек. Вы можете либо преобразовать файл .mp3 в .wav или другой формат, либо использовать такую ​​библиотеку, как PyMedia .

Лучше всего, вероятно, использовать pygame / SDL . Это внешняя библиотека, но она имеет отличную поддержку на разных платформах.

Вы можете найти более конкретную документацию о поддержке аудиомикшера в документации pygame.mixer.music.

Для меня это не сработало. Я имею в виду, он играл, но без звука. Я добавил time.sleep(5) в конце, и это сработало. Python 3.6 для Windows 8.1 Он не работает на Fedora со стандартными «.wav», «.mp3» и «.ogg» (невозможно открыть файл «filename.format») @ Calvin-Ruiz Я только что подтвердил, что могу использовать приведенный выше код в FC31 для воспроизведения файлов MP3 и Ogg. Я думаю, что у вас есть более серьезная проблема, для которой, вероятно, необходимо детальное знание вашей платформы.

Взгляните на Simpleaudio , относительно недавнюю и легкую библиотеку для этой цели:

Обязательно используйте несжатые 16-битные файлы PCM.

Отлично, спасибо - полезно для игр, которые должны воспроизводить короткие звуковые эффекты и поддерживают Python 3.

Попробуйте использовать playsound, который представляет собой кроссплатформенный однофункциональный модуль на чистом Python без каких-либо зависимостей для воспроизведения звуков.

Установить через pip:

После установки вы можете использовать его так:

Это чтение меня так взволновало. Мои глаза буквально слезились от счастья. Не ожидал от себя такой реакции. (Они связались с созданным мной модулем.) +1 за playsound . Я только что протестировал здесь пару решений, и это сработало для меня проще всего. К сожалению pygame , во время краткого теста решение не сработало.

В pydub мы недавно решили использовать ffplay (через подпроцесс) из набора инструментов ffmpeg, который внутренне использует SDL.

Он работает для наших целей - в основном просто для упрощения тестирования результатов кода pydub в интерактивном режиме - но у него есть свои недостатки, например, появление новой программы в доке на Mac.

Я связал реализацию выше, но следует упрощенная версия:

-nodisp Флаг останавливается ffplay показ нового окна, и -autoexit флаг вызывает ffplay к выходу и возвращать код состояния , когда аудиофайл окончания воспроизведения.

edit : pydub теперь использует pyaudio для воспроизведения, когда он установлен, и возвращается к ffplay, чтобы избежать недостатков, о которых я упоминал. Ссылка выше также показывает эту реализацию.

Pydub выглядит так, как будто у него есть большой потенциал в качестве библиотеки-оболочки - я устанавливаю его сейчас. Проклятье, PyDub выглядит неплохо и все еще очень активен.

Извините за поздний ответ, но я думаю, что это хорошее место для рекламы моей библиотеки .

AFAIK, в стандартной библиотеке есть только один модуль для воспроизведения аудио: ossaudiodev . К сожалению, это работает только в Linux и FreeBSD.

ОБНОВЛЕНИЕ: также есть выигрыш , но, очевидно, это также зависит от платформы.

Для чего-то более независимого от платформы вам понадобится внешняя библиотека.

Я рекомендую модуль звукового устройства (но будьте осторожны, я автор).

Пакет включает предварительно скомпилированную библиотеку PortAudio для Mac OS X и Windows, и ее можно легко установить с помощью:

Он может воспроизводить звук из массивов NumPy, но также может использовать простые буферы Python (если NumPy недоступен).

Для воспроизведения массива NumPy это все, что вам нужно (при условии, что аудиоданные имеют частоту дискретизации 44100 Гц):

Подробнее читайте в документации .

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

Большой! Как раз то, что мне нужно для создания демонстрационной программы о волнах. Выглядит так чисто, я бы хотел, чтобы для этого был пакет pip. Простота установки является ключевым моментом

Ответ Аарона кажется примерно в 10 раз сложнее, чем необходимо. Просто сделайте это, если вам нужен только ответ, работающий в OS X:

Одно дело . это немедленно возвращается. Таким образом, вы можете также сделать это, если хотите, чтобы вызов блокировался до тех пор, пока звук не перестанет воспроизводиться.

Изменить: я взял эту функцию и объединил ее с вариантами для Windows и Linux. В результате получился кроссплатформенный модуль на чистом питоне без зависимостей, который называется playsound . Я загрузил его на pypi.

Затем запустите его так:

Файлы MP3 также работают в OS X. WAV должен работать на всех платформах. Я не знаю, какие другие комбинации платформы / формата файла работают или не работают - я их еще не пробовал.

Я получаю следующую ошибку: «Не могу неявно преобразовать объект 'bytes' в str» в Python 3.5 (Windows). На самом деле. Это должно быть связано с различиями в Python 3.

Это самый простой и лучший из найденных. Он поддерживает Linux / pulseaudio, Mac / coreaudio и Windows / WASAPI.

Просто предупреждение для всех, кто собирается на это (как и я). Все библиотеки и их зависимости требуют вечности, чтобы построить на Raspberry Pi 1B + - особенно numpy. Если подумать, возможно, проблема в том, что вы используете старое ядро ​​или старую версию Python. Я думаю, что с более новыми версиями Python эта ошибка не должна выглядеть так. Он работает под управлением Raspbian, который по сути является форком Debian Stretch. Я сдался и пошел путем os.system, который отлично работает. Спасибо, что помогли мне!

Можно воспроизводить звук в OS X без каких-либо сторонних библиотек, используя аналог следующего кода. Необработанные аудиоданные можно вводить с помощью wave_wave.writeframes. Этот код извлекает 4 секунды аудио из входного файла.

Попробуйте PySoundCard, использующий для воспроизведения PortAudio, доступный на многих платформах. Кроме того, он распознает «профессиональные» звуковые устройства с большим количеством каналов.

Вот небольшой пример из Readme:

Хотя это интересно, ответы только по ссылкам не приветствуются. Как минимум, вы должны включить в свой ответ краткий пример его использования. Это также защищает ваш ответ от потери всей его ценности, если репозиторий будет переименован, а ссылка будет зависать.

Также в OSX - из SO , используя команду OSX afplay :

ОБНОВЛЕНИЕ: все это указывает, как делать то, чего OP хотел избежать в первую очередь. Думаю, я разместил это здесь, потому что OP хотел избежать именно той информации, которую я искал. Упс.

Отлично работает, хотя приостанавливает выполнение во время воспроизведения. Возможно, есть способ вызвать это асинхронно? Хорошие вопросы @Praxiteles. Возможно с резьбой. см. здесь. Сообщите, если у вас есть возможность поэкспериментировать. OP искал / искал альтернативу «выполнить команду afplay file.mp3 из Python», и подпроцессинг все еще происходит в Python, не так ли. Я исправился. Но, вероятно, этот небольшой пост здесь не повредит, так как он может помочь другим.

Pypi имеет список модулей для Python в музыке. Мне больше всего нравится jython, потому что в нем больше ресурсов и библиотек для музыки. В качестве примера кода для воспроизведения одной заметки из учебника :

Mac OS Я пробовал много кодов, но у меня это работает

Установите playsound пакет, используя:

Поместите это в начало вашего скрипта python, который вы пишете: Если wav-файл находится в каталоге скрипта python: Если wav-файла НЕТ в каталоге скрипта python: Если вы хотите узнать больше об игре:

Чтобы воспроизвести звук уведомления с помощью python, вызовите музыкальный проигрыватель, например vlc. VLC побудил меня использовать его версию командной строки, cvlc, вместо этого.

Для этого требуется, чтобы на устройстве был предварительно установлен vlc. Протестировано в Linux (Ubuntu 16.04 LTS); Запуск Python 3.5.

Попробуйте звуковое устройство

Если у вас нет модуля, введите его pip install sounddevice в свой терминал.

Затем в предпочитаемом вами скрипте Python (я использую Juypter) введите

sd.play(audio, sr) будет воспроизводить то, что вы хотите, через Python

Лучший способ получить нужный звук и частоту дискретизации - использовать модуль librosa. Введите это в терминал, если у вас нет модуля librosa.

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

Как только аудио является объектом данных "librosa", Python видит его как массив numpy. В качестве эксперимента попробуйте воспроизвести длинный (попробуйте 20 000 точек данных) случайный массив numpy. Python должен воспроизводить это как белый шум. Модуль sounddevice также воспроизводит множество массивов и списков.


Масса приложений записывает голос и воспроизводит звуки, если вы тоже этого хотите, то попали в нужное место и в нужное время. В этом уроке мы будем использовать разные библиотеки Python для воспроизведения и записи звука на Python.

Давайте установим необходимые библиотеки для этого урока:

Аудиоплеер

Во-первых, начнем с самого простого модуля звукового сопровождения?, playsound :

Да, этот модуль нам нужен и это, в основном, чистый Python, кроссплатформенный, однофункциональный модуль. В документации сказано, что работают расширения WAV и MP3, а также есть и другие форматы аудиозаписи.

Функция playsound() воспроизводит звук аудиофайла и блокирует его до тех пор, пока чтение файла не будет завершено. Можете передать block = False для того, что-бы функция работала асинхронно.

Другой альтернативой является использование библиотеки Pydub :

Примечание: на вашем компьютере должен быть установлен ffmpeg , чтобы использовать функцию AudioSegment.from_file() , которая поддерживает все форматы, поддерживаемые ffmpeg.

Если вы хотите воспроизводить аудио с помощью PyAudio, пройдите по этой ссылке.

Диктофон

Для записи голоса воспользуемся библиотекой PyAudio, так как это наиболее удобный подход:

Приведенный выше код в основном инициализирует объект PyAudio , а затем мы открываем объект потока, который позволяет нам записывать с микрофона с помощью метода stream.read() . После того, как мы закончили запись, используем встроенный волновой модуль для записи аудиофайла WAV на диск.

Если вы установите input = True в методе p.open() , то сможете использовать stream.read() для записи с микрофона. Кроме того, если вы установите output = True , то сможете использовать stream.write() для воспроизведения через динамик.

Заключение

Хорошо, здесь вы узнали, как воспроизводить аудиофайлы с помощью библиотек playsound , Pydub и PyAudio, а также записывать голос с помощью PyAudio.

Как я могу воспроизводить аудио (это будет похоже на 1-секундный звук) из скрипта Python?

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

Я знаю, что могу просто выполнить afplay file.mp3 команда изнутри Python, но можно ли это сделать в raw Python? Я также был бы лучше, если бы он не полагался на внешние библиотеки.

ваш лучший выбор, вероятно, чтобы использовать pygame / SDL. Это внешняя библиотека, но она имеет большую поддержку на различных платформах.

вы можете найти более подробную документацию о поддержке аудиомикшера в , С которым Pygame.смеситель.музыкальная документация

на pydub мы недавно решил использовать ffplay (через подпроцесс) из набора инструментов ffmpeg, который внутренне использует SDL.

Он работает для наших целей-в основном просто упрощает проверку результатов кода pydub в интерактивном режиме – но у него есть свои недостатки, например, появление новой программы в доке на mac.

я связал реализацию выше, но упрощенная версия следует:

В -nodisp флаг останавливает ffplay от показа нового окна, а -autoexit флаг заставляет ffplay выходить и возвращать код состояния, когда аудиофайл будет воспроизводиться.

edit: pydub теперь использует pyaudio для воспроизведения, когда он установлен, и возвращается к ffplay, чтобы избежать недостатков, о которых я упоминал. Ссылка выше показывает, что реализация также.

посмотри Simpleaudio, которая является относительно недавней и легкой библиотекой для этой цели:

затем:

убедитесь, что вы используете несжатые 16-битные файлы PCM.

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

AFAIK, стандартная библиотека имеет только один модуль для воспроизведения аудио:ossaudiodev. К сожалению, это работает только на Linux и FreeBSD.

обновление: есть также winsound, но очевидно, что это также зависит от платформы.

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

моя рекомендация это sounddevice модуль (но будьте осторожны, я автор).

пакет включает в себя предварительно скомпилированный PortAudio библиотека для Mac OS X и Windows, и может быть легко установлен с:

Он может воспроизводить звук из массивов NumPy, но он также может использовать простые буферы Python (если NumPy недоступен).

чтобы воспроизвести массив NumPy, это все, что вам нужно (при условии, что звуковые данные имеют частоту дискретизации 44100 Гц):

для более подробной информации, посмотрите на документация.

он не может читать/записывать звуковые файлы, для этого вам понадобится отдельная библиотека.

Если вам нужна портативная аудиотека Python, попробуйте PyAudio. Он, конечно, имеет порт mac.

Что касается mp3-файлов: это, безусловно, выполнимо в "сыром" Python, только я боюсь, что вам придется все кодировать самостоятельно :). Если вы можете позволить себе некоторую внешнюю библиотеку, я нашел некоторые PyAudio - образец PyLame здесь.

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

Аарон кажется, примерно в 10 раз сложнее, чем необходимо. Просто сделайте это, если вам нужен только ответ, который работает на OS X:

одно дело. это немедленно возвращается. Таким образом, вы можете также сделать это, если хотите, чтобы вызов блокировался до тех пор, пока звук не закончится.

Edit: я взял эту функцию и объединил ее с вариантами для Windows и Linux. Результатом является чистый python, кросс-платформенный модуль без зависимости называются playsound. Я загрузил его в pypi.

затем запустите его следующим образом:

MP3 файлы также работают на OS X. WAV должен работать на всех платформах. Я не знаю, какие другие комбинации формата платформы/файла работают или не работают - я их еще не пробовал.

можно воспроизводить аудио в OS X без каких-либо сторонних библиотек, используя аналог следующего кода. Необработанные аудиоданные можно вводить с помощью wave_wave.writeframes. Этот код извлекает 4 секунды аудио из входного файла.

попробовать playsound который представляет собой чистый Python, кросс-платформенный, однофункциональный модуль без каких-либо зависимостей для воспроизведения звуков.

установить через pip:

после установки, вы можете использовать его как это:

вы не можете сделать это без нестандартного библиотека.

для пользователей windows, которые попадают в этот поток, попробуйте pythonwin. , С которым Pygame имеет некоторую звуковую поддержку. Для аппаратного ускорения звука игры вам, вероятно, нужно будет вызвать OpenAL или аналогичный через ctypes.

попробовать PySoundCard который использует PortAudio для воспроизведения, которое доступно на многих платформах. Кроме того, он распознает "профессиональные" звуковые устройства с большим количеством каналов.

вот небольшой пример из Readme:

Pypi список модулей для Python в музыке. Мой любимый был бы jython потому что оно имеет больше ресурсов и библиотек для музыки. В качестве примера кода для воспроизведения одной ноты из учебник:

также на OSX-from так, используя OSX afplay:

обновление: все это указывает как чтобы сделать то, что ОП хотел избежать делать в первую очередь. Я думаю, я разместил это здесь, потому что то, что OP хотел избежать, было информацией, которую я искал. Выкрикивает.

Если вы находитесь на OSX, вы можете использовать модуль "os" или "подпроцесс" и т. д. для вызова команды OSX "play". Из оболочки OSX это выглядит как

спектакль "ба.wav"

Он начинает играть примерно полсекунды на моей машине.

просто вы можете сделать это с помощью cvlc- Я сделал это таким образом:

/home/maulo/selfProject / task.mp3. это расположение моего mp3-файла. с помощью "--play-and-exit" вы сможете снова воспроизводить звук, не завершая процесс vlc.

Поместите это в верхней части вашего скрипта python, который вы пишете:

Если wav-файл находится в каталоге скрипта python: Если wav-файл не находится в каталоге скрипта python: Если вы хотите узнать больше об игре:

чтобы воспроизвести звук уведомления с помощью python, вызовите музыкальный проигрыватель, например vlc. VLC предложил мне использовать его версию командной строки, cvlc, вместо этого.

он требует, чтобы vlc был предварительно установлен на устройстве. Протестировано на Linux (Ubuntu 16.04 LTS); работает Python 3.5.

Я хочу воспроизвести мою песню (mp3) с python, можете ли вы дать мне простейшую команду для этого?

Это не правильно

Попробуй это. Это упрощенно, но, вероятно, не самый лучший метод.

Обратите внимание, что поддержка pygame для MP3 ограничена. Кроме того, как указал Сами Бенчериф, не будет любое глупое всплывающее окно Pygame при запуске кода выше.

Я попробовал большинство из перечисленных вариантов здесь и обнаружил следующее:

Для windows 10: похож на ответ @Shuge Lee;

Вам нужно запустить:

Для Mac: просто попробуйте следующее, которое запускает команду os,

Еще один быстрый и простой вариант .

Теперь вам может потребоваться внести небольшие изменения, чтобы это работало. Например, если игроку нужны дополнительные аргументы или вам не нужно указывать полный путь. Но это простой способ сделать это.

У меня была эта проблема, и я не нашел решения, которое мне понравилось, поэтому я создал оболочку Python для mpg321: mpyg321 .

Вам нужно будет установить mpg321 на вашем компьютере, а затем выполнить pip install mpyg321 .

Использование довольно просто:

Вы также можете определить обратные вызовы для нескольких событий (музыка, приостановленная пользователем, конец песни . ).

Возьмите модуль VLC Python, vlc.py, который обеспечивает полную поддержку libVLC, и вставьте его в пакеты сайтов. Потом:

И вы можете остановить это с помощью:

Этот модуль предлагает множество других возможностей (как практически все, что может сделать медиаплеер VLC), но это самый простой и эффективный способ воспроизведения одного MP3.

Вы можете поиграть с os.path, чтобы найти для вас путь к MP3, учитывая имя файла и, возможно, ограничивая каталоги поиска.

Полная документация и предварительно подготовленные модули доступны здесь. Текущие версии Python 3 совместимы.

Вы пытаетесь сыграть .mp3 , как если бы это был .wav .

Вы можете попробовать использовать pydub, чтобы преобразовать его в формат .wav , а затем передать его в pyAudio.

Читайте также: