#!/usr/bin/python import numpy as np import matplotlib.image as mpimg import wave from array import array from progressbar import ProgressBar def write_column(output_file, pixels, rescale=.1): """ Write a single column of sound """ curve = np.fft.ifft(pixels, len(pixels)*2).real curve = np.array((curve-np.average(curve))*rescale, dtype=int) data = array("h", curve).tostring() output_file.writeframes(data) def make_wav(image_filename): """ Make a WAV file having a spectrogram resembling an image """ image = mpimg.imread(image_filename) image = np.sum(image, axis = 2).T[:, ::-1] image = image**2 output_file = wave.open(image_filename+'.wav', 'w') output_file.setparams((1, 2, 44100, 0, 'NONE', 'not compressed')) pb = ProgressBar().start() n = float(len(image)) for index, column in enumerate(image): write_column(output_file, column) pb.update(index*100/n) output_file.close() print "Wrote %s.wav" % image_filename if __name__ == '__main__': import sys make_wav(sys.argv[1])