From 72190eccf28b85c44ae3435034a6a06da9e9a3e6 Mon Sep 17 00:00:00 2001 From: Bryan Klimt Date: Sun, 26 Feb 2012 22:06:00 -0800 Subject: [PATCH] Initial import of source. --- COPYING | 202 +++++ android/.classpath | 11 + .../Proto Builder.launch | 10 + android/.project | 65 ++ android/.settings/org.eclipse.jdt.core.prefs | 280 +++++++ android/.settings/org.eclipse.jdt.ui.prefs | 8 + android/AndroidManifest.xml | 73 ++ android/default.properties | 11 + android/res/drawable-hdpi/add.png | Bin 0 -> 356 bytes android/res/drawable-hdpi/arrow.png | Bin 0 -> 1331 bytes android/res/drawable-hdpi/bass.png | Bin 0 -> 928 bytes android/res/drawable-hdpi/closed_eye.png | Bin 0 -> 1525 bytes android/res/drawable-hdpi/down.png | Bin 0 -> 800 bytes android/res/drawable-hdpi/drums.png | Bin 0 -> 1933 bytes android/res/drawable-hdpi/eighth_note.png | Bin 0 -> 1074 bytes android/res/drawable-hdpi/flute.png | Bin 0 -> 1741 bytes android/res/drawable-hdpi/guitar.png | Bin 0 -> 1823 bytes android/res/drawable-hdpi/half_note.png | Bin 0 -> 676 bytes android/res/drawable-hdpi/icon.png | Bin 0 -> 1332 bytes android/res/drawable-hdpi/loop.png | Bin 0 -> 857 bytes android/res/drawable-hdpi/no_note.png | Bin 0 -> 1235 bytes android/res/drawable-hdpi/open_eye.png | Bin 0 -> 2083 bytes android/res/drawable-hdpi/play.png | Bin 0 -> 731 bytes android/res/drawable-hdpi/play_piano.png | Bin 0 -> 1257 bytes android/res/drawable-hdpi/quarter_note.png | Bin 0 -> 602 bytes android/res/drawable-hdpi/sixteenth_note.png | Bin 0 -> 1220 bytes android/res/drawable-hdpi/stop.png | Bin 0 -> 340 bytes .../res/drawable-hdpi/thirtysecond_note.png | Bin 0 -> 1445 bytes android/res/drawable-hdpi/trash.png | Bin 0 -> 935 bytes android/res/drawable-hdpi/unknown_note.png | Bin 0 -> 731 bytes android/res/drawable-hdpi/up.png | Bin 0 -> 765 bytes android/res/drawable-hdpi/voice.png | Bin 0 -> 1462 bytes android/res/drawable-hdpi/whole_note.png | Bin 0 -> 722 bytes android/res/drawable-hdpi/zoom.png | Bin 0 -> 1632 bytes android/res/drawable-ldpi/icon.png | Bin 0 -> 854 bytes android/res/drawable-mdpi/icon.png | Bin 0 -> 1451 bytes android/res/layout/amplification.xml | 81 ++ android/res/layout/chord_grid.xml | 32 + android/res/layout/effects.xml | 76 ++ android/res/layout/karplus_strong.xml | 79 ++ android/res/layout/low_pass_filter.xml | 88 ++ android/res/layout/main.xml | 45 + android/res/layout/oscillator.xml | 90 ++ android/res/layout/piano.xml | 63 ++ android/res/layout/score.xml | 29 + android/res/layout/tremolo.xml | 93 +++ android/res/layout/vibrato.xml | 90 ++ android/res/menu/options_menu.xml | 7 + android/res/menu/score_menu.xml | 9 + android/res/raw/drums.sf2 | Bin 0 -> 1833633 bytes android/res/raw/presets.txt | 380 +++++++++ android/res/values/attrs.xml | 15 + android/res/values/strings.xml | 79 ++ .../google/synthesizer/android/Storage.java | 279 +++++++ .../android/service/SynthesizerService.java | 150 ++++ .../android/service/SynthesizerThread.java | 230 ++++++ .../android/ui/AmplificationActivity.java | 61 ++ .../android/ui/ChordGridActivity.java | 73 ++ .../android/ui/EditInstrumentActivity.java | 141 ++++ .../android/ui/EffectsActivity.java | 52 ++ .../android/ui/InstrumentListActivity.java | 81 ++ .../android/ui/KarplusStrongActivity.java | 59 ++ .../android/ui/LowPassFilterActivity.java | 67 ++ .../synthesizer/android/ui/MainActivity.java | 107 +++ .../android/ui/OscillatorActivity.java | 66 ++ .../synthesizer/android/ui/PianoActivity.java | 79 ++ .../synthesizer/android/ui/ScoreActivity.java | 141 ++++ .../android/ui/SynthesizerActivity.java | 189 +++++ .../android/ui/TremoloActivity.java | 68 ++ .../android/ui/VibratoActivity.java | 65 ++ .../android/widgets/ChordGridView.java | 328 ++++++++ .../android/widgets/knob/KnobListener.java | 27 + .../widgets/knob/KnobPlaceholderView.java | 78 ++ .../android/widgets/knob/KnobView.java | 390 +++++++++ .../android/widgets/piano/BlackPianoKey.java | 95 +++ .../android/widgets/piano/NotePianoKey.java | 52 ++ .../android/widgets/piano/OctavePianoKey.java | 111 +++ .../android/widgets/piano/PianoKey.java | 177 ++++ .../android/widgets/piano/PianoView.java | 373 +++++++++ .../widgets/piano/PianoViewListener.java | 32 + .../android/widgets/piano/WhitePianoKey.java | 72 ++ .../android/widgets/score/EditEventTool.java | 490 +++++++++++ .../widgets/score/HideChannelButton.java | 97 +++ .../android/widgets/score/NewEventTool.java | 118 +++ .../android/widgets/score/NewLoopTool.java | 118 +++ .../android/widgets/score/PlayButton.java | 156 ++++ .../android/widgets/score/PlayTool.java | 229 ++++++ .../android/widgets/score/ScoreView.java | 767 ++++++++++++++++++ .../widgets/score/ScoreViewListener.java | 27 + .../android/widgets/score/ScoreViewTool.java | 81 ++ .../widgets/score/ScoreViewToolbar.java | 222 +++++ .../widgets/score/SelectChannelButton.java | 100 +++ .../android/widgets/score/SnapTool.java | 134 +++ .../android/widgets/score/ViewportTool.java | 259 ++++++ .../widgets/waveform/WaveformListener.java | 27 + .../widgets/waveform/WaveformRowView.java | 167 ++++ .../widgets/waveform/WaveformView.java | 470 +++++++++++ build.xml | 62 ++ core/build.xml | 73 ++ .../core/midi/MessageInputProcessor.java | 284 +++++++ .../core/midi/MessageOutputProcessor.java | 327 ++++++++ .../synthesizer/core/midi/MidiAdapter.java | 57 ++ .../core/midi/MidiChannelFilter.java | 86 ++ .../synthesizer/core/midi/MidiEvent.java | 80 ++ .../synthesizer/core/midi/MidiFile.java | 83 ++ .../synthesizer/core/midi/MidiFilePlayer.java | 161 ++++ .../synthesizer/core/midi/MidiHeader.java | 137 ++++ .../synthesizer/core/midi/MidiListener.java | 61 ++ .../core/midi/MidiListenerProxy.java | 147 ++++ .../synthesizer/core/midi/MidiReader.java | 271 +++++++ .../synthesizer/core/midi/MidiTrack.java | 57 ++ .../synthesizer/core/midi/MidiUtil.java | 174 ++++ .../core/model/CachedFrequencyProvider.java | 47 ++ .../core/model/CachedSignalProvider.java | 48 ++ .../synthesizer/core/model/Envelope.java | 35 + .../core/model/FrequencyProvider.java | 24 + .../core/model/SignalProvider.java | 27 + .../synthesizer/core/model/SynthesisTime.java | 75 ++ .../core/model/SynthesizerInput.java | 75 ++ .../synthesizer/core/model/WaveformInput.java | 123 +++ .../core/model/composite/MidiSynthesizer.java | 79 ++ .../composite/MultiChannelSynthesizer.java | 145 ++++ .../composite/MultiTouchSynthesizer.java | 638 +++++++++++++++ .../core/model/composite/Presets.proto | 115 +++ .../core/model/modules/AdsrEnvelope.java | 178 ++++ .../core/model/modules/Amplifier.java | 50 ++ .../synthesizer/core/model/modules/Delay.java | 123 +++ .../synthesizer/core/model/modules/Echo.java | 100 +++ .../synthesizer/core/model/modules/Glide.java | 91 +++ .../core/model/modules/LowPassFilter.java | 56 ++ .../synthesizer/core/model/modules/Mixer.java | 58 ++ .../core/model/modules/Tremolo.java | 48 ++ .../synthesizer/core/model/modules/Tuner.java | 48 ++ .../core/model/modules/WaveformSelector.java | 84 ++ .../core/model/oscillator/DrawbarOrgan.java | 129 +++ .../core/model/oscillator/KarplusStrong.java | 138 ++++ .../core/model/oscillator/Noise.java | 33 + .../core/model/oscillator/Oscillator.java | 35 + .../core/model/oscillator/Sawtooth.java | 51 ++ .../core/model/oscillator/Sine.java | 61 ++ .../core/model/oscillator/Square.java | 41 + .../core/model/oscillator/Triangle.java | 37 + .../core/music/EventComparator.java | 80 ++ .../google/synthesizer/core/music/Music.proto | 75 ++ .../google/synthesizer/core/music/Note.java | 94 +++ .../synthesizer/core/music/ScorePlayer.java | 291 +++++++ .../core/music/ScorePlayerListener.java | 39 + .../synthesizer/core/soundfont/Bag.java | 96 +++ .../synthesizer/core/soundfont/Generator.java | 62 ++ .../core/soundfont/Instrument.java | 78 ++ .../synthesizer/core/soundfont/Modulator.java | 53 ++ .../core/soundfont/ModulatorSource.java | 50 ++ .../synthesizer/core/soundfont/Operator.java | 146 ++++ .../synthesizer/core/soundfont/Preset.java | 93 +++ .../synthesizer/core/soundfont/Sample.java | 119 +++ .../core/soundfont/SampleLink.java | 60 ++ .../core/soundfont/SoundFontOscillator.java | 216 +++++ .../core/soundfont/SoundFontReader.java | 337 ++++++++ .../synthesizer/core/soundfont/Zone.java | 530 ++++++++++++ .../core/wave/RiffInputStream.java | 180 ++++ .../synthesizer/core/wave/WaveAdapter.java | 120 +++ .../synthesizer/core/wave/WaveReader.java | 151 ++++ .../synthesizer/core/wave/WaveWriter.java | 230 ++++++ icon_template.png | Bin 0 -> 175477 bytes j2se/.classpath | 11 + .../Proto Builder.launch | 10 + j2se/.project | 49 ++ j2se/build.xml | 58 ++ .../src/com/google/synthesizer/j2se/Midi.java | 116 +++ .../synthesizer/j2se/MidiDeviceBinder.java | 116 +++ .../com/google/synthesizer/j2se/Perform.java | 212 +++++ .../synthesizer/j2se/SynthesizerThread.java | 263 ++++++ test/build.xml | 71 ++ .../model/modules/test/AdsrEnvelopeTest.java | 251 ++++++ .../model/modules/test/AmplifierTest.java | 39 + .../core/model/modules/test/DelayTest.java | 109 +++ .../core/model/modules/test/EchoTest.java | 70 ++ .../core/model/modules/test/GlideTest.java | 78 ++ .../core/model/modules/test/MixerTest.java | 60 ++ .../core/model/modules/test/TremoloTest.java | 163 ++++ .../core/model/modules/test/TunerTest.java | 74 ++ .../model/oscillator/test/OscillatorTest.java | 39 + .../model/oscillator/test/SawtoothTest.java | 94 +++ .../core/model/oscillator/test/SineTest.java | 87 ++ .../model/oscillator/test/SquareTest.java | 93 +++ .../model/oscillator/test/TriangleTest.java | 94 +++ .../test/CachedFrequencyProviderTest.java | 61 ++ .../model/test/CachedSignalProviderTest.java | 61 ++ .../core/model/test/SynthesisTimeTest.java | 88 ++ .../core/model/test/SynthesizerInputTest.java | 84 ++ 190 files changed, 19424 insertions(+) create mode 100644 COPYING create mode 100644 android/.classpath create mode 100644 android/.externalToolBuilders/Proto Builder.launch create mode 100644 android/.project create mode 100644 android/.settings/org.eclipse.jdt.core.prefs create mode 100644 android/.settings/org.eclipse.jdt.ui.prefs create mode 100644 android/AndroidManifest.xml create mode 100644 android/default.properties create mode 100644 android/res/drawable-hdpi/add.png create mode 100644 android/res/drawable-hdpi/arrow.png create mode 100644 android/res/drawable-hdpi/bass.png create mode 100644 android/res/drawable-hdpi/closed_eye.png create mode 100644 android/res/drawable-hdpi/down.png create mode 100644 android/res/drawable-hdpi/drums.png create mode 100644 android/res/drawable-hdpi/eighth_note.png create mode 100644 android/res/drawable-hdpi/flute.png create mode 100644 android/res/drawable-hdpi/guitar.png create mode 100644 android/res/drawable-hdpi/half_note.png create mode 100644 android/res/drawable-hdpi/icon.png create mode 100644 android/res/drawable-hdpi/loop.png create mode 100644 android/res/drawable-hdpi/no_note.png create mode 100644 android/res/drawable-hdpi/open_eye.png create mode 100644 android/res/drawable-hdpi/play.png create mode 100644 android/res/drawable-hdpi/play_piano.png create mode 100644 android/res/drawable-hdpi/quarter_note.png create mode 100644 android/res/drawable-hdpi/sixteenth_note.png create mode 100644 android/res/drawable-hdpi/stop.png create mode 100644 android/res/drawable-hdpi/thirtysecond_note.png create mode 100644 android/res/drawable-hdpi/trash.png create mode 100644 android/res/drawable-hdpi/unknown_note.png create mode 100644 android/res/drawable-hdpi/up.png create mode 100644 android/res/drawable-hdpi/voice.png create mode 100644 android/res/drawable-hdpi/whole_note.png create mode 100644 android/res/drawable-hdpi/zoom.png create mode 100644 android/res/drawable-ldpi/icon.png create mode 100644 android/res/drawable-mdpi/icon.png create mode 100644 android/res/layout/amplification.xml create mode 100644 android/res/layout/chord_grid.xml create mode 100644 android/res/layout/effects.xml create mode 100644 android/res/layout/karplus_strong.xml create mode 100644 android/res/layout/low_pass_filter.xml create mode 100644 android/res/layout/main.xml create mode 100644 android/res/layout/oscillator.xml create mode 100644 android/res/layout/piano.xml create mode 100644 android/res/layout/score.xml create mode 100644 android/res/layout/tremolo.xml create mode 100644 android/res/layout/vibrato.xml create mode 100644 android/res/menu/options_menu.xml create mode 100644 android/res/menu/score_menu.xml create mode 100644 android/res/raw/drums.sf2 create mode 100644 android/res/raw/presets.txt create mode 100755 android/res/values/attrs.xml create mode 100644 android/res/values/strings.xml create mode 100644 android/src/com/google/synthesizer/android/Storage.java create mode 100755 android/src/com/google/synthesizer/android/service/SynthesizerService.java create mode 100755 android/src/com/google/synthesizer/android/service/SynthesizerThread.java create mode 100644 android/src/com/google/synthesizer/android/ui/AmplificationActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/ChordGridActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/EditInstrumentActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/EffectsActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/InstrumentListActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/KarplusStrongActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/LowPassFilterActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/MainActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/OscillatorActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/PianoActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/ScoreActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/SynthesizerActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/TremoloActivity.java create mode 100644 android/src/com/google/synthesizer/android/ui/VibratoActivity.java create mode 100644 android/src/com/google/synthesizer/android/widgets/ChordGridView.java create mode 100644 android/src/com/google/synthesizer/android/widgets/knob/KnobListener.java create mode 100644 android/src/com/google/synthesizer/android/widgets/knob/KnobPlaceholderView.java create mode 100644 android/src/com/google/synthesizer/android/widgets/knob/KnobView.java create mode 100644 android/src/com/google/synthesizer/android/widgets/piano/BlackPianoKey.java create mode 100644 android/src/com/google/synthesizer/android/widgets/piano/NotePianoKey.java create mode 100644 android/src/com/google/synthesizer/android/widgets/piano/OctavePianoKey.java create mode 100644 android/src/com/google/synthesizer/android/widgets/piano/PianoKey.java create mode 100644 android/src/com/google/synthesizer/android/widgets/piano/PianoView.java create mode 100644 android/src/com/google/synthesizer/android/widgets/piano/PianoViewListener.java create mode 100644 android/src/com/google/synthesizer/android/widgets/piano/WhitePianoKey.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/EditEventTool.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/HideChannelButton.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/NewEventTool.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/NewLoopTool.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/PlayButton.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/PlayTool.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/ScoreView.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/ScoreViewListener.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/ScoreViewTool.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/ScoreViewToolbar.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/SelectChannelButton.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/SnapTool.java create mode 100644 android/src/com/google/synthesizer/android/widgets/score/ViewportTool.java create mode 100644 android/src/com/google/synthesizer/android/widgets/waveform/WaveformListener.java create mode 100644 android/src/com/google/synthesizer/android/widgets/waveform/WaveformRowView.java create mode 100644 android/src/com/google/synthesizer/android/widgets/waveform/WaveformView.java create mode 100644 build.xml create mode 100644 core/build.xml create mode 100644 core/src/com/google/synthesizer/core/midi/MessageInputProcessor.java create mode 100644 core/src/com/google/synthesizer/core/midi/MessageOutputProcessor.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiAdapter.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiChannelFilter.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiEvent.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiFile.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiFilePlayer.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiHeader.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiListener.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiListenerProxy.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiReader.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiTrack.java create mode 100644 core/src/com/google/synthesizer/core/midi/MidiUtil.java create mode 100644 core/src/com/google/synthesizer/core/model/CachedFrequencyProvider.java create mode 100644 core/src/com/google/synthesizer/core/model/CachedSignalProvider.java create mode 100755 core/src/com/google/synthesizer/core/model/Envelope.java create mode 100644 core/src/com/google/synthesizer/core/model/FrequencyProvider.java create mode 100644 core/src/com/google/synthesizer/core/model/SignalProvider.java create mode 100644 core/src/com/google/synthesizer/core/model/SynthesisTime.java create mode 100644 core/src/com/google/synthesizer/core/model/SynthesizerInput.java create mode 100644 core/src/com/google/synthesizer/core/model/WaveformInput.java create mode 100644 core/src/com/google/synthesizer/core/model/composite/MidiSynthesizer.java create mode 100644 core/src/com/google/synthesizer/core/model/composite/MultiChannelSynthesizer.java create mode 100644 core/src/com/google/synthesizer/core/model/composite/MultiTouchSynthesizer.java create mode 100644 core/src/com/google/synthesizer/core/model/composite/Presets.proto create mode 100644 core/src/com/google/synthesizer/core/model/modules/AdsrEnvelope.java create mode 100755 core/src/com/google/synthesizer/core/model/modules/Amplifier.java create mode 100755 core/src/com/google/synthesizer/core/model/modules/Delay.java create mode 100755 core/src/com/google/synthesizer/core/model/modules/Echo.java create mode 100644 core/src/com/google/synthesizer/core/model/modules/Glide.java create mode 100644 core/src/com/google/synthesizer/core/model/modules/LowPassFilter.java create mode 100755 core/src/com/google/synthesizer/core/model/modules/Mixer.java create mode 100644 core/src/com/google/synthesizer/core/model/modules/Tremolo.java create mode 100644 core/src/com/google/synthesizer/core/model/modules/Tuner.java create mode 100644 core/src/com/google/synthesizer/core/model/modules/WaveformSelector.java create mode 100644 core/src/com/google/synthesizer/core/model/oscillator/DrawbarOrgan.java create mode 100644 core/src/com/google/synthesizer/core/model/oscillator/KarplusStrong.java create mode 100755 core/src/com/google/synthesizer/core/model/oscillator/Noise.java create mode 100755 core/src/com/google/synthesizer/core/model/oscillator/Oscillator.java create mode 100755 core/src/com/google/synthesizer/core/model/oscillator/Sawtooth.java create mode 100755 core/src/com/google/synthesizer/core/model/oscillator/Sine.java create mode 100755 core/src/com/google/synthesizer/core/model/oscillator/Square.java create mode 100755 core/src/com/google/synthesizer/core/model/oscillator/Triangle.java create mode 100644 core/src/com/google/synthesizer/core/music/EventComparator.java create mode 100644 core/src/com/google/synthesizer/core/music/Music.proto create mode 100755 core/src/com/google/synthesizer/core/music/Note.java create mode 100644 core/src/com/google/synthesizer/core/music/ScorePlayer.java create mode 100644 core/src/com/google/synthesizer/core/music/ScorePlayerListener.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/Bag.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/Generator.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/Instrument.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/Modulator.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/ModulatorSource.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/Operator.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/Preset.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/Sample.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/SampleLink.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/SoundFontOscillator.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/SoundFontReader.java create mode 100644 core/src/com/google/synthesizer/core/soundfont/Zone.java create mode 100644 core/src/com/google/synthesizer/core/wave/RiffInputStream.java create mode 100644 core/src/com/google/synthesizer/core/wave/WaveAdapter.java create mode 100644 core/src/com/google/synthesizer/core/wave/WaveReader.java create mode 100644 core/src/com/google/synthesizer/core/wave/WaveWriter.java create mode 100644 icon_template.png create mode 100644 j2se/.classpath create mode 100644 j2se/.externalToolBuilders/Proto Builder.launch create mode 100644 j2se/.project create mode 100644 j2se/build.xml create mode 100755 j2se/src/com/google/synthesizer/j2se/Midi.java create mode 100644 j2se/src/com/google/synthesizer/j2se/MidiDeviceBinder.java create mode 100644 j2se/src/com/google/synthesizer/j2se/Perform.java create mode 100755 j2se/src/com/google/synthesizer/j2se/SynthesizerThread.java create mode 100644 test/build.xml create mode 100755 test/src/com/google/synthesizer/core/model/modules/test/AdsrEnvelopeTest.java create mode 100755 test/src/com/google/synthesizer/core/model/modules/test/AmplifierTest.java create mode 100755 test/src/com/google/synthesizer/core/model/modules/test/DelayTest.java create mode 100755 test/src/com/google/synthesizer/core/model/modules/test/EchoTest.java create mode 100644 test/src/com/google/synthesizer/core/model/modules/test/GlideTest.java create mode 100755 test/src/com/google/synthesizer/core/model/modules/test/MixerTest.java create mode 100644 test/src/com/google/synthesizer/core/model/modules/test/TremoloTest.java create mode 100644 test/src/com/google/synthesizer/core/model/modules/test/TunerTest.java create mode 100755 test/src/com/google/synthesizer/core/model/oscillator/test/OscillatorTest.java create mode 100755 test/src/com/google/synthesizer/core/model/oscillator/test/SawtoothTest.java create mode 100755 test/src/com/google/synthesizer/core/model/oscillator/test/SineTest.java create mode 100755 test/src/com/google/synthesizer/core/model/oscillator/test/SquareTest.java create mode 100755 test/src/com/google/synthesizer/core/model/oscillator/test/TriangleTest.java create mode 100644 test/src/com/google/synthesizer/core/model/test/CachedFrequencyProviderTest.java create mode 100644 test/src/com/google/synthesizer/core/model/test/CachedSignalProviderTest.java create mode 100644 test/src/com/google/synthesizer/core/model/test/SynthesisTimeTest.java create mode 100644 test/src/com/google/synthesizer/core/model/test/SynthesizerInputTest.java diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/COPYING @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/android/.classpath b/android/.classpath new file mode 100644 index 0000000..c247676 --- /dev/null +++ b/android/.classpath @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/android/.externalToolBuilders/Proto Builder.launch b/android/.externalToolBuilders/Proto Builder.launch new file mode 100644 index 0000000..ec9d4ed --- /dev/null +++ b/android/.externalToolBuilders/Proto Builder.launch @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/android/.project b/android/.project new file mode 100644 index 0000000..7be155a --- /dev/null +++ b/android/.project @@ -0,0 +1,65 @@ + + + MusicSynthesizer + + + + + + org.eclipse.ui.externaltools.ExternalToolBuilder + auto,full,incremental, + + + LaunchConfigHandle + <project>/.externalToolBuilders/Proto Builder.launch + + + + + com.android.ide.eclipse.adt.ResourceManagerBuilder + + + + + com.android.ide.eclipse.adt.PreCompilerBuilder + + + + + org.eclipse.jdt.core.javabuilder + + + + + com.android.ide.eclipse.adt.ApkBuilder + + + + + + com.android.ide.eclipse.adt.AndroidNature + org.eclipse.jdt.core.javanature + + + + core + 2 + PARENT-1-PROJECT_LOC/core/src + + + core-gen + 2 + PARENT-1-PROJECT_LOC/core/gen + + + core-lib + 2 + PARENT-1-PROJECT_LOC/core/lib + + + test + 2 + PARENT-1-PROJECT_LOC/test/src + + + diff --git a/android/.settings/org.eclipse.jdt.core.prefs b/android/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..5c9506e --- /dev/null +++ b/android/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,280 @@ +#Thu Jan 27 01:33:26 PST 2011 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5 +org.eclipse.jdt.core.formatter.align_type_members_on_columns=false +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_assignment=0 +org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16 +org.eclipse.jdt.core.formatter.alignment_for_compact_if=16 +org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=80 +org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0 +org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16 +org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0 +org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16 +org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration=16 +org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration=16 +org.eclipse.jdt.core.formatter.blank_lines_after_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_after_package=1 +org.eclipse.jdt.core.formatter.blank_lines_before_field=0 +org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration=0 +org.eclipse.jdt.core.formatter.blank_lines_before_imports=1 +org.eclipse.jdt.core.formatter.blank_lines_before_member_type=1 +org.eclipse.jdt.core.formatter.blank_lines_before_method=1 +org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk=1 +org.eclipse.jdt.core.formatter.blank_lines_before_package=0 +org.eclipse.jdt.core.formatter.blank_lines_between_import_groups=1 +org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations=1 +org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_array_initializer=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_block_in_case=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_constant=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_method_declaration=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_switch=end_of_line +org.eclipse.jdt.core.formatter.brace_position_for_type_declaration=end_of_line +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment=false +org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment=false +org.eclipse.jdt.core.formatter.comment.format_block_comments=true +org.eclipse.jdt.core.formatter.comment.format_header=false +org.eclipse.jdt.core.formatter.comment.format_html=true +org.eclipse.jdt.core.formatter.comment.format_javadoc_comments=true +org.eclipse.jdt.core.formatter.comment.format_line_comments=true +org.eclipse.jdt.core.formatter.comment.format_source_code=true +org.eclipse.jdt.core.formatter.comment.indent_parameter_description=true +org.eclipse.jdt.core.formatter.comment.indent_root_tags=true +org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags=insert +org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter=insert +org.eclipse.jdt.core.formatter.comment.line_length=100 +org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries=true +org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries=true +org.eclipse.jdt.core.formatter.compact_else_if=true +org.eclipse.jdt.core.formatter.continuation_indentation=4 +org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer=4 +org.eclipse.jdt.core.formatter.disabling_tag=@formatter\:off +org.eclipse.jdt.core.formatter.enabling_tag=@formatter\:on +org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line=false +org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header=true +org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header=true +org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_empty_lines=false +org.eclipse.jdt.core.formatter.indent_statements_compare_to_block=true +org.eclipse.jdt.core.formatter.indent_statements_compare_to_body=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases=true +org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch=true +org.eclipse.jdt.core.formatter.indentation.size=2 +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_member=insert +org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_label=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_annotation_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_anonymous_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_block=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=do not insert +org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments=insert +org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert +org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert +org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized=insert +org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return=insert +org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw=insert +org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert +org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert +org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration=do not insert +org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation=do not insert +org.eclipse.jdt.core.formatter.join_lines_in_comments=true +org.eclipse.jdt.core.formatter.join_wrapped_lines=true +org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line=true +org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line=false +org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line=false +org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line=true +org.eclipse.jdt.core.formatter.lineSplit=100 +org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column=false +org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column=false +org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body=0 +org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve=1 +org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line=true +org.eclipse.jdt.core.formatter.tabulation.char=space +org.eclipse.jdt.core.formatter.tabulation.size=2 +org.eclipse.jdt.core.formatter.use_on_off_tags=false +org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=true +org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true +org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true diff --git a/android/.settings/org.eclipse.jdt.ui.prefs b/android/.settings/org.eclipse.jdt.ui.prefs new file mode 100644 index 0000000..a26edcc --- /dev/null +++ b/android/.settings/org.eclipse.jdt.ui.prefs @@ -0,0 +1,8 @@ +#Thu Jan 27 01:35:20 PST 2011 +eclipse.preferences.version=1 +formatter_profile=_MusicSynthesizer +formatter_settings_version=11 +org.eclipse.jdt.ui.ignorelowercasenames=true +org.eclipse.jdt.ui.importorder=java;javax;org;com; +org.eclipse.jdt.ui.ondemandthreshold=99 +org.eclipse.jdt.ui.staticondemandthreshold=99 diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml new file mode 100644 index 0000000..7e98da2 --- /dev/null +++ b/android/AndroidManifest.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/default.properties b/android/default.properties new file mode 100644 index 0000000..e2e8061 --- /dev/null +++ b/android/default.properties @@ -0,0 +1,11 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system use, +# "build.properties", and override values to adapt the script to your +# project structure. + +# Project target. +target=android-8 diff --git a/android/res/drawable-hdpi/add.png b/android/res/drawable-hdpi/add.png new file mode 100644 index 0000000000000000000000000000000000000000..67073bc40e0d7b08faaccce34b47c5618fe89806 GIT binary patch literal 356 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf4nJ za0`Jjs#s@8s6}~zYQqA&(p;*q+-t7n+G`$8!$LuWZU#V>E6kg zOqMg2M6lY!rYl)k^bq)9h4qqA#*B6|Dk}=2hrqBR0_{qnMfGe9+2ySs zx=}(7xbq3TKP-nmxXTX>@K-~q3GoT9-a6jHI ztkDP~2LmQ!C!WMLcmaEg3LPorV89+s!MQkq53m^Dq2~Q-d`d~dYkNxR*OXF2N~tNO zG(M%YI;He@2HB-wIT-LIuJ7~rY{80q&?sDEN6|^jLXH@)26y#)Hog1mz{hwBtMOma z$#NqH1GWkOuY@LS!fRrMc&_MVxsk&Foj4?DKfS{Dv(PTw(H47Xv=WO(!^ZM)&;>!JG&2 zMGhr~gIo+~!#P8IrxEM%2Hq5IaWIE6LqRSB92CK@S|F^3*&;yR*8O>*V8)0cXEnGB zXBnCShyZyxTCf@S;nQ474ThZkfOWX8!269NK)#FxcvjRFr6MN-zQUaaWy}yRafwK= z7mD~&8gepVv!T(zIW(trko}WaX5qg zQZ`1m<8;F_z+q7$PZEYa345_$7EDS{s(d#?1i4p4l~`)mD0dzprF0~vbSR~?XMiyi zQ%V~L_`WfvbZSazSqb`;ng{e?r|N;Q1%G0ufme%}I8QW9R+XS5%G(`o6}fzWwBuq? z?ajy225zMOE?VllloSujV!$fgT;cg<(d^hKqWoOZ0cxxwr*AyCA-|f8Yi@2XL+&K8 zexKRr*$%O;U)bl_+1MfsGHU>NZK5Q8DX*I4G2kB@ajcIY!V~?*?Z@4COSnfv6?qro z84+8u#)C3Xh_s1cc)DnAbg8WT*LWSbiafs(8uV_lZN-ndlq~a%(6_?J+i`)Y;;P|Q zv5(lIdOVmVdI2j2ku@ZgX@E~~hd3y)Qv|?j=)glF$KRoM^Q1qT1hXEKDIQFiH*a1J zIhC*%&B6udTxE+WjtZgdV{%i6IQ~6cE85}JT%iF!iF#qp z@Kp=c;xV~p!hP0@-J(k9K$c&w77t49!=w1f@u~7!u?Kko&*zw|77al36kZfLLeDZf zO{B()MX=0*T66(|-pg^RD2UqefD-C~S~Wlq?k#(QT6KXDL)`#1?gFKw&VV`t#ySJW pyaDPiP-j4$0i&(MsA9|;;C~?4#!I%rk3#?e002ovPDHLkV1j^@RJi~E literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/bass.png b/android/res/drawable-hdpi/bass.png new file mode 100644 index 0000000000000000000000000000000000000000..8ee5f6fdae2b8be38b7fdad8f505c697aa01c108 GIT binary patch literal 928 zcmV;R17G}!P)=-`|Rjt=4yNCmkL(t+nnpoJ9R8T;EmNd>_bgfw8?hv1AE zBqZ-Xe2jTBjM2#KF3)eJWleH89B|KgFvi?EhMVHybUNKShMQthz@mUf0e7x|2?)pl z(8d$NCQSh;!zcqwAvB{xh_V$*2*_X;r4+ysHt#Ei zm|UnCekCbT;+*SgGtNh@Nt(|gr@lF;aH`hHMn`==8_>G44BFJ1( z|1ykfFM_R%hst2nnfG1mA~7^Yq97rlFY|rpyv8uPGI!0ne1-Uph9m_FT&~7NXRZ>& zB=H*!i2^FvEy*>=28jnScX}ZAgzI+4Hf~eMetg~<(7B31#ehGY%9rg05?=C=583McFo$OP9;@~R!10BIjD138V@DIo3Myn)wc1~6?3^q&V}#}u#? z5b{>o*qBPhoZb|rU?JcW*8!7YQNW^rdso1{6YvferVG`a_%vw%0000HeY&Hk&!$46hpjJSwfFW1F&=XLXK&^mU z0fY8opr{p4E1*`ukSk#538+h;RzR(QLHjUJ)CANeP%EHTz@U8?C~5+Rz66GzfT1se zp(mg&fzB1sz!Hp=&wKF>X8PdQ{|!|X@JW0PpTh|LjV*W4>-dqBz#+x2MX1!(t0>?N z{0(1`ayUq`a5{EiC;lNs^%LVb4Hw}Q34R27@PhQDj(w=2fZezk$K!}{Z{ToDl;3|R zB)s3L(TW%s)%_G_lxL4h@Gs)ectnMrscH{+6@QZ8zlY^Q!ZA3nICBf0Do*thV>lTX zOYN^H&zq4Zd=KuDa_kt3)~s1mWqq?e;6Ji09x3(M5GfulWich&WUpp~#aNA>;rr5v z8^xcUxDPkW_E$-L-HgI}@UUd$AZbR+M4rb=S6(WFJS?TrEk;CT-@;mv{R(Mz@8fl8 zzPI8@T{PitN8z{eR~#xbJWWVwh$_xD+b8bBHr1Qs7*^t3{1_(+vF+gBlzP7zn{`=o z3pot!mYUmBu5U`vjdK5n3@WQ}2OgEOn2+%`iKj~NXNa;Eiy~%3_K#qr1piLAK~yDR zoydMtf}WD*^A@IyvqwrfEWzjTY1t|t#{+l_FYV{_hy-|y5O$_)x1Tkebt3WY#m?`g z#1=GwRVjgsalJ@>qglzlg@=kGJMi7&c)K|sE~TO+MOe-j##V6kd@|eUjO}&^}2nmJU86 zJ)zyP$AsASeN>2Pm341OliP$lg@}DKcQAe>M7<~TNJm&SF)=aUnv?KH$;vaLgdP85 zU9&j)d~tAEGP`8IphiW~+Y3dXtSIiSK~86$hcWD_C-q+u~!=G%h+nRZ@g;mxndfZ zO3(Qcek&)$rw$Yx^Am6rzADGeOYp>e1`B57lz1ENFHWs4*GjWB-Y}c(X(^#?GEP5^ zf6583lY#05Nzh%Aut}UR#LbBVHNo}xL2>XJ*~+S-CBw=?GB+%hMt79#4ok|Kb_0E- ztlzD>De?(P)UA@Zo8-heC+6D)_TV?Tu?uJRM@y8nOX|8`xI+?ljU@1LTs_y~1C>DA zNVk}fOl%e@c7xmGHQYr~N}b|H*-qEZx3HhD#n+3>S1rKCs$yfkY6MK2q1JdD+5U`)`c4S}i@kmbF@~ z3tGWs5A01ATNf1DJ@vOA3Ro*=_FdS}1A80r^I~%?e%%9`AEF-w{6eO@dt|6tD7F<_ z=NH?(C7=&Y@B|rRuI-`CYh|E0p@%ln9|c@h?pu3kb1Sawp}h~$4+YFQb$uM|*8d+c b>;!xOSO1qxTT5JI00000NkvXXu0mjfDL}-T literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/down.png b/android/res/drawable-hdpi/down.png new file mode 100644 index 0000000000000000000000000000000000000000..7e3b9d83c114aef55c778482d7e8ea8f555fd565 GIT binary patch literal 800 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 literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/flute.png b/android/res/drawable-hdpi/flute.png new file mode 100644 index 0000000000000000000000000000000000000000..0a296f8772dcf071b7118b3ba00b65ee8733db2b GIT binary patch literal 1741 zcmV;;1~U1HP) zRCt{2+G~hiR}}~F-=tAV3pViqjY@7Y3D#=R)DJ46lT`hr0i(5vicGZ$f`XbNqNB97 zLPbT)^o!6|+lpv1Ni_|FXtdU7TOYyJN~H;nnn~&dA2_MlD%4qiSm!Wj?%bQ+J9A$% z$saaz&OYbN-Fuz2|L4Ef+CxW<9C0>dc|`Pk41LA&>FMcykD;$P=K<$D;LINIIeY~t zdo!HgqnQW14&TQG_yo3LyoclJ85$YjO6jiP0X7t7oWR0^9H{vnQ`O|0G_D zt-TpqZ&3AsHTZ_Plds}!cogfqJg%N$Swtw>9TBm-a$dH(B4TZE?ZpxC?}&IJBGxpx zchR+>Lx&EP#+Wwu?f(lkT!9baWB5IOhbM8BMNW<-2VAMK>py`1;`3OA51ZkD6_OlR zW31~V?Gj237{?bS4^(k6{(~>$9r%Luh!R8CjSbk*<*{}J)vrJex8Q0s-cZBW@P0Y@ z3-F`j+To(XM=)#=lH<_C#6*2xBOP!Wzm}7P1K2L#{68=yxq;LRlU*8b$1!y9;K4@y zH9R8Mc_Uno^D!Zf^CEl}AC=_zCfwiY!FB`9Vu4A#M7sOBCeL0}{CynNf3gDiN)H+M zFT|Om!BcWgKPcV0iecO+MbRXliT72m4`DCfjGY}EZ^yB$1+lO(B5tkgyDlPbF2vE+ zhE{urX5wR*FmPN$n5%JE5c%a{6=Zr#V|Ni~08mkdGR&f|_#7%fPMkH5!6@SKS z3}9H@PC{fHf5Z`q^hXlZ}^^6 zjT3lF<@yTz)PRxWd{Sa3@d8PJ)i1;dzAh(y9$qFDB-|m%vL=_&z>woYlA`OSa;!?= zyX8cu@QR{u7jBoHbF?_Vr+9wTe1E)CSZGpoCmxn>x+Wh5tR9#>nektRHm6iUB@p_p_ zy0o~y$;|Q~jrIqbj@#FX!L)-`gixz(vJgSX>-rBw#0Mf`IwC$DnPHlWh+PqJUeT_J zh`kYUW3Po!Hwq)`ajOig;X+(nchB`Q%swEs#WhlH_dN01t;*02{8iQz8Y#!0NM*UD zIRBCv4(Ms(wVSoUQ5i^m6U*zat&v7}1i!^!%>Ht$!xMTyj@_;emgHEUTex15;RczE z9VyyrsS~D(>&NkKT_nd|REH;J@}#O9*T@V~89$V7f3xI-=imm(9ec4+m#R{|tPZco zcjOu`Fm#wzy7`uJp~Md9At-?7*vV*?fMu-yTp!GjePN8)ZoTYHj8g2E_wPjN>u}$^%#?T z4{q0*axC#wd9c_GK$6X7y8-?WSbWYIkZbkh00000NkvXXu0mjft71L& literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/guitar.png b/android/res/drawable-hdpi/guitar.png new file mode 100644 index 0000000000000000000000000000000000000000..7904465f96b42179a69f32d39ad8227f7e3fe8df GIT binary patch literal 1823 zcmV+)2jKXLP)ye2VMYf2f7d{9#hwzZn@S>^;-fg#0bKKuCA^$M$)JX zyo=O~))e4vpo9eD7vMKwDliTB3-}QU2x@x~F@Faz2Y3SM5~sv?hU_{tF9An@xxg~u zap38Yd#(ar1ZDu62oFHREXYbg#kg=Dn0EkA0gnHt>e-qUrwLTlwxPCpVg3lP7`QI#0hEF;uOUJCF5>)NTVYreC<61#>Ke8|OB&1v z)%CX^V}UUB+6qg%cki~9SIHOirNAWe#k_{}0Na6kL#_)FpjEaVHUc`y5A#I`<|76m z0g8)xUH!kAaPz}R&0EcbJqL7Jj!TO9Vs+CZFh334j|5{DlH3lc-$0PjAeH+2`)%dD zq{F;~eL|v@74s8Ft-lQ1iZs>D;TFRclmxqde@9J07a=uKH0Cv6HA2D^TDT@?!~7z! z90}A+rJkOi zpnU_tf`EN_V?G4D0<1^cw^{SKy$CUtWj!D*=0m^=U=JSVE07wVqt4%kXC8HKBkhBR zDeZbd7R)!|nLUk|+k%gmOe_fq_ z3JHc^2PvrSYb7NhF6J8$j7`jIc)?phGfB4je4(`u$p}c3&Hb3`^R@Y?#f%FS(C?dy zOF+_W?l(6-;Cw$xHWgm`5RZVQ**vP5#9ho7v4UHK!U)i7=t;79RBvFC5TwGBpH>(F ztB^&9_lTFxf6X65$kHt$0cVmD$ss5kfm zAz=WxJHfM@r5yoqUH5b1XY&cjQrQra6aJ;SH#iFP11FJhc#jy7K<*-voI^;s2U#MEYrgHqwaTvRE+IIZn^V{t@I0^;X(m^Y7bItZ zpOIy%K-{p;!3Kr<2Xsj_FIu)97E;_-yi|#R@cPBc1kRVqx-t)W&xC43!F{;ucAVHA+>8k&x*o~no z4FWpIm9J8Kp$N!Px#24YJ`L;wH)0002_L%V+f000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipP{ z0RT45TZNFB+}cyn=gFZDk!K0eV_v3! z0~E*`>>^0hHtk{)cVk*2_u!#I)3WS%x7bZG1IVH!eH8iQ%#arf5bHGpa4;T^ad>!0 z0C0DAN2?w_K0a>C*Vore_b)Ck+VbV)LeW%>ocUDl(I0B9YcE`4eD_xGv39fnc^n5FS(JqUpI-rL!1X1(`j zI-QyjLTUtcjat#bCD)%$r%Mg$(JvY6^LiHsWdr@%aLjdP4jmC90S9)IY0N9&oOThQK}~b*aL9Su#+b#0HO6DBC3d}Qc6`sWRy}m z0m?g;pZk)mQfldc*|ENkcIo@H<@;B)v*VcvU?0GQ^Ueo$7;2|^A~IU*$`~`$T36Ou z6GBiWpp5!Lxy!7zeWSM2;j)8WdZpAtTl#=G=hk|W);b4d0C)hm9BKrB41j&5l+jvO zTIJ!-9n=(Lq+|U023>cPbJ%|AfoO1&JPHSy= z#-I-38#S=1s#PPll|Bv7ruxBPurmD9^~_868PqKU(q)KgV~lmqS*4WabrF>_Mc%3e%P91c+|`>Eso3-#x=v$M0bOeo55&Qaz;4S;ur2el!lthHJx zr4t;^KPx?G4Iqq0qorBzvHEfn*j8UA>GYq&Fy){bfKdjh^`JeiHCb!PT8lC<=am~{ zI$?F$?(XhV0^U}i>i86W8EQn7hjE(bM@5K{VMuF7q>TG@IiRZpUs~Uj^j~v=-T~kk zkV5(q!z%#a02pR~NC0Iii{T6a*gV7p5U&c@b8MQu#Dj{ImE|3k&)x#)fy0952%utu zEZ~R-J;t@f1dsp{Kmter2_OL^fW!ol01`j~=;;Hxy1MGTespy7B=r9)pjD0Aw2@z0 zzm3K5cpSH})6>)V9P|MG0&ouCR{*~NI0En;04F&}lC%I4Kmter2_OL^fW!ol01`j~ zNB{{S0VIIL1dsp{Kmter2_OOV60F^!c7A^TNfkYDedmWwfQLP)FWs&HyaDh#fZzE1 z7Qp-T<%RD7`~=`<06zlw0rL%J7F&Fd<_THE{1X(nn15K{9`n8Pfe#oicz)mpz#j}{ zglu!`GY2%`e&298L5hYS_`o;cu<&mH6|${~&lpg{o|F22gZci|ItMfXaLs~u99|9` z`=_3vr3ktM@DG4LnMV!&xJk{#fcaNXZcuD&eddiy-F7BB)C*f9rKDVE qM*tA=9d-#8y%5h?wH6Bbn&>01;wdiu$L2Bs0000;usVo32vdPsf>J@83dB?pSq+4ft1i+tC;E`P*npJ7 zQW29_Bmgc5dx$r~@kj2wM`hoIaZkH^q+2uf5yR6ta~$Q3a9 z07MH!1w;jeoRmAtxot-u0mvEl=FhCSEStt?TOb8K zXbxz}8mTP~rX4gDFh!DHND^d;%uG9IDqzX=!e&SwkOxtkG}cnUl(5qOmnCAyPP77G zEV&kb0Y8ABh>!a$p$lXw?#u;R7DyfYRft@3{+H~u{+~-ACP)R^Ss-ZyV1}Fb_sAr# zJ*5(Pk~wbnT3`|Y1q;j_`c$;ve3KMWgKcdwGijs|fT=^D42!iINowCMf8(7=BP|Qq zP+?!P7RWYOYe)Hq5C6~=PHWf|NdNwL7N+PcEo?=}^oIEazJ*YVDB`nW`--0D z_}XX`LXSug*0kq^J(qyJ8ni0G087`V8xL3=N7 z;PS%q{5Ck(`~huz?FN^;k}Tgv+zpOC0B`6(#0xP1qqo550}w3`6%Z8=dJaK}0f-ie j3Wy2_J%^x-J^;S~U}GqChS#!i00000NkvXXu0mjfwJmLQ literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/no_note.png b/android/res/drawable-hdpi/no_note.png new file mode 100644 index 0000000000000000000000000000000000000000..29c716c719d5878ca0091737f6c2c03f988e6b07 GIT binary patch literal 1235 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 N002ovPDHLkV1fwI`X~SZ literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/play.png b/android/res/drawable-hdpi/play.png new file mode 100644 index 0000000000000000000000000000000000000000..a2db4775afbdf9061b80c8fb3dae0087690aa6dc GIT binary patch literal 731 zcmV<10wn#3P)3}ql<)C;l96ZL> zuC$5Yj3=jfHJYz)X?Ks7%O!`*NeIC@22)P9+pTpBrVI)g6fh{@z!h-t3Fue?1@HuX zsYYW!R|OQn4RE>p&6YkUI0CML5=qEHC#1A!c)%EV0bY?rtopt%C7PeX3GfMAA!U(; zKg9S7%#pGvfqU(jYZI#x8Uc6wBw`U`5e;JZ0jG#RJR^x%#ayflsT!dvaE5q;D}P8i z3yctdD3Jc)KGniaShT`p#2*SI5sTCT)UlifCx|~hApT%d79NJ7b700#Yn>Di34q`J zP$Gj?61;7QjDbg_tuBH0*b915z+Wc78*q!1MKpgn4k6(9xdWW4Ct?XnN*5e<=3d1DfbPcITdeifZhBKt7wRwtvjg1DdGX z>KQH7urCUzSo6h^Cr3~pwte;3QyCZ2_B|FQ-%Z#B`_#pP=Iv|rW||%z5%yrpuZExzmWg{ N002ovPDHLkV1n(*Avyp6 literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/play_piano.png b/android/res/drawable-hdpi/play_piano.png new file mode 100644 index 0000000000000000000000000000000000000000..17dbd9924c59fbe466e20b2ce44d4211a1762158 GIT binary patch literal 1257 zcmV=P)FCPXm2{s{qHL)foB{m?sPzWleABZSctWa8li>^vriqaMrV(Y>v zQA$_3(q_|-MOTFuY|u@GZW_=KK?8x1YOAJgnuJs%P5O?DGuJzrci%^w+&5R=JusYk zXU>~5_uT)PIWu=MLqkJUGS!GkP|rlPON1;+zf`@bzRO`ZuU<_yn+=q+5$#nGf6f5C zzzMq_;BJK8I$*TG0Q1=`wZCQS*$Aje3J_4Slp>(w5m50CNJAh+K#Bn0WAI8T0#XE| z2&ixbRJ;Sy5J(Y_BEa_;yi)3bGz3xvqzLdm2CtMl;66e?fR+;V9=PWbEx*5e(yI~? z3Y5o0Bx6b-YY>rbj@~8_sWv5$)r!dWBK_wprS`XMz0APC0ObEfWmBO~S^rzTB+UV5 zfvr$0;~tF#cezZ2>8M9M)ctU)&L#AFL4`Bf&>0CyvC8Qp&SlKKnUccr^;a@ z2?)qXUF9&61Oz;2_<|#Uwj9QjfPi4)b1yM<6J~9(Q4$dFu;K2TScRhFcAUnOfPmG8 z--&2jMd*NO-~w>b$hV)bfuXfs|&3~(bT~1q_Rj;<}1m!=wKIed7va=m9;plW&?N2yu zg1+U5;^F~Y`-;jO?& zrrv`dyA9il#ZHCeDjgy+Dk3|a6X#h+ug;v_A|hQ*+gl>?f{45u(f_>R-HyD?vFB|S z=tU1azW}~R4?+b!26O3CV2W@B2>$W`<;2kbPw8Q6!e*+K|in-1Pb z|DOXlfgO(A-En$xKoy$A1oQ#$F`5TVt&olVdE~RMz()wwlA9xJ00z+w(IUCWV=F~- zILouoRlufQr~?G}33x6h+jFkK2Lhrz{yO1ucZ&ENaNQO7K)@oJrnXtKdNjZP6Zkbo z+qrXq2M1))?dx7geiVKCZ^mSI6m|X*@|6diA=d%Dro=@T4EH_>3Yw1IVP!8+6r+no zY|wllAcM}vmw=6BwEJU}&=&##zM^~%7(>q%a}nTiJ3NSHe$B-cSAhD-b93ZhFERh) TFun`t00000NkvXXu0mjfCr&EX literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/quarter_note.png b/android/res/drawable-hdpi/quarter_note.png new file mode 100644 index 0000000000000000000000000000000000000000..a946f0e3c4043a6ac4379337599cdaf80086c020 GIT binary patch literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf4nJ za0`Jjs#s@8s6}~zm0)`af_#mV@SoEw=)d=oE!z(?0H)6F5dQ# zYtDfRW?QDcyyg>xC8VnR9td{m@`hLRn(AM((@Bf})WqUic4N)&`jc!zhYYNL``*)O z{#xaGlBaxk>?@f`Mme|5O8Gn|G8#FsiR3x3u~xj?Ti+vV(=N7y^_at3K^u1FyoT2w zq~^--6sWQ@$G{YRWDVdx!5}%os(r}{hAc)&1?HgV6GTK8{1DUF$8dDJ1G;>HAhX*6 z=ZJELt=}t|*EC$;ux+{r*B@R9#?2ePncrQ`^zLxfmuc0CHoP+umRs6=tQP&i;$xT` z^U)}wNwfCNmHH%^q#chE4{%ujEH=9z$f)~4Qt_Ij4bP0iUEhxH=#qFXEyp_J7#|0Z zOcIlwuE6In)_=GbIBLuf{Bc)#MLVPE$J-B>E4pQbKWH8hl1@qb#B)aZI7>}bLZdBb zQe;5;4801GgznxA+UMlkW(k~r>-XTR$c=>U`}W^qwaUu*Jln%k_Q+?$9S7gB?BB`z zE%S%^cE=68XEvS{`C0F9T&&tkNB?8;@(Gs}o;0~Ve8jy#YyzW^0x(oH_c6p@3jA25 Uuz8IiFn$?4UHx3vIVCg!04TlXM*si- literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/sixteenth_note.png b/android/res/drawable-hdpi/sixteenth_note.png new file mode 100644 index 0000000000000000000000000000000000000000..00b946e75d17ffde8aa7003ebec6bf32663e1676 GIT binary patch literal 1220 zcmV;#1UvhQP)Pp$^p|BXm&;k&BTQMfOEfK}3o~Are^9qKF#WL|wdeyk1J%M1aw5bFMeDeujBPUjcmu^c9ee0`9^9j`xx@hXA}? z`@LBTz%9Kb&mjfw#9ExkQf$DFy&}&+0oP&~mSYev9856+9l3K0dN7AH|Se~!`Rp^X-)w+k8`-XLH|v78t=42noA0hgai+{=x=B9w?qScpZMi9e4=)aDA7)~7qP1qQ7#H7V}<{~!%}KoDOHMLOg1CVMFH(t;my)#v$fLx z@P0GmTmnFOD?Bcx!gf5XRRA(c0ot>|yK$?uS2X>Ewj?5C(k@2CM-g$MLH|%h?5SO! zj)-Fsu_7Y2HRH`G1z;4{DQATbNUm`^UTZ{{TLAvT19(GgEBq_I!97yYek&r(DFtS? z(TLa>5#L9|zjb}9BVtqSdT&Hr77;rZN(#&%l(WL$;%_Mp_7xH3R0WD~L2E1gfpmH- zM6L>`M>8w@CZ523__TiFLJ0tkt?&=Hh%Jf&ka-H!IDk(>|U~E=vdX#N~(>R9buuXD;%ZdgL?BBn?!+W&E2#!j**a;@E6<=V5bP&3# zjrnV&4e$(ZY&57U1&l}=QL|NVg|)i-J4`7nTtyWamR7!-m!H8ZOiN{~6YRyk(x&94n$V@6!ph>JR#v!z6zJvZ&!E!)u!yX1BP|2B$Qz z!c_!dQnIkeb#I2IYFwS330k76Dlm?__2w)v-lJzKM3rT5Tsjk!IStOnlJA+ literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/stop.png b/android/res/drawable-hdpi/stop.png new file mode 100644 index 0000000000000000000000000000000000000000..3e6611876c134be4850ca4d3aca28076cf505cbf GIT binary patch literal 340 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=EX7WqAsj$Z!;#Vf4nJ za0`Jjs#s@8s6}~zYQqA&eO#)q+-t7TN^nK7zi*Qkl6D->E6k6 zTxz`>R#!FU3X7(0yjC^K_`Kyy=|wZE-+$q~DB!@r_>}1tw*ey)hsS*ZUPgJAKMOY& z{#IoCn(t7{s0Ne6LmwJX|D!iA7+-K1C@e4uu6VNLn2J zve=0f{AIr;pTzW)^~!!m7J&f01^XC;6&f0V7GDwnz_f130rSAk|HObUXYh3Ob6Mw< G&;$V8CvXP< literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/thirtysecond_note.png b/android/res/drawable-hdpi/thirtysecond_note.png new file mode 100644 index 0000000000000000000000000000000000000000..e63b2ee13dfbe9a91d63fb5f141d11b7d971cb0b GIT binary patch literal 1445 zcmV;W1zP%vP)aWF{siXl2VvYW8Pns%4#X&HfBcwN(bJGGLVf!7yM4kO96-5;TMW zyyyQufCb>eB*8;Sfk%N};407#Yyo~q3Oob`+y!(1oj?{i1U#1%cnAytqkh)+p91=T zOGyBSzyPoSELtaU4%-xG8wC!90j1Uli~)Or=|+G;VSs!qX2L_j6!0mNqz;56eaGxLV0Nw^3jsqM@ z3RIH9W58Fy=Rm*r=?69vLl=a?fKn@!!gE+aKE>$Y1&jhORRaoz0db`872sJcHEzdF ziXNa)2{;r6)FOplY=8Ku5^yL1fcR2)5=(_a;8m&xAdnP*+NAJ7U>mkqR4k#j zNg|Mzk#teg^)ll*Nk@EtTGA(y)=GM&5^kGwjzC(@Ik(<9ciuU7t&C5%bMAoe=bdv` zoO6Sfa6{Sypf)M|EAS2QIB+-cTNGeODUg%YE$NV?VM$vheJAO^62A?Sw)_53NoyqS zEr**qdGcghtCf`f0j%SO6#fTOdY7;jFO|Xo7ceQj2Ga*Wb3-LAu}~P0De8AhIwxtp zY(pHAv`x}vkx##*jgl55otAX}t*{9ew?60Gm~-x4|9Z|jx5GJi!N2Zu&W-y13Fq8` zb8aByO|TIu{5`M$JPmwS3LHubEL!RN?UMFM`pHv%R?<#M^OAZc?e>0Cl6FO5hr$48 zObVX`Mlc2~k-jU%fF4OhlEx(!wA>1QY{>gYVO*6oSK%3(CGGe9gOYxc)F)|+q%)GT zlGc^Z%jEO=;~&-2=veA)>3oV0D2zeg8P{8gLkRtK7rV zWI(^{XgVwtFmdN~`#F;yqj+ps(s@bOD$G6L`*}%MBn?)2URrxVKXxaNyXsNa%kqDR z`5V{;yu(c_g?oHH*RtxB*swO@{luhj8Vnf5Rxc@Qi+E4Os|tS${EM9k$D+W~2*6O% zfGjVCE!uUeSA|bwx5r3JBL#X>z|2$`pOdsh(gpvzOVX(CpOD=N239Hsnq_rK;gD*A zzsK;ICAum+g`FPDEDZ+CknAQ1CW5|>>06T&P9p%PF!hzB<$*VA@Gq?jp8?*$3M=!) zj%jRy$0f}qh&SUgYnd~xrB&g}k~(C!#3jCI1fU>kPt?QeX!9PcP{-V+O5sW1F<_kf z_k$T=kH@OVVoBjNkHJYykTiN5Y{ZTNPhh_yM=HV0$jC^8&xmC`*lO;GhQaKd(< zd-AhLEkYItESAa7B9#bf9kAFYKZ~+O2+Lqf2UKmDsx-1Xpar<@DVHqh1}4&U%(@CR z00*-S;0Xa^^(?0>X!5)f%{cbm*cK>pJ!Y=Y3vJ<)=63}X@#UC zlBRs*?NfjrNo{Tt(~>?*8k5wYz`Y`A#&N&9&lyR*3EZ2KUP<~Q>8BI)fTW9(erL_w z*R#NF;1h5^79RqR1LuKNF7^a?1iXxK2Y~%~gUeKqpWi0SaFNg%_akB~W+)LJ0&11PA1u zL#_w{gc1l22oA_Qhg=aH5F8L3P;dtnUVu;n!2!VmdFPNTso`@9LBqcqVm;14BHMu6=J+!K`Q_c`#3(w?AuKyw1O z1-J$b1K)s+zztxJkEDGsgPpD|1nng6D@wvX*SsUE115mOo^r{8RJ%kWy#xBvUa&$q z6gloIr(;?N^rq=lCG?d;PAkCwvs*ko3l#lXAUL4t4k)?+e*qv`T29?!TQvXx002ov JPDHLkV1ifDex3jT literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/unknown_note.png b/android/res/drawable-hdpi/unknown_note.png new file mode 100644 index 0000000000000000000000000000000000000000..301bcbb627a156a5f475df106a6fd8720078aa24 GIT binary patch literal 731 zcmV<10wn#3P)o z4V))ltq1KtlZm~N?A7L5X{E_#vms}lJLj~0P}TY2aM1QaRYrgjU<71NK=uK!6fgpe z0Bs*sWds-jMnL8SC6Di4}PBmSIzZv)3z4&DH#Fx zz;%!IbKnVh0B%G)YLtS2NB;e@eRT~Kz;Y;OVo4LQpgs6Ko`^NaxnAK18n?e{+O8!W zoUB$WiRXg<=eEE!u>HjkboWWW3XgxNSB@vl!F1-FL+G<~&P^lR!a2A5qF?Qt`xV(P zn!bbkDVYL`=>9jJi2u<&a2wew1kylq5{#F-KF;s(>2ev^%9B0nkQ4!3&Te}?lgHTl{6@VS5Iegb)6R88nxEt&$p8g=TK^j{C zN_^=Y>J`aScti&xB|dG!%5je;LTp7C3jrSuzC!qHUmZd=U0myz1FanH#%n8Uo0G0wqfDxeWgQ~I*z#GIR!mjB5JD~so N002ovPDHLkV1n?YH)sF= literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/up.png b/android/res/drawable-hdpi/up.png new file mode 100644 index 0000000000000000000000000000000000000000..affd1d9a36c33f0a0276bae265c52dc567a69f0d GIT binary patch literal 765 zcmV+BPz)#rSodJc zJs9Br{8h!;fC|{09=E`!b_3Q1IAD7AxY2IF(tsLRojqUCS@5RWgyjI-mDg&`Cajh~ z11vARzC69xYBgeEz>M2xdw+%(Vm>;$qK-cr4~HAT{=Uh{j?L0~~3w=cB()2)U^8B5gngtR)LxVNGYkXKEqo z0ko3E0zRuwEh4!DYA)aA%Ec0aSd=uNl`1swGpm#WQU>^LbLFDHeHNWM5(fBga^}X- znGh9=5(YT(#-5L)SWGpbLMQfoM8{&P0d308!n8!hVu}GT=*FIpC0$RiLv~6TK+f;` zvGmso!Ne{BhfVDHnA7#M*z+-^>#+&hc&GsjhW&TP ziWS`u-hCSm9l$-F_^z=fAQp!#fqRQRA3?D=WB~u^==XSIamW&=QoFfFtbZqHj`i;Z v%_#;H1IBK^=m$`iKrx^gVBLc$qaVOG$f*dASFCd?00000NkvXXu0mjf45~-k literal 0 HcmV?d00001 diff --git a/android/res/drawable-hdpi/voice.png b/android/res/drawable-hdpi/voice.png new file mode 100644 index 0000000000000000000000000000000000000000..c922da3f5d1f3a3664d012a66434a28265d4cca9 GIT binary patch literal 1462 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 + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/res/layout/chord_grid.xml b/android/res/layout/chord_grid.xml new file mode 100644 index 0000000..74ae93c --- /dev/null +++ b/android/res/layout/chord_grid.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/res/layout/effects.xml b/android/res/layout/effects.xml new file mode 100644 index 0000000..f7042ad --- /dev/null +++ b/android/res/layout/effects.xml @@ -0,0 +1,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/res/layout/karplus_strong.xml b/android/res/layout/karplus_strong.xml new file mode 100644 index 0000000..a906b2c --- /dev/null +++ b/android/res/layout/karplus_strong.xml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/res/layout/low_pass_filter.xml b/android/res/layout/low_pass_filter.xml new file mode 100644 index 0000000..5bfe498 --- /dev/null +++ b/android/res/layout/low_pass_filter.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/res/layout/main.xml b/android/res/layout/main.xml new file mode 100644 index 0000000..e826559 --- /dev/null +++ b/android/res/layout/main.xml @@ -0,0 +1,45 @@ + + + + +