import lambdasim as l from IPython.display import * simimg = "walls4.png" info = l.util.png_info(simimg) print(info) Image("./walls4.png") Xpix, Ypix = info['size'] X = 1 s = l.Simulation(resolution=X/Xpix).set_size_in_pixels(Xpix, Ypix) first_hole_x, first_hole_y = s.pix2coord(360, 100) x0, _ = s.pix2coord(17, 0) resfreq = l.acoustics.wavelen2freq(first_hole_x - x0)*0.5 s.wall_from_image(simimg, color=(255,255,255), dist=0.2) source_mat = l.img_to_mask(simimg, (255,0,0), dist=0.2) source = s.source_from_array(source_mat, kind='hannsin', amp=0.3, freq=resfreq) #s.source_point(x0+0.01, first_hole_y, 'hannsin', freq=resfreq, amp=0.3) #s.source_point(x0+0.01+s.nodesize, first_hole_y+s.nodesize, 'pinknoise', amp=0.1) print(s) print("") print(source) recvpix = l.mask_to_pixels(l.img_to_mask(simimg, (0,0,255), 0.1)) recvpix.sort(key=lambda (x,y):y) # sort by x, then by y recvpix.sort(key=lambda (x,y):x) for i, (xpix, ypix) in enumerate(recvpix): x, y = s.pix2coord(xpix, ypix) #s.make_receiver(x, y, "recv%d-%dx%d"%(i, xpix, ypix)) s.make_receiver(x, y) print(s.receivers) s.angmat = None s.write("ww1") s.opensim() s.render_video(duration=0.5, contrast=70, fps=60, cmap=2) fut = s.render_wav(duration=0.5, resample=88200, split=True) fut.result() # the results are sorted first by Y, then by X. My mistake here, 1st and 2nd receiver are swapped Image("./ww1-rms.png") Image("./ww1-phase.png") HTML(""" """)