Spaces:
Runtime error
Runtime error
import streamlit as st | |
import numpy as np | |
import librosa | |
import soundfile as sf | |
from PIL import Image | |
from io import BytesIO | |
def process_color_to_audio(array, sample_rate=44100, duration=5): | |
r_mean = np.mean(array[:, :, 0]) / 255.0 | |
g_mean = np.mean(array[:, :, 1]) / 255.0 | |
b_mean = np.mean(array[:, :, 2]) / 255.0 | |
min_freq = 100 | |
max_freq = 1000 | |
r_freq = min_freq + (1 - r_mean) * (max_freq - min_freq) | |
g_freq = min_freq + (1 - g_mean) * (max_freq - min_freq) | |
b_freq = min_freq + (1 - b_mean) * (max_freq - min_freq) | |
t = np.linspace(0, duration, int(sample_rate * duration), endpoint=False) | |
audio_data = np.sin(2 * np.pi * r_freq * t) + np.sin(2 * np.pi * g_freq * t) + np.sin(2 * np.pi * b_freq * t) | |
audio_data /= np.max(np.abs(audio_data)) | |
return audio_data, sample_rate | |
def main(): | |
st.title('PNG to Audio Streamlit App') | |
st.write("Upload a PNG image and get the corresponding audio!") | |
uploaded_file = st.file_uploader("Choose a PNG image", type="png") | |
if uploaded_file is not None: | |
image = Image.open(uploaded_file) | |
st.image(image, caption='Uploaded PNG image', use_column_width=True) | |
if st.button("Generate Audio"): | |
array = np.array(image) | |
audio_data, sample_rate = process_color_to_audio(array) | |
with BytesIO() as output: | |
sf.write(output, audio_data, sample_rate, format='wav') | |
st.audio(output.getvalue(), format='audio/wav') | |
if __name__ == '__main__': | |
main() |