| 
				
				
				
				 | 
			
			 | 
			@@ -0,0 +1,38 @@ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#!/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]) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  |