diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a02de4871986d8b203ae95ef11e243f6911284ef --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +sound_player/Musiques/* diff --git a/launch_jarvis.sh b/launch_jarvis.sh new file mode 100644 index 0000000000000000000000000000000000000000..e7e16a22578d1ae28d5dbae094d737969e435a11 --- /dev/null +++ b/launch_jarvis.sh @@ -0,0 +1,3 @@ +#!/bin/bash +screen -S sound_player -d -m sudo sound_player/sound_player.py +screen -S jarvis -d -m ./Jarvis.py \ No newline at end of file diff --git a/sound_player/player-client.py b/sound_player/player-client.py new file mode 100755 index 0000000000000000000000000000000000000000..46e944f1163d516538e83e4996e41ea5c45782b2 --- /dev/null +++ b/sound_player/player-client.py @@ -0,0 +1,15 @@ +#!/usr/bin/python3 +import socket +import sys +client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +host = '127.0.0.1' +port = 13 +client.connect((host, port)) +if len(sys.argv) == 2: + client.send(sys.argv[1].encode()) +elif len(sys.argv) == 1: + client.send(b"help") +else: + print("ERROR: invalid number of argument 1 or 0 required") +data = client.recv(1024) +print(data.decode()) diff --git a/sound_player/player.py b/sound_player/player.py new file mode 100755 index 0000000000000000000000000000000000000000..b2a828ad1e428dea0c6445341240bbd8769bd97f --- /dev/null +++ b/sound_player/player.py @@ -0,0 +1,122 @@ +#!/usr/bin/python3 +import pygame +from time import sleep +import random +import threading +import socket + +pygame.init() +pygame.mixer.init() + +with open("playlist.txt") as f: + playlist_text = [e.strip().replace("\n", "") for e in f.readlines()] + +started = False +current_index = random.randint(0, len(playlist_text) - 1) +current_sound = playlist_text[current_index] +playing = False +pygame.mixer.music.set_volume(0.5) + +def play(): + global started, playing, current_sound, current_index + if not started or not pygame.mixer.music.get_busy(): + try: + pygame.mixer.music.load(current_sound) + pygame.mixer.music.play() + started = True + playing = True + return ("playing : " + current_sound.split("/")[-1].replace(".mp3", "")).encode() + except Exception as e: + print(e) + return (f"ERROR: Can't play sound : {current_sound}").encode() + else: + pygame.mixer.music.unpause() + return ("playing : " + current_sound.split("/")[-1].replace(".mp3", "")).encode() + +def pause(): + global playing + pygame.mixer.music.pause() + playing = False + return b"pausing music..." + +def get_volume(): + return (f"volume : {pygame.mixer.music.get_volume()}").encode() + +def volume_up(): + pygame.mixer.music.set_volume(pygame.mixer.music.get_volume()+0.10) + return (f"volume : {pygame.mixer.music.get_volume()}").encode() + +def volume_down(): + pygame.mixer.music.set_volume(pygame.mixer.music.get_volume()-0.10) + return (f"volume : {pygame.mixer.music.get_volume()}").encode() + +def next_sound(): + global current_index, current_sound + pygame.mixer.music.stop() + current_index = (current_index + 1) % len(playlist_text) + current_sound = playlist_text[current_index] + try: + pygame.mixer.music.load(current_sound) + pygame.mixer.music.play() + started = True + return ("playing : " + current_sound.split("/")[-1].replace(".mp3", "")).encode() + except Exception as e: + print(e) + return (f"ERROR: Can't play sound : {current_sound}").encode() + +def previous_sound(): + global current_index, current_sound + pygame.mixer.music.stop() + current_index = (current_index - 1) % len(playlist_text) + current_sound = playlist_text[current_index] + try: + pygame.mixer.music.load(current_sound) + pygame.mixer.music.play() + started = True + return ("playing : " + current_sound.split("/")[-1].replace(".mp3", "")).encode() + except Exception as e: + print(e) + return (f"ERROR: Can't play sound : {current_sound}").encode() + +def get_sound(): + return current_sound.split("/")[-1].replace(".mp3","").encode() + +def the_playlist_continue(): + global playing + while True: + print("theplaylistcontinue_loop") + if playing and not pygame.mixer.music.get_busy(): + print(next_sound()) + sleep(5) + +server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +server.bind(('127.0.0.1', 13)) +server.listen(5) + +t = threading.Thread(target=the_playlist_continue) +t.daemon = True +t.start() +while True: + connection, address = server.accept() + print('Got connection from', address) + data = connection.recv(1024).decode() + print(data) + if data == "play": + connection.send(play()) + elif data == "pause": + connection.send(pause()) + elif data == "get_volume": + connection.send(get_volume()) + elif data == "volume_up": + connection.send(volume_up()) + elif data == "volume_down": + connection.send(volume_down()) + elif data == "next": + connection.send(next_sound()) + elif data == "previous": + connection.send(previous_sound()) + elif data == "get_sound": + connection.send(get_sound()) + else : + connection.send(b"player-client [play|pause|get_volume|volume_up|volume_down|next|previous|get_sound]") + connection.close() # close the connection diff --git a/sound_player/playlist.txt b/sound_player/playlist.txt new file mode 100644 index 0000000000000000000000000000000000000000..b954a1311a59a7cf65d4605cef57b6cb24de1910 --- /dev/null +++ b/sound_player/playlist.txt @@ -0,0 +1,21 @@ +/home/pi/sound_player/Musiques/GreatestHits/13 Love Is A Battlefield.mp3 +/home/pi/sound_player/Musiques/GreatestHits/06 You Better Run.mp3 +/home/pi/sound_player/Musiques/GreatestHits/07 Fire And Ice.mp3 +/home/pi/sound_player/Musiques/GreatestHits/11 Little To Late.mp3 +/home/pi/sound_player/Musiques/GreatestHits/19 All Fired Up.mp3 +/home/pi/sound_player/Musiques/GreatestHits/20 One Love.mp3 +/home/pi/sound_player/Musiques/GreatestHits/17 Sex As A Weapon.mp3 +/home/pi/sound_player/Musiques/GreatestHits/12 Looking For A Stranger.mp3 +/home/pi/sound_player/Musiques/GreatestHits/01 Heartbreaker.mp3 +/home/pi/sound_player/Musiques/GreatestHits/05 Treat Me Right.mp3 +/home/pi/sound_player/Musiques/GreatestHits/15 Ooh Ooh Song.mp3 +/home/pi/sound_player/Musiques/GreatestHits/14 We Belong.mp3 +/home/pi/sound_player/Musiques/GreatestHits/18 Le Bel Age.mp3 +/home/pi/sound_player/Musiques/GreatestHits/08 Promises In The Dark.mp3 +/home/pi/sound_player/Musiques/GreatestHits/10 Shadows Of The Night.mp3 +/home/pi/sound_player/Musiques/GreatestHits/16 Invincible.mp3 +/home/pi/sound_player/Musiques/GreatestHits/03 Hit Me With Your Best Shot.mp3 +/home/pi/sound_player/Musiques/GreatestHits/09 Precious Time.mp3 +/home/pi/sound_player/Musiques/GreatestHits/02 We Live For Love.mp3 +/home/pi/sound_player/Musiques/GreatestHits/04 Hell Is For Children.mp3 +/home/pi/sound_player/Musiques/Nightcall-Kavinski.mp3