import random import tempfile import streamlit as st from pytube import Playlist, YouTube from pydub import AudioSegment import random import tempfile import streamlit as st from pytube import Playlist, YouTube from pydub import AudioSegment playlist_url='https://www.youtube.com/playlist?list=PLUwVJKJgdARRdQ3Y3NFB9HMTjXTa5INcz' class thaTube2: def __init__(self, playlist_url): self.playlist_url = playlist_url self.current_audio_file = None self.current_audio=None self.video_url = None self.tubelist = playlist_url # Autoplay as soon as the object is created self.streamlit_ui() def select_random_video(self): """Select a random video from the playlist.""" playlist = Playlist(self.playlist_url) videos = list(playlist.video_urls) self.video_url = random.choice(videos) return self.video_url def extract_audio(self): """Extract audio from the selected video and save it as an MP3 file.""" if not self.video_url: raise ValueError("No video selected. Please select a video first.") video = YouTube(self.video_url) audio_stream = video.streams.filter(only_audio=True).first() with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as temp_audio_file: audio_stream.download(output_path=temp_audio_file.name) temp_audio_file.close() audio = AudioSegment.from_file(temp_audio_file.name) with tempfile.NamedTemporaryFile(delete=False, suffix='.mp3') as mp3_file: audio.export(mp3_file.name, format="mp3") self.current_audio_file = mp3_file.name return self.current_audio_file def play_audio(self): """Play the extracted audio using Streamlit's audio player.""" if not self.current_audio_file: raise ValueError("No audio file to play. Please extract audio first.") audio_bytes = open(self.current_audio_file, 'rb').read() st.audio(audio_bytes, format='audio/mpeg', start_time=0) def next_video(self): """Select a new random video and start playing its audio.""" self.select_random_video() self.extract_audio() self.play_audio() def streamlit_ui(self): """Create a Streamlit interface for controlling playback.""" st.title('YouTube Audio Player') if st.button('Play Random Video'): self.select_random_video() self.extract_audio() self.play_audio() st.write(f"Playing audio from: {self.video_url}") if st.button('Next Video'): self.next_video() st.write(f"Playing next video: {self.video_url}") def play_audio(self): """Play the extracted audio using Streamlit's audio player.""" if not self.current_audio_file: raise ValueError("No audio file to play. Please extract audio first.") audio_bytes = open(self.current_audio_file, 'rb').read() st.audio(audio_bytes, format='audio/mpeg', start_time=0) def next_video(self): """Select a new random video and start playing its audio.""" self.select_random_video() self.extract_audio() self.play_audio() def streamlit_ui(self): """Create a Streamlit interface for controlling playback.""" st.title('YouTube Audio Player') if st.button('Play Random Video'): self.select_random_video() self.extract_audio() self.play_audio() st.write(f"Playing audio from: {self.video_url}") if st.button('Next Video'): self.next_video() st.write(f"Playing next video: {self.video_url}") # Usage #tuber = thaTube('https://www.youtube.com/playlist?list=PLUwVJKJgdARRdQ3Y3NFB9HMTjXTa5INcz') class thaTube: def __init__(self, tubelist): # Autoplay as soon as the object is created self.streamlit_ui() self.playlist_url = tubelist self.current_audio_file = None self.current_audio = None self.is_playing = False self.video_url = None self.tubelist = tubelist pygame.init() pygame.mixer.init() # Call the method to set up the Streamlit UI self.streamlit_ui() def select_random_video(self): """Select a random video from the playlist.""" playlist = Playlist(self.playlist_url) videos = list(playlist.video_urls) self.video_url = random.choice(videos) return self.video_url def extract_audio(self): """Extract audio from the selected video and save it as an MP3 file.""" if not self.video_url: raise ValueError("No video selected. Please select a video first.") video = YouTube(self.video_url) audio_stream = video.streams.filter(only_audio=True).first() with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as temp_audio_file: audio_stream.download(output_path=temp_audio_file.name) temp_audio_file.close() audio = AudioSegment.from_file(temp_audio_file.name) with tempfile.NamedTemporaryFile(delete=False, suffix='.mp3') as mp3_file: audio.export(mp3_file.name, format="mp3") self.current_audio_file = mp3_file.name return self.current_audio_file def play_audio(self): """Play the extracted audio using Streamlit's audio player.""" if not self.current_audio_file: raise ValueError("No audio file to play. Please extract audio first.") audio_bytes = open(self.current_audio_file, 'rb').read() st.audio(audio_bytes, format='audio/mpeg', start_time=0) def stop_audio(self): """Stop the currently playing audio.""" if self.is_playing: pygame.mixer.stop() self.is_playing = False def set_volume(self, volume): """Set the volume for playback (volume is a float between 0.0 and 1.0).""" if self.current_audio: self.current_audio.set_volume(volume) def next_video(self): """Select a new random video and start playing its audio.""" self.stop_audio() self.select_random_video() self.extract_audio() self.play_audio() def streamlit_ui(self): """Create a Streamlit interface for controlling playback.""" st.title('YouTube Audio Player') if st.button('Play Random Video'): self.select_random_video() self.extract_audio() self.play_audio() st.write(f"Playing audio from: {self.video_url}") if st.button('Stop Audio'): self.stop_audio() st.write("Audio stopped.") volume = st.slider('Volume', 0.0, 1.0, 0.5) self.set_volume(volume) st.write(f"Volume set to {volume}") if st.button('Next Video'): self.next_video() st.write(f"Playing next video: {self.video_url}") ''' import random import tempfile import streamlit as st from pytube import Playlist, YouTube from pydub import AudioSegment import pygame class thaTube: def __init__(self, tubelist='PLUwVJKJgdARRdQ3Y3NFB9HMTjXTa5INcz'): self.playlist_url = tubelist self.current_audio_file = None self.current_audio = None self.is_playing = False self.video_url = None self.tubelist = tubelist pygame.init() pygame.mixer.init() # Call the method to set up the Streamlit UI self.streamlit_ui() def select_random_video(self): """Select a random video from the playlist.""" playlist = Playlist(self.tubelist) videos = list(playlist.video_urls) self.video_url = random.choice(videos) return self.video_url def extract_audio(self): """Extract audio from the selected video and save it as an MP3 file.""" if not self.video_url: raise ValueError("No video selected. Please select a video first.") video = YouTube(self.video_url) audio_stream = video.streams.filter(only_audio=True).first() with tempfile.NamedTemporaryFile(delete=False, suffix='.mp4') as temp_audio_file: audio_stream.download(output_path=temp_audio_file.name) temp_audio_file.close() audio = AudioSegment.from_file(temp_audio_file.name) with tempfile.NamedTemporaryFile(delete=False, suffix='.mp3') as mp3_file: audio.export(mp3_file.name, format="mp3") self.current_audio_file = mp3_file.name return self.current_audio_file def play_audio(self): """Play the extracted audio.""" if not self.current_audio_file: raise ValueError("No audio file to play. Please extract audio first.") self.current_audio = pygame.mixer.Sound(self.current_audio_file) self.current_audio.play() self.is_playing = True def stop_audio(self): """Stop the currently playing audio.""" if self.is_playing: pygame.mixer.stop() self.is_playing = False def set_volume(self, volume): """Set the volume for playback (volume is a float between 0.0 and 1.0).""" if self.current_audio: self.current_audio.set_volume(volume) def next_video(self): """Select a new random video and start playing its audio.""" self.stop_audio() self.select_random_video() self.extract_audio() self.play_audio() def streamlit_ui(self): """Create a Streamlit interface for controlling playback.""" st.title('YouTube Audio Player') if st.button('Play Random Video'): self.select_random_video() self.extract_audio() self.play_audio() st.write(f"Playing audio from: {self.video_url}") if st.button('Stop Audio'): self.stop_audio() st.write("Audio stopped.") volume = st.slider('Volume', 0.0, 1.0, 0.5) self.set_volume(volume) st.write(f"Volume set to {volume}") if st.button('Next Video'): self.next_video() st.write(f"Playing next video: {self.video_url}") '''