From 043c4c3f092f4d4469ace258786aab9c38ed34d3 Mon Sep 17 00:00:00 2001 From: Lucca Pirovano Date: Wed, 15 Jul 2026 18:01:43 -0400 Subject: [PATCH] work on music player --- naowalk.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/naowalk.py b/naowalk.py index b5d758a..1cfbf01 100644 --- a/naowalk.py +++ b/naowalk.py @@ -11,6 +11,7 @@ import cv2 import numpy as np import pygame import yt_dlp +import subprocess import os # --- Audio for mic --- @@ -128,15 +129,17 @@ class SoundReceiver: # ========================================== -# MUSIC PLAYER ON NAO +# MUSIC PLAYER ON NAO (scp) # ========================================== class NaoMusicPlayer: - def __init__(self, session): + def __init__(self, session, nao_ip): self.session = session self.player = session.service("ALAudioPlayer") + self.nao_ip = nao_ip self.music_dir = "/home/nao/music" try: - self.session.service("ALFileManager").createFolder(self.music_dir) + subprocess.run(["sshpass", "-p", "nao", "ssh", f"nao@{nao_ip}", f"mkdir -p {self.music_dir}"], + stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL) except: pass self.current_file = None self.is_playing = False @@ -173,13 +176,16 @@ class NaoMusicPlayer: with yt_dlp.YoutubeDL(ydl_opts) as ydl: info = ydl.extract_info(url, download=True) if not info: + print("Download failed") return False downloaded = ydl.prepare_filename(info) remote_path = f"{self.music_dir}/{int(time.time())}.mp3" - file_manager = self.session.service("ALFileManager") - # Use uploadFile instead of put - file_manager.uploadFile(downloaded, remote_path) + result = subprocess.run(["sshpass", "-p", "nao", "scp", downloaded, f"nao@{self.nao_ip}:{remote_path}"], + capture_output=True, text=True) + if result.returncode != 0: + print(f"SCP failed: {result.stderr}") + return False self.current_file = remote_path self.player.playFile(remote_path) @@ -218,8 +224,9 @@ class NaoMusicPlayer: # MAIN TELEOP # ========================================== class NaoTeleop: - def __init__(self, session, audio_device_index=None, mic_channel=1, mic_gain=8.0, video_scale=2.0): + def __init__(self, session, nao_ip, audio_device_index=None, mic_channel=1, mic_gain=8.0, video_scale=2.0): self.session = session + self.nao_ip = nao_ip self.motion = session.service("ALMotion") self.posture = session.service("ALRobotPosture") self.tts = session.service("ALTextToSpeech") @@ -228,7 +235,7 @@ class NaoTeleop: except: self.battery = None - self.music = NaoMusicPlayer(session) + self.music = NaoMusicPlayer(session, nao_ip) self.music_results = [] self.selected_result = 0 @@ -432,7 +439,7 @@ class NaoTeleop: self.music_results = [] elif event.key == pygame.K_p: self.music.pause() - elif event.key == pygame.K_x: # Stop music + elif event.key == pygame.K_x: self.music.stop() elif event.key == pygame.K_LEFT: self.music.seek(-10) @@ -538,7 +545,7 @@ if __name__ == "__main__": print(f"❌ Connection failed: {e}") sys.exit(1) - NaoTeleop(session, + NaoTeleop(session, nao_ip=args.ip, audio_device_index=args.audio_device_index, mic_channel=MIC_CHANNELS[args.mic_channel], mic_gain=args.mic_gain,