UPD:我不需要播放我知道的歌曲。我需要从中提取长度,仅此而已。
我已经在这里问过这个问题,但为了让事情变得更容易,我试图放弃所有要点,事实证明,这些要点需要被告知。
现在我将尝试解释正在发生的事情以及我需要什么。
该按钮play_btn与方法交互,该方法play开始播放一些歌曲。我点击它。
该按钮与执行某些文件操作folder_btn的方法相关联:choose_folder
- 打开文件夹选择对话框
- 从所选文件夹中选择 MP3 文件
- 稍微更改这些文件的路径,以便更轻松地使用 PyQt
- 创建到数据库的连接,将在其中写入有关轨道的信息
所有这些点在我的问题中都没有任何作用,因此我将它们从代码中删除。我最终得到的是一个包含 MP3 文件路径的列表。我给它起了个名字songs。
收到文件的路径后,您需要获取并写入每个文件的持续时间self.list。同时,它play_btn已经被按下,这意味着应用程序已经在播放声音。如果从songs到QMediaPlayer中添加文件,播放器已经播放的歌曲将失败。因此,在上一个问题中,我说我无法为播放器设置新的声源。
请告诉我如何在我的情况下提取音频文件的持续时间?
from PyQt5 import QtCore, QtWidgets, QtGui, QtMultimedia
class MyWindow(QtWidgets.QWidget):
def __init__(self, parent = None):
super().__init__(parent)
self.list = [] # сюда нужно записать длину аудиофайлов
self.player = QtMultimedia.QMediaPlayer()
box = QtWidgets.QHBoxLayout(self)
play_btn = QtWidgets.QPushButton('Play', clicked = self.play)
box.addWidget(play_btn)
folder_btn = QtWidgets.QPushButton('New Folder', clicked = self.choose_folder)
box.addWidget(folder_btn)
def play(self):
self.song = 'C:/Users/User/Desktop/music/8.Figure09.mp3'
self.player.setMedia(QtMultimedia.QMediaContent(QtCore.QUrl(self.song)))
self.player.play()
def choose_folder(self):
# тут происходит выбор директории с аудиофайлами
songs = ['C:/Users/User/Desktop/music/13.Numb.mp3',
'C:/Users/User/Desktop/music/10.From the Inside.mp3']
# в итоге я получаю такой список ^^^
self.extract_length(songs)
def extract_length(self, songs):
pass
# тут нужно извлечь длину аудиофайлов из self.songs и записать в self.list
# при этом self.player уже будет воспроизводить звук
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = MyWindow()
window.setWindowTitle(' ')
window.show()
sys.exit(app.exec_())
也许我会误解一些东西。也许我解释得很糟糕。如果有问题请写
我不明白您为什么将有关歌曲持续时间的信息写入数据库,它是立即计算的,在我看来这是多余的。
您在哪里读到无法为播放器创建新的声源?注意对象
player2。在我的示例中,您将看到两个用于获取音频文件持续时间的选项:
time_duration;time_duration2。注意这些方法是如何被调用的。
我看到你的任务是这样的:
一般来说,在 Qt 开始播放之前提取播放媒体文件的持续时间(duration)并不是一件容易的事。但是你可以尝试一个 Qt-hack: