Spaces:
Sleeping
Sleeping
File size: 4,577 Bytes
a1de66d ce879dc a1de66d fbfdf9e a830900 d9efc3d 29a1d82 a830900 29a1d82 4da6726 d9efc3d a1de66d a29f926 4da6726 d9efc3d a29f926 a1de66d 29a1d82 a1de66d 29a1d82 a96c21d f4065b2 e12508c e333a11 e12508c e333a11 e12508c e333a11 29a1d82 a1de66d 092fa31 4da4ce9 39e9e01 feffd36 29a1d82 f4065b2 b4bf86f f4065b2 b35b127 9ff1a1c f4065b2 e55fad1 f4065b2 b35b127 9ff1a1c f4065b2 7692c5b e12508c 29a1d82 6f681ea d9efc3d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
import streamlit as st
import streamlit.components.v1 as components
import re
import os
import glob
import base64
st.set_page_config(layout="wide")
def get_image_base64(image_path):
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode()
def process_line(line):
chord_images = {
'Em': 'Em.png',
'D': 'D.png',
'C': 'C.png'
}
def replace_chord(match):
chord = match.group(0)
image_base64 = get_image_base64(chord_images.get(chord, 'default.png'))
return f"<strong>{chord}</strong><img src='data:image/png;base64,{image_base64}' style='height:20px;'>"
pattern = r'\b(' + '|'.join(re.escape(chord) for chord in chord_images.keys()) + r')\b'
line = re.sub(pattern, replace_chord, line)
return line
def process_chord_sheet(chord_sheet):
processed_lines = [process_line(line) for line in chord_sheet.split('\n')]
return '<br>'.join(processed_lines)
def load_song_file(file_path):
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()
def create_search_url_wikipedia(artist_song):
base_url = "https://www.wikipedia.org/search-redirect.php?family=wikipedia&language=en&search="
return base_url + artist_song.replace(' ', '+').replace('–', '%E2%80%93').replace('&', 'and')
def create_search_url_youtube(artist_song):
base_url = "https://www.youtube.com/results?search_query="
return base_url + artist_song.replace(' ', '+').replace('–', '%E2%80%93').replace('&', 'and')
def create_search_url_chords(artist_song):
base_url = "https://www.ultimate-guitar.com/search.php?search_type=title&value="
return base_url + artist_song.replace(' ', '+').replace('–', '%E2%80%93').replace('&', 'and')
def create_search_url_lyrics(artist_song):
base_url = "https://www.google.com/search?q="
return base_url + artist_song.replace(' ', '+').replace('–', '%E2%80%93').replace('&', 'and') + '+lyrics'
def display_chord_sheet_in_two_page_view(chord_sheet):
css_content = """
<style>
.multi-column {
column-count: 2;
column-gap: 1em;
column-rule: thin solid black;
overflow: auto;
white-space: pre-wrap;
font-size: small;
}
</style>
"""
html_content = f"""
{css_content}
<div class="multi-column">
{chord_sheet}
</div>
"""
components.html(html_content, height=1200)
def main():
col1, col3 = st.columns([3, 5])
with col1:
st.markdown('### 🎵🎥 ChordPrompter 🎸 AI Prompt Authoring - Wiki, YouTube, Chords, Lyrics📚🎶')
with st.expander("Select Song:", expanded=True):
all_files = [f for f in glob.glob("*.txt") if ' by ' in f]
selected_file = st.selectbox("Choose: ", all_files, key='selected_file')
if selected_file:
song_info = os.path.splitext(selected_file)[0].replace("_", " ")
st.header("🎼 Current Song")
st.markdown("**" + song_info + "**")
chord_sheet = load_song_file(selected_file)
processed_sheet = process_chord_sheet(chord_sheet)
#st.markdown(processed_sheet, unsafe_allow_html=True)
table_md = f"""
| [📚Wikipedia]({create_search_url_wikipedia(song_info)}) | [🎥YouTube]({create_search_url_youtube(song_info)})
| [🎸Chords]({create_search_url_chords(song_info)}) | [🎶Lyrics]({create_search_url_lyrics(song_info)}) |
"""
st.markdown(table_md)
st.header("🎼 Available Songs")
for file in all_files:
song_info = os.path.splitext(file)[0].replace("_", " ")
icol1, icol2 = st.columns([1, 2])
with icol1:
st.markdown("**" + song_info + "**")
with icol2:
table_md = f"""
| [📚Wikipedia]({create_search_url_wikipedia(song_info)}) | [🎥YouTube]({create_search_url_youtube(song_info)})
| [🎸Chords]({create_search_url_chords(song_info)}) | [🎶Lyrics]({create_search_url_lyrics(song_info)}) |
"""
st.markdown(table_md)
with col3:
if 'selected_file' in st.session_state and st.session_state.selected_file:
chord_sheet = load_song_file(st.session_state.selected_file)
processed_sheet = process_chord_sheet(chord_sheet)
display_chord_sheet_in_two_page_view(processed_sheet)
if __name__ == '__main__':
main() |