Mp3-файл, загруженный из SoundCloud с помощью SoundScrape, не может быть воспроизведен QMediaPlayer в PyQT5. Нет ошибки, но невозможно воспроизвести файл (QMediaPlayer :: play).
# Here I'm loading the media, there's some comments because I was trying some stuff
import sys
import os
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.uic.properties import QtCore
class Player(QMainWindow):
def __init__(self, *args, **kwargs):
super(Player, self).__init__(*args, **kwargs)
self.setFixedSize(1920, 1080)
self.setupUi(self)
self.currentPlaylist = QMediaPlaylist()
self.player = QMediaPlayer(self)
self.player.mediaStatusChanged.connect(self.mediaStatusChange)
self.player.positionChanged.connect(self.positionChanged)
self.player.durationChanged.connect(self.durationChanged)
self.player.setPlaylist(self.currentPlaylist)
self.load_playlist()
def on_item_clicked(self, item):
if self.musicListWidget.currentItem().isSelected() == False:
self.musicListWidget.currentItem().setSelected(True)
data = self.musicListWidget.selectedIndexes()[0]
index = data.row()
self.playMusic(index=index)
def playMusic(self, index=0):
self.player.setPlaylist(self.currentPlaylist)
self.player.playlist().setCurrentIndex(index)
self.player.play()
self.player.setVolume(self.musicVolumeSlider.value())
def load_playlist(self):
self.musicListWidget.addItem(
os.path.basename('C:\MyStuff\Programming_Stuff\License\Eargasm\songs\Mihai Pol - Goneta.mp3'))
self.currentPlaylist.addMedia(QMediaContent(
### here will be the full path where the file was downloaded
QUrl.fromLocalFile('C:\MyStuff\Programming_Stuff\License\Eargasm\songs\Mihai Pol - Goneta.mp3')))
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Player()
window.show()
app.exec_()
Здесь я загружаю файл (download_via_soundcloud)
from difflib import SequenceMatcher
import subprocess
import requests
from bs4 import BeautifulSoup
import re
class SoundcloudScrapper:
DOWNLOAD_PATH = 'C:/MyStuff/Programming_Stuff/License/Eargasm/songs'
FILE_URL = "C:\MyStuff\Programming_Stuff\License\Eargasm\songs"
SOUNDCLOUD_URL = 'https://www.soundcloud.com'
SEARCH_QUERY = '/search?q='
def get_search_input_by_title(self, title):
"""
:param title: The title of the track
:return: Search query of the track by SoundCloud rules
"""
search_query = ""
for char in title:
if char == ' ':
search_query += '%20'
elif char == '[':
search_query += '%5B'
elif char == ']':
search_query += '%5D'
else:
search_query += char
return search_query
def download_via_soundcloud(self,artist: str, title: str):
"""
:param artist: The artist of the track
:param title: The title of the track
:return: True if the track has been downloaded successfully, False otherwise
"""
track_title = artist + ' - ' + title
search_query_value = self.get_search_input_by_title(track_title)
soundcloud_url = self.SOUNDCLOUD_URL + self.SEARCH_QUERY + search_query_value
url = requests.get(soundcloud_url)
soup = BeautifulSoup(url.content, 'lxml')
songs = soup.select("li h2 a")
### if there is nothing on soundcloud
if not songs:
return False
### checking top 2 songs from search result
for index in range(0,1):
song = songs[index]
href_track_found = song.get('href')
title_track_found = self.clean_soundcloud_title_found(song.text)
ratio = SequenceMatcher(None, track_title, title_track_found).ratio()
if ratio > 0.5:
output = subprocess.check_output("soundscrape " + self.SOUNDCLOUD_URL + href_track_found + " -p " + self.DOWNLOAD_PATH, shell=True) ## .decode("utf-8")
return True
return False
def clean_soundcloud_title_found(self, track_title):
track_title = re.sub("([\[]).*?([\]])", "", track_title)
### parts that can mislead us to a small ratio
possible_blockers = ["A1.", "A2.", "B1.", "B2.", "C1.", "C2.", "D1.", "D2.", "E1.", "E2.", "F1.", "F2.",
"A1", "A2", "B1", "B2", "C1", "C2", "D1", "D2", "E1", "E2", "F1", "F2", "preview", "Preview" ]
for blocker in possible_blockers:
if blocker in track_title:
track_title = track_title.replace(blocker, "")
return track_title
if __name__ == '__main__':
pass
scrapper = SoundcloudScrapper()
scrapper.download_via_soundcloud("Mihai Pol", "Science Friction")
SoundScrape: https://github.com/Miserlou/SoundScrape/blob/master/soundscrape/soundscrape.py