Spaces:
Sleeping
Sleeping
File size: 4,095 Bytes
a1de66d ce879dc a1de66d fbfdf9e a830900 29a1d82 a830900 29a1d82 a1de66d 29a1d82 a1de66d 29a1d82 a1de66d 29a1d82 a1de66d 29a1d82 fbfdf9e 29a1d82 ce879dc 29a1d82 ce879dc 29a1d82 cfa921b 29a1d82 cfa921b 29a1d82 a1de66d 092fa31 29a1d82 4da4ce9 5583fd4 29a1d82 feffd36 29a1d82 f7b770e 29a1d82 7692c5b 29a1d82 6f681ea 29a1d82 |
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 |
import streamlit as st
import streamlit.components.v1 as components
import re
import os
import glob
# Set Streamlit page configuration
st.set_page_config(layout="wide")
def process_line(line):
# Process each line to replace chords with images
if re.search(r'\b[A-G][#b]?m?\b', line):
line = re.sub(r'\b([A-G][#b]?m?)\b', r"<img src='\1.png' style='height:20px;'>", line)
return line
def process_chord_sheet(chord_sheet):
# Process the entire chord sheet
processed_lines = [process_line(line) for line in chord_sheet.split('\n')]
return '<br>'.join(processed_lines)
def create_search_url(base_url, artist_song):
# Create search URL with appropriate character replacements
return base_url + artist_song.replace(' ', '+').replace('โ', '%E2%80%93').replace('&', 'and')
def load_song_file(file_path):
# Load a song file and return its content
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()
def parse_filename(filename):
# Parse the filename to extract song and artist names
base_name = os.path.splitext(filename)[0]
song_name, artist_name = base_name.split(' by ')
return song_name.replace("_", " "), artist_name.replace("_", " ")
def main():
col1, col3 = st.columns([3, 5])
with col1:
st.markdown('### ๐ต ๐Prompt๐ฅ๐ธChord Sheet๐ถ AI Prompt Authoring App')
# Expander for selecting the song
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')
# Input fields for song and artist names
song_name_input = st.text_input("๐ต Song:", key='song_name')
artist_name_input = st.text_input("๐ค Artist:", key='artist_name')
if selected_file:
# Display the current song
song_info = os.path.splitext(selected_file)[0].replace("_", " ")
st.header("๐ผ Current Song")
st.markdown("**" + song_info + "**")
processed_sheet = process_chord_sheet(load_song_file(selected_file))
components.html(processed_sheet, height=600) # Using HTML component for chord sheet
# Markdown table with links
table_md = f"""
| Wikipedia | YouTube | Chords | Lyrics |
| --------- | ------- | ------ | ------ |
| [๐]({create_search_url("https://www.wikipedia.org/search-redirect.php?family=wikipedia&language=en&search=", song_info)}) | [๐ฅ]({create_search_url("https://www.youtube.com/results?search_query=", song_info)}) | [๐ธ]({create_search_url("https://www.ultimate-guitar.com/search.php?search_type=title&value=", song_info)}) | [๐ถ]({create_search_url("https://www.google.com/search?q=", song_info + '+lyrics')}) |
"""
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, 3])
with icol1:
st.markdown("**" + song_info + "**")
processed_sheet = process_chord_sheet(load_song_file(file))
components.html(processed_sheet, height=150) # Displaying processed chord sheets
with col3:
# Chord sheet text area
chord_sheet_area = st.text_area("Chord Sheet", value=load_song_file(selected_file) if selected_file else '', height=1600, key='chord_sheet')
# Save functionality
if st.button("๐พ Save", key="save_song"):
if song_name_input and artist_name_input:
filename = song_name_input + " by " + artist_name_input + ".txt"
with open(filename, "w") as file:
file.write(chord_sheet_area)
st.success("Chord sheet saved to file: " + filename)
else:
st.error("Both Song Name and Artist Name are required.")
if __name__ == '__main__':
main()
|