Воспроизведение музыки онлайн, 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()
   
→ Ссылка