From 325ff8b550f1f3417772a9f6f393b4e95093c466 Mon Sep 17 00:00:00 2001 From: fosanz Date: Fri, 16 Feb 2024 14:33:05 +0100 Subject: [PATCH] Subida del proyecto --- .idea/.gitignore | 8 ++ .idea/SpotiMIDI.iml | 10 +++ .idea/inspectionProfiles/Project_Default.xml | 25 +++++++ .../inspectionProfiles/profiles_settings.xml | 6 ++ .idea/misc.xml | 7 ++ .idea/modules.xml | 8 ++ .idea/vcs.xml | 6 ++ client/MediaPlayer.py | 45 ++++++++++++ client/Requestor.py | 32 ++++++++ client/StoppableThread.py | 13 ++++ client/client.py | 40 ++++++++++ server/Library.py | 69 ++++++++++++++++++ server/Song.py | 17 +++++ server/server.py | 39 ++++++++++ songs/Michael Jackson - Billie Jean.mid | Bin 0 -> 49794 bytes ...rates of the Caribbean - He's a Pirate.mid | Bin 0 -> 9468 bytes .../Rick Astley - Never Gonna Give You Up.mid | Bin 0 -> 59184 bytes songs/Super Mario 64 - Medley.mid | Bin 0 -> 45553 bytes songs/Tetris - Tetris Main Theme.mid | Bin 0 -> 1798 bytes songs/Wii Channels - Mii Channel.mid | Bin 0 -> 4515 bytes 20 files changed, 325 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/SpotiMIDI.iml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 client/MediaPlayer.py create mode 100644 client/Requestor.py create mode 100644 client/StoppableThread.py create mode 100644 client/client.py create mode 100644 server/Library.py create mode 100644 server/Song.py create mode 100644 server/server.py create mode 100644 songs/Michael Jackson - Billie Jean.mid create mode 100644 songs/Pirates of the Caribbean - He's a Pirate.mid create mode 100644 songs/Rick Astley - Never Gonna Give You Up.mid create mode 100644 songs/Super Mario 64 - Medley.mid create mode 100644 songs/Tetris - Tetris Main Theme.mid create mode 100644 songs/Wii Channels - Mii Channel.mid diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/SpotiMIDI.iml b/.idea/SpotiMIDI.iml new file mode 100644 index 0000000..2c80e12 --- /dev/null +++ b/.idea/SpotiMIDI.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..31542ff --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,25 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..7931c11 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..faae9ef --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/client/MediaPlayer.py b/client/MediaPlayer.py new file mode 100644 index 0000000..3eadc1b --- /dev/null +++ b/client/MediaPlayer.py @@ -0,0 +1,45 @@ +import threading +import time +import mido +from mido import MidiFile + +from StoppableThread import StoppableThread +from Requestor import Requestor + +class MediaPlayer: + + def __init__(self, host, port): + self.requestor = Requestor(host, port) + self.song_thread = None + self.output = mido.open_output() + + def request_song(self, song_name): + bytes_song = self.requestor.getSong(song_name) + + with open('received_song.mid', 'wb') as file: + file.write(bytes_song) + + if self.song_thread is not None and self.song_thread.is_alive(): + self.song_thread.stop() + + self.song_thread = StoppableThread(target=self.play_song, args=('received_song.mid',)) + self.song_thread.start() + + def play_song(self, song_path): + mid = MidiFile(song_path) + try: + for msg in mid.play(): + if threading.current_thread().stopped(): + break + + self.output.send(msg) + + except Exception as e: + print(e) + + finally: + self.output.reset() + + def stop_song(self): + if self.song_thread is not None and self.song_thread.is_alive(): + self.song_thread.stop() \ No newline at end of file diff --git a/client/Requestor.py b/client/Requestor.py new file mode 100644 index 0000000..ba38ca9 --- /dev/null +++ b/client/Requestor.py @@ -0,0 +1,32 @@ +import socket + + +class Requestor(object): + + def __init__(self, host: str, port: int): + self.host = host + self.port = port + + + def getSongList(self) -> list: + client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client.connect((self.host, self.port)) + client.send('getSongList'.encode('utf-8')) + song_list = client.recv(1024).decode('utf-8') + client.close() + return song_list.split('\n') + + def getSong(self, song_id: int) -> bytes: + client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + client.connect((self.host, self.port)) + client.send(f'getSong:{song_id}'.encode('utf-8')) + + song_data = b"" + while True: + chunk = client.recv(1024) + if not chunk: + break + song_data += chunk + + client.close() + return song_data \ No newline at end of file diff --git a/client/StoppableThread.py b/client/StoppableThread.py new file mode 100644 index 0000000..31f4c7a --- /dev/null +++ b/client/StoppableThread.py @@ -0,0 +1,13 @@ +import threading + +class StoppableThread(threading.Thread): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self._stop_event = threading.Event() + self._pause_event = threading.Event() + + def stop(self): + self._stop_event.set() + + def stopped(self): + return self._stop_event.is_set() \ No newline at end of file diff --git a/client/client.py b/client/client.py new file mode 100644 index 0000000..a7be31f --- /dev/null +++ b/client/client.py @@ -0,0 +1,40 @@ +import os +import tkinter as tk + +from MediaPlayer import MediaPlayer + +CLIENT_HOST = "localhost" +CLIENT_PORT = 9999 +media_player = MediaPlayer(CLIENT_HOST, CLIENT_PORT) + +def request_selected_song(): + selected_song = song_listbox.get(song_listbox.curselection()) + media_player.request_song(selected_song) + +def stop_song(): + media_player.stop_song() + +root = tk.Tk() +root.title("Song Requestor") + +song_listbox = tk.Listbox(root, height=10, width=50) +song_listbox.pack() + +song_list = media_player.requestor.getSongList() +for song in song_list: + if song: # Check if song is not an empty string + song_listbox.insert(tk.END, song) + +request_button = tk.Button(root, text="Play song", command=request_selected_song) +request_button.pack() + +play_pause_button = tk.Button(root, text="Stop song", command=stop_song) +play_pause_button.pack() + +def on_close(): + media_player.stop_song() + os.remove('received_song.mid') + root.destroy() + +root.protocol("WM_DELETE_WINDOW", on_close) +root.mainloop() \ No newline at end of file diff --git a/server/Library.py b/server/Library.py new file mode 100644 index 0000000..ddce1d1 --- /dev/null +++ b/server/Library.py @@ -0,0 +1,69 @@ +import os + +from mido import MetaMessage + +from Song import Song +import mido + +class Library(object): + + def __init__(self): + self.songs = [] + + def initialize(self, songs_dir: str): + print("Initializing library") + for root, dirs, files in os.walk(songs_dir): + for i, file in enumerate(files): + if file.endswith('.mid'): + name = file.split('-')[0] + author = file.split('-')[1].split('.')[0] + path = os.path.join(root, file) + song = Song(i, name, author, path, self.get_request_count_from_midi_file(path)) + print(f"Loaded song: {song.name} by {song.author} with {song.total_requests} requests") + self.songs.append(song) + + def get_request_count_from_midi_file(self, file_path): + mid = mido.MidiFile(file_path) + + for i, track in enumerate(mid.tracks): + for msg in track: + if msg.type == 'text' and 'Request count:' in msg.text: + return int(msg.text.split(': ')[1]) + + # If no 'text' MetaMessage with the request count is found, add one with a count of 0 + msg = MetaMessage('text', text='Request count: 0') + mid.tracks[0].append(msg) + mid.save(file_path) + return 0 + + def get_song_list(self) -> str: + sorted = self.songs.copy() + sorted.sort(key=lambda x: x.total_requests, reverse=True) + song_list = "" + for song in sorted: + song_list += f"{song.id}: {song.name} by {song.author}\n" + return song_list + + def get_song_by_id(self, id: int) -> Song: + for song in self.songs: + if song.id == id: + # Increment the request count + song.total_requests += 1 + + # Load the MIDI file + mid = mido.MidiFile(song.path) + + # Remove the old 'text' MetaMessage with the request count + for i, track in enumerate(mid.tracks): + for j, msg in enumerate(track): + if msg.type == 'text' and 'Request count:' in msg.text: + del track[j] + + # Add a new 'text' MetaMessage with the updated request count + mid.tracks[0].append(MetaMessage('text', text=f'Request count: {song.total_requests}')) + + # Save the MIDI file + mid.save(song.path) + + return song + return None \ No newline at end of file diff --git a/server/Song.py b/server/Song.py new file mode 100644 index 0000000..0e250fd --- /dev/null +++ b/server/Song.py @@ -0,0 +1,17 @@ +class Song(object): + + def __init__(self, id: int, name: str, author: str, path: str, total_requests: int): + self.id = id + self.name = name + self.author = author + self.path = path + self.total_requests = total_requests + + def get_total_requests(self) -> int: + return self.total_requests + + def get_name(self) -> str: + return self.name + + def get_data(self) -> bytes: + return open(self.path, 'rb').read() \ No newline at end of file diff --git a/server/server.py b/server/server.py new file mode 100644 index 0000000..cde4cdb --- /dev/null +++ b/server/server.py @@ -0,0 +1,39 @@ +import socket +import threading + +from Library import Library +from Song import Song +import os + +SONGS_DIR = os.path.join(os.path.dirname(__file__), 'songs') + +library = Library() +library.initialize(SONGS_DIR) + +def handle_client(client_socket): + request = client_socket.recv(1024).decode('utf-8') + print(f"Received: {request}") + + if request == 'getSongList': + client_socket.send(library.get_song_list().encode('utf-8')) + + elif request.startswith('getSong:'): + song_id = int(request.split(':')[1]) + song: Song = library.get_song_by_id(song_id) + print(f"Sending song: {song.name} by {song.author} to {client_socket.getpeername()}") + client_socket.send(song.get_data()) + client_socket.close() + +def start_server(): + server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + server.bind(("0.0.0.0", 9999)) + server.listen(5) + print("Listening on port 9999") + + while True: + client, addr = server.accept() + print(f"Accepted connection from: {addr[0]}:{addr[1]}") + client_handler = threading.Thread(target=handle_client, args=(client,)) + client_handler.start() + +start_server() \ No newline at end of file diff --git a/songs/Michael Jackson - Billie Jean.mid b/songs/Michael Jackson - Billie Jean.mid new file mode 100644 index 0000000000000000000000000000000000000000..df0ca4f44a339b1984505d57d7e46a1a5507aef2 GIT binary patch literal 49794 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 x@qUo9fE3V~z{6B@x&WayN{QtUyE?ocs literal 0 HcmV?d00001 diff --git a/songs/Pirates of the Caribbean - He's a Pirate.mid b/songs/Pirates of the Caribbean - He's a Pirate.mid new file mode 100644 index 0000000000000000000000000000000000000000..ac37c1e97cb10781ab4b97ab37f44b67609b17ba GIT binary patch literal 9468 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 literal 0 HcmV?d00001 diff --git a/songs/Super Mario 64 - Medley.mid b/songs/Super Mario 64 - Medley.mid new file mode 100644 index 0000000000000000000000000000000000000000..069fb8bd2d81e5b60d5870ca00509d19b7f97852 GIT binary patch literal 45553 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 literal 0 HcmV?d00001