如何从字节播放 mp3?

Posted

技术标签:

【中文标题】如何从字节播放 mp3?【英文标题】:How to play mp3 from bytes? 【发布时间】:2017-10-12 00:12:39 【问题描述】:

有没有办法直接使用 python 从字节播放 mp3?如果不是,我可以将二进制文件转换为不同的音频格式并让二进制文件可播放吗?

编辑:以下代码适用于wav 文件,但不适用于mp3

from pygame import mixer, time

mixer.pre_init(44100, -16, 2, 2048)
mixer.init()

data = open('filename.mp3', 'rb').read()
sound = mixer.Sound(buffer=data)

audio = sound.play()
while audio.get_busy():
    time.Clock().tick(10)

编辑: 问题已解决,如果您遇到类似问题,请参阅下面的回答

【问题讨论】:

澄清一下,你有一个 .mp3 格式的文件,你想用 Python 播放它吗?您使用的是什么操作系统? 我没有,我正在流式传输 mp3 二进制文件,我不想将它写入磁盘。我使用的是mac,但是linux的解决方案也可以。 只是为了澄清当您说二进制时,它是振幅数组,还是实际上是 mp3 格式?当您说流式传输时,您的意思是它必须实时完成吗? 不确定如何实时执行此操作,但如果您发现可以将短 sn-ps 写入磁盘,也许您可​​以使用os.system("afplay path/temp.mp3")。可能需要更多细节才能获得更有帮助的答案。 我目前正在使用 afplay 和 tempfiles,但我想这样做而不必像我提到的那样保存到磁盘。 【参考方案1】:

我看到了你的 pygame 标签,所以我将在 pygame 中执行此操作。 Pygame 可以使用以下行从字节加载文件:sound = pygame.mixer.Sound(bytes)sound = pygame.mixer.Sound(buffer=bytes)。我不能保证这将适用于 mp3 文件,但您可能需要使用 OGG 或 WAV 文件作为字节。

【讨论】:

我在帖子中添加了一个代码 sn-p。这适用于wav,但mp3 文件听起来已损坏。【参考方案2】:

对于可能面临类似问题的任何人,这都有效

from pydub import Audiosegment
from pydub.playback import play
import io

data = open('filename.mp3', 'rb').read()

song = AudioSegment.from_file(io.BytesIO(data), format="mp3")
play(song)

【讨论】:

感谢这个选项,我正在努力让 IPython Audio 正常工作 试过了,但出现 ffmpeg 错误,我的问题是您是否通过 pip 或操作系统安装了 ffmpeg?

以上是关于如何从字节播放 mp3?的主要内容,如果未能解决你的问题,请参考以下文章

Java MP3 播放器 - 使用 jLayer 播放、暂停和查找无法按预期工作

检查 mp3 是不是可以快速播放

如何使用 C# NAudio 操作字节?

如何一次播放多个 mp3/wma 文件?

如何在 C# 中从内存流中播放 MP3?

android - 如何在我的音乐播放器中从文件管理器播放 mp3 文件?