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("""
""")