4track 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +80 -0
  3. package/dist/assets/btn_fwd.svg +30 -0
  4. package/dist/assets/btn_normal.png +0 -0
  5. package/dist/assets/btn_pause.svg +30 -0
  6. package/dist/assets/btn_play.svg +25 -0
  7. package/dist/assets/btn_pressed.png +0 -0
  8. package/dist/assets/btn_rec.svg +25 -0
  9. package/dist/assets/btn_rew.svg +30 -0
  10. package/dist/assets/btn_stop.svg +25 -0
  11. package/dist/assets/casette_hiss.mp3 +0 -0
  12. package/dist/assets/casette_hiss_compressed.mp3 +0 -0
  13. package/dist/assets/cassette.jpg +0 -0
  14. package/dist/assets/counter_bg.png +0 -0
  15. package/dist/assets/fx/counter.wav +0 -0
  16. package/dist/assets/fx/ffwd.wav +0 -0
  17. package/dist/assets/fx/pause.wav +0 -0
  18. package/dist/assets/fx/play.wav +0 -0
  19. package/dist/assets/fx/record.wav +0 -0
  20. package/dist/assets/fx/stop.wav +0 -0
  21. package/dist/assets/fx/track.wav +0 -0
  22. package/dist/assets/logo.svg +51 -0
  23. package/dist/assets/noise_50.jpg +0 -0
  24. package/dist/assets/openstudio.svg +38 -0
  25. package/dist/assets/recorder-worklet.d.ts +8 -0
  26. package/dist/assets/recorder-worklet.js +30 -0
  27. package/dist/assets/rotator.png +0 -0
  28. package/dist/assets/slider-indicator.svg +139 -0
  29. package/dist/assets/slider.png +0 -0
  30. package/dist/assets/slideselect-indicator.svg +64 -0
  31. package/dist/assets/slideselect-thumb.png +0 -0
  32. package/dist/assets/svg-icons.d.ts +6 -0
  33. package/dist/assets/svg-icons.js +8 -0
  34. package/dist/assets.d.ts +34 -0
  35. package/dist/audio/constants.d.ts +4 -0
  36. package/dist/audio/constants.js +27 -0
  37. package/dist/audio/engine.svelte.d.ts +90 -0
  38. package/dist/audio/engine.svelte.js +604 -0
  39. package/dist/audio/input-fx.d.ts +8 -0
  40. package/dist/audio/input-fx.js +44 -0
  41. package/dist/audio/metering.d.ts +3 -0
  42. package/dist/audio/metering.js +20 -0
  43. package/dist/audio/pcm.d.ts +2 -0
  44. package/dist/audio/pcm.js +43 -0
  45. package/dist/audio/project-io.d.ts +6 -0
  46. package/dist/audio/project-io.js +85 -0
  47. package/dist/audio/recording.d.ts +2 -0
  48. package/dist/audio/recording.js +80 -0
  49. package/dist/audio/track.svelte.d.ts +13 -0
  50. package/dist/audio/track.svelte.js +17 -0
  51. package/dist/components/Cassette.svelte +179 -0
  52. package/dist/components/Cassette.svelte.d.ts +9 -0
  53. package/dist/components/FourTrack.svelte +443 -0
  54. package/dist/components/FourTrack.svelte.d.ts +16 -0
  55. package/dist/components/Mixer.svelte +105 -0
  56. package/dist/components/Mixer.svelte.d.ts +7 -0
  57. package/dist/components/TransportButtons.svelte +299 -0
  58. package/dist/components/TransportButtons.svelte.d.ts +10 -0
  59. package/dist/components/els/DigitRoller.svelte +82 -0
  60. package/dist/components/els/DigitRoller.svelte.d.ts +5 -0
  61. package/dist/components/els/Knob.svelte +267 -0
  62. package/dist/components/els/Knob.svelte.d.ts +12 -0
  63. package/dist/components/els/Light.svelte +104 -0
  64. package/dist/components/els/Light.svelte.d.ts +8 -0
  65. package/dist/components/els/Lights.svelte +101 -0
  66. package/dist/components/els/Lights.svelte.d.ts +11 -0
  67. package/dist/components/els/SlideSelect.svelte +159 -0
  68. package/dist/components/els/SlideSelect.svelte.d.ts +15 -0
  69. package/dist/components/els/Slider.svelte +139 -0
  70. package/dist/components/els/Slider.svelte.d.ts +21 -0
  71. package/dist/components/els/Timestamp.svelte +92 -0
  72. package/dist/components/els/Timestamp.svelte.d.ts +5 -0
  73. package/dist/fx/soundfx.d.ts +14 -0
  74. package/dist/fx/soundfx.js +65 -0
  75. package/dist/index.d.ts +4 -0
  76. package/dist/index.js +3 -0
  77. package/dist/types.d.ts +40 -0
  78. package/dist/types.js +1 -0
  79. package/package.json +48 -0
@@ -0,0 +1,139 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg width="100%" height="100%" viewBox="0 0 91 864" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
4
+ <g transform="matrix(1,0,0,1,-9229.787354,-1172.117253)">
5
+ <g transform="matrix(1,0,0,1,0,3102.220472)">
6
+ <g transform="matrix(1,0,0,0.5,6792,-2428.720472)">
7
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
8
+ </g>
9
+ <g transform="matrix(1,0,0,0.5,6792,-2346.014123)">
10
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
11
+ </g>
12
+ <g transform="matrix(1,0,0,0.5,6792,-2263.307773)">
13
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
14
+ </g>
15
+ <g transform="matrix(0.936328,0,0,0.936328,592.244592,-104.908859)">
16
+ <g transform="matrix(0.157895,0,0,0.5,8888.842105,-2195.565901)">
17
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
18
+ </g>
19
+ <g transform="matrix(0.157895,0,0,0.5,8899.665546,-2195.565901)">
20
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
21
+ </g>
22
+ <g transform="matrix(0.157895,0,0,0.5,8910.488986,-2195.565901)">
23
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
24
+ </g>
25
+ <g transform="matrix(0.157895,0,0,0.5,8921.312426,-2195.565901)">
26
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
27
+ </g>
28
+ </g>
29
+ <g transform="matrix(0.936328,0,0,0.936328,592.244592,-116.149731)">
30
+ <g transform="matrix(0.157895,0,0,0.5,8888.842105,-2195.565901)">
31
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
32
+ </g>
33
+ <g transform="matrix(0.157895,0,0,0.5,8899.665546,-2195.565901)">
34
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
35
+ </g>
36
+ <g transform="matrix(0.157895,0,0,0.5,8910.488986,-2195.565901)">
37
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
38
+ </g>
39
+ <g transform="matrix(0.157895,0,0,0.5,8921.312426,-2195.565901)">
40
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
41
+ </g>
42
+ </g>
43
+ <g transform="matrix(0.936328,0,0,0.936328,592.244592,-127.390603)">
44
+ <g transform="matrix(0.157895,0,0,0.5,8888.842105,-2195.565901)">
45
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
46
+ </g>
47
+ <g transform="matrix(0.157895,0,0,0.5,8899.665546,-2195.565901)">
48
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
49
+ </g>
50
+ <g transform="matrix(0.157895,0,0,0.5,8910.488986,-2195.565901)">
51
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
52
+ </g>
53
+ <g transform="matrix(0.157895,0,0,0.5,8921.312426,-2195.565901)">
54
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
55
+ </g>
56
+ </g>
57
+ <g transform="matrix(0.936328,0,0,0.936328,592.244592,-138.631475)">
58
+ <g transform="matrix(0.157895,0,0,0.5,8888.842105,-2195.565901)">
59
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
60
+ </g>
61
+ <g transform="matrix(0.157895,0,0,0.5,8899.665546,-2195.565901)">
62
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
63
+ </g>
64
+ <g transform="matrix(0.157895,0,0,0.5,8910.488986,-2195.565901)">
65
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
66
+ </g>
67
+ <g transform="matrix(0.157895,0,0,0.5,8921.312426,-2195.565901)">
68
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
69
+ </g>
70
+ </g>
71
+ <g transform="matrix(0.936328,0,0,0.936328,592.244592,-149.872347)">
72
+ <g transform="matrix(0.157895,0,0,0.5,8888.842105,-2195.565901)">
73
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
74
+ </g>
75
+ <g transform="matrix(0.157895,0,0,0.5,8899.665546,-2195.565901)">
76
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
77
+ </g>
78
+ <g transform="matrix(0.157895,0,0,0.5,8910.488986,-2195.565901)">
79
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
80
+ </g>
81
+ <g transform="matrix(0.157895,0,0,0.5,8921.312426,-2195.565901)">
82
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
83
+ </g>
84
+ </g>
85
+ <g transform="matrix(0.936328,0,0,0.936328,592.244592,-161.113219)">
86
+ <g transform="matrix(0.157895,0,0,0.5,8888.842105,-2195.565901)">
87
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
88
+ </g>
89
+ <g transform="matrix(0.157895,0,0,0.5,8899.665546,-2195.565901)">
90
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
91
+ </g>
92
+ <g transform="matrix(0.157895,0,0,0.5,8910.488986,-2195.565901)">
93
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
94
+ </g>
95
+ <g transform="matrix(0.157895,0,0,0.5,8921.312426,-2195.565901)">
96
+ <path d="M2528,1024L2528,1030C2528,1031.656 2523.743,1033 2518.5,1033L2499.5,1033C2494.257,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2494.257,1021 2499.5,1021L2518.5,1021C2523.743,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
97
+ </g>
98
+ </g>
99
+ <g transform="matrix(1,0,0,0.5,6792,-2180.601423)">
100
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
101
+ </g>
102
+ <g transform="matrix(1,0,0,0.5,6792,-2097.895073)">
103
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
104
+ </g>
105
+ <g transform="matrix(1,0,0,0.5,6792,-2015.188724)">
106
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
107
+ </g>
108
+ <g transform="matrix(1,0,0,0.5,6792,-1932.482374)">
109
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
110
+ </g>
111
+ <g transform="matrix(1,0,0,0.5,6792,-1849.776024)">
112
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
113
+ </g>
114
+ <g transform="matrix(1,0,0,0.5,6792,-1767.069674)">
115
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
116
+ </g>
117
+ <g transform="matrix(1,0,0,0.5,6792,-1684.363325)">
118
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
119
+ </g>
120
+ <g transform="matrix(1,0,0,0.5,6792,-1596.656975)">
121
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.328,1033 2526.5,1033L2491.5,1033C2490.672,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.672,1021 2491.5,1021L2526.5,1021C2527.328,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
122
+ </g>
123
+ <g transform="matrix(1,0,0,1,206,-3222.220472)">
124
+ <path d="M9023.787,1300.621L9023.787,1297.814C9026.432,1297.556 9028.277,1297.126 9029.321,1296.522C9030.366,1295.918 9031.145,1294.491 9031.661,1292.239L9034.55,1292.239L9034.55,1321.251L9030.644,1321.251L9030.644,1300.621L9023.787,1300.621Z" style="fill:white;fill-rule:nonzero;"/>
125
+ <path d="M9054.244,1292.117C9058.015,1292.117 9060.741,1293.67 9062.423,1296.776C9063.725,1299.177 9064.376,1302.466 9064.376,1306.644C9064.376,1310.604 9063.786,1313.88 9062.606,1316.47C9060.897,1320.187 9058.103,1322.045 9054.224,1322.045C9050.724,1322.045 9048.12,1320.526 9046.411,1317.488C9044.987,1314.951 9044.275,1311.547 9044.275,1307.274C9044.275,1303.965 9044.702,1301.123 9045.557,1298.75C9047.157,1294.328 9050.053,1292.117 9054.244,1292.117ZM9054.203,1318.708C9056.102,1318.708 9057.614,1317.867 9058.74,1316.185C9059.866,1314.504 9060.429,1311.37 9060.429,1306.786C9060.429,1303.477 9060.022,1300.754 9059.208,1298.617C9058.394,1296.481 9056.814,1295.413 9054.468,1295.413C9052.311,1295.413 9050.734,1296.427 9049.737,1298.455C9048.741,1300.482 9048.242,1307.417 9048.242,1307.417C9048.242,1307.417 9048.561,1312.774 9049.198,1314.578C9050.175,1317.332 9051.843,1318.708 9054.203,1318.708Z" style="fill:white;fill-rule:nonzero;"/>
126
+ <path d="M9048.507,1397.545C9048.615,1399.566 9049.395,1400.963 9050.846,1401.736C9051.592,1402.143 9052.433,1402.347 9053.369,1402.347C9055.119,1402.347 9056.611,1401.618 9057.845,1400.16C9059.079,1398.702 9059.954,1395.741 9060.469,1391.279C9059.656,1392.568 9058.649,1393.473 9057.448,1393.995C9056.248,1394.517 9054.956,1394.778 9053.573,1394.778C9050.765,1394.778 9048.544,1393.904 9046.91,1392.154C9045.275,1390.404 9044.458,1388.153 9044.458,1385.399C9044.458,1382.754 9045.265,1380.428 9046.879,1378.421C9048.493,1376.414 9050.873,1375.41 9054.02,1375.41C9058.265,1375.41 9061.195,1377.322 9062.809,1381.147C9063.704,1383.25 9064.152,1385.881 9064.152,1389.041C9064.152,1392.608 9063.616,1395.769 9062.545,1398.522C9060.768,1403.106 9057.757,1405.399 9053.511,1405.399C9050.663,1405.399 9048.5,1404.653 9047.021,1403.161C9045.543,1401.669 9044.804,1399.797 9044.804,1397.545L9048.507,1397.545ZM9054.061,1391.564C9055.512,1391.564 9056.838,1391.086 9058.038,1390.13C9059.239,1389.173 9059.839,1387.502 9059.839,1385.114C9059.839,1382.971 9059.3,1381.374 9058.221,1380.323C9057.143,1379.272 9055.77,1378.746 9054.101,1378.746C9052.311,1378.746 9050.89,1379.347 9049.839,1380.547C9048.788,1381.747 9048.262,1383.351 9048.262,1385.359C9048.262,1387.257 9048.724,1388.766 9049.646,1389.885C9050.568,1391.004 9052.04,1391.564 9054.061,1391.564Z" style="fill:white;fill-rule:nonzero;"/>
127
+ <path d="M9054.305,1470.991C9055.919,1470.991 9057.18,1470.54 9058.089,1469.638C9058.998,1468.736 9059.452,1467.661 9059.452,1466.413C9059.452,1465.328 9059.018,1464.331 9058.15,1463.423C9057.282,1462.514 9055.96,1462.059 9054.183,1462.059C9052.42,1462.059 9051.145,1462.514 9050.358,1463.423C9049.571,1464.331 9049.178,1465.396 9049.178,1466.617C9049.178,1467.987 9049.687,1469.058 9050.704,1469.831C9051.721,1470.604 9052.921,1470.991 9054.305,1470.991ZM9054.529,1485.416C9056.224,1485.416 9057.631,1484.958 9058.75,1484.042C9059.869,1483.127 9060.429,1481.76 9060.429,1479.943C9060.429,1478.057 9059.852,1476.627 9058.699,1475.65C9057.547,1474.673 9056.068,1474.185 9054.264,1474.185C9052.515,1474.185 9051.087,1474.684 9049.982,1475.68C9048.876,1476.677 9048.323,1478.057 9048.323,1479.821C9048.323,1481.34 9048.829,1482.652 9049.839,1483.757C9050.85,1484.863 9052.413,1485.416 9054.529,1485.416ZM9049.32,1472.395C9048.303,1471.961 9047.51,1471.452 9046.94,1470.869C9045.869,1469.784 9045.333,1468.373 9045.333,1466.637C9045.333,1464.467 9046.119,1462.602 9047.693,1461.042C9049.266,1459.482 9051.497,1458.703 9054.386,1458.703C9057.18,1458.703 9059.371,1459.438 9060.958,1460.91C9062.545,1462.382 9063.338,1464.101 9063.338,1466.067C9063.338,1467.885 9062.877,1469.357 9061.955,1470.482C9061.439,1471.12 9060.639,1471.744 9059.554,1472.354C9060.761,1472.91 9061.711,1473.548 9062.402,1474.267C9063.691,1475.623 9064.335,1477.386 9064.335,1479.556C9064.335,1482.12 9063.474,1484.293 9061.751,1486.077C9060.029,1487.86 9057.594,1488.752 9054.447,1488.752C9051.613,1488.752 9049.215,1487.982 9047.255,1486.443C9045.295,1484.904 9044.316,1482.669 9044.316,1479.739C9044.316,1478.017 9044.736,1476.528 9045.577,1475.274C9046.418,1474.019 9047.666,1473.059 9049.32,1472.395Z" style="fill:white;fill-rule:nonzero;"/>
128
+ <path d="M9064.762,1542.606L9064.762,1545.8C9063.826,1546.708 9062.582,1548.289 9061.029,1550.54C9059.476,1552.792 9058.103,1555.219 9056.909,1557.824C9055.729,1560.36 9054.834,1562.673 9054.224,1564.761C9053.83,1566.104 9053.322,1568.267 9052.698,1571.251L9048.649,1571.251C9049.571,1565.69 9051.606,1560.157 9054.753,1554.65C9056.611,1551.422 9058.564,1548.634 9060.612,1546.288L9044.499,1546.288L9044.499,1542.606L9064.762,1542.606Z" style="fill:white;fill-rule:nonzero;"/>
129
+ <path d="M9055.159,1625.329C9058.415,1625.329 9060.683,1626.173 9061.965,1627.861C9063.247,1629.55 9063.887,1631.29 9063.887,1633.08L9060.266,1633.08C9060.049,1631.927 9059.703,1631.025 9059.228,1630.374C9058.347,1629.153 9057.011,1628.543 9055.22,1628.543C9053.172,1628.543 9051.545,1629.489 9050.338,1631.381C9049.131,1633.273 9048.459,1635.983 9048.323,1639.509C9049.164,1638.275 9050.222,1637.352 9051.497,1636.742C9052.664,1636.2 9053.966,1635.928 9055.404,1635.928C9057.845,1635.928 9059.974,1636.708 9061.792,1638.268C9063.609,1639.828 9064.518,1642.154 9064.518,1645.246C9064.518,1647.891 9063.657,1650.234 9061.934,1652.276C9060.212,1654.317 9057.757,1655.337 9054.569,1655.337C9051.843,1655.337 9049.49,1654.303 9047.51,1652.235C9045.529,1650.166 9044.539,1646.684 9044.539,1641.788C9044.539,1638.166 9044.98,1635.094 9045.862,1632.571C9047.557,1627.743 9050.656,1625.329 9055.159,1625.329ZM9054.895,1652.082C9056.821,1652.082 9058.262,1651.435 9059.218,1650.139C9060.174,1648.844 9060.653,1647.315 9060.653,1645.551C9060.653,1644.06 9060.225,1642.639 9059.371,1641.289C9058.516,1639.94 9056.963,1639.265 9054.712,1639.265C9053.138,1639.265 9051.758,1639.787 9050.572,1640.831C9049.385,1641.876 9048.791,1643.449 9048.791,1645.551C9048.791,1647.396 9049.331,1648.946 9050.409,1650.2C9051.487,1651.455 9052.983,1652.082 9054.895,1652.082Z" style="fill:white;fill-rule:nonzero;"/>
130
+ <path d="M9048.12,1730.492C9048.364,1732.581 9049.334,1734.025 9051.029,1734.826C9051.897,1735.232 9052.901,1735.436 9054.04,1735.436C9056.211,1735.436 9057.818,1734.744 9058.862,1733.361C9059.907,1731.977 9060.429,1730.445 9060.429,1728.763C9060.429,1726.728 9059.808,1725.155 9058.567,1724.043C9057.326,1722.931 9055.838,1722.374 9054.101,1722.374C9052.84,1722.374 9051.758,1722.619 9050.856,1723.107C9049.954,1723.595 9049.185,1724.273 9048.547,1725.141L9045.373,1724.958L9047.591,1709.272L9062.728,1709.272L9062.728,1712.812L9050.338,1712.812L9049.097,1720.91C9049.775,1720.394 9050.419,1720.008 9051.029,1719.75C9052.114,1719.302 9053.369,1719.079 9054.793,1719.079C9057.465,1719.079 9059.73,1719.94 9061.588,1721.662C9063.447,1723.385 9064.376,1725.569 9064.376,1728.213C9064.376,1730.967 9063.525,1733.395 9061.822,1735.497C9060.12,1737.599 9057.404,1738.65 9053.674,1738.65C9051.301,1738.65 9049.202,1737.982 9047.377,1736.646C9045.553,1735.31 9044.533,1733.259 9044.316,1730.492L9048.12,1730.492Z" style="fill:white;fill-rule:nonzero;"/>
131
+ <path d="M9056.746,1810.936L9056.746,1797.732L9047.408,1810.936L9056.746,1810.936ZM9056.807,1821.251L9056.807,1814.131L9044.031,1814.131L9044.031,1810.55L9057.377,1792.036L9060.469,1792.036L9060.469,1810.936L9064.762,1810.936L9064.762,1814.131L9060.469,1814.131L9060.469,1821.251L9056.807,1821.251Z" style="fill:white;fill-rule:nonzero;"/>
132
+ <path d="M9053.796,1905.378C9050.351,1905.378 9047.852,1904.432 9046.299,1902.54C9044.746,1900.648 9043.97,1898.346 9043.97,1895.633L9047.795,1895.633C9047.957,1897.518 9048.31,1898.888 9048.852,1899.743C9049.802,1901.275 9051.518,1902.042 9054,1902.042C9055.926,1902.042 9057.472,1901.526 9058.638,1900.495C9059.805,1899.465 9060.388,1898.135 9060.388,1896.508C9060.388,1894.5 9059.774,1893.097 9058.547,1892.296C9057.319,1891.496 9055.614,1891.096 9053.43,1891.096C9053.186,1891.096 9052.938,1891.099 9052.688,1891.106C9052.437,1891.113 9052.182,1891.123 9051.925,1891.137L9051.925,1887.902C9052.304,1887.942 9052.623,1887.97 9052.881,1887.983C9053.138,1887.997 9053.417,1888.003 9053.715,1888.003C9055.085,1888.003 9056.211,1887.786 9057.092,1887.352C9058.638,1886.593 9059.412,1885.237 9059.412,1883.283C9059.412,1881.832 9058.896,1880.713 9057.865,1879.926C9056.835,1879.14 9055.634,1878.746 9054.264,1878.746C9051.823,1878.746 9050.134,1879.56 9049.198,1881.188C9048.683,1882.083 9048.391,1883.358 9048.323,1885.013L9044.702,1885.013C9044.702,1882.843 9045.136,1880.998 9046.004,1879.479C9047.496,1876.766 9050.121,1875.41 9053.878,1875.41C9056.848,1875.41 9059.147,1876.071 9060.775,1877.394C9062.402,1878.716 9063.216,1880.632 9063.216,1883.141C9063.216,1884.931 9062.735,1886.383 9061.772,1887.495C9061.175,1888.187 9060.402,1888.729 9059.452,1889.122C9060.985,1889.543 9062.182,1890.353 9063.043,1891.554C9063.904,1892.754 9064.335,1894.222 9064.335,1895.958C9064.335,1898.739 9063.42,1901.004 9061.588,1902.754C9059.757,1904.503 9057.16,1905.378 9053.796,1905.378Z" style="fill:white;fill-rule:nonzero;"/>
133
+ <path d="M9044.275,1987.918C9044.41,1985.409 9044.929,1983.225 9045.831,1981.367C9046.733,1979.509 9048.493,1977.82 9051.111,1976.301L9055.017,1974.043C9056.767,1973.025 9057.994,1972.157 9058.699,1971.439C9059.812,1970.313 9060.368,1969.024 9060.368,1967.573C9060.368,1965.878 9059.859,1964.531 9058.842,1963.534C9057.825,1962.538 9056.468,1962.039 9054.773,1962.039C9052.264,1962.039 9050.528,1962.989 9049.565,1964.887C9049.049,1965.905 9048.764,1967.315 9048.71,1969.119L9044.987,1969.119C9045.028,1966.583 9045.496,1964.514 9046.391,1962.914C9047.978,1960.093 9050.778,1958.682 9054.793,1958.682C9058.13,1958.682 9060.568,1959.584 9062.107,1961.388C9063.647,1963.192 9064.416,1965.199 9064.416,1967.41C9064.416,1969.743 9063.596,1971.737 9061.955,1973.392C9061.005,1974.355 9059.303,1975.521 9056.848,1976.891L9054.061,1978.437C9052.732,1979.17 9051.687,1979.868 9050.928,1980.533C9049.571,1981.713 9048.717,1983.022 9048.364,1984.459L9064.274,1984.459L9064.274,1987.918L9044.275,1987.918Z" style="fill:white;fill-rule:nonzero;"/>
134
+ <path d="M9046.96,2050.621L9046.96,2047.814C9049.605,2047.556 9051.45,2047.126 9052.494,2046.522C9053.539,2045.918 9054.318,2044.491 9054.834,2042.239L9057.723,2042.239L9057.723,2071.251L9053.817,2071.251L9053.817,2050.621L9046.96,2050.621Z" style="fill:white;fill-rule:nonzero;"/>
135
+ <path d="M9054.244,2125.451C9058.015,2125.451 9060.741,2127.004 9062.423,2130.11C9063.725,2132.51 9064.376,2135.799 9064.376,2139.977C9064.376,2143.937 9063.786,2147.213 9062.606,2149.804C9060.897,2153.52 9058.103,2155.378 9054.224,2155.378C9050.724,2155.378 9048.12,2153.859 9046.411,2150.821C9044.987,2148.285 9044.275,2144.88 9044.275,2140.608C9044.275,2137.298 9044.702,2134.457 9045.557,2132.083C9047.157,2127.661 9050.053,2125.451 9054.244,2125.451ZM9054.203,2152.042C9056.102,2152.042 9057.614,2151.201 9058.74,2149.519C9059.866,2147.837 9060.429,2144.704 9060.429,2140.119C9060.429,2136.81 9060.022,2134.087 9059.208,2131.951C9058.394,2129.815 9056.814,2128.746 9054.468,2128.746C9052.311,2128.746 9050.734,2129.76 9049.737,2131.788C9048.741,2133.816 9048.242,2136.803 9048.242,2140.75C9048.242,2143.72 9048.561,2146.108 9049.198,2147.912C9050.175,2150.665 9051.843,2152.042 9054.203,2152.042Z" style="fill:white;fill-rule:nonzero;"/>
136
+ </g>
137
+ </g>
138
+ </g>
139
+ </svg>
Binary file
@@ -0,0 +1,64 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg width="100%" height="100%" viewBox="0 0 146 428" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
4
+ <g transform="matrix(1,0,0,1,-10324.580737,-1168.402473)">
5
+ <g transform="matrix(1,0,0,1,332,3102.220472)">
6
+ <g transform="matrix(0.842105,0,0,0.5,8009.229326,-2433.543933)">
7
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.202,1033 2526.219,1033L2491.781,1033C2490.798,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.798,1021 2491.781,1021L2526.219,1021C2527.202,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
8
+ </g>
9
+ </g>
10
+ <g transform="matrix(1,0,0,1,332,3102.220472)">
11
+ <g transform="matrix(0.842105,0,0,0.5,8009.229326,-2333.087583)">
12
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.202,1033 2526.219,1033L2491.781,1033C2490.798,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.798,1021 2491.781,1021L2526.219,1021C2527.202,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
13
+ </g>
14
+ </g>
15
+ <g transform="matrix(1,0,0,1,332,3102.220472)">
16
+ <g transform="matrix(0.842105,0,0,0.5,8009.229326,-2232.631234)">
17
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.202,1033 2526.219,1033L2491.781,1033C2490.798,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.798,1021 2491.781,1021L2526.219,1021C2527.202,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
18
+ </g>
19
+ </g>
20
+ <g transform="matrix(1,0,0,1,332,3102.220472)">
21
+ <g transform="matrix(0.842105,0,0,0.5,8009.229326,-2132.174884)">
22
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.202,1033 2526.219,1033L2491.781,1033C2490.798,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.798,1021 2491.781,1021L2526.219,1021C2527.202,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
23
+ </g>
24
+ </g>
25
+ <g transform="matrix(1,0,0,1,332,3102.220472)">
26
+ <g transform="matrix(0.842105,0,0,0.5,8009.229326,-2031.718534)">
27
+ <path d="M2528,1024L2528,1030C2528,1031.656 2527.202,1033 2526.219,1033L2491.781,1033C2490.798,1033 2490,1031.656 2490,1030L2490,1024C2490,1022.344 2490.798,1021 2491.781,1021L2526.219,1021C2527.202,1021 2528,1022.344 2528,1024Z" style="fill:white;"/>
28
+ </g>
29
+ </g>
30
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
31
+ <path d="M8982.302,1294.353L8982.302,1297.558L8973.238,1297.558L8973.238,1321.251L8969.539,1321.251L8969.539,1297.558L8960.476,1297.558L8960.476,1294.353L8982.302,1294.353Z" style="fill:white;fill-rule:nonzero;"/>
32
+ </g>
33
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
34
+ <path d="M8998.14,1306.676C8999.849,1306.676 9001.201,1306.334 9002.196,1305.651C9003.191,1304.967 9003.688,1303.734 9003.688,1301.952C9003.688,1300.036 9002.993,1298.729 9001.601,1298.034C9000.856,1297.667 8999.862,1297.484 8998.616,1297.484L8989.718,1297.484L8989.718,1306.676L8998.14,1306.676ZM8986.074,1294.353L8998.525,1294.353C9000.576,1294.353 9002.266,1294.652 9003.597,1295.25C9006.124,1296.398 9007.387,1298.516 9007.387,1301.604C9007.387,1303.215 9007.055,1304.534 9006.389,1305.559C9005.724,1306.585 9004.793,1307.409 9003.597,1308.031C9004.647,1308.458 9005.437,1309.02 9005.968,1309.716C9006.499,1310.412 9006.795,1311.541 9006.856,1313.103L9006.984,1316.71C9007.021,1317.736 9007.106,1318.499 9007.241,1318.999C9007.46,1319.854 9007.851,1320.403 9008.413,1320.647L9008.413,1321.251L9003.945,1321.251C9003.823,1321.019 9003.725,1320.72 9003.652,1320.354C9003.579,1319.988 9003.518,1319.28 9003.469,1318.23L9003.249,1313.744C9003.164,1311.986 9002.51,1310.808 9001.29,1310.21C9000.594,1309.881 8999.501,1309.716 8998.012,1309.716L8989.718,1309.716L8989.718,1321.251L8986.074,1321.251L8986.074,1294.353Z" style="fill:white;fill-rule:nonzero;"/>
35
+ </g>
36
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
37
+ <path d="M9012.716,1294.353L9016.268,1294.353L9016.268,1307.464L9029.378,1294.353L9034.414,1294.353L9023.226,1305.193L9034.725,1321.251L9029.982,1321.251L9020.571,1307.756L9016.268,1311.876L9016.268,1321.251L9012.716,1321.251L9012.716,1294.353Z" style="fill:white;fill-rule:nonzero;"/>
38
+ </g>
39
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
40
+ <path d="M9048.879,1302.684L9048.879,1300.158C9051.259,1299.926 9052.919,1299.538 9053.859,1298.995C9054.799,1298.452 9055.501,1297.167 9055.965,1295.141L9058.565,1295.141L9058.565,1321.251L9055.05,1321.251L9055.05,1302.684L9048.879,1302.684Z" style="fill:white;fill-rule:nonzero;"/>
41
+ </g>
42
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
43
+ <path d="M9046.462,1421.251C9046.584,1418.993 9047.051,1417.028 9047.863,1415.355C9048.674,1413.683 9050.258,1412.163 9052.614,1410.796L9056.13,1408.764C9057.705,1407.848 9058.809,1407.067 9059.444,1406.42C9060.445,1405.407 9060.946,1404.247 9060.946,1402.941C9060.946,1401.415 9060.488,1400.203 9059.572,1399.306C9058.657,1398.409 9057.436,1397.96 9055.91,1397.96C9053.652,1397.96 9052.089,1398.815 9051.223,1400.524C9050.759,1401.439 9050.502,1402.709 9050.454,1404.332L9047.103,1404.332C9047.139,1402.05 9047.561,1400.188 9048.366,1398.748C9049.794,1396.209 9052.315,1394.939 9055.928,1394.939C9058.931,1394.939 9061.126,1395.751 9062.511,1397.374C9063.897,1398.998 9064.589,1400.805 9064.589,1402.794C9064.589,1404.894 9063.851,1406.688 9062.374,1408.178C9061.519,1409.044 9059.987,1410.094 9057.778,1411.327L9055.269,1412.719C9054.073,1413.378 9053.133,1414.006 9052.449,1414.605C9051.229,1415.667 9050.46,1416.845 9050.142,1418.139L9064.461,1418.139L9064.461,1421.251L9046.462,1421.251Z" style="fill:white;fill-rule:nonzero;"/>
44
+ </g>
45
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
46
+ <path d="M9055.031,1521.965C9051.931,1521.965 9049.682,1521.114 9048.284,1519.411C9046.886,1517.708 9046.187,1515.636 9046.187,1513.195L9049.63,1513.195C9049.776,1514.892 9050.094,1516.124 9050.582,1516.893C9051.436,1518.273 9052.98,1518.963 9055.214,1518.963C9056.948,1518.963 9058.339,1518.499 9059.389,1517.571C9060.439,1516.643 9060.964,1515.447 9060.964,1513.982C9060.964,1512.175 9060.411,1510.912 9059.307,1510.192C9058.202,1509.472 9056.667,1509.111 9054.702,1509.111C9054.482,1509.111 9054.259,1509.115 9054.033,1509.121C9053.807,1509.127 9053.579,1509.136 9053.347,1509.148L9053.347,1506.237C9053.688,1506.273 9053.975,1506.298 9054.207,1506.31C9054.439,1506.322 9054.689,1506.328 9054.958,1506.328C9056.191,1506.328 9057.204,1506.133 9057.998,1505.742C9059.389,1505.059 9060.085,1503.838 9060.085,1502.08C9060.085,1500.774 9059.621,1499.767 9058.693,1499.059C9057.766,1498.351 9056.685,1497.997 9055.452,1497.997C9053.255,1497.997 9051.735,1498.729 9050.893,1500.194C9050.429,1501 9050.167,1502.147 9050.106,1503.637L9046.846,1503.637C9046.846,1501.683 9047.237,1500.023 9048.018,1498.656C9049.361,1496.215 9051.723,1494.994 9055.104,1494.994C9057.778,1494.994 9059.847,1495.589 9061.312,1496.779C9062.777,1497.97 9063.509,1499.694 9063.509,1501.952C9063.509,1503.563 9063.076,1504.87 9062.209,1505.871C9061.672,1506.493 9060.976,1506.981 9060.122,1507.335C9061.501,1507.714 9062.578,1508.443 9063.353,1509.523C9064.129,1510.604 9064.516,1511.925 9064.516,1513.488C9064.516,1515.99 9063.692,1518.029 9062.044,1519.603C9060.396,1521.178 9058.059,1521.965 9055.031,1521.965Z" style="fill:white;fill-rule:nonzero;"/>
47
+ </g>
48
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
49
+ <path d="M9057.686,1611.968L9057.686,1600.084L9049.282,1611.968L9057.686,1611.968ZM9057.741,1621.251L9057.741,1614.843L9046.242,1614.843L9046.242,1611.62L9058.254,1594.957L9061.037,1594.957L9061.037,1611.968L9064.901,1611.968L9064.901,1614.843L9061.037,1614.843L9061.037,1621.251L9057.741,1621.251Z" style="fill:white;fill-rule:nonzero;"/>
50
+ </g>
51
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
52
+ <path d="M8973.439,1712.572C8973.525,1714.098 8973.885,1715.337 8974.52,1716.289C8975.728,1718.071 8977.858,1718.963 8980.91,1718.963C8982.277,1718.963 8983.522,1718.767 8984.646,1718.377C8986.818,1717.62 8987.905,1716.265 8987.905,1714.312C8987.905,1712.847 8987.447,1711.803 8986.531,1711.181C8985.604,1710.57 8984.151,1710.039 8982.174,1709.588L8978.53,1708.764C8976.149,1708.226 8974.465,1707.634 8973.476,1706.987C8971.767,1705.864 8970.913,1704.186 8970.913,1701.952C8970.913,1699.535 8971.749,1697.551 8973.421,1696.001C8975.094,1694.451 8977.462,1693.676 8980.526,1693.676C8983.345,1693.676 8985.741,1694.356 8987.713,1695.717C8989.684,1697.078 8990.67,1699.254 8990.67,1702.245L8987.246,1702.245C8987.063,1700.805 8986.672,1699.7 8986.074,1698.931C8984.963,1697.527 8983.077,1696.825 8980.416,1696.825C8978.267,1696.825 8976.723,1697.277 8975.783,1698.18C8974.843,1699.083 8974.373,1700.133 8974.373,1701.329C8974.373,1702.648 8974.923,1703.612 8976.021,1704.223C8976.741,1704.613 8978.371,1705.101 8980.91,1705.687L8984.682,1706.548C8986.501,1706.963 8987.905,1707.531 8988.894,1708.251C8990.603,1709.508 8991.457,1711.333 8991.457,1713.726C8991.457,1716.704 8990.374,1718.834 8988.207,1720.116C8986.04,1721.398 8983.522,1722.039 8980.654,1722.039C8977.309,1722.039 8974.691,1721.184 8972.799,1719.475C8970.906,1717.778 8969.979,1715.477 8970.015,1712.572L8973.439,1712.572Z" style="fill:white;fill-rule:nonzero;"/>
53
+ </g>
54
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
55
+ <path d="M9009.877,1710.228L9005.794,1698.345L9001.455,1710.228L9009.877,1710.228ZM9003.89,1694.353L9008.01,1694.353L9017.769,1721.251L9013.778,1721.251L9011.049,1713.195L9000.411,1713.195L8997.5,1721.251L8993.764,1721.251L9003.89,1694.353Z" style="fill:white;fill-rule:nonzero;"/>
56
+ </g>
57
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
58
+ <path d="M9021.431,1694.353L9040.09,1694.353L9040.09,1697.649L9025.075,1697.649L9025.075,1705.816L9038.277,1705.816L9038.277,1709.02L9025.075,1709.02L9025.075,1721.251L9021.431,1721.251L9021.431,1694.353Z" style="fill:white;fill-rule:nonzero;"/>
59
+ </g>
60
+ <g transform="matrix(1,0,0,1,1364.105151,-125.950702)">
61
+ <path d="M9044.338,1694.353L9063.948,1694.353L9063.948,1697.649L9047.89,1697.649L9047.89,1705.816L9062.74,1705.816L9062.74,1708.928L9047.89,1708.928L9047.89,1718.047L9064.223,1718.047L9064.223,1721.251L9044.338,1721.251L9044.338,1694.353Z" style="fill:white;fill-rule:nonzero;"/>
62
+ </g>
63
+ </g>
64
+ </svg>
@@ -0,0 +1,6 @@
1
+ export declare const btnRecSvg: string;
2
+ export declare const btnPlaySvg: string;
3
+ export declare const btnPauseSvg: string;
4
+ export declare const btnRewSvg: string;
5
+ export declare const btnFwdSvg: string;
6
+ export declare const btnStopSvg: string;
@@ -0,0 +1,8 @@
1
+ // Inline SVG data URIs for button icons — avoids bundler-dependent ?url imports
2
+ const toDataUri = (svg) => `data:image/svg+xml,${encodeURIComponent(svg)}`;
3
+ export const btnRecSvg = toDataUri(`<svg width="100%" height="100%" viewBox="0 0 34 34" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><defs><filter id="bevel"><feOffset in="SourceAlpha" dx="2.5" dy="2.5" result="a"/><feComposite in="SourceAlpha" in2="a" operator="out" result="b"/><feFlood flood-color="#000" flood-opacity="0.8"/><feComposite in2="b" operator="in" result="s"/><feOffset in="SourceAlpha" dx="-2" dy="-2" result="c"/><feComposite in="SourceAlpha" in2="c" operator="out" result="d"/><feFlood flood-color="#fff" flood-opacity="0.4"/><feComposite in2="d" operator="in" result="h"/><feComposite in="s" in2="SourceGraphic" operator="over" result="r"/><feComposite in="h" in2="r" operator="over"/></filter></defs><g filter="url(#bevel)" transform="matrix(1,0,0,1,-6789,-6966.095848)"><g transform="matrix(1,0,0,1,-0.220472,0)"><g transform="matrix(0.706443,0,0,0.706443,4809.059465,3659.940473)"><circle cx="2827" cy="4704" r="24" fill="#808080"/></g></g></g></svg>`);
4
+ export const btnPlaySvg = toDataUri(`<svg width="100%" height="100%" viewBox="0 0 27 35" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><defs><filter id="bevel"><feOffset in="SourceAlpha" dx="2.5" dy="2.5" result="a"/><feComposite in="SourceAlpha" in2="a" operator="out" result="b"/><feFlood flood-color="#000" flood-opacity="0.8"/><feComposite in2="b" operator="in" result="s"/><feOffset in="SourceAlpha" dx="-2" dy="-2" result="c"/><feComposite in="SourceAlpha" in2="c" operator="out" result="d"/><feFlood flood-color="#fff" flood-opacity="0.4"/><feComposite in2="d" operator="in" result="h"/><feComposite in="s" in2="SourceGraphic" operator="over" result="r"/><feComposite in="h" in2="r" operator="over"/></filter></defs><g filter="url(#bevel)" transform="matrix(1,0,0,1,-6932.417095,-6965.565037)"><g transform="matrix(1,0,0,1,-0.220472,0)"><g transform="matrix(0,0.384296,-0.287166,0,8208.228962,5823.438267)"><path d="M3017.5,4351L3063,4442L2972,4442L3017.5,4351Z" fill="#808080"/></g></g></g></svg>`);
5
+ export const btnPauseSvg = toDataUri(`<svg width="100%" height="100%" viewBox="0 0 31 32" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><defs><filter id="bevel"><feOffset in="SourceAlpha" dx="2.5" dy="2.5" result="a"/><feComposite in="SourceAlpha" in2="a" operator="out" result="b"/><feFlood flood-color="#000" flood-opacity="0.8"/><feComposite in2="b" operator="in" result="s"/><feOffset in="SourceAlpha" dx="-2" dy="-2" result="c"/><feComposite in="SourceAlpha" in2="c" operator="out" result="d"/><feFlood flood-color="#fff" flood-opacity="0.4"/><feComposite in2="d" operator="in" result="h"/><feComposite in="s" in2="SourceGraphic" operator="over" result="r"/><feComposite in="h" in2="r" operator="over"/></filter></defs><g filter="url(#bevel)" transform="matrix(1,0,0,1,-7502.694122,-6966.11235)"><g transform="matrix(0.713692,0,0,0.713692,4998.031255,3628.341326)"><g transform="matrix(0.409091,0,0,1,2243.717876,-8.233124)"><rect x="3094" y="4685" width="44" height="44" fill="#808080"/></g></g><g transform="matrix(0.713692,0,0,0.713692,4998.031255,3628.341326)"><g transform="matrix(0.409091,0,0,1,2268.500379,-8.233124)"><rect x="3094" y="4685" width="44" height="44" fill="#808080"/></g></g></g></svg>`);
6
+ export const btnRewSvg = toDataUri(`<svg width="100%" height="100%" viewBox="0 0 55 35" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><defs><filter id="bevel"><feOffset in="SourceAlpha" dx="2.5" dy="2.5" result="a"/><feComposite in="SourceAlpha" in2="a" operator="out" result="b"/><feFlood flood-color="#000" flood-opacity="0.8"/><feComposite in2="b" operator="in" result="s"/><feOffset in="SourceAlpha" dx="-2" dy="-2" result="c"/><feComposite in="SourceAlpha" in2="c" operator="out" result="d"/><feFlood flood-color="#fff" flood-opacity="0.4"/><feComposite in2="d" operator="in" result="h"/><feComposite in="s" in2="SourceGraphic" operator="over" result="r"/><feComposite in="h" in2="r" operator="over"/></filter></defs><g filter="url(#bevel)" transform="matrix(1,0,0,1,-7088.586366,-6965.565037)"><g transform="matrix(1,0,0,1,-0.220472,0)"><g transform="matrix(0,-0.384296,0.287166,0,5839.347551,8142.662714)"><path d="M3017.5,4351L3063,4442L2972,4442L3017.5,4351Z" fill="#808080"/></g></g><g transform="matrix(1,0,0,1,-0.220472,0)"><g transform="matrix(0,-0.384296,0.287166,0,5867.743668,8142.662714)"><path d="M3017.5,4351L3063,4442L2972,4442L3017.5,4351Z" fill="#808080"/></g></g></g></svg>`);
7
+ export const btnFwdSvg = toDataUri(`<svg width="100%" height="100%" viewBox="0 0 55 35" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><defs><filter id="bevel"><feOffset in="SourceAlpha" dx="2.5" dy="2.5" result="a"/><feComposite in="SourceAlpha" in2="a" operator="out" result="b"/><feFlood flood-color="#000" flood-opacity="0.8"/><feComposite in2="b" operator="in" result="s"/><feOffset in="SourceAlpha" dx="-2" dy="-2" result="c"/><feComposite in="SourceAlpha" in2="c" operator="out" result="d"/><feFlood flood-color="#fff" flood-opacity="0.4"/><feComposite in2="d" operator="in" result="h"/><feComposite in="s" in2="SourceGraphic" operator="over" result="r"/><feComposite in="h" in2="r" operator="over"/></filter></defs><g filter="url(#bevel)" transform="matrix(1,0,0,1,-7227.548381,-6965.565037)"><g transform="matrix(1,0,0,1,-0.220472,0)"><g transform="matrix(-0,0.384296,-0.287166,-0,8531.756364,5823.438267)"><path d="M3017.5,4351L3063,4442L2972,4442L3017.5,4351Z" fill="#808080"/></g></g><g transform="matrix(1,0,0,1,-0.220472,0)"><g transform="matrix(-0,0.384296,-0.287166,-0,8503.360247,5823.438267)"><path d="M3017.5,4351L3063,4442L2972,4442L3017.5,4351Z" fill="#808080"/></g></g></g></svg>`);
8
+ export const btnStopSvg = toDataUri(`<svg width="100%" height="100%" viewBox="0 0 32 32" xmlns="http://www.w3.org/2000/svg" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><defs><filter id="bevel"><feOffset in="SourceAlpha" dx="2.5" dy="2.5" result="a"/><feComposite in="SourceAlpha" in2="a" operator="out" result="b"/><feFlood flood-color="#000" flood-opacity="0.8"/><feComposite in2="b" operator="in" result="s"/><feOffset in="SourceAlpha" dx="-2" dy="-2" result="c"/><feComposite in="SourceAlpha" in2="c" operator="out" result="d"/><feFlood flood-color="#fff" flood-opacity="0.4"/><feComposite in2="d" operator="in" result="h"/><feComposite in="s" in2="SourceGraphic" operator="over" result="r"/><feComposite in="h" in2="r" operator="over"/></filter></defs><g filter="url(#bevel)" transform="matrix(1,0,0,1,-7364.046612,-6966.278729)"><g transform="matrix(1,0,0,1,-0.220472,0)"><g transform="matrix(0.713692,0,0,0.713692,5156.10409,3622.63179)"><rect x="3094" y="4685" width="44" height="44" fill="#808080"/></g></g></g></svg>`);
@@ -0,0 +1,34 @@
1
+ declare module '*.wav?url' {
2
+ const url: string;
3
+ export default url;
4
+ }
5
+
6
+ declare module '*.js?url' {
7
+ const url: string;
8
+ export default url;
9
+ }
10
+
11
+ declare module '*.mp3' {
12
+ const url: string;
13
+ export default url;
14
+ }
15
+
16
+ declare module '*.png' {
17
+ const url: string;
18
+ export default url;
19
+ }
20
+
21
+ declare module '*.jpg' {
22
+ const url: string;
23
+ export default url;
24
+ }
25
+
26
+ declare module '*.svg' {
27
+ const url: string;
28
+ export default url;
29
+ }
30
+
31
+ declare module '*.svg?url' {
32
+ const url: string;
33
+ export default url;
34
+ }
@@ -0,0 +1,4 @@
1
+ import type { AudioEngineConfig } from '../types.js';
2
+ export declare const PLAYBACK_TICK_MS = 50;
3
+ export declare const DEFAULT_CONFIG: AudioEngineConfig;
4
+ export declare const AUDIO_CONSTRAINTS: MediaTrackConstraints;
@@ -0,0 +1,27 @@
1
+ // Default configuration and constraints for the audio engine.
2
+ import workletUrl from '../assets/recorder-worklet.js?url';
3
+ export const PLAYBACK_TICK_MS = 50;
4
+ export const DEFAULT_CONFIG = {
5
+ sampleRate: 48000, // 44100 | 48000 | 96000
6
+ bitDepth: 16, // 8 = lo-fi, 16 = CD quality, 32 = float (uncompressed)
7
+ maxSeconds: 180, // max recording length per track (seconds)
8
+ trackCount: 4, // number of mixer tracks
9
+ workletUrl,
10
+ inputFx: [
11
+ {
12
+ type: 'trim',
13
+ enabled: true,
14
+ default: -1, // initial slider position: -1 (clean) → 1 (full saturation)
15
+ gainMin: 0.2, // gain at slider -1; lower = quieter clean tone (0.1–1.0)
16
+ gainRange: 1, // extra gain added at slider +1; higher = louder boost (0.5–3.0)
17
+ curveBase: 0.8, // waveshaper base curvature; lower = softer onset (0.1–2.0)
18
+ curveRange: 8, // extra curvature at full trim; higher = more aggressive distortion (2–20)
19
+ },
20
+ ],
21
+ };
22
+ export const AUDIO_CONSTRAINTS = {
23
+ echoCancellation: false,
24
+ noiseSuppression: false,
25
+ autoGainControl: false,
26
+ latency: { ideal: 0 },
27
+ };
@@ -0,0 +1,90 @@
1
+ import type { AudioEngineConfig, MicStatus, PlayState } from "../types.js";
2
+ import { Track } from "./track.svelte.js";
3
+ export declare class AudioEngine {
4
+ playState: PlayState;
5
+ micStatus: MicStatus;
6
+ position: number;
7
+ masterVolume: number;
8
+ latencyInfo: string;
9
+ trimValue: number;
10
+ recordingVolume: number;
11
+ tracks: Track[];
12
+ private config;
13
+ private audioContext;
14
+ private masterGainNode;
15
+ private activePlaybackSources;
16
+ private monitoringSources;
17
+ private playbackStartTime;
18
+ private playbackOffset;
19
+ private playbackTickId;
20
+ private recorderWorkletNode;
21
+ private recorderSourceNode;
22
+ private recordedChunks;
23
+ private recordingTrackIndex;
24
+ private recordingLatencySeconds;
25
+ private punchInOffset;
26
+ private timerId;
27
+ private inputGainNode;
28
+ private trimGainNode;
29
+ private waveShaperNode;
30
+ private recVolNode;
31
+ private inputFxNodes;
32
+ private meterRafId;
33
+ private audioContextInitialized;
34
+ constructor(config?: Partial<AudioEngineConfig>);
35
+ /** Lazily creates the AudioContext and wires up channel strips. Requires a user gesture. */
36
+ private ensureContext;
37
+ /** Creates per-track gain, analyser, and panner nodes routed to the master bus. Runs once. */
38
+ private ensureChannelStrips;
39
+ /** Initializes the AudioContext and fetches hidden track audio (e.g. cassette hiss). Idempotent. */
40
+ initAudioContext(): Promise<void>;
41
+ /** Returns the longest track buffer duration in seconds. */
42
+ private getMaxDuration;
43
+ hasContent: boolean;
44
+ get duration(): number;
45
+ /** Jumps the playhead to a position in seconds. Restarts playback if currently playing. */
46
+ seek(seconds: number): void;
47
+ /** Starts playback from the current position. No-op if already playing or recording. */
48
+ play(): Promise<void>;
49
+ /** Schedules all track buffers for playback and starts the position tick timer. */
50
+ private startPlayback;
51
+ /** Pauses playback, preserving the current position for resuming. */
52
+ pause(): void;
53
+ /** Stops playback or recording. If recording, finalizes and merges the recorded audio. */
54
+ stop(): void;
55
+ /** Resets the playhead to the beginning and stops all playback. */
56
+ rewind(): void;
57
+ /** Plays all tracks except the one being recorded, so the musician can hear the mix. */
58
+ private playOtherTracksForMonitoring;
59
+ /** Stops and clears an array of active AudioBufferSourceNodes. */
60
+ private stopSources;
61
+ /** Stops both active playback and monitoring sources, resets playback position. */
62
+ private stopAllPlayback;
63
+ private clearPlaybackTick;
64
+ private clearTimer;
65
+ /** Sets up mic input chain for live monitoring (pass-through to speakers).
66
+ * Can be called independently of recording (e.g. record armed + paused). */
67
+ startMonitoring(trackIndex: number): Promise<void>;
68
+ /** Tears down the mic input chain and releases the microphone. */
69
+ stopMonitoring(): void;
70
+ /** Arms and starts recording on the given track. Reuses monitoring if already active. */
71
+ record(trackIndex: number): Promise<void>;
72
+ /** Stops recording and merges captured audio. Keeps mic monitoring alive. */
73
+ private stopRecording;
74
+ /** Updates the latencyInfo reactive state with a human-readable breakdown. */
75
+ private updateLatencyDisplay;
76
+ setTrackVolume(index: number, value: number): void;
77
+ setTrackPan(index: number, value: number): void;
78
+ setMasterVolume(value: number): void;
79
+ setTrim(value: number): void;
80
+ setRecordingVolume(value: number): void;
81
+ setInputGain(value: number): void;
82
+ private startMeters;
83
+ private stopMeters;
84
+ /** Serializes all tracks and settings into a .4trk binary blob. */
85
+ exportProject(): Blob;
86
+ /** Loads a .4trk file, restoring all track buffers, mixer settings, and master volume. */
87
+ importProject(file: File | Blob): Promise<void>;
88
+ /** Disconnects all audio nodes, closes the AudioContext, and releases media streams. */
89
+ dispose(): void;
90
+ }