在python上播放mp3歌曲

时间:2013-11-16 17:28:57

标签: python audio mp3

我想从python播放我的歌曲(mp3),你能给我一个最简单的命令吗?

这是不正确的:

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

16 个答案:

答案 0 :(得分:78)

抓住VLC Python module,vlc.py,它提供对libVLC的完全支持并在site-packages中弹出。然后:

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

你可以用:

来阻止它
>>> p.stop()

该模块提供了足够的功能(就像VLC媒体播放器可以做的任何事情一样),但这是播放一个MP3最简单,最有效的方法。

你可以使用os.path来获取它,为你找到MP3的路径,给定文件名并可能限制搜索目录。

提供完整的文档和预先准备的模块here。当前版本与Python 3兼容。

答案 1 :(得分:47)

试试这个。这很简单,但也许不是最好的方法。

from pygame import mixer # Load the required library

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

请注意support for MP3 is limited

Installation is simple -

pip install pygame

答案 2 :(得分:12)

另见playsound

pip install playsound

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

答案 3 :(得分:10)

您正试图播放.mp3,就好像它是.wav

您可以尝试使用pydub将其转换为.wav格式,然后将其提供给pyAudio。

示例:

from pydub import AudioSegment

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

或者,使用pygame,如其他答案中所述。

答案 4 :(得分:10)

由于这里尚未提出,但可能是最简单的解决方案之一:

import subprocess

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

这取决于任何符合mpg123标准的播放器,例如,对于Debian使用:

apt-get install mpg123

apt-get install mpg321

答案 5 :(得分:5)

一个简单的解决方案:

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

...欢呼声

答案 6 :(得分:5)

如果你在Jupyter(以前的IPython)笔记本中工作,你可以

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

答案 7 :(得分:4)

此时,为什么不提及python-audio-tools

这是我找到的最佳解决方案。

(我需要在Raspbian上安装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)

答案 8 :(得分:3)

另一个快速简单的选择......

import os

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

现在您可能需要进行一些细微的更改才能使其正常工作。例如,如果玩家需要额外的参数,或者您不需要指定完整路径。但这是一种简单的方法。

答案 9 :(得分:2)

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()

答案 10 :(得分:2)

你应该像这样使用 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("")

答案 11 :(得分:1)

我在这里尝试了大多数列出的选项,并发现了以下内容:

对于Windows 10: 类似于@Shuge Lee的答案;

Content-Type

您需要运行:

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

对于Mac: 只需尝试运行os命令的以下命令,

$ pip install playsound

答案 12 :(得分:1)

对于仍然在2020年发现此问题的人:经过比我预期更长的搜索之后,我发现simpleaudio library似乎维护良好,已获得MIT许可,可在Linux,macOS和Windows上运行,并且仅具有很少的依赖性(在Linux上只有python3-devlibasound2-dev)。

它支持直接从内存中的缓冲区(例如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()

Installation instructions基本上是pip install simpleaudio

答案 13 :(得分:0)

我遇到了这个问题,没有找到我喜欢的任何解决方案,因此我为mpg321创建了一个python包装器: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

您还可以为多个事件定义回调(用户暂停的音乐,歌曲结尾...)。

答案 14 :(得分:0)

到目前为止,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)

答案 15 :(得分:-1)

import os
os.system('file_path/filename.mp3')