import matplotlib.pyplot as plt import numpy as np from scipy.io.wavfile import write # Load the image image_path = 'hugging_face.jpg' image = plt.imread(image_path) # Convert the image to grayscale grayscale_image = np.mean(image, axis=2) # Define the musical parameters sample_rate = 44100 # Audio sample rate (Hz) duration = 0.1 # Duration of each note (seconds) # Define the mapping from pixel values to musical notes min_note = 40 # MIDI note number for the lowest pixel value max_note = 80 # MIDI note number for the highest pixel value # Rescale the pixel values to the range [min_note, max_note] scaled_image = (grayscale_image - np.min(grayscale_image)) scaled_image *= (max_note - min_note) / np.max(scaled_image) scaled_image += min_note # Generate the audio signal total_duration = int(duration * sample_rate * grayscale_image.shape[1]) t = np.linspace(0, total_duration / sample_rate, total_duration, endpoint=False) audio_signal = np.zeros(total_duration) for i, column in enumerate(scaled_image.T): start = int(i * duration * sample_rate) end = int((i + 1) * duration * sample_rate) audio_signal[start:end] = np.sin(2 * np.pi * column * t[start:end]) # Normalize the audio signal audio_signal /= np.max(np.abs(audio_signal)) audio_signal *= 32767 # Scale the signal to the range of a 16-bit integer # Convert the audio signal to 16-bit integer format audio_signal = audio_signal.astype(np.int16) # Save the audio signal to a WAV file output_file = 'hugging_face.wav' write(output_file, sample_rate, audio_signal) print(f"Audio file '{output_file}' generated successfully!")