Воспроизведение музыки онлайн, Python
я создаю медиаплеер на языке Python, библиотека kivy. Я хочу сделать поиск пользователем названия песни, которую он желает, и запуск ее онлайн, но я не знаю библиотеку, которая может это сделать. Я только знаю, что можно это легко сделать, если будет url ссылка на саму песню в разрешении mp3, но я не нашел ресурсов, которые могут сделать такую ссылку автоматически. Для запуска музыки я использую pygame, но в этой библиотеке нет функции, которая мне нужна.
Ответы (2 шт):
Автор решения: Александр
→ Ссылка
Если не вдаваться в подробности то как то так)
import io
from threading import Thread
import pygame
import requests
from kivy.app import App
from kivy.config import Config
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.progressbar import ProgressBar
Config.set('graphics', 'width', '300')
Config.set('graphics', 'height', '250')
class App(App):
progress_bar = None
def build(self):
pygame.init()
pygame.mixer.init()
self.progress_bar = ProgressBar()
box_layout_vertical = BoxLayout(
orientation='vertical',
size_hint_y=None
) # BoxLayout
play_button = Button(
text='Eminem - Lose Yourself',
size_hint_y=None,
height=40
)
play_button.bind(on_press=self.play_button_on_press_handler)
box_layout_vertical.add_widget(play_button)
box_layout_vertical.add_widget(self.progress_bar)
return box_layout_vertical
def play_button_on_press_handler(self, event):
Thread(target=self.play_audio).start()
def get_mp3_object(self):
URL = 'https://cdn3.sefon.pro/prev/zlZ2w8X97cVE7irJetLC1w/1657715725/41/Eminem%20-%20Lose%20Yourself%20%28192kbps%29.mp3'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}
response = requests.get(URL, headers=headers, stream=True)
return response.headers['Content-Length'], response.iter_content(chunk_size=76895)
def play_audio(self):
bytes_object = io.BytesIO()
length, content = self.get_mp3_object()
for byte in content:
value = int(length) / 100
print(value)
self.progress_bar.value += 1
bytes_object.write(byte)
# print(bytes_object.getbuffer().nbytes)
bytes_object.seek(0)
pygame.mixer.music.load(bytes_object)
pygame.mixer.music.play(-1)
def main():
App().run()
if __name__ == '__main__':
main()
Автор решения: Александр
→ Ссылка
Пример без использования pygame и requests
import io
from threading import Thread
import pygame
import requests
from kivy.app import App
from kivy.config import Config
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
from kivy.uix.progressbar import ProgressBar
from kivy.network.urlrequest import UrlRequest
Config.set('graphics', 'width', '300')
Config.set('graphics', 'height', '250')
class App(App):
progress_bar = None
def build(self):
pygame.init()
pygame.mixer.init()
self.progress_bar = ProgressBar()
box_layout_vertical = BoxLayout(
orientation='vertical',
size_hint_y=None
) # BoxLayout
play_button = Button(
text='Eminem - Lose Yourself',
size_hint_y=None,
height=40
)
play_button.bind(on_press=self.play_button_on_press_handler)
box_layout_vertical.add_widget(play_button)
box_layout_vertical.add_widget(self.progress_bar)
return box_layout_vertical
def play_button_on_press_handler(self, event):
Thread(target=self.play_audio).start()
def get_bytes_mp3(self):
URL = "http://audio.xmcdn.com/group58/M03/8D/07/wKgLc1zNaabhA__WAEJyyPUT5k4509.mp3"
#URL = 'https://cdn3.sefon.pro/prev/zlZ2w8X97cVE7irJetLC1w/1657715725/41/Eminem%20-%20Lose%20Yourself%20%28192kbps%29.mp3'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36',
}
response = UrlRequest(URL, req_headers=headers)
response.join()
print(response.result)
# response = requests.get(URL, headers=headers, stream=True)
#value = int(response.headers['Content-Length']) / 100
# return response.iter_content(chunk_size=int(value))
return response.result
def play_audio(self):
self.progress_bar.value = 0
bytes_object = io.BytesIO()
array = bytearray()
for byte in self.get_bytes_mp3():
array.append(byte)
self.progress_bar.value += 1
# bytes_object.write(byte)
bytes_object.write(array)
# print(bytes_object.getbuffer().nbytes)
bytes_object.seek(0)
pygame.mixer.music.load(bytes_object)
pygame.mixer.music.play(-1)
def main():
App().run()
pygame.quit()
if __name__ == '__main__':
main()
