mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
linn/linndrum.cpp: Added interactive layout for the LinnDrum. (#13404)
* linn/linndrum.cpp: Added interactive layout for LinnDrum. * linn/linndrum.cpp: Spell tuning correctly.
This commit is contained in:
parent
67d0a1e2d5
commit
6addc09da6
714
src/mame/layout/linn_linndrum.lay
Normal file
714
src/mame/layout/linn_linndrum.lay
Normal file
@ -0,0 +1,714 @@
|
||||
<?xml version="1.0"?>
|
||||
<!--
|
||||
license:CC0-1.0
|
||||
copyright-holders:m1macrophage
|
||||
-->
|
||||
<mamelayout version="2">
|
||||
<element name="txt_bass"><text string="BASS"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_snare"><text string="SNARE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_toms"><text string="TOMS"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_hihat"><text string="HIHAT"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_ride"><text string="RIDE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_crash"><text string="CRASH"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_congas"><text string="CONGAS"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_conga"><text string="CONGA"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_cabasa"><text string="CABASA"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_tambourine"><text string="TAMBOURINE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_percussion"><text string="PERCUSSION"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drums"><text string="DRUMS"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
|
||||
<element name="txt_in"><text string="IN"><color red="0.91" green="0.48" blue="0.33"/></text></element>
|
||||
<element name="txt_out"><text string="OUT"><color red="0.91" green="0.48" blue="0.33"/></text></element>
|
||||
<element name="txt_cassette"><text string="CASSETTE"><color red="0.91" green="0.48" blue="0.33"/></text></element>
|
||||
<element name="txt_sync"><text string="SYNC"><color red="0.91" green="0.48" blue="0.33"/></text></element>
|
||||
<element name="txt_trigger"><text string="TRIGGER"><color red="0.91" green="0.48" blue="0.33"/></text></element>
|
||||
<element name="txt_output"><text string="OUTPUT"><color red="0.91" green="0.48" blue="0.33"/></text></element>
|
||||
<element name="txt_remote"><text string="REMOTE"><color red="0.91" green="0.48" blue="0.33"/></text></element>
|
||||
<element name="txt_play"><text string="PLAY/STOP"><color red="0.91" green="0.48" blue="0.33"/></text></element>
|
||||
<element name="txt_trigger_inputs"><text string="TRIGGER INPUTS"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_load"><text string="LOAD"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_verify"><text string="VERIFY"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_store"><text string="STORE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_tempo"><text string="TEMPO"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_bpm"><text string="BPM/TRIGGER"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_volume"><text string="VOLUME"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_ext_sync"><text string="EXT. SYNC"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
|
||||
<element name="txt_drum_top_1"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_top_2"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_top_3"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_top_4"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_top_5"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_top_6"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_top_7"><text string="COWBELL"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_top_8"><text string="CLAPS"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_middle_1"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_middle_2"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_middle_3"><text string="OPEN"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_middle_4"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_middle_5"><text string="MID"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_middle_6"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_middle_7"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_middle_8"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_bottom_1"><text string="SIDESTICK"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_bottom_2"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_bottom_3"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_bottom_4"><text string="3"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_bottom_5"><text string="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_bottom_6"><text string="2"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_bottom_7"><text string=""><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_drum_bottom_8"><text string=""><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
|
||||
<element name="txt_tuning"><text string="TUNING"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_decay"><text string="DECAY"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_tune_1"><text string=""><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_tune_2"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_tune_3"><text string="MID"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_tune_4"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_tune_5"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_tune_6"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_tune_7"><text string="HIHAT"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
|
||||
<element name="txt_mixer"><text string="MIXER"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_left_1"><text string="LEFT" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_right_1"><text string="RIGHT" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_left_2"><text string="LEFT" align="2"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_right_2"><text string="RIGHT" align="2"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_1"><text string="BASS"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_2"><text string="SNARE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_3"><text string="SIDESTICK"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_4"><text string="HIHAT"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_5"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_6"><text string="MID"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_7"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_8"><text string="RIDE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_9"><text string="CRASH"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_10"><text string="CABASA"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_11"><text string="TAMB"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_12"><text string="HI"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_13"><text string="LO"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_14"><text string="COWBELL"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_15"><text string="CLAPS"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_slider_16"><text string="CLICK"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
|
||||
<element name="txt_create">
|
||||
<text string="CREATE RHYTHM PATTERN / SONG"><color red="0.82" green="0.43" blue="0.31"/></text>
|
||||
</element>
|
||||
<element name="txt_select">
|
||||
<text string="SELECT RHYTHM PATTERN"><color red="0.82" green="0.43" blue="0.31"/></text>
|
||||
</element>
|
||||
<element name="txt_song"><text string="SONG"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_pattern"><text string="PATTERN"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_step"><text string="STEP 0/% MEM"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_pattern_num"><text string="PATTERN#"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_correct"><text string="CORRECT"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_timing"><text string="TIMING"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_straight"><text string="STRAIGHT"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_shuffle"><text string="SHUFFLE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_top_1"><text string="SONG#"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_top_2"><text string="END"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_top_3"><text string="DELETE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_top_4"><text string="INSERT"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_top_5"><text string="<-----"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_top_6"><text string="----->"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_top_7"><text string="ENTER"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_middle_1"><text string="ERROR"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_middle_2"><text string="BEFORE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_middle_3"><text string="AFTER"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_middle_4"><text string="COPY"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_middle_5"><text string="LENGTH"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_middle_6"><text string="ERASE"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_create_middle_7"><text string="RECORD"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_top_1"><text string="" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_top_2"><text string="A" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_top_3"><text string="B" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_top_4"><text string="C" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_top_5"><text string="D" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_top_6"><text string="E" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_top_7"><text string="F" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_bottom_1"><text string="1/8" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_bottom_2"><text string="1/8T" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_bottom_3"><text string="1/16" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_bottom_4"><text string="1/16T" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_bottom_5"><text string="1/32" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_bottom_6"><text string="1/32T" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
<element name="txt_led_bottom_7"><text string="HI" align="1"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
|
||||
<repeat count="7">
|
||||
<param name="i" start="1" increment="1"/>
|
||||
<element name="txt_~i~"><text string="~i~"><color red="0.82" green="0.43" blue="0.31"/></text></element>
|
||||
</repeat>
|
||||
|
||||
<element name="wood"><rect><color red="0.66" green="0.48" blue="0.37"/></rect></element>
|
||||
<element name="case"><rect><color red="0.12" green="0.10" blue="0.12"/></rect></element>
|
||||
<element name="line"><rect><color red="0.82" green="0.43" blue="0.31"/></rect></element>
|
||||
<element name="dark_line"><rect><color red="0.61" green="0.34" blue="0.27"/></rect></element>
|
||||
<element name="screw"><rect><color red="0.19" green="0.18" blue="0.18"/></rect></element>
|
||||
<element name="jack"><rect><color red="0.35" green="0.35" blue="0.36"/></rect></element>
|
||||
|
||||
<element name="outline_cassette_tempo">
|
||||
<image><data><![CDATA[
|
||||
<rect stroke="#f28367" fill="none" stroke-width="3" width="124" height="400" rx="16" ry="16"/>
|
||||
]]></data></image>
|
||||
</element>
|
||||
<element name="outline_create">
|
||||
<image><data><![CDATA[
|
||||
<rect stroke="#f28367" fill="none" stroke-width="3" width="706" height="400" rx="16" ry="16"/>
|
||||
]]></data></image>
|
||||
</element>
|
||||
<element name="outline_drumpads">
|
||||
<image><data><![CDATA[
|
||||
<rect stroke="#f28367" fill="none" stroke-width="3" width="838" height="273" rx="16" ry="16"/>
|
||||
]]></data></image>
|
||||
</element>
|
||||
<element name="outline_play">
|
||||
<image><data><![CDATA[
|
||||
<rect stroke="#f28367" fill="none" stroke-width="3" width="124" height="273" rx="16" ry="16"/>
|
||||
]]></data></image>
|
||||
</element>
|
||||
<element name="outline_tuning">
|
||||
<image><data><![CDATA[
|
||||
<rect stroke="#f28367" fill="none" stroke-width="3" width="783" height="195" rx="16" ry="16"/>
|
||||
]]></data></image>
|
||||
</element>
|
||||
<element name="outline_volume">
|
||||
<image><data><![CDATA[
|
||||
<rect stroke="#f28367" fill="none" stroke-width="3" width="125" height="195" rx="16" ry="16"/>
|
||||
]]></data></image>
|
||||
</element>
|
||||
<element name="outline_mixer">
|
||||
<image><data><![CDATA[
|
||||
<rect stroke="#f28367" fill="none" stroke-width="3" width="916" height="479" rx="16" ry="16"/>
|
||||
]]></data></image>
|
||||
</element>
|
||||
|
||||
<group name="button_group_top">
|
||||
<element ref="line"><bounds x="0" y="0" width="~line_width~" height="2"/></element>
|
||||
<element ref="line"><bounds x="0" y="0" width="2" height="17"/></element>
|
||||
<element ref="line"><bounds x="~line_width~" y="0" width="2" height="17"/></element>
|
||||
</group>
|
||||
<group name="button_group_bottom">
|
||||
<element ref="line"><bounds x="0" y="15" width="~line_width~" height="2"/></element>
|
||||
<element ref="line"><bounds x="0" y="0" width="2" height="17"/></element>
|
||||
<element ref="line"><bounds x="~line_width~" y="0" width="2" height="17"/></element>
|
||||
</group>
|
||||
|
||||
<element name="led">
|
||||
<disk state="0"><color red="0.28" green="0.06" blue="0.10"/></disk>
|
||||
<disk state="1"><color red="0.81" green="0.21" blue="0.18"/></disk>
|
||||
</element>
|
||||
|
||||
<element name="button">
|
||||
<rect>
|
||||
<bounds x="0" y="0" width="80" height="76"/>
|
||||
<color red="0.06" green="0.04" blue="0.06"/>
|
||||
</rect>
|
||||
<rect>
|
||||
<bounds x="5" y="4" width="70" height="68"/>
|
||||
<color red="0.17" green="0.16" blue="0.17"/>
|
||||
</rect>
|
||||
<rect state="0">
|
||||
<bounds x="12" y="12" width="56" height="52"/>
|
||||
<color red="0.11" green="0.11" blue="0.13"/>
|
||||
</rect>
|
||||
<rect state="1">
|
||||
<bounds x="12" y="12" width="56" height="52"/>
|
||||
<color red="0.31" green="0.31" blue="0.33"/>
|
||||
</rect>
|
||||
</element>
|
||||
|
||||
<element name="knob_outer"><disk><color red="0.17" green="0.16" blue="0.18"/></disk></element>
|
||||
<element name="knob_inner"><disk><color red="0.23" green="0.22" blue="0.24"/></disk></element>
|
||||
<element name="knob_value_background"><rect><color red="0.0" green="0.0" blue="0.0" alpha="0.0"/></rect></element>
|
||||
<element name="knob_value">
|
||||
<simplecounter maxstate="100" digits="1"><color red="1.0" green="0.5" blue="0.2"/></simplecounter>
|
||||
</element>
|
||||
<group name="knob">
|
||||
<element ref="knob_outer"><bounds x="0" y="0" width="68" height="68"/></element>
|
||||
<element ref="knob_inner"><bounds x="9" y="9" width="50" height="50"/></element>
|
||||
<element ref="knob_value_background" clickthrough="no">
|
||||
<bounds x="17" y="22" width="34" height="24"/>
|
||||
</element>
|
||||
<element ref="knob_value" inputtag="~knob_input~" inputmask="0x7f" inputraw="yes">
|
||||
<bounds x="17" y="22" width="34" height="24"/>
|
||||
</element>
|
||||
</group>
|
||||
|
||||
<element name="slider_area"><rect><color red="0.0" blue="0.0" green="0.0" alpha="0.0"/></rect></element>
|
||||
<element name="slider_well"><rect><color red="0.05" blue="0.04" green="0.06"/></rect></element>
|
||||
<element name="slider_knob"><rect><color red="0.27" blue="0.27" green="0.27"/></rect></element>
|
||||
<group name="slider">
|
||||
<element ref="slider_area" id="slider_~slider_input~">
|
||||
<bounds x="0" y="0" width="32" height="~slider_height~"/>
|
||||
</element>
|
||||
<element ref="slider_well"><bounds x="8" y="0" width="16" height="~slider_height~"/></element>
|
||||
<element ref="slider_knob" id="slider_knob_~slider_input~">>
|
||||
<animate inputtag="~slider_input~" inputmask="0x7f"/>
|
||||
<bounds state="100" x="10" y="0" width="12" height="28"/>
|
||||
<bounds state="0" x="10" y="~slider_knob_max_y~" width="12" height="28"/>
|
||||
</element>
|
||||
</group>
|
||||
|
||||
<element name="display_background"><rect><color red="0.06" blue="0.01" green="0.05"/></rect></element>
|
||||
<element name="display_digit"><led7seg><color red="0.81" blue="0.21" green="0.18"/></led7seg></element>
|
||||
<group name="display">
|
||||
<element ref="display_background"><bounds x="0" y="0" width="80" height="46"/></element>
|
||||
<element ref="display_digit" name="~display_output~0"><bounds x="6" y="5" width="30" height="38"/></element>
|
||||
<element ref="display_digit" name="~display_output~1"><bounds x="44" y="5" width="30" height="38"/></element>
|
||||
</group>
|
||||
|
||||
<view name="Default Layout">
|
||||
<bounds x="53" y="49" width="2113" height="1112"/>
|
||||
|
||||
<!-- Case -->
|
||||
<element ref="screw"><bounds x="420" y="1145" width="29" height="13"/></element>
|
||||
<element ref="screw"><bounds x="1780" y="1145" width="29" height="13"/></element>
|
||||
<element ref="case"><bounds x="127" y="70" width="1965" height="1080"/></element>
|
||||
<element ref="wood"><bounds x="55" y="50" width="72" height="1104"/></element>
|
||||
<element ref="wood"><bounds x="2092" y="50" width="72" height="1104"/></element>
|
||||
<element ref="dark_line"><bounds x="160" y="283" width="1897" height="3"/></element>
|
||||
<element ref="dark_line"><bounds x="160" y="321" width="1897" height="3"/></element>
|
||||
|
||||
<!-- I/O -->
|
||||
<element ref="jack"><bounds x="655" y="64" width="18" height="6"/></element>
|
||||
<element ref="txt_cassette"><bounds x="855" y="99" width="68" height="17"/></element>
|
||||
<element ref="txt_in"><bounds x="847" y="76" width="20" height="17"/></element>
|
||||
<element ref="jack"><bounds x="842" y="64" width="37" height="6"/></element>
|
||||
<element ref="txt_out"><bounds x="903" y="76" width="31" height="17"/></element>
|
||||
<element ref="jack"><bounds x="904" y="64" width="37" height="6"/></element>
|
||||
<element ref="txt_sync"><bounds x="1005" y="99" width="42" height="17"/></element>
|
||||
<element ref="txt_in"><bounds x="985" y="76" width="20" height="17"/></element>
|
||||
<element ref="jack"><bounds x="980" y="64" width="37" height="6"/></element>
|
||||
<element ref="txt_out"><bounds x="1042" y="76" width="31" height="17"/></element>
|
||||
<element ref="jack"><bounds x="1042" y="64" width="37" height="6"/></element>
|
||||
<element ref="txt_trigger"><bounds x="1104" y="76" width="62" height="17"/></element>
|
||||
<element ref="txt_output"><bounds x="1104" y="99" width="62" height="17"/></element>
|
||||
<element ref="jack"><bounds x="1117" y="64" width="37" height="6"/></element>
|
||||
<element ref="txt_remote"><bounds x="1177" y="76" width="62" height="17"/></element>
|
||||
<element ref="txt_play"><bounds x="1173" y="99" width="73" height="17"/></element>
|
||||
<element ref="jack"><bounds x="1193" y="64" width="37" height="6"/></element>
|
||||
<element ref="line"><bounds x="1265" y="107" width="155" height="2"/></element>
|
||||
<element ref="line"><bounds x="1539" y="107" width="155" height="2"/></element>
|
||||
<element ref="txt_trigger_inputs"><bounds x="1426" y="99" width="105" height="17"/></element>
|
||||
<repeat count="5">
|
||||
<param name="i" start="1" increment="1"/>
|
||||
<param name="x" start="1275" increment="94"/>
|
||||
<element ref="txt_~i~"><bounds x="~x~" y="76" width="37" height="17"/></element>
|
||||
<element ref="jack"><bounds x="~x~" y="64" width="37" height="6"/></element>
|
||||
</repeat>
|
||||
|
||||
<!-- CASSETTE -->
|
||||
<element ref="outline_cassette_tempo"><bounds x="163" y="425" width="124" height="400"/></element>
|
||||
<element ref="txt_cassette"><bounds x="166" y="435" width="118" height="24"/></element>
|
||||
<element ref="button" inputtag="keyboard_col_2" inputmask="0x08">
|
||||
<bounds x="185" y="487" width="80" height="76"/>
|
||||
</element>
|
||||
<element ref="txt_store"><bounds x="166" y="564" width="118" height="17"/></element>
|
||||
<element ref="led" name="led_store"><bounds x="213" y="586" width="24" height="24"/></element>
|
||||
<element ref="line"><bounds x="224" y="612" width="2" height="20"/></element>
|
||||
<element ref="txt_verify"><bounds x="166" y="633" width="118" height="17"/></element>
|
||||
<element ref="line"><bounds x="224" y="651" width="2" height="20"/></element>
|
||||
<element ref="led" name="led_load"><bounds x="213" y="673" width="24" height="24"/></element>
|
||||
<element ref="txt_load"><bounds x="166" y="703" width="118" height="17"/></element>
|
||||
<element ref="button" inputtag="keyboard_col_2" inputmask="0x10">
|
||||
<bounds x="185" y="720" width="80" height="76"/>
|
||||
</element>
|
||||
|
||||
<!-- CREATE RHYTHM PATTERN / SONG -->
|
||||
|
||||
<element ref="outline_create"><bounds x="295" y="425" width="706" height="400"/></element>
|
||||
<element ref="txt_create"><bounds x="463" y="435" width="355" height="24"/></element>
|
||||
<element ref="line"><bounds x="311" y="445" width="150" height="2"/></element>
|
||||
<element ref="line"><bounds x="819" y="445" width="165" height="2"/></element>
|
||||
|
||||
<element ref="txt_song"><bounds x="311" y="467" width="80" height="17"/></element>
|
||||
<element ref="led" name="led_song"><bounds x="398" y="462" width="24" height="24"/></element>
|
||||
<element ref="button" inputtag="keyboard_col_1" inputmask="0x02">
|
||||
<bounds x="311" y="487" width="80" height="76"/>
|
||||
</element>
|
||||
<element ref="txt_pattern"><bounds x="311" y="564" width="80" height="17"/></element>
|
||||
<element ref="led" name="led_pattern"><bounds x="398" y="565" width="24" height="24"/></element>
|
||||
|
||||
<param name="display_output" value="display_step_"/>
|
||||
<group ref="display"><bounds x="314" y="623" width="80" height="46"/></group>
|
||||
<element ref="txt_pattern"><bounds x="309" y="786" width="90" height="17"/></element>
|
||||
<param name="display_output" value="display_pattern_"/>
|
||||
<group ref="display"><bounds x="314" y="737" width="80" height="46"/></group>
|
||||
<element ref="txt_step"><bounds x="309" y="672" width="90" height="17"/></element>
|
||||
|
||||
<!-- Text labels for buttons and LEDs. -->
|
||||
<repeat count="7">
|
||||
<param name="i" start="1" increment="1"/>
|
||||
<param name="x" start="428" increment="80"/>
|
||||
<element ref="txt_create_top_~i~"><bounds x="~x~" y="467" width="80" height="17"/></element>
|
||||
<element ref="txt_create_middle_~i~"><bounds x="~x~" y="564" width="80" height="17"/></element>
|
||||
<element ref="txt_~i~"><bounds x="~x~" y="700" width="80" height="17"/></element>
|
||||
<param name="led_txt_x" start="483" increment="80"/>
|
||||
<element ref="txt_led_top_~i~"><bounds x="~led_txt_x~" y="628" width="40" height="17"/></element>
|
||||
<element ref="txt_led_bottom_~i~"><bounds x="~led_txt_x~" y="665" width="40" height="17"/></element>
|
||||
</repeat>
|
||||
|
||||
<!-- Top row of buttons. -->
|
||||
<repeat count="4">
|
||||
<param name="x" start="428" increment="80"/>
|
||||
<param name="input_mask" start="0x04" lshift="1"/>
|
||||
<element ref="button" inputtag="keyboard_col_1" inputmask="~input_mask~">
|
||||
<bounds x="~x~" y="487" width="80" height="76"/>
|
||||
</element>
|
||||
</repeat>
|
||||
<repeat count="3">
|
||||
<param name="x" start="748" increment="80"/>
|
||||
<param name="input_mask" start="0x01" lshift="1"/>
|
||||
<element ref="button" inputtag="keyboard_col_2" inputmask="~input_mask~">
|
||||
<bounds x="~x~" y="487" width="80" height="76"/>
|
||||
</element>
|
||||
</repeat>
|
||||
|
||||
<!-- Top row of LEDs. -->
|
||||
<element ref="led" name="led_a"><bounds x="536" y="625" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_b"><bounds x="616" y="625" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_c"><bounds x="696" y="625" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_d"><bounds x="776" y="625" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_e"><bounds x="856" y="625" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_f"><bounds x="936" y="625" width="24" height="24"/></element>
|
||||
|
||||
<!-- Bottom row of LEDs. -->
|
||||
<element ref="led" name="led_1_8"><bounds x="456" y="662" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_1_8_t"><bounds x="536" y="662" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_1_16"><bounds x="616" y="662" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_1_16_t"><bounds x="696" y="662" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_1_32"><bounds x="776" y="662" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_1_32_t"><bounds x="856" y="662" width="24" height="24"/></element>
|
||||
<element ref="led" name="led_hi"><bounds x="936" y="662" width="24" height="24"/></element>
|
||||
|
||||
<!-- Bottom row of buttons. -->
|
||||
<repeat count="6">
|
||||
<param name="x" start="428" increment="80"/>
|
||||
<param name="input_mask" start="0x01" lshift="1"/>
|
||||
<element ref="button" inputtag="keyboard_col_0" inputmask="~input_mask~">
|
||||
<bounds x="~x~" y="720" width="80" height="76"/>
|
||||
</element>
|
||||
</repeat>
|
||||
<element ref="button" inputtag="keyboard_col_1" inputmask="0x01">
|
||||
<bounds x="908" y="720" width="80" height="76"/>
|
||||
</element>
|
||||
|
||||
<element ref="txt_correct"><bounds x="428" y="588" width="80" height="17"/></element>
|
||||
<element ref="txt_timing"><bounds x="559" y="588" width="52" height="17"/></element>
|
||||
<element ref="line"><bounds x="518" y="595" width="40" height="2"/></element>
|
||||
<element ref="line"><bounds x="613" y="595" width="40" height="2"/></element>
|
||||
|
||||
<element ref="txt_straight"><bounds x="508" y="606" width="80" height="17"/></element>
|
||||
<element ref="txt_shuffle"><bounds x="908" y="606" width="80" height="17"/></element>
|
||||
<element ref="line"><bounds x="593" y="613" width="310" height="2"/></element>
|
||||
|
||||
<element ref="line"><bounds x="428" y="564" width="2" height="134"/></element>
|
||||
<element ref="line"><bounds x="508" y="564" width="2" height="90"/></element>
|
||||
<element ref="line"><bounds x="668" y="564" width="2" height="35"/></element>
|
||||
<element ref="line"><bounds x="668" y="597" width="320" height="2"/></element>
|
||||
<element ref="line"><bounds x="508" y="652" width="480" height="2"/></element>
|
||||
<element ref="line"><bounds x="428" y="696" width="560" height="2"/></element>
|
||||
<element ref="line"><bounds x="986" y="597" width="2" height="99"/></element>
|
||||
|
||||
<element ref="txt_select"><bounds x="616" y="798" width="168" height="17"/></element>
|
||||
<element ref="line"><bounds x="431" y="805" width="183" height="2"/></element>
|
||||
<element ref="line"><bounds x="787" y="805" width="183" height="2"/></element>
|
||||
|
||||
<!-- Drum pads -->
|
||||
|
||||
<element ref="outline_drumpads"><bounds x="163" y="833" width="838" height="273"/></element>
|
||||
<element ref="led" name="led_percussion"><bounds x="955" y="851" width="24" height="24"/></element>
|
||||
<element ref="line"><bounds x="966" y="877" width="2" height="150"/></element>
|
||||
<element ref="line"><bounds x="940" y="1027" width="26" height="2"/></element>
|
||||
|
||||
<!-- Text for all drum pads. -->
|
||||
<repeat count="8">
|
||||
<param name="i" start="1" increment="1"/>
|
||||
<param name="x" start="187" increment="96"/>
|
||||
<element ref="txt_drum_top_~i~"><bounds x="~x~" y="861" width="80" height="17"/></element>
|
||||
<element ref="txt_drum_middle_~i~"><bounds x="~x~" y="957" width="80" height="17"/></element>
|
||||
<element ref="txt_drum_bottom_~i~"><bounds x="~x~" y="1070" width="80" height="17"/></element>
|
||||
</repeat>
|
||||
|
||||
<!-- Top row of drum pads. -->
|
||||
<repeat count="3">
|
||||
<param name="x" start="187" increment="96"/>
|
||||
<param name="input_mask" start="0x08" lshift="1"/>
|
||||
<element ref="button" inputtag="keyboard_col_4" inputmask="~input_mask~">
|
||||
<bounds x="~x~" y="878" width="80" height="76"/>
|
||||
</element>
|
||||
</repeat>
|
||||
<repeat count="5">
|
||||
<param name="x" start="475" increment="96"/>
|
||||
<param name="input_mask" start="0x01" lshift="1"/>
|
||||
<element ref="button" inputtag="keyboard_col_5" inputmask="~input_mask~">
|
||||
<bounds x="~x~" y="878" width="80" height="76"/>
|
||||
</element>
|
||||
</repeat>
|
||||
|
||||
<!-- Bottom row of drum pads. -->
|
||||
<repeat count="5">
|
||||
<param name="x" start="187" increment="96"/>
|
||||
<param name="input_mask" start="0x02" lshift="1"/>
|
||||
<element ref="button" inputtag="keyboard_col_3" inputmask="~input_mask~">
|
||||
<bounds x="~x~" y="991" width="80" height="76"/>
|
||||
</element>
|
||||
</repeat>
|
||||
<repeat count="3">
|
||||
<param name="x" start="667" increment="96"/>
|
||||
<param name="input_mask" start="0x01" lshift="1"/>
|
||||
<element ref="button" inputtag="keyboard_col_4" inputmask="~input_mask~">
|
||||
<bounds x="~x~" y="991" width="80" height="76"/>
|
||||
</element>
|
||||
</repeat>
|
||||
|
||||
<param name="line_width" value="176"/>
|
||||
<group ref="button_group_top"><bounds x="187" y="854" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="251" y="848" width="53" height="17"/></element>
|
||||
<element ref="txt_cabasa"><bounds x="251" y="848" width="53" height="17"/></element>
|
||||
<group ref="button_group_top"><bounds x="379" y="854" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="422" y="848" width="89" height="17"/></element>
|
||||
<element ref="txt_tambourine"><bounds x="422" y="848" width="89" height="17"/></element>
|
||||
<group ref="button_group_top"><bounds x="571" y="854" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="635" y="848" width="54" height="17"/></element>
|
||||
<element ref="txt_conga"><bounds x="635" y="848" width="54" height="17"/></element>
|
||||
|
||||
<param name="line_width" value="272"/>
|
||||
<group ref="button_group_bottom"><bounds x="187" y="963" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="254" y="970" width="46" height="17"/></element>
|
||||
<element ref="txt_hihat"><bounds x="254" y="970" width="46" height="17"/></element>
|
||||
<group ref="button_group_bottom"><bounds x="475" y="963" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="543" y="970" width="43" height="17"/></element>
|
||||
<element ref="txt_toms"><bounds x="543" y="970" width="43" height="17"/></element>
|
||||
<param name="line_width" value="176"/>
|
||||
<group ref="button_group_bottom"><bounds x="763" y="963" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="834" y="970" width="37" height="17"/></element>
|
||||
<element ref="txt_ride"><bounds x="834" y="970" width="37" height="17"/></element>
|
||||
|
||||
<param name="line_width" value="368"/>
|
||||
<group ref="button_group_bottom"><bounds x="187" y="1073" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="349" y="1080" width="50" height="17"/></element>
|
||||
<element ref="txt_snare"><bounds x="349" y="1080" width="50" height="17"/></element>
|
||||
<param name="line_width" value="176"/>
|
||||
<group ref="button_group_bottom"><bounds x="571" y="1073" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="641" y="1080" width="40" height="17"/></element>
|
||||
<element ref="txt_bass"><bounds x="641" y="1080" width="40" height="17"/></element>
|
||||
<element ref="txt_crash"><bounds x="780" y="1080" width="50" height="17"/></element>
|
||||
<element ref="txt_percussion"><bounds x="860" y="1080" width="80" height="17"/></element>
|
||||
|
||||
<!-- TEMPO -->
|
||||
<element ref="outline_cassette_tempo"><bounds x="1007" y="425" width="124" height="400"/></element>
|
||||
<element ref="txt_tempo"><bounds x="1010" y="435" width="118" height="24"/></element>
|
||||
<param name="knob_input" value="pot_tempo"/>
|
||||
<group ref="knob"><bounds x="1037" y="488" width="68" height="68"/></group>
|
||||
<element ref="button" inputtag="keyboard_col_3" inputmask="0x01">
|
||||
<bounds x="1029" y="577" width="80" height="76"/>
|
||||
</element>
|
||||
<element ref="txt_bpm"><bounds x="1010" y="657" width="118" height="17"/></element>
|
||||
<element ref="led" name="led_ext_sync"><bounds x="1057" y="686" width="24" height="24"/></element>
|
||||
<element ref="button" inputtag="keyboard_col_2" inputmask="0x20">
|
||||
<bounds x="1029" y="720" width="80" height="76"/>
|
||||
</element>
|
||||
<element ref="txt_ext_sync"><bounds x="1010" y="798" width="118" height="17"/></element>
|
||||
|
||||
<!-- PLAY/STOP -->
|
||||
<element ref="outline_play"><bounds x="1007" y="833" width="124" height="273"/></element>
|
||||
<element ref="led" name="led_play_stop"><bounds x="1057" y="899" width="24" height="24"/></element>
|
||||
<element ref="line"><bounds x="1067" y="925" width="2" height="62"/></element>
|
||||
<element ref="button" inputtag="play_stop" inputmask="0x01">
|
||||
<bounds x="1029" y="988" width="80" height="76"/>
|
||||
</element>
|
||||
<element ref="txt_play"><bounds x="1012" y="1068" width="114" height="24"/></element>
|
||||
|
||||
<!-- TUNING -->
|
||||
<element ref="outline_tuning"><bounds x="1138" y="425" width="783" height="195"/></element>
|
||||
<element ref="txt_tuning"><bounds x="1473" y="435" width="118" height="24"/></element>
|
||||
<element ref="line"><bounds x="1183" y="445" width="295" height="2"/></element>
|
||||
<element ref="line"><bounds x="1590" y="445" width="295" height="2"/></element>
|
||||
<repeat count="7">
|
||||
<param name="i" start="1" increment="1"/>
|
||||
<param name="x" start="1183" increment="106"/>
|
||||
<param name="knob_input" value="pot_tuning_~i~"/>
|
||||
<group ref="knob"><bounds x="~x~" y="495" width="54" height="54"/></group>
|
||||
<element ref="txt_tune_~i~"><bounds x="~x~" y="560" width="54" height="17"/></element>
|
||||
</repeat>
|
||||
<element ref="txt_snare"><bounds x="1183" y="582" width="54" height="17"/></element>
|
||||
<element ref="txt_toms"><bounds x="1395" y="582" width="54" height="17"/></element>
|
||||
<element ref="line"><bounds x="1286" y="590" width="108" height="2"/></element>
|
||||
<element ref="line"><bounds x="1450" y="590" width="108" height="2"/></element>
|
||||
<element ref="txt_congas"><bounds x="1661" y="582" width="54" height="17"/></element>
|
||||
<element ref="line"><bounds x="1604" y="590" width="50" height="2"/></element>
|
||||
<element ref="line"><bounds x="1720" y="590" width="50" height="2"/></element>
|
||||
<element ref="txt_decay"><bounds x="1819" y="582" width="54" height="17"/></element>
|
||||
|
||||
<!-- VOLUME -->
|
||||
<element ref="outline_volume"><bounds x="1929" y="425" width="125" height="195"/></element>
|
||||
<element ref="txt_volume"><bounds x="1933" y="435" width="118" height="24"/></element>
|
||||
<param name="knob_input" value="pot_volume"/>
|
||||
<group ref="knob"><bounds x="1960" y="488" width="68" height="68"/></group>
|
||||
|
||||
<!-- MIXER -->
|
||||
|
||||
<element ref="outline_mixer"><bounds x="1138" y="627" width="916" height="479"/></element>
|
||||
<element ref="txt_mixer"><bounds x="1560" y="1067" width="75" height="24"/></element>
|
||||
<element ref="line"><bounds x="1200" y="1079" width="355" height="2"/></element>
|
||||
<element ref="line"><bounds x="1640" y="1079" width="355" height="2"/></element>
|
||||
|
||||
<param name="line_width" value="150"/>
|
||||
<group ref="button_group_top"><bounds x="1390" y="790" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="1442" y="783" width="46" height="17"/></element>
|
||||
<element ref="txt_toms"><bounds x="1442" y="783" width="46" height="17"/></element>
|
||||
<param name="line_width" value="98"/>
|
||||
<group ref="button_group_top"><bounds x="1752" y="790" width="~line_width~" height="17"/></group>
|
||||
<element ref="case"><bounds x="1775" y="783" width="55" height="17"/></element>
|
||||
<element ref="txt_congas"><bounds x="1775" y="783" width="55" height="17"/></element>
|
||||
|
||||
<element ref="txt_drums"><bounds x="1386" y="836" width="49" height="17"/></element>
|
||||
<element ref="line"><bounds x="1180" y="844" width="201" height="2"/></element>
|
||||
<element ref="line"><bounds x="1440" y="844" width="201" height="2"/></element>
|
||||
<element ref="txt_percussion"><bounds x="1767" y="836" width="79" height="17"/></element>
|
||||
<element ref="line"><bounds x="1653" y="844" width="108" height="2"/></element>
|
||||
<element ref="line"><bounds x="1850" y="844" width="100" height="2"/></element>
|
||||
|
||||
<repeat count="16">
|
||||
<param name="i" start="1" increment="1"/>
|
||||
<param name="slider_x" start="1188" increment="52"/>
|
||||
<param name="txt_x" start="1181" increment="52"/>
|
||||
<param name="slider_height" value="96"/>
|
||||
<param name="slider_knob_max_y" value="68"/>
|
||||
<param name="slider_input" value="pot_pan_~i~"/>
|
||||
<group ref="slider"><bounds x="~slider_x~" y="665" width="32" height="~slider_height~"/></group>
|
||||
<element ref="txt_slider_~i~"><bounds x="~txt_x~" y="809" width="46" height="17"/></element>
|
||||
<param name="slider_height" value="186"/>
|
||||
<param name="slider_knob_max_y" value="158"/>
|
||||
<param name="slider_input" value="pot_gain_~i~"/>
|
||||
<group ref="slider"><bounds x="~slider_x~" y="867" width="32" height="~slider_height~"/></group>
|
||||
</repeat>
|
||||
|
||||
<element ref="txt_left_2"><bounds x="1148" y="671" width="40" height="17"/></element>
|
||||
<element ref="txt_right_2"><bounds x="1148" y="738" width="40" height="17"/></element>
|
||||
<element ref="txt_left_1"><bounds x="2006" y="671" width="40" height="17"/></element>
|
||||
<element ref="txt_right_1"><bounds x="2006" y="738" width="40" height="17"/></element>
|
||||
</view>
|
||||
|
||||
<script><![CDATA[
|
||||
file:set_resolve_tags_callback(
|
||||
function()
|
||||
local id_port_index <const> = string.len("slider_knob_") + 1
|
||||
|
||||
-- State used by pointer handlers.
|
||||
local sliders = {} -- Info about all sliders (constant after initialization).
|
||||
local pointers = {} -- Pointer tracking state.
|
||||
|
||||
-- Gather relevant elements and inputs into `sliders`.
|
||||
local view = file.views["Default Layout"]
|
||||
for i = 1, #view.items do
|
||||
local item = view.items:at(i)
|
||||
if item.id ~= nil and string.find(item.id, "slider_knob_") == 1 then
|
||||
local slider_id = string.sub(item.id, id_port_index)
|
||||
|
||||
local port = file.device:ioport(slider_id)
|
||||
local field = nil
|
||||
if port ~= nil then
|
||||
for k, val in pairs(port.fields) do
|
||||
field = val
|
||||
break
|
||||
end
|
||||
if field == nil then
|
||||
print("LAYOUT ERROR - Port does not have a field: " .. slider_id)
|
||||
end
|
||||
else
|
||||
print("LAYOUT ERROR - Port not found: " .. slider_id)
|
||||
end
|
||||
|
||||
local slider = view.items["slider_" .. slider_id]
|
||||
if slider == nil then
|
||||
print("LAYOUT ERROR - Element: 'slider_" .. slider_id .. "' does not exist.")
|
||||
end
|
||||
|
||||
local slider_info = {}
|
||||
slider_info.slider = slider
|
||||
slider_info.knob = item
|
||||
slider_info.field = field
|
||||
table.insert(sliders, slider_info)
|
||||
end
|
||||
end
|
||||
|
||||
local function forget_pointers()
|
||||
pointers = {}
|
||||
end
|
||||
|
||||
local function pointer_lost(type, id, dev, x, y, up, cnt)
|
||||
pointers[id] = nil
|
||||
end
|
||||
|
||||
local function pointer_updated(type, id, dev, x, y, btn, dn, up, cnt)
|
||||
-- Button not pressed? Reset state of current pointer.
|
||||
if btn & 1 == 0 then
|
||||
pointers[id] = nil
|
||||
return
|
||||
end
|
||||
|
||||
-- Button just pressed? Find affected slider, if any.
|
||||
if dn & 1 ~= 0 then
|
||||
for i = 1, #sliders do
|
||||
if sliders[i].knob.bounds:includes(x, y) then
|
||||
local pointer = {}
|
||||
pointer.selected_slider = i
|
||||
pointer.relative = true
|
||||
pointer.start_y = y
|
||||
pointer.start_value = sliders[i].field.user_value
|
||||
pointers[id] = pointer
|
||||
break
|
||||
elseif sliders[i].slider.bounds:includes(x, y) then
|
||||
local pointer = {}
|
||||
pointer.selected_slider = i
|
||||
pointer.relative = false
|
||||
pointers[id] = pointer
|
||||
break
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
-- No slider selected by current pointer? Nothing to do.
|
||||
if pointers[id] == nil then
|
||||
return
|
||||
end
|
||||
|
||||
-- A slider is selected. Update state and, indirectly,
|
||||
-- slider knob position, based on the pointer's Y position.
|
||||
-- It is assumed the attached IO field is an IPT_ADJUSTER
|
||||
-- with a range of 0-100 (the default).
|
||||
|
||||
local pointer = pointers[id]
|
||||
local slider_info = sliders[pointer.selected_slider]
|
||||
|
||||
local knob_half_height = slider_info.knob.bounds.height / 2
|
||||
local min_y = slider_info.slider.bounds.y0 + knob_half_height
|
||||
local max_y = slider_info.slider.bounds.y1 - knob_half_height
|
||||
|
||||
local new_value = 0
|
||||
if pointer.relative then
|
||||
-- User clicked on the knob. New value depends on how
|
||||
-- much the knob was dragged.
|
||||
new_value = pointer.start_value - 100 * (y - pointer.start_y) / (max_y - min_y)
|
||||
else
|
||||
-- User clicked elsewhere on the slider. New value
|
||||
-- depends on the absolute position of the click.
|
||||
new_value = 100 - 100 * (y - min_y) / (max_y - min_y)
|
||||
end
|
||||
|
||||
new_value = math.floor(new_value + 0.5)
|
||||
if new_value < 0 then new_value = 0 end
|
||||
if new_value > 100 then new_value = 100 end
|
||||
slider_info.field.user_value = new_value
|
||||
end
|
||||
|
||||
view:set_pointer_updated_callback(pointer_updated)
|
||||
view:set_pointer_left_callback(pointer_lost)
|
||||
view:set_pointer_aborted_callback(pointer_lost)
|
||||
view:set_forget_pointers_callback(forget_pointers)
|
||||
end)
|
||||
]]></script>
|
||||
</mamelayout>
|
||||
|
@ -17,8 +17,7 @@ variations, which brings the total to 24 different sounds.
|
||||
The driver is based on the LinnDrum's service manual and schematics, and is
|
||||
intended as an educational tool.
|
||||
|
||||
Most of the digital functionality is emulated, though it is not very usable due
|
||||
to the lack of a layout. Audio is not yet emulated.
|
||||
Most of the digital functionality is emulated. Audio is not yet emulated.
|
||||
|
||||
PCBoards:
|
||||
* CPU board. 2 sections in schematics:
|
||||
@ -34,16 +33,17 @@ PCBoards:
|
||||
|
||||
Usage:
|
||||
|
||||
Since there is no layout yet, usability is limited.
|
||||
The driver includes a (mostly) interactive layout, including buttons, LEDs and
|
||||
sliders. The only non-interactive widgets right now are the knobs (such as
|
||||
tuning and volume). Those will display their current value, but they can only
|
||||
be modified by the Slider Control menu.
|
||||
|
||||
Run the driver with `-log`:
|
||||
Since there is no audio, the driver logs triggers and other info. To see these
|
||||
run the driver with `-log`:
|
||||
./mame -window linndrum -log
|
||||
|
||||
Tail the log file:
|
||||
(on linux): tail -f error.log
|
||||
|
||||
Press a few of the assigned buttons (B for bass drum, N for snare, T for toms),
|
||||
and see the voice triggers in the log.
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
@ -53,6 +53,8 @@ and see the voice triggers in the log.
|
||||
#include "machine/rescap.h"
|
||||
#include "machine/timer.h"
|
||||
|
||||
#include "linn_linndrum.lh"
|
||||
|
||||
#define LOG_KEYBOARD (1U << 1)
|
||||
#define LOG_DEBOUNCE (1U << 2)
|
||||
#define LOG_TEMPO (1U << 3)
|
||||
@ -368,6 +370,8 @@ void linndrum_state::linndrum(machine_config &config)
|
||||
TIMER(config, m_debounce_timer).configure_generic( // 556, U30B.
|
||||
FUNC(linndrum_state::debounce_timer_elapsed));
|
||||
|
||||
config.set_default_layout(layout_linn_linndrum);
|
||||
|
||||
// Latches connected to cathodes of LEDs (through resistors), so they are
|
||||
// active-low.
|
||||
|
||||
@ -413,51 +417,51 @@ DECLARE_INPUT_CHANGED_MEMBER(linndrum_state::tempo_pot_adjusted)
|
||||
// PORT_NAMEs are based on the annotations in the schematic.
|
||||
INPUT_PORTS_START(linndrum)
|
||||
PORT_START("keyboard_col_0")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("1")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("2")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("3")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("4")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("5")
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("6")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("1") PORT_CODE(KEYCODE_1)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("2") PORT_CODE(KEYCODE_2)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("3") PORT_CODE(KEYCODE_3)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("4") PORT_CODE(KEYCODE_4)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("5") PORT_CODE(KEYCODE_5)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("6") PORT_CODE(KEYCODE_6)
|
||||
|
||||
PORT_START("keyboard_col_1")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("7")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SONG/PAT.")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SONG#")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("END")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("DELETE")
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("INSERT")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("7") PORT_CODE(KEYCODE_7)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SONG/PAT.") PORT_CODE(KEYCODE_Q)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SONG#") PORT_CODE(KEYCODE_W)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("END") PORT_CODE(KEYCODE_E)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("DELETE") PORT_CODE(KEYCODE_R)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("INSERT") PORT_CODE(KEYCODE_T)
|
||||
|
||||
PORT_START("keyboard_col_2")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("<-")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("->")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("ENTER")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("STORE")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("LOAD")
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("EXT.SYNC") PORT_CODE(KEYCODE_S)
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("<-") PORT_CODE(KEYCODE_Y)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("->") PORT_CODE(KEYCODE_U)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("ENTER") PORT_CODE(KEYCODE_I)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("STORE") PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("LOAD") PORT_CODE(KEYCODE_COLON)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("EXT.SYNC") PORT_CODE(KEYCODE_L)
|
||||
|
||||
PORT_START("keyboard_col_3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BPM/TRIG.")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SIDESTICK")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 1") PORT_CODE(KEYCODE_N)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 2")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 3")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BPM/TRIG.") PORT_CODE(KEYCODE_O)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SIDESTICK") PORT_CODE(KEYCODE_Z)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 1") PORT_CODE(KEYCODE_X)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 2") PORT_CODE(KEYCODE_C)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("SNARE 3") PORT_CODE(KEYCODE_V)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BASS 1") PORT_CODE(KEYCODE_B)
|
||||
|
||||
PORT_START("keyboard_col_4")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BASS 2")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CRASH")
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("PERC.") PORT_CODE(KEYCODE_P)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CABASA1 / HIHAT1")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CABASA2 / HIHAT2")
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TAMP 1 / HIHAT O")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("BASS 2") PORT_CODE(KEYCODE_N)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CRASH") PORT_CODE(KEYCODE_M)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("PERC.") PORT_CODE(KEYCODE_COMMA)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CABASA1 / HIHAT1") PORT_CODE(KEYCODE_A)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CABASA2 / HIHAT2") PORT_CODE(KEYCODE_S)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TAMP 1 / HIHAT O") PORT_CODE(KEYCODE_D)
|
||||
|
||||
PORT_START("keyboard_col_5")
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TAMP 2 / HI TOM")
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("HI CONGA / MID TOM") PORT_CODE(KEYCODE_T)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("LO CONGA / LO TOM")
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("COWBELL / RIDE 1")
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CLAPS / RIDE 2") PORT_CODE(KEYCODE_L)
|
||||
PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("TAMP 2 / HI TOM") PORT_CODE(KEYCODE_F)
|
||||
PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("HI CONGA / MID TOM") PORT_CODE(KEYCODE_G)
|
||||
PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("LO CONGA / LO TOM") PORT_CODE(KEYCODE_H)
|
||||
PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("COWBELL / RIDE 1") PORT_CODE(KEYCODE_J)
|
||||
PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_OTHER) PORT_NAME("CLAPS / RIDE 2") PORT_CODE(KEYCODE_K)
|
||||
PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNUSED)
|
||||
|
||||
// The play-stop button and footswitch input are both connected together
|
||||
@ -482,6 +486,90 @@ INPUT_PORTS_START(linndrum)
|
||||
PORT_START("pot_tempo")
|
||||
PORT_ADJUSTER(50, "TEMPO")
|
||||
PORT_CHANGED_MEMBER(DEVICE_SELF, FUNC(linndrum_state::tempo_pot_adjusted), 0)
|
||||
|
||||
PORT_START("pot_volume")
|
||||
PORT_ADJUSTER(100, "MASTER VOLUME")
|
||||
|
||||
PORT_START("pot_tuning_1")
|
||||
PORT_ADJUSTER(50, "SNARE TUNING");
|
||||
PORT_START("pot_tuning_2")
|
||||
PORT_ADJUSTER(50, "HI TOM TUNING");
|
||||
PORT_START("pot_tuning_3")
|
||||
PORT_ADJUSTER(50, "MID TOM TUNING");
|
||||
PORT_START("pot_tuning_4")
|
||||
PORT_ADJUSTER(50, "LO TOM TUNING");
|
||||
PORT_START("pot_tuning_5")
|
||||
PORT_ADJUSTER(50, "HI CONGAS TUNING");
|
||||
PORT_START("pot_tuning_6")
|
||||
PORT_ADJUSTER(50, "LO CONGAS TUNING");
|
||||
PORT_START("pot_tuning_7")
|
||||
PORT_ADJUSTER(50, "HIHAT DECAY");
|
||||
|
||||
PORT_START("pot_pan_1")
|
||||
PORT_ADJUSTER(50, "BASS PAN")
|
||||
PORT_START("pot_pan_2")
|
||||
PORT_ADJUSTER(50, "SNARE PAN")
|
||||
PORT_START("pot_pan_3")
|
||||
PORT_ADJUSTER(50, "SIDESTICK PAN")
|
||||
PORT_START("pot_pan_4")
|
||||
PORT_ADJUSTER(50, "HIHAT PAN")
|
||||
PORT_START("pot_pan_5")
|
||||
PORT_ADJUSTER(50, "HI TOM PAN")
|
||||
PORT_START("pot_pan_6")
|
||||
PORT_ADJUSTER(50, "MID TOM PAN")
|
||||
PORT_START("pot_pan_7")
|
||||
PORT_ADJUSTER(50, "LO TOM PAN")
|
||||
PORT_START("pot_pan_8")
|
||||
PORT_ADJUSTER(50, "RIDE PAN")
|
||||
PORT_START("pot_pan_9")
|
||||
PORT_ADJUSTER(50, "CRASH PAN")
|
||||
PORT_START("pot_pan_10")
|
||||
PORT_ADJUSTER(50, "CABASA PAN")
|
||||
PORT_START("pot_pan_11")
|
||||
PORT_ADJUSTER(50, "TAMB PAN")
|
||||
PORT_START("pot_pan_12")
|
||||
PORT_ADJUSTER(50, "HI CONGA PAN")
|
||||
PORT_START("pot_pan_13")
|
||||
PORT_ADJUSTER(50, "LO CONGA PAN")
|
||||
PORT_START("pot_pan_14")
|
||||
PORT_ADJUSTER(50, "COWBELL PAN")
|
||||
PORT_START("pot_pan_15")
|
||||
PORT_ADJUSTER(50, "CLAPS PAN")
|
||||
PORT_START("pot_pan_16")
|
||||
PORT_ADJUSTER(50, "CLICK PAN")
|
||||
|
||||
PORT_START("pot_gain_1")
|
||||
PORT_ADJUSTER(100, "BASS GAIN")
|
||||
PORT_START("pot_gain_2")
|
||||
PORT_ADJUSTER(100, "SNARE GAIN")
|
||||
PORT_START("pot_gain_3")
|
||||
PORT_ADJUSTER(100, "SIDESTICK GAIN")
|
||||
PORT_START("pot_gain_4")
|
||||
PORT_ADJUSTER(100, "HIHAT GAIN")
|
||||
PORT_START("pot_gain_5")
|
||||
PORT_ADJUSTER(100, "HI TOM GAIN")
|
||||
PORT_START("pot_gain_6")
|
||||
PORT_ADJUSTER(100, "MID TOM GAIN")
|
||||
PORT_START("pot_gain_7")
|
||||
PORT_ADJUSTER(100, "LO TOM GAIN")
|
||||
PORT_START("pot_gain_8")
|
||||
PORT_ADJUSTER(100, "RIDE GAIN")
|
||||
PORT_START("pot_gain_9")
|
||||
PORT_ADJUSTER(100, "CRASH GAIN")
|
||||
PORT_START("pot_gain_10")
|
||||
PORT_ADJUSTER(100, "CABASA GAIN")
|
||||
PORT_START("pot_gain_11")
|
||||
PORT_ADJUSTER(100, "TAMB GAIN")
|
||||
PORT_START("pot_gain_12")
|
||||
PORT_ADJUSTER(100, "HI CONGA GAIN")
|
||||
PORT_START("pot_gain_13")
|
||||
PORT_ADJUSTER(100, "LO CONGA GAIN")
|
||||
PORT_START("pot_gain_14")
|
||||
PORT_ADJUSTER(100, "COWBELL GAIN")
|
||||
PORT_START("pot_gain_15")
|
||||
PORT_ADJUSTER(100, "CLAPS GAIN")
|
||||
PORT_START("pot_gain_16")
|
||||
PORT_ADJUSTER(100, "CLICK GAIN")
|
||||
INPUT_PORTS_END
|
||||
|
||||
ROM_START(linndrum)
|
||||
|
Loading…
Reference in New Issue
Block a user