在python上播放mp3歌曲

The*_*rdo 53 python audio mp3

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

这不正确:

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

Ben*_*Ben 87

获取VLC Python模块 vlc.py,该模块提供对libVLC的完全支持并在站点包中弹出.然后:

>>> import vlc
>>> p = vlc.MediaPlayer("file:///path/to/track.mp3")
>>> p.play()
Run Code Online (Sandbox Code Playgroud)

你可以用以下方法阻止它:

>>> p.stop()
Run Code Online (Sandbox Code Playgroud)

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

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

此处提供完整的文档和预先准备的模块.当前版本兼容Python 3.

  • 这可能是最好的答案,因为VLC完成了99%的工作.PyPi版本已经过时,但VLC wiki是一个很好的替代src - https://wiki.videolan.org/Python_bindings (6认同)
  • 有效,但有一个警告。它使用了播放一段时间并结束(因为这是我程序的最后一行)。我必须添加另一行“time.sleep(10)”,然后才能完全播放音频。 (3认同)
  • 在 2020 年的 Ubuntu 上:当通过 snap(这是 VLC 目前推荐的方式)安装 VLC 时,这将不起作用。只需通过“sudo apt-get install vlc”安装即可 (2认同)

sha*_*k3r 55

试试这个.它过于简单但可能不是最好的方法.

from pygame import mixer  # Load the popular external library

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

请注意,支持MP3是有限的.

安装很简单 -

pip install pygame
Run Code Online (Sandbox Code Playgroud)

  • 它也适用于Python3. (3认同)
  • 无论如何,在 PyCharm 中运行时,我必须在 Mixer.music.play() 之后添加 time.sleep(10) (以及顶部的“导入时间”)。我认为不然,程序在声音开始之前就结束了。 (2认同)

Wae*_*oun 19

我已经尝试了此处列出的大多数选项,并发现以下内容:

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

from playsound import playsound
playsound('/path/file.mp3')
Run Code Online (Sandbox Code Playgroud)

你需要运行:

$ pip install playsound
Run Code Online (Sandbox Code Playgroud)

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

import os
os.system("afplay file.mp3") 
Run Code Online (Sandbox Code Playgroud)


Shu*_*Lee 17

另见playound

pip install playsound

import playsound
playsound.playsound('/path/to/filename.mp3', True)
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,这个库在Linux上存在问题的历史:https://github.com/TaylorSMarks/playsound/issues/1 (3认同)

Dav*_*vid 11

你试图玩一个.mp3好像它是一个.wav.

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

例:

from pydub import AudioSegment

song = AudioSegment.from_mp3("original.mp3")
song.export("final.wav", format="wav")
Run Code Online (Sandbox Code Playgroud)

或者,使用pygame,如另一个答案中所述.


Mic*_*ael 11

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

import subprocess

def play_mp3(path):
    subprocess.Popen(['mpg123', '-q', path]).wait()
Run Code Online (Sandbox Code Playgroud)

它取决于任何符合mpg123标准的播放器,例如你使用Debian获得的播放器:

apt-get install mpg123
Run Code Online (Sandbox Code Playgroud)

要么

apt-get install mpg321
Run Code Online (Sandbox Code Playgroud)


小智 7

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

import os

os.system('start path/to/player/executable path/to/file.mp3')
Run Code Online (Sandbox Code Playgroud)

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

  • 仅适用于 Windows (2认同)

tou*_*ich 6

简单的解决方案:

import webbrowser
webbrowser.open("C:\Users\Public\Music\Sample Music\Kalimba.mp3")
Run Code Online (Sandbox Code Playgroud)

干杯...


mde*_*eff 6

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

import IPython.display as ipd
ipd.Audio(filename='path/to/file.mp3')
Run Code Online (Sandbox Code Playgroud)


4br*_*0rd 6

我遇到了这个问题并且没有找到任何我喜欢的解决方案,所以我为 mpg321 创建了一个 python 包装器:mpyg321

您需要在计算机上安装 mpg123 或 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
Run Code Online (Sandbox Code Playgroud)

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


den*_*tex 5

在这一点上,为什么不提python-audio-tools

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

(我需要libasound2-dev在 Raspbian上安装)

代码摘录松散基于: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)
Run Code Online (Sandbox Code Playgroud)