You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python从CouchDB获取MP3并播放,或直接播放?

从CouchDB获取并播放MP3文件的解决方案

任务

  • 连接到CouchDB指定路径:CouchDB/my_db_name/doc_id/song_title.mp3
  • 使用Python GUI播放该MP3文件

已完成步骤

  • 执行代码:song = db.view('GET http://localhost:5984/music_box/62d7197138e555dac43a73048401f4ac/Busta Rhymes - Dangerous.mp3'),返回结果类型为<class 'couchdb.client.ViewResults'>
  • 已实现用PyGame播放本地目录中的MP3文件

问题

如何将该MP3文件下载到新目录以便播放?或者能否直接从CouchDB播放该文件?


解决方案

1. 下载附件到本地后播放

你当前用db.view()的方式错误,view是用于查询CouchDB视图的接口,不能直接获取附件。正确的做法是使用CouchDB客户端的get_attachment方法来下载附件:

import couchdb
import os
import pygame

# 连接CouchDB服务器
couch = couchdb.Server('http://localhost:5984/')
# 打开目标数据库
db = couch['music_box']

# 定义文档ID和附件名称
doc_id = '62d7197138e555dac43a73048401f4ac'
attachment_name = 'Busta Rhymes - Dangerous.mp3'

# 创建保存目录(不存在则自动创建)
save_dir = './downloaded_songs'
os.makedirs(save_dir, exist_ok=True)
save_path = os.path.join(save_dir, attachment_name)

# 下载附件到本地
with open(save_path, 'wb') as file:
    file.write(db.get_attachment(doc_id, attachment_name))

# 用PyGame播放本地文件
pygame.mixer.init()
pygame.mixer.music.load(save_path)
pygame.mixer.music.play()

# 保持程序运行直到播放结束
while pygame.mixer.music.get_busy():
    pygame.time.Clock().tick(10)

2. 直接从CouchDB加载播放(无需保存到本地)

PyGame的music.load()支持从类文件对象加载音频,因此可以直接将CouchDB返回的附件字节流包装成BytesIO对象,传给PyGame播放:

import couchdb
import pygame
from io import BytesIO

# 连接CouchDB服务器
couch = couchdb.Server('http://localhost:5984/')
db = couch['music_box']

doc_id = '62d7197138e555dac43a73048401f4ac'
attachment_name = 'Busta Rhymes - Dangerous.mp3'

# 获取附件字节流并包装为类文件对象
attachment_data = db.get_attachment(doc_id, attachment_name)
audio_stream = BytesIO(attachment_data)

# 初始化PyGame并播放
pygame.mixer.init()
pygame.mixer.music.load(audio_stream)
pygame.mixer.music.play()

# 保持程序运行直到播放结束
while pygame.mixer.music.get_busy():
    pygame.time.Clock().tick(10)

注意事项

  • 确保CouchDB服务正常运行,且你拥有目标文档及附件的访问权限
  • 若附件体积较大,直接加载会占用较多内存,此时优先选择下载到本地再播放的方式
  • PyGame初始化及播放逻辑需保证程序持续运行,否则音频会中断

内容的提问来源于stack exchange,提问作者Konstantin F

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:25:16