Воспроизведение mp3 песни на питоне

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

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

import wave
w = wave.open("e:/LOCAL/Betrayer/Metalik Klinik1-Anak Sekolah.mp3","r")

18 ответов

Решение

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

from pygame import mixer # Load the required library

mixer.init()
mixer.music.load('e:/LOCAL/Betrayer/Metalik Klinik1-Anak Sekolah.mp3')
mixer.music.play()

Обратите внимание, что поддержка MP3 ограничено.

Установка проста -

pip install pygame

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

>>> import vlc
>>> p = vlc.MediaPlayer("file:///path/to/track.mp3")
>>> p.play()

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

>>> p.stop()

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

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

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

Смотрите также playsound

pip install playsound

import playsound
playsound.playsound('/path/to/filename.mp3', True)

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

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

from playsound import playsound
playsound('/path/file.mp3')

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

$ pip install playsound

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

import os
os.system("afplay file.mp3") 

Как здесь уже не предлагалось, но, вероятно, это одно из самых простых решений:

import subprocess

def play_mp3(path):
    subprocess.Popen(['mpg123', '-q', path]).wait()

Это зависит от любого плеера, совместимого с mpg123, который вы получаете, например, для Debian, используя:

apt-get install mpg123

или же

apt-get install mpg321

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

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

Пример:

from pydub import AudioSegment

song = AudioSegment.from_mp3("original.mp3")
song.export("final.wav", format="wav")

Кроме того, используйте Pygame, как указано в другом ответе.

Если вы работаете в ноутбуке Jupyter (ранее IPython), вы можете

import IPython.display as ipd
ipd.Audio(filename='path/to/file.mp3')

Простое решение:

import webbrowser
webbrowser.open("C:\Users\Public\Music\Sample Music\Kalimba.mp3")

ура...

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

import os

os.system('start path/to/player/executable path/to/file.mp3')

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

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

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

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

from mpyg321.mpyg321 import MPyg321Player
from time import sleep

player = MPyg321Player()       # instanciate the player
player.play_song("sample.mp3") # play a song
sleep(5)
player.pause()                 # pause playing
sleep(3)
player.resume()                # resume playing
sleep(5)
player.stop()                  # stop playing
player.quit()                  # quit the player

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

На данный момент, почему бы не упомянуть python-audio-tools:

Это лучшее решение, которое я нашел.

(Мне нужно было установить libasound2-dev, на Распбиане)

Выдержка из кода свободно основана на:
https://github.com/tuffy/python-audio-tools/blob/master/trackplay

#!/usr/bin/python

import os
import re
import audiotools.player


START = 0
INDEX = 0

PATH = '/path/to/your/mp3/folder'

class TracklistPlayer:
    def __init__(self,
                 tr_list,
                 audio_output=audiotools.player.open_output('ALSA'),  
                 replay_gain=audiotools.player.RG_NO_REPLAYGAIN,
                 skip=False):

        if skip:
            return

        self.track_index = INDEX + START - 1
        if self.track_index < -1:
            print('--> [track index was negative]')
            self.track_index = self.track_index + len(tr_list)

        self.track_list = tr_list

        self.player = audiotools.player.Player(
                audio_output,
                replay_gain,
                self.play_track)

        self.play_track(True, False)

    def play_track(self, forward=True, not_1st_track=True):
        try:
            if forward:
                self.track_index += 1
            else:
                self.track_index -= 1

            current_track = self.track_list[self.track_index]
            audio_file = audiotools.open(current_track)
            self.player.open(audio_file)
            self.player.play()

            print('--> index:   ' + str(self.track_index))
            print('--> PLAYING: ' + audio_file.filename)

            if not_1st_track:
                pass  # here I needed to do something :)

            if forward:
                pass  # ... and also here

        except IndexError:
            print('\n--> playing finished\n')

    def toggle_play_pause(self):
        self.player.toggle_play_pause()

    def stop(self):
        self.player.stop()

    def close(self):
        self.player.stop()
        self.player.close()


def natural_key(el):
    """See http://www.codinghorror.com/blog/archives/001018.html"""
    return [int(s) if s.isdigit() else s for s in re.split(r'(\d+)', el)]


def natural_cmp(a, b):
    return cmp(natural_key(a), natural_key(b))


if __name__ == "__main__":

    print('--> path:    ' + PATH)

    # remove hidden files (i.e. ".thumb")
    raw_list = filter(lambda element: not element.startswith('.'), os.listdir(PATH))

    # mp3 and wav files only list
    file_list = filter(lambda element: element.endswith('.mp3') | element.endswith('.wav'), raw_list)

    # natural order sorting
    file_list.sort(key=natural_key, reverse=False)

    track_list = []
    for f in file_list:
        track_list.append(os.path.join(PATH, f))


    TracklistPlayer(track_list)

Вы должны использовать pygame следующим образом:

      from pygame import mixer

mixer.init()
mixer.music.load("path/to/music/file.mp3") # Music file can only be MP3
mixer.music.play()
# Then start a infinite loop
while True:
    print("")

Уже, pydubработал лучше всего для меня. Модули вродеplaysound тоже выполнит свою работу, но имеет только одну особенность. pydub имеет множество функций, таких как нарезка песни (файла), регулировка громкости и т. д.

Это так же просто, как нарезать списки в Python.

Итак, когда дело доходит до простой игры, все выглядит так, как показано ниже.

from pydub import AudioSegment
from pydub.playback import play

path_to_file = r"Music/Harry Potter Theme Song.mp3"
song = AudioSegment.from_mp3(path_to_file)
play(song)
from win32com.client import Dispatch

wmp = Dispatch('WMPlayer.OCX')

liste = [r"F:\Mp3\rep\6.Evinden Uzakta.mp3",
         r"F:\Mp3\rep\07___SAGOPA_KAJMER___BIR__I.MP3",
         r"F:\Mp3\rep\7.Terzi.mp3",
         r"F:\Mp3\rep\08. Rüya.mp3",
         r"F:\Mp3\rep\8.Battle Edebiyatı.mp3",
         r"F:\Mp3\rep\09_AUDIOTRACK_09.MP3",
         r"F:\Mp3\rep\02. Sagopa Kajmer - Uzun Yollara Devam.mp3",
         r"F:\Mp3\rep\2Pac_-_CHANGE.mp3",
         r"F:\Mp3\rep\03. Herkes.mp3",
         r"F:\Mp3\rep\06. Sagopa Kajmer - Istakoz.mp3"]


for x in liste:
    mp3 = wmp.newMedia(x)
    wmp.currentPlaylist.appendItem(mp3)

wmp.controls.play()

Для тех, кто все еще находит это в 2020 году: после поиска дольше, чем я ожидал, я только что нашел библиотеку simpleaudio, которая выглядит хорошо обслуживаемой, имеет лицензию MIT, работает в Linux, macOS и Windows и имеет очень мало зависимостей (только python3-dev и libasound2-dev в Linux).

Он поддерживает воспроизведение данных непосредственно из буферов (например, массивов Numpy) в памяти, имеет удобную функцию проверки звука:

import simpleaudio.functionchecks as fc
fc.LeftRightCheck.run()

и вы можете воспроизвести файл с диска следующим образом:

import simpleaudio as sa

wave_obj = sa.WaveObject.from_wave_file("path/to/file.wav")
play_obj = wave_obj.play()
play_obj.wait_done()

Инструкции по установке в основном pip install simpleaudio.

Как предложил Бен, вы можете использовать модуль pyvlc. Но даже если у вас нет этого модуля, вы можете воспроизводить файлы mp3 и mkv с помощью VLC из терминала в Linux:

      import os
os.system('nvlc /home/Italiano/dwhelper/"Bella Ciao Originale.mkv"')

Дополнительная информация здесь: https://linuxhint.com/play_mp3_files_commandline/

Код

import os

os.system("mpg321 song1.mp3")

mpg321 - бесплатный аудиоплеер командной строки, использующий библиотеку декодирования звука.

import os
os.system('file_path/filename.mp3')
Другие вопросы по тегам