From 23b118c6d73901bfedc5091bf4bd0bb94255f613 Mon Sep 17 00:00:00 2001 From: Thomas Buck Date: Wed, 14 Feb 2024 01:19:54 +0100 Subject: [PATCH] toolbox logo looks acceptable now --- render.py | 30 +++++++++++++++++++++++++++--- toolbox.svg | 9 +++++---- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/render.py b/render.py index 0e49164..44004fe 100755 --- a/render.py +++ b/render.py @@ -2,6 +2,9 @@ # Render image to Oscilloscope XY vector audio # +# https://pypi.org/project/svgpathtools/ +# https://dood.al/oscilloscope/ +# # ---------------------------------------------------------------------------- # Copyright (c) 2024 Thomas Buck (thomas@xythobuz.de) # @@ -23,6 +26,8 @@ import wave from svgpathtools import svg2paths samplerate = 44100 #192000 +volume_percent = 70 +path_steps = 10 default_duration = 5.0 default_outfile = "out.wav" @@ -48,13 +53,32 @@ def read_image(filename): print("min={} max={}".format(p_min, p_max)) data = bytearray() - for n in range(0, len(points)): + + def add_point(p): for i in range(0, 2): - v = points[n][i] + v = p[i] v -= p_min[i] v /= p_max[i] - p_min[i] - c = int((v * 2 - 1) * (32767 / 100 * 70)) + if i == 1: + v = 1 - v + c = int((v * 2 - 1) * (32767 / 100 * volume_percent)) data.extend(c.to_bytes(2, byteorder="little", signed=True)) + + def interpolate(p1, p2, step): + p = [] + for i in range(0, 2): + diff = p2[i] - p1[i] + v = p1[i] + diff * step + p.append(v) + return p + + for n in range(0, len(points) - 1): + p1 = points[n] + p2 = points[n + 1] + for step in range(0, path_steps): + p = interpolate(p1, p2, step / path_steps) + add_point(p) + add_point(points[len(points) - 1]) return data def write_waveform(data, filename): diff --git a/toolbox.svg b/toolbox.svg index 5402b3b..2527d0f 100644 --- a/toolbox.svg +++ b/toolbox.svg @@ -23,9 +23,9 @@ inkscape:pagecheckerboard="0" inkscape:deskcolor="#d1d1d1" inkscape:document-units="mm" - inkscape:zoom="9.7401438" - inkscape:cx="34.291075" - inkscape:cy="39.732473" + inkscape:zoom="16" + inkscape:cx="27.6875" + inkscape:cy="45.875" inkscape:window-width="1920" inkscape:window-height="1020" inkscape:window-x="0" @@ -43,6 +43,7 @@ inkscape:connector-curvature="0" id="path32" style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.0352778;stroke-opacity:1" - d="m 54.809672,66.488838 -0.0032,-0.0019 -0.0033,0.0019 -0.0032,-0.0057 -9.011829,-5.198633 h -0.0153 l 0.0029,-10.567212 9.035378,-5.20901 9.028924,5.208587 v 4.160979 h -0.01739 l 0.01739,0.03006 -1.862843,1.074597 1.862843,1.074702 -5.64e-4,9.88e-4 5.64e-4,2.82e-4 v 4.202042 h -0.0088 l 0.0088,0.01517 -9.027266,5.207453 -0.0032,0.0057 m 0.897926,-11.088264 v 0 l 0.01475,8.37463 6.246777,-3.580133 v -2.057153 l -1.864043,-1.075267 -1.899073,1.095516 V 55.99825 l 3.763116,-2.170818 v -2.029848 l -7.160824,-4.130957 -7.164416,4.133003 v 8.395441 l 6.19276,3.569109 v -7.281566 l -1.492427,0.863212 -1.871098,-1.079429 5.594315,-3.236454 1.871909,1.079994 -2.231742,1.290637" /> + d="m 54.805794,66.484453 -9.032612,-5.199858 0.0025,-10.567302 9.035378,-5.20901 9.028924,5.208587 v 4.160979 l -1.862843,1.104657 1.862843,1.074702 c -9.33e-4,1.40583 -1.88e-4,2.812388 0,4.218482 l -9.033236,5.209579 m 0.910765,-2.706542 5.99e-4,-0.0022 6.246178,-3.577918 0.0047,-2.060667 -1.864043,-1.075267 -1.899073,1.095516 V 55.99825 l 3.763116,-2.170818 v -2.029848 l -7.160824,-4.130957 -7.164416,4.133003 v 8.395441 l 6.190862,3.564702 v -7.281566 l -1.492427,0.863212 -1.871098,-1.079429 5.594315,-3.236454 1.871909,1.079994 -2.233905,1.290426 0.01604,8.376379" + sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />