├── .gitignore ├── .gitmodules ├── README.md ├── __init__.py ├── blades ├── __init__.py └── hardware_design │ ├── Blades.xlsx │ ├── panel │ ├── blades.ai │ └── blades.dwg │ └── pcb │ ├── blades_v40.brd │ └── blades_v40.sch ├── blinds ├── __init__.py └── hardware_design │ ├── Blinds.xlsx │ ├── panel │ ├── blinds.ai │ └── blinds.dwg │ └── pcb │ ├── blinds_v60.brd │ └── blinds_v60.sch ├── braids ├── README.md ├── __init__.py ├── analog_oscillator.cc ├── analog_oscillator.h ├── bootloader │ ├── __init__.py │ ├── bootloader.cc │ ├── characters.cc │ ├── characters.h │ └── makefile ├── braids.cc ├── data │ ├── map.bin │ └── waves.bin ├── digital_oscillator.cc ├── digital_oscillator.h ├── drivers │ ├── adc.cc │ ├── adc.h │ ├── dac.cc │ ├── dac.h │ ├── debug_pin.cc │ ├── debug_pin.h │ ├── display.cc │ ├── display.h │ ├── encoder.cc │ ├── encoder.h │ ├── gate_input.cc │ ├── gate_input.h │ ├── internal_adc.cc │ ├── internal_adc.h │ ├── system.cc │ ├── system.h │ ├── uart_logger.cc │ └── uart_logger.h ├── envelope.h ├── excitation.h ├── hardware_design │ ├── Braids.xlsx │ ├── panel │ │ ├── braids.ai │ │ └── braids.dwg │ └── pcb │ │ ├── braids_v50.brd │ │ └── braids_v50.sch ├── macro_oscillator.cc ├── macro_oscillator.h ├── makefile ├── parameter_interpolation.h ├── quantizer.cc ├── quantizer.h ├── quantizer_scales.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── characters.py │ ├── lookup_tables.py │ ├── resources.py │ ├── waveforms.py │ └── waveshapers.py ├── settings.cc ├── settings.h ├── signature_waveshaper.h ├── svf.h ├── test │ ├── braids_test.cc │ └── makefile ├── ui.cc ├── ui.h └── vco_jitter_source.h ├── branches ├── bootloader │ ├── bootloader.cc │ └── makefile ├── branches.cc ├── hardware_design │ ├── Branches.xlsx │ ├── panel │ │ ├── branches.ai │ │ └── branches.dwg │ └── pcb │ │ ├── branches_v40.brd │ │ └── branches_v40.sch └── makefile ├── clouds ├── __init__.py ├── bootloader │ ├── __init__.py │ ├── bootloader.cc │ └── makefile ├── clouds.cc ├── cv_scaler.cc ├── cv_scaler.h ├── drivers │ ├── adc.cc │ ├── adc.h │ ├── codec.cc │ ├── codec.h │ ├── debug_pin.h │ ├── debug_port.cc │ ├── debug_port.h │ ├── gate_input.cc │ ├── gate_input.h │ ├── leds.cc │ ├── leds.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ ├── system.h │ └── version.h ├── dsp │ ├── audio_buffer.h │ ├── correlator.cc │ ├── correlator.h │ ├── frame.h │ ├── fx │ │ ├── diffuser.h │ │ ├── fx_engine.h │ │ ├── pitch_shifter.h │ │ └── reverb.h │ ├── grain.h │ ├── granular_processor.cc │ ├── granular_processor.h │ ├── granular_sample_player.h │ ├── looping_sample_player.h │ ├── mu_law.cc │ ├── mu_law.h │ ├── parameters.h │ ├── pvoc │ │ ├── frame_transformation.cc │ │ ├── frame_transformation.h │ │ ├── phase_vocoder.cc │ │ ├── phase_vocoder.h │ │ ├── stft.cc │ │ └── stft.h │ ├── sample_rate_converter.h │ ├── window.h │ └── wsola_sample_player.h ├── hardware_design │ ├── Clouds.xlsx │ ├── panel │ │ ├── clouds.ai │ │ └── clouds.dwg │ └── pcb │ │ ├── clouds_v30.brd │ │ └── clouds_v30.sch ├── makefile ├── meter.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ ├── resources.py │ └── src_filters.py ├── settings.cc ├── settings.h ├── test │ ├── clouds_test.cc │ └── makefile ├── ui.cc └── ui.h ├── ears └── hardware_design │ ├── Ears.xlsx │ ├── panel │ ├── ears_panel_v30.brd │ └── ears_panel_v30.sch │ └── pcb │ ├── ears_v40.brd │ └── ears_v40.sch ├── edges ├── __init__.py ├── adc_acquisition.cc ├── adc_acquisition.h ├── audio_buffer.cc ├── audio_buffer.h ├── bootloader │ ├── bootloader.cc │ └── makefile ├── digital_oscillator.cc ├── digital_oscillator.h ├── edges.cc ├── hardware_config.h ├── hardware_design │ ├── Edges.xlsx │ ├── panel │ │ ├── edges.ai │ │ └── edges.dwg │ └── pcb │ │ ├── edges_expander_v01.brd │ │ ├── edges_expander_v01.sch │ │ ├── edges_v20.brd │ │ └── edges_v20.sch ├── makefile ├── midi.h ├── midi_handler.cc ├── midi_handler.h ├── note_stack.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ ├── resources.py │ └── waveforms.py ├── settings.cc ├── settings.h ├── storage.h ├── timer_oscillator.cc ├── timer_oscillator.h ├── ui.cc ├── ui.h ├── voice_allocator.cc └── voice_allocator.h ├── elements ├── __init__.py ├── bootloader │ ├── __init__.py │ ├── bootloader.cc │ └── makefile ├── cv_scaler.cc ├── cv_scaler.h ├── drivers │ ├── codec.cc │ ├── codec.h │ ├── cv_adc.cc │ ├── cv_adc.h │ ├── debug_pin.h │ ├── debug_port.cc │ ├── debug_port.h │ ├── gate_input.cc │ ├── gate_input.h │ ├── leds.cc │ ├── leds.h │ ├── pots_adc.cc │ ├── pots_adc.h │ ├── switch.cc │ ├── switch.h │ ├── system.cc │ └── system.h ├── dsp │ ├── dsp.h │ ├── exciter.cc │ ├── exciter.h │ ├── fx │ │ ├── diffuser.h │ │ ├── fx_engine.h │ │ └── reverb.h │ ├── multistage_envelope.cc │ ├── multistage_envelope.h │ ├── ominous_voice.cc │ ├── ominous_voice.h │ ├── part.cc │ ├── part.h │ ├── patch.h │ ├── resonator.cc │ ├── resonator.h │ ├── string.cc │ ├── string.h │ ├── tube.cc │ ├── tube.h │ ├── voice.cc │ └── voice.h ├── elements.cc ├── hardware_design │ ├── Elements.xlsx │ ├── panel │ │ ├── elements.ai │ │ └── elements.dwg │ └── pcb │ │ ├── elements_v02.brd │ │ └── elements_v02.sch ├── makefile ├── meter.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── audio_io.py │ ├── lookup_tables.py │ ├── resources.py │ └── samples.py ├── samples │ ├── hit_01.wav │ ├── hit_02.wav │ ├── hit_03.wav │ ├── hit_04.wav │ ├── hit_05.wav │ ├── hit_06.wav │ ├── hit_07.wav │ ├── hit_08.wav │ ├── hit_09.wav │ └── noise.wav ├── test │ ├── elements_test.cc │ └── makefile ├── ui.cc └── ui.h ├── frames ├── __init__.py ├── bootloader │ ├── __init__.py │ ├── bootloader.cc │ └── makefile ├── drivers │ ├── adc.cc │ ├── adc.h │ ├── channel_leds.cc │ ├── channel_leds.h │ ├── dac.cc │ ├── dac.h │ ├── factory_testing_switch.h │ ├── keyframe_led.cc │ ├── keyframe_led.h │ ├── rgb_led.cc │ ├── rgb_led.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ ├── system.h │ ├── trigger_output.cc │ ├── trigger_output.h │ ├── uart_logger.cc │ └── uart_logger.h ├── frames.cc ├── hardware_design │ ├── Frames.xlsx │ ├── panel │ │ ├── frames.ai │ │ └── frames.dwg │ └── pcb │ │ ├── frames_v03.brd │ │ └── frames_v03.sch ├── keyframer.cc ├── keyframer.h ├── makefile ├── poly_lfo.cc ├── poly_lfo.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ ├── resources.py │ └── waveforms.py ├── ui.cc └── ui.h ├── grids ├── __init__.py ├── bootloader │ ├── bootloader.cc │ └── makefile ├── clock.cc ├── clock.h ├── grids.cc ├── hardware_config.h ├── hardware_design │ ├── Grids.xlsx │ ├── panel │ │ ├── grids.ai │ │ └── grids.dwg │ └── pcb │ │ ├── grids_v02.brd │ │ └── grids_v02.sch ├── makefile ├── pattern_generator.cc ├── pattern_generator.h ├── resources.cc ├── resources.h └── resources │ ├── __init__.py │ ├── lookup_tables.py │ └── resources.py ├── kinks └── hardware_design │ ├── Kinks.xlsx │ ├── panel │ ├── kinks.ai │ └── kinks.dwg │ └── pcb │ ├── kinks_v41.brd │ └── kinks_v41.sch ├── links └── hardware_design │ ├── Links.xlsx │ ├── panel │ ├── links.ai │ └── links.dwg │ └── pcb │ ├── links_v40.brd │ └── links_v40.sch ├── marbles ├── __init__.py ├── bootloader │ ├── __init__.py │ ├── bootloader.cc │ └── makefile ├── clock_self_patching_detector.h ├── cv_reader.cc ├── cv_reader.h ├── cv_reader_channel.h ├── drivers │ ├── adc.cc │ ├── adc.h │ ├── clock_inputs.cc │ ├── clock_inputs.h │ ├── dac.cc │ ├── dac.h │ ├── debug_pin.h │ ├── debug_port.h │ ├── gate_outputs.h │ ├── leds.cc │ ├── leds.h │ ├── rng.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ └── system.h ├── hardware_design │ ├── Marbles.xlsx │ ├── panel │ │ ├── marbles_v70.ai │ │ └── marbles_v70.dwg │ └── pcb │ │ ├── marbles_v70.brd │ │ └── marbles_v70.sch ├── io_buffer.h ├── makefile ├── marbles.cc ├── note_filter.h ├── ramp │ ├── ramp.h │ ├── ramp_divider.h │ ├── ramp_extractor.cc │ ├── ramp_extractor.h │ ├── ramp_generator.h │ └── slave_ramp.h ├── random │ ├── discrete_distribution_quantizer.cc │ ├── discrete_distribution_quantizer.h │ ├── distributions.h │ ├── lag_processor.cc │ ├── lag_processor.h │ ├── output_channel.cc │ ├── output_channel.h │ ├── quantizer.cc │ ├── quantizer.h │ ├── random_generator.h │ ├── random_sequence.h │ ├── random_stream.h │ ├── t_generator.cc │ ├── t_generator.h │ ├── x_y_generator.cc │ └── x_y_generator.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ └── resources.py ├── scale_recorder.h ├── settings.cc ├── settings.h ├── test │ ├── fixtures.h │ ├── makefile │ ├── marbles_test.cc │ └── ramp_checker.h ├── ui.cc └── ui.h ├── peaks ├── __init__.py ├── bootloader │ ├── bootloader.cc │ └── makefile ├── calibration_data.cc ├── calibration_data.h ├── data │ └── digits.bin ├── drivers │ ├── adc.cc │ ├── adc.h │ ├── dac.cc │ ├── dac.h │ ├── debug_pin.h │ ├── gate_input.cc │ ├── gate_input.h │ ├── leds.cc │ ├── leds.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ └── system.h ├── drums │ ├── bass_drum.cc │ ├── bass_drum.h │ ├── excitation.h │ ├── fm_drum.cc │ ├── fm_drum.h │ ├── high_hat.cc │ ├── high_hat.h │ ├── snare_drum.cc │ ├── snare_drum.h │ └── svf.h ├── gate_processor.h ├── hardware_design │ ├── Peaks.xlsx │ ├── panel │ │ ├── peaks.ai │ │ └── peaks.dwg │ └── pcb │ │ ├── peaks_v30.brd │ │ └── peaks_v30.sch ├── io_buffer.h ├── makefile ├── modulations │ ├── bouncing_ball.h │ ├── lfo.cc │ ├── lfo.h │ ├── mini_sequencer.h │ ├── multistage_envelope.cc │ └── multistage_envelope.h ├── number_station │ ├── number_station.cc │ └── number_station.h ├── peaks.cc ├── processors.cc ├── processors.h ├── pulse_processor │ ├── pulse_randomizer.cc │ ├── pulse_randomizer.h │ ├── pulse_shaper.cc │ └── pulse_shaper.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ ├── resources.py │ └── waveforms.py ├── test │ ├── makefile │ └── peaks_test.cc ├── ui.cc └── ui.h ├── plaits ├── __init__.py ├── bootloader │ ├── bootloader.cc │ └── makefile ├── drivers │ ├── audio_dac.cc │ ├── audio_dac.h │ ├── cv_adc.cc │ ├── cv_adc.h │ ├── debug_pin.h │ ├── debug_port.cc │ ├── debug_port.h │ ├── firmware_update_adc.cc │ ├── firmware_update_adc.h │ ├── leds.cc │ ├── leds.h │ ├── normalization_probe.h │ ├── pots_adc.cc │ ├── pots_adc.h │ ├── switches.cc │ └── switches.h ├── dsp │ ├── chords │ │ ├── chord_bank.cc │ │ └── chord_bank.h │ ├── downsampler │ │ └── 4x_downsampler.h │ ├── drums │ │ ├── analog_bass_drum.h │ │ ├── analog_snare_drum.h │ │ ├── hi_hat.h │ │ ├── synthetic_bass_drum.h │ │ └── synthetic_snare_drum.h │ ├── dsp.h │ ├── engine │ │ ├── additive_engine.cc │ │ ├── additive_engine.h │ │ ├── bass_drum_engine.cc │ │ ├── bass_drum_engine.h │ │ ├── chord_engine.cc │ │ ├── chord_engine.h │ │ ├── engine.h │ │ ├── fm_engine.cc │ │ ├── fm_engine.h │ │ ├── grain_engine.cc │ │ ├── grain_engine.h │ │ ├── hi_hat_engine.cc │ │ ├── hi_hat_engine.h │ │ ├── modal_engine.cc │ │ ├── modal_engine.h │ │ ├── noise_engine.cc │ │ ├── noise_engine.h │ │ ├── particle_engine.cc │ │ ├── particle_engine.h │ │ ├── snare_drum_engine.cc │ │ ├── snare_drum_engine.h │ │ ├── speech_engine.cc │ │ ├── speech_engine.h │ │ ├── string_engine.cc │ │ ├── string_engine.h │ │ ├── swarm_engine.cc │ │ ├── swarm_engine.h │ │ ├── virtual_analog_engine.cc │ │ ├── virtual_analog_engine.h │ │ ├── waveshaping_engine.cc │ │ ├── waveshaping_engine.h │ │ ├── wavetable_engine.cc │ │ └── wavetable_engine.h │ ├── engine2 │ │ ├── arpeggiator.h │ │ ├── chiptune_engine.cc │ │ ├── chiptune_engine.h │ │ ├── phase_distortion_engine.cc │ │ ├── phase_distortion_engine.h │ │ ├── six_op_engine.cc │ │ ├── six_op_engine.h │ │ ├── string_machine_engine.cc │ │ ├── string_machine_engine.h │ │ ├── virtual_analog_vcf_engine.cc │ │ ├── virtual_analog_vcf_engine.h │ │ ├── wave_terrain_engine.cc │ │ └── wave_terrain_engine.h │ ├── envelope.h │ ├── fm │ │ ├── algorithms.cc │ │ ├── algorithms.h │ │ ├── dx_units.cc │ │ ├── dx_units.h │ │ ├── envelope.h │ │ ├── lfo.h │ │ ├── operator.h │ │ ├── patch.h │ │ └── voice.h │ ├── fx │ │ ├── diffuser.h │ │ ├── ensemble.h │ │ ├── fx_engine.h │ │ ├── low_pass_gate.h │ │ ├── overdrive.h │ │ └── sample_rate_reducer.h │ ├── noise │ │ ├── clocked_noise.h │ │ ├── dust.h │ │ ├── fractal_random_generator.h │ │ ├── particle.h │ │ └── smooth_random_generator.h │ ├── oscillator │ │ ├── formant_oscillator.h │ │ ├── grainlet_oscillator.h │ │ ├── harmonic_oscillator.h │ │ ├── nes_triangle_oscillator.h │ │ ├── oscillator.h │ │ ├── sine_oscillator.h │ │ ├── string_synth_oscillator.h │ │ ├── super_square_oscillator.h │ │ ├── variable_saw_oscillator.h │ │ ├── variable_shape_oscillator.h │ │ ├── vosim_oscillator.h │ │ ├── wavetable_oscillator.h │ │ └── z_oscillator.h │ ├── physical_modelling │ │ ├── delay_line.h │ │ ├── modal_voice.cc │ │ ├── modal_voice.h │ │ ├── resonator.cc │ │ ├── resonator.h │ │ ├── string.cc │ │ ├── string.h │ │ ├── string_voice.cc │ │ └── string_voice.h │ ├── speech │ │ ├── lpc_speech_synth.cc │ │ ├── lpc_speech_synth.h │ │ ├── lpc_speech_synth_controller.cc │ │ ├── lpc_speech_synth_controller.h │ │ ├── lpc_speech_synth_phonemes.cc │ │ ├── lpc_speech_synth_words.cc │ │ ├── lpc_speech_synth_words.h │ │ ├── naive_speech_synth.cc │ │ ├── naive_speech_synth.h │ │ ├── sam_speech_synth.cc │ │ └── sam_speech_synth.h │ ├── voice.cc │ └── voice.h ├── hardware_design │ ├── Plaits.xlsx │ ├── panel │ │ ├── plaits_v50.ai │ │ └── plaits_v50.dwg │ └── pcb │ │ ├── plaits_v50.brd │ │ └── plaits_v50.sch ├── makefile ├── plaits.cc ├── pot_controller.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── fm_patches.py │ ├── lookup_tables.py │ ├── resources.py │ ├── syx │ │ ├── Guit_Clav1.syx │ │ ├── Guit_Clav2.syx │ │ ├── Guit_Clav3.syx │ │ ├── Guit_Clav4.syx │ │ ├── Guit_Clav5.syx │ │ ├── KV04A.syx │ │ ├── KV04B.syx │ │ ├── MISC.syx │ │ ├── PPGVOCAL.SYX │ │ ├── ROM1A.syx │ │ ├── ROM1B.syx │ │ ├── ROM2A.syx │ │ ├── ROM2B.syx │ │ ├── ROM3A.syx │ │ ├── ROM3B.syx │ │ ├── ROM4A.syx │ │ ├── ROM4B.syx │ │ └── SYN9.SYX │ ├── waves.bin │ └── wavetables.py ├── settings.cc ├── settings.h ├── test │ ├── makefile │ └── plaits_test.cc ├── ui.cc ├── ui.h ├── user_data.h ├── user_data_receiver.cc └── user_data_receiver.h ├── rings ├── __init__.py ├── bootloader │ ├── __init__.py │ ├── bootloader.cc │ └── makefile ├── cv_scaler.cc ├── cv_scaler.h ├── drivers │ ├── adc.cc │ ├── adc.h │ ├── codec.cc │ ├── codec.h │ ├── debug_pin.h │ ├── debug_port.cc │ ├── debug_port.h │ ├── leds.cc │ ├── leds.h │ ├── normalization_probe.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ ├── system.h │ ├── trigger_input.cc │ ├── trigger_input.h │ └── version.h ├── dsp │ ├── dsp.h │ ├── fm_voice.cc │ ├── fm_voice.h │ ├── follower.h │ ├── fx │ │ ├── chorus.h │ │ ├── ensemble.h │ │ ├── fx_engine.h │ │ └── reverb.h │ ├── limiter.h │ ├── note_filter.h │ ├── onset_detector.h │ ├── part.cc │ ├── part.h │ ├── patch.h │ ├── performance_state.h │ ├── plucker.h │ ├── resonator.cc │ ├── resonator.h │ ├── string.cc │ ├── string.h │ ├── string_synth_envelope.h │ ├── string_synth_oscillator.h │ ├── string_synth_part.cc │ ├── string_synth_part.h │ ├── string_synth_voice.h │ └── strummer.h ├── hardware_design │ ├── Rings.xlsx │ ├── panel │ │ ├── rings.ai │ │ └── rings.dwg │ └── pcb │ │ ├── rings_v30.brd │ │ └── rings_v30.sch ├── makefile ├── meter.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ └── resources.py ├── rings.cc ├── settings.cc ├── settings.h ├── test │ ├── makefile │ └── rings_test.cc ├── ui.cc └── ui.h ├── ripples └── hardware_design │ ├── Ripples.xlsx │ ├── panel │ ├── ripples.ai │ ├── ripples.dwg │ ├── ripples2.ai │ └── ripples2.dwg │ └── pcb │ ├── ripples_v40.brd │ ├── ripples_v40.sch │ ├── ripples_v90.brd │ └── ripples_v90.sch ├── shades └── hardware_design │ ├── Shades.xlsx │ ├── panel │ ├── shades.ai │ ├── shades.dwg │ ├── shades2.ai │ └── shades2.dwg │ └── pcb │ ├── shades_v30.brd │ ├── shades_v30.sch │ ├── shades_v40.brd │ └── shades_v40.sch ├── shelves └── hardware_design │ ├── Shelves.xlsx │ ├── ShelvesExpander.xlsx │ ├── panel │ ├── shelves.ai │ ├── shelves.dwg │ ├── shelves_expander.ai │ ├── shelves_expander.dwg │ ├── shelves_mk2.ai │ └── shelves_mk2.dwg │ └── pcb │ ├── shelves_expander_v10.brd │ ├── shelves_expander_v10.sch │ ├── shelves_v05.brd │ ├── shelves_v05.sch │ ├── shelves_v60.brd │ └── shelves_v60.sch ├── stages ├── __init__.py ├── bootloader │ ├── bootloader.cc │ └── makefile ├── chain_state.cc ├── chain_state.h ├── cv_reader.cc ├── cv_reader.h ├── delay_line_16_bits.h ├── drivers │ ├── cv_adc.cc │ ├── cv_adc.h │ ├── dac.cc │ ├── dac.h │ ├── firmware_update_adc.cc │ ├── firmware_update_adc.h │ ├── firmware_update_dac.cc │ ├── firmware_update_dac.h │ ├── gate_inputs.cc │ ├── gate_inputs.h │ ├── leds.cc │ ├── leds.h │ ├── pots_adc.cc │ ├── pots_adc.h │ ├── serial_link.cc │ ├── serial_link.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ └── system.h ├── factory_test.cc ├── factory_test.h ├── hardware_design │ ├── Stages.xlsx │ ├── panel │ │ ├── stages_v70.ai │ │ └── stages_v70.dwg │ └── pcb │ │ ├── stages_v70.brd │ │ └── stages_v70.sch ├── io_buffer.h ├── makefile ├── oscillator.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ └── resources.py ├── segment_generator.cc ├── segment_generator.h ├── settings.cc ├── settings.h ├── stages.cc ├── test │ ├── fixtures.h │ ├── makefile │ └── stages_test.cc ├── ui.cc ├── ui.h └── variable_shape_oscillator.h ├── streams ├── __init__.py ├── audio_cv_meter.h ├── bootloader │ ├── __init__.py │ ├── bootloader.cc │ └── makefile ├── compressor.cc ├── compressor.h ├── cv_scaler.cc ├── cv_scaler.h ├── drivers │ ├── adc.cc │ ├── adc.h │ ├── dac.cc │ ├── dac.h │ ├── leds.cc │ ├── leds.h │ ├── pwm.cc │ ├── pwm.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ └── system.h ├── envelope.cc ├── envelope.h ├── filter_controller.h ├── follower.cc ├── follower.h ├── gain.h ├── hardware_design │ ├── Streams.xlsx │ ├── panel │ │ ├── streams.ai │ │ └── streams.dwg │ └── pcb │ │ ├── streams_v02_bargraph.brd │ │ ├── streams_v02_bargraph.sch │ │ ├── streams_v05.brd │ │ └── streams_v05.sch ├── lorenz_generator.cc ├── lorenz_generator.h ├── makefile ├── meta_parameters.h ├── processor.cc ├── processor.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ ├── resources.py │ └── waveforms.py ├── streams.cc ├── svf.cc ├── svf.h ├── ui.cc ├── ui.h ├── vactrol.cc └── vactrol.h ├── tides ├── __init__.py ├── bootloader │ ├── __init__.py │ ├── bootloader.cc │ └── makefile ├── cv_scaler.cc ├── cv_scaler.h ├── drivers │ ├── adc.cc │ ├── adc.h │ ├── dac.cc │ ├── dac.h │ ├── factory_testing_switch.h │ ├── gate_input.cc │ ├── gate_input.h │ ├── gate_output.cc │ ├── gate_output.h │ ├── leds.cc │ ├── leds.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ ├── system.h │ ├── uart_logger.cc │ └── uart_logger.h ├── easter_egg │ └── plotter_program.h ├── generator.cc ├── generator.h ├── hardware_design │ ├── Tides.xlsx │ ├── panel │ │ ├── sheep.ai │ │ ├── tides.ai │ │ └── tides.dwg │ └── pcb │ │ ├── tides_v40.brd │ │ └── tides_v40.sch ├── makefile ├── plotter.cc ├── plotter.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ ├── resources.py │ ├── waveforms.py │ ├── waves.bin │ └── wavetables.py ├── test │ ├── generator_test.cc │ └── makefile ├── tides.cc ├── ui.cc └── ui.h ├── tides2 ├── __init__.py ├── bootloader │ ├── bootloader.cc │ └── makefile ├── cv_reader.cc ├── cv_reader.h ├── cv_reader_channel.h ├── drivers │ ├── cv_adc.cc │ ├── cv_adc.h │ ├── dac.cc │ ├── dac.h │ ├── debug_pin.h │ ├── debug_port.cc │ ├── debug_port.h │ ├── firmware_update_adc.cc │ ├── firmware_update_adc.h │ ├── firmware_update_dac.cc │ ├── firmware_update_dac.h │ ├── gate_inputs.cc │ ├── gate_inputs.h │ ├── leds.cc │ ├── leds.h │ ├── pots_adc.cc │ ├── pots_adc.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ └── system.h ├── factory_test.cc ├── factory_test.h ├── hardware_design │ ├── Tides2.xlsx │ ├── panel │ │ ├── tides2.ai │ │ └── tides2.dwg │ └── pcb │ │ ├── tides2_v40.brd │ │ └── tides2_v40.sch ├── io_buffer.h ├── makefile ├── poly_slope_generator.cc ├── poly_slope_generator.h ├── ramp │ ├── ramp_extractor.cc │ ├── ramp_extractor.h │ └── ratio.h ├── ramp_generator.h ├── ramp_shaper.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── lookup_tables.py │ └── resources.py ├── settings.cc ├── settings.h ├── test │ ├── fixtures.h │ ├── makefile │ └── tides_test.cc ├── tides.cc ├── ui.cc └── ui.h ├── tools ├── __init__.py ├── hex2sysex │ ├── __init__.py │ └── hex2sysex.py ├── hexfile │ ├── __init__.py │ └── hexfile.py ├── learning │ ├── __init__.py │ └── som.py ├── midi │ ├── __init__.py │ └── midifile.py └── optimization │ ├── __init__.py │ └── munkres.py ├── veils └── hardware_design │ ├── Veils.xlsx │ ├── panel │ ├── veils.ai │ ├── veils.dwg │ ├── veils2.ai │ └── veils2.dwg │ └── pcb │ ├── veils_v110.brd │ ├── veils_v110.sch │ ├── veils_v40.brd │ └── veils_v40.sch ├── volts └── hardware_design │ └── pcb │ ├── volts_v01.brd │ └── volts_v01.sch ├── warps ├── __init__.py ├── bootloader │ ├── __init__.py │ ├── bootloader.cc │ └── makefile ├── cv_scaler.cc ├── cv_scaler.h ├── drivers │ ├── adc.cc │ ├── adc.h │ ├── codec.cc │ ├── codec.h │ ├── debug_pin.h │ ├── debug_port.cc │ ├── debug_port.h │ ├── leds.cc │ ├── leds.h │ ├── normalization_probe.h │ ├── switches.cc │ ├── switches.h │ ├── system.cc │ ├── system.h │ └── version.h ├── dsp │ ├── filter_bank.cc │ ├── filter_bank.h │ ├── limiter.h │ ├── modulator.cc │ ├── modulator.h │ ├── oscillator.cc │ ├── oscillator.h │ ├── parameters.h │ ├── quadrature_oscillator.h │ ├── quadrature_transform.h │ ├── sample_rate_conversion_filters.h │ ├── sample_rate_converter.h │ ├── vocoder.cc │ └── vocoder.h ├── hardware_design │ ├── Warps.xlsx │ ├── panel │ │ ├── warps.ai │ │ └── warps.dwg │ └── pcb │ │ ├── warps_v30.brd │ │ └── warps_v30.sch ├── makefile ├── meter.h ├── resources.cc ├── resources.h ├── resources │ ├── __init__.py │ ├── filter_bank.py │ ├── lookup_tables.py │ ├── resources.py │ ├── timbre.raw │ └── waveforms.py ├── settings.cc ├── settings.h ├── test │ ├── makefile │ └── warps_test.cc ├── tools │ └── generate_src_filters.py ├── ui.cc ├── ui.h └── warps.cc └── yarns ├── __init__.py ├── bootloader ├── bootloader.cc ├── characters.cc ├── characters.h └── makefile ├── drivers ├── channel_leds.cc ├── channel_leds.h ├── dac.cc ├── dac.h ├── display.cc ├── display.h ├── encoder.cc ├── encoder.h ├── gate_output.cc ├── gate_output.h ├── midi_io.cc ├── midi_io.h ├── switches.cc ├── switches.h ├── system.cc └── system.h ├── hardware_design ├── Yarns.xlsx ├── panel │ ├── yarns.ai │ └── yarns.dwg └── pcb │ ├── yarns_v03.brd │ └── yarns_v03.sch ├── internal_clock.h ├── just_intonation_processor.cc ├── just_intonation_processor.h ├── layout_configurator.cc ├── layout_configurator.h ├── makefile ├── midi_handler.cc ├── midi_handler.h ├── multi.cc ├── multi.h ├── part.cc ├── part.h ├── resources.cc ├── resources.h ├── resources ├── __init__.py ├── characters.py ├── lookup_tables.py ├── resources.py └── waveforms.py ├── scale_editor ├── README ├── __init__.py ├── app.yaml ├── index.yaml ├── main.py ├── music │ ├── __init__.py │ └── scala │ │ ├── __init__.py │ │ └── scala.py ├── static │ ├── bg_main.jpg │ ├── db_yarns.png │ ├── divider_big.jpg │ ├── favicon.ico │ ├── logo.jpg │ └── main.css └── templates │ ├── base.html │ └── index.html ├── settings.cc ├── settings.h ├── song └── song.h ├── storage_manager.cc ├── storage_manager.h ├── ui.cc ├── ui.h ├── voice.cc ├── voice.h └── yarns.cc /.gitignore: -------------------------------------------------------------------------------- 1 | # Precompiled python modules 2 | *.pyc 3 | 4 | # Eagle backups 5 | *.s#? 6 | *.b#? 7 | *.bak 8 | 9 | # Gerber files 10 | *.CUT 11 | *.GBL 12 | *.GBO 13 | *.GBS 14 | *.GML 15 | *.GTL 16 | *.GTO 17 | *.GTP 18 | *.GTS 19 | *.TXT 20 | *.dri 21 | *.gpi 22 | *.pro 23 | 24 | # Assembly files 25 | *assembly.zip 26 | *top.pdf 27 | *bottom.pdf 28 | *.csv 29 | *partlist.txt 30 | *.zip 31 | 32 | # LaTeX compiled file 33 | *.pdf 34 | *.log 35 | *.aux 36 | 37 | # OS X crap 38 | .DS_Stor? 39 | 40 | # Build directory 41 | build 42 | 43 | # BETA Layout variants 44 | *_beta.sch 45 | *_BETA.sch 46 | *_beta.brd 47 | *_BETA.brd 48 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "avrlib"] 2 | path = avrlib 3 | url = https://github.com/pichenettes/avril.git 4 | [submodule "avrlibx"] 5 | path = avrlibx 6 | url = https://github.com/pichenettes/avrilx.git 7 | [submodule "stmlib"] 8 | path = stmlib 9 | url = https://github.com/pichenettes/stmlib.git 10 | [submodule "stm_audio_bootloader"] 11 | path = stm_audio_bootloader 12 | url = https://github.com/pichenettes/stm-audio-bootloader.git 13 | [submodule "avr_audio_bootloader"] 14 | path = avr_audio_bootloader 15 | url = https://github.com/pichenettes/avr-audio-bootloader.git -------------------------------------------------------------------------------- /__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/__init__.py -------------------------------------------------------------------------------- /blades/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blades/__init__.py -------------------------------------------------------------------------------- /blades/hardware_design/Blades.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blades/hardware_design/Blades.xlsx -------------------------------------------------------------------------------- /blades/hardware_design/panel/blades.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blades/hardware_design/panel/blades.ai -------------------------------------------------------------------------------- /blades/hardware_design/panel/blades.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blades/hardware_design/panel/blades.dwg -------------------------------------------------------------------------------- /blades/hardware_design/pcb/blades_v40.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blades/hardware_design/pcb/blades_v40.brd -------------------------------------------------------------------------------- /blades/hardware_design/pcb/blades_v40.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blades/hardware_design/pcb/blades_v40.sch -------------------------------------------------------------------------------- /blinds/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blinds/__init__.py -------------------------------------------------------------------------------- /blinds/hardware_design/Blinds.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blinds/hardware_design/Blinds.xlsx -------------------------------------------------------------------------------- /blinds/hardware_design/panel/blinds.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blinds/hardware_design/panel/blinds.ai -------------------------------------------------------------------------------- /blinds/hardware_design/panel/blinds.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blinds/hardware_design/panel/blinds.dwg -------------------------------------------------------------------------------- /blinds/hardware_design/pcb/blinds_v60.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blinds/hardware_design/pcb/blinds_v60.brd -------------------------------------------------------------------------------- /blinds/hardware_design/pcb/blinds_v60.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/blinds/hardware_design/pcb/blinds_v60.sch -------------------------------------------------------------------------------- /braids/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/__init__.py -------------------------------------------------------------------------------- /braids/bootloader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/bootloader/__init__.py -------------------------------------------------------------------------------- /braids/bootloader/characters.h: -------------------------------------------------------------------------------- 1 | // Copyright 2012 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Resources definitions. 28 | // 29 | // Automatically generated with: 30 | // make resources 31 | 32 | 33 | #ifndef BRAIDS_BOOTLOADER_CHARACTERS_H_ 34 | #define BRAIDS_BOOTLOADER_CHARACTERS_H_ 35 | 36 | 37 | #include "stmlib/stmlib.h" 38 | 39 | namespace braids { 40 | 41 | extern const uint16_t chr_characters[]; 42 | 43 | } // namespace braids 44 | 45 | #endif // BRAIDS_BOOTLOADER_CHARACTERS_H_ 46 | -------------------------------------------------------------------------------- /braids/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2012 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 72000000L 28 | SYSCLOCK = SYSCLK_FREQ_72MHz 29 | FAMILY = f10x 30 | DENSITY = md 31 | MEMORY_MODE = flash 32 | # USB = enabled 33 | 34 | # Preferred upload command 35 | UPLOAD_COMMAND = upload_jtag 36 | 37 | # Packages to build 38 | TARGET = braids_bootloader 39 | PACKAGES = braids/bootloader braids/drivers stmlib/utils stmlib/system \ 40 | stm_audio_bootloader/qpsk 41 | RESOURCES = braids/resources 42 | 43 | include stmlib/makefile.inc 44 | -------------------------------------------------------------------------------- /braids/data/map.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/data/map.bin -------------------------------------------------------------------------------- /braids/data/waves.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/data/waves.bin -------------------------------------------------------------------------------- /braids/drivers/debug_pin.h: -------------------------------------------------------------------------------- 1 | // Copyright 2012 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for the debug (timing) pin. 28 | 29 | #ifndef BRAIDS_DRIVERS_DEBUG_PIN_H_ 30 | #define BRAIDS_DRIVERS_DEBUG_PIN_H_ 31 | 32 | #include 33 | #include "stmlib/stmlib.h" 34 | 35 | namespace braids { 36 | 37 | class DebugPin { 38 | public: 39 | DebugPin() { } 40 | ~DebugPin() { } 41 | 42 | void Init(); 43 | void High(); 44 | void Low(); 45 | 46 | private: 47 | 48 | DISALLOW_COPY_AND_ASSIGN(DebugPin); 49 | }; 50 | 51 | } // namespace braids 52 | 53 | #endif // BRAIDS_DRIVERS_DEBUG_PIN_H_ 54 | -------------------------------------------------------------------------------- /braids/drivers/gate_input.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2012 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for gate input. 28 | 29 | #include "braids/drivers/gate_input.h" 30 | 31 | namespace braids { 32 | 33 | void GateInput::Init() { 34 | GPIO_InitTypeDef gpio_init; 35 | gpio_init.GPIO_Pin = GPIO_Pin_4; 36 | gpio_init.GPIO_Speed = GPIO_Speed_10MHz; 37 | gpio_init.GPIO_Mode = GPIO_Mode_IPU; 38 | GPIO_Init(GPIOA, &gpio_init); 39 | previous_state_ = true; 40 | } 41 | 42 | } // namespace braids 43 | -------------------------------------------------------------------------------- /braids/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2012 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef BRAIDS_DRIVERS_SYSTEM_H_ 30 | #define BRAIDS_DRIVERS_SYSTEM_H_ 31 | 32 | #include 33 | #include "stmlib/stmlib.h" 34 | 35 | namespace braids { 36 | 37 | class System { 38 | public: 39 | System() { } 40 | ~System() { } 41 | 42 | void Init(uint32_t timer_period, bool application); 43 | void StartTimers(); 44 | 45 | private: 46 | DISALLOW_COPY_AND_ASSIGN(System); 47 | }; 48 | 49 | } // namespace braids 50 | 51 | #endif // BRAIDS_DRIVERS_SYSTEM_H_ 52 | -------------------------------------------------------------------------------- /braids/hardware_design/Braids.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/hardware_design/Braids.xlsx -------------------------------------------------------------------------------- /braids/hardware_design/panel/braids.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/hardware_design/panel/braids.ai -------------------------------------------------------------------------------- /braids/hardware_design/panel/braids.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/hardware_design/panel/braids.dwg -------------------------------------------------------------------------------- /braids/hardware_design/pcb/braids_v50.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/hardware_design/pcb/braids_v50.brd -------------------------------------------------------------------------------- /braids/hardware_design/pcb/braids_v50.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/hardware_design/pcb/braids_v50.sch -------------------------------------------------------------------------------- /braids/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/braids/resources/__init__.py -------------------------------------------------------------------------------- /braids/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = braids/test stmlib/utils braids 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = braids_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = analog_oscillator.cc \ 9 | digital_oscillator.cc \ 10 | macro_oscillator.cc \ 11 | braids_test.cc \ 12 | quantizer.cc \ 13 | resources.cc \ 14 | random.cc 15 | OBJ_FILES = $(CC_FILES:.cc=.o) 16 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 17 | DEPS = $(OBJS:.o=.d) 18 | DEP_FILE = $(BUILD_DIR)depends.mk 19 | 20 | all: braids_test 21 | 22 | $(BUILD_DIR): 23 | mkdir -p $(BUILD_DIR) 24 | 25 | $(BUILD_DIR)%.o: %.cc 26 | g++ -c -DTEST -g -Wall -Werror -Wno-unused-variable -I. $< -o $@ 27 | 28 | $(BUILD_DIR)%.d: %.cc 29 | g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 30 | 31 | braids_test: $(OBJS) 32 | g++ -o $(TARGET) $(OBJS) 33 | 34 | depends: $(DEPS) 35 | cat $(DEPS) > $(DEP_FILE) 36 | 37 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 38 | cat $(DEPS) > $(DEP_FILE) 39 | 40 | include $(DEP_FILE) 41 | -------------------------------------------------------------------------------- /branches/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2011 Emilie Gillet. 2 | # 3 | # This program is free software: you can redistribute it and/or modify 4 | # it under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation, either version 3 of the License, or 6 | # (at your option) any later version. 7 | # This program is distributed in the hope that it will be useful, 8 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | # GNU General Public License for more details. 11 | # You should have received a copy of the GNU General Public License 12 | # along with this program. If not, see . 13 | 14 | VERSION = 0.1 15 | MCU_NAME = 88 16 | TARGET = branches_bootloader 17 | PACKAGES = avrlib branches/bootloader avr_audio_bootloader/fsk 18 | EXTRA_DEFINES = -funsigned-char -fno-inline-small-functions -DDISABLE_DEFAULT_UART_RX_ISR 19 | EXTRA_LD_FLAGS = ,--section-start=.text=0x1800,--relax 20 | 21 | LFUSE = e2 22 | HFUSE = dd 23 | EFUSE = f8 24 | LOCK = 2f 25 | 26 | include avrlib/makefile.mk 27 | 28 | include $(DEP_FILE) 29 | -------------------------------------------------------------------------------- /branches/hardware_design/Branches.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/branches/hardware_design/Branches.xlsx -------------------------------------------------------------------------------- /branches/hardware_design/panel/branches.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/branches/hardware_design/panel/branches.ai -------------------------------------------------------------------------------- /branches/hardware_design/panel/branches.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/branches/hardware_design/panel/branches.dwg -------------------------------------------------------------------------------- /branches/hardware_design/pcb/branches_v40.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/branches/hardware_design/pcb/branches_v40.brd -------------------------------------------------------------------------------- /branches/hardware_design/pcb/branches_v40.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/branches/hardware_design/pcb/branches_v40.sch -------------------------------------------------------------------------------- /branches/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2012 Emilie Gillet. 2 | # 3 | # This program is free software: you can redistribute it and/or modify 4 | # it under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation, either version 3 of the License, or 6 | # (at your option) any later version. 7 | # This program is distributed in the hope that it will be useful, 8 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | # GNU General Public License for more details. 11 | # You should have received a copy of the GNU General Public License 12 | # along with this program. If not, see . 13 | 14 | VERSION = 0.1 15 | MCU_NAME = 88 16 | TARGET = branches 17 | PACKAGES = avrlib avrlib/devices branches 18 | RESOURCES = branches/resources 19 | EXTRA_DEFINES = -DDISABLE_DEFAULT_UART_RX_ISR 20 | 21 | LFUSE = e2 22 | HFUSE = dd 23 | EFUSE = f8 24 | LOCK = 2f 25 | 26 | include avrlib/makefile.mk 27 | 28 | include $(DEP_FILE) 29 | 30 | # Rule for building the firmware update file 31 | wav: $(TARGET_BIN) 32 | python avr_audio_bootloader/fsk/encoder.py \ 33 | -s 15625 -b 16 -n 8 -z 4 -p 64 -g 64 -k 30 \ 34 | $(TARGET_BIN) 35 | 36 | bootstrap_all: 37 | make -f branches/makefile 38 | make -f branches/bootloader/makefile 39 | make -f branches/bootloader/makefile fuses 40 | $(AVRDUDE) -B 1 $(AVRDUDE_COM_OPTS) $(AVRDUDE_ISP_OPTS) \ 41 | -U flash:w:build/branches/branches.hex:i \ 42 | -U flash:w:build/branches_bootloader/branches_bootloader.hex:i \ 43 | -U lock:w:0x2f:m 44 | 45 | -------------------------------------------------------------------------------- /clouds/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/clouds/__init__.py -------------------------------------------------------------------------------- /clouds/bootloader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/clouds/bootloader/__init__.py -------------------------------------------------------------------------------- /clouds/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 168000000L 28 | SYSCLOCK = SYSCLK_FREQ_168MHz 29 | FAMILY = f4xx 30 | # USB = enabled 31 | 32 | # Preferred upload command 33 | UPLOAD_COMMAND = upload_jtag_erase_first 34 | 35 | # Packages to build 36 | TARGET = clouds_bootloader 37 | PACKAGES = clouds/bootloader \ 38 | clouds/drivers \ 39 | stm_audio_bootloader/qpsk \ 40 | stmlib/dsp \ 41 | stmlib/utils \ 42 | stmlib/system 43 | RESOURCES = clouds/resources 44 | 45 | TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ 46 | 47 | include stmlib/makefile.inc 48 | -------------------------------------------------------------------------------- /clouds/drivers/system.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System level initialization. 28 | 29 | #include "clouds/drivers/system.h" 30 | 31 | namespace clouds { 32 | 33 | void System::Init(bool application) { 34 | if (application) { 35 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); 36 | } 37 | } 38 | 39 | void System::StartTimers() { 40 | SysTick_Config(F_CPU / 1000); 41 | } 42 | 43 | } // namespace clouds 44 | -------------------------------------------------------------------------------- /clouds/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef CLOUDS_DRIVERS_SYSTEM_H_ 30 | #define CLOUDS_DRIVERS_SYSTEM_H_ 31 | 32 | #include 33 | 34 | #include "stmlib/stmlib.h" 35 | 36 | namespace clouds { 37 | 38 | class System { 39 | public: 40 | System() { } 41 | ~System() { } 42 | 43 | void Init(bool application); 44 | void StartTimers(); 45 | 46 | private: 47 | DISALLOW_COPY_AND_ASSIGN(System); 48 | }; 49 | 50 | } // namespace clouds 51 | 52 | #endif // CLOUDS_DRIVERS_SYSTEM_H_ 53 | -------------------------------------------------------------------------------- /clouds/dsp/frame.h: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Audio processing frames. 28 | 29 | #ifndef CLOUDS_DSP_FRAME_H_ 30 | #define CLOUDS_DSP_FRAME_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace clouds { 35 | 36 | const int32_t kMaxNumChannels = 2; 37 | const size_t kMaxBlockSize = 32; 38 | 39 | typedef struct { short l; short r; } ShortFrame; 40 | typedef struct { float l; float r; } FloatFrame; 41 | 42 | } // namespace clouds 43 | 44 | #endif // CLOUDS_DSP_FRAME_H_ 45 | -------------------------------------------------------------------------------- /clouds/hardware_design/Clouds.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/clouds/hardware_design/Clouds.xlsx -------------------------------------------------------------------------------- /clouds/hardware_design/panel/clouds.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/clouds/hardware_design/panel/clouds.ai -------------------------------------------------------------------------------- /clouds/hardware_design/panel/clouds.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/clouds/hardware_design/panel/clouds.dwg -------------------------------------------------------------------------------- /clouds/hardware_design/pcb/clouds_v30.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/clouds/hardware_design/pcb/clouds_v30.brd -------------------------------------------------------------------------------- /clouds/hardware_design/pcb/clouds_v30.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/clouds/hardware_design/pcb/clouds_v30.sch -------------------------------------------------------------------------------- /clouds/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/clouds/resources/__init__.py -------------------------------------------------------------------------------- /clouds/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = clouds/dsp clouds/dsp/pvoc clouds/test stmlib/utils stmlib/dsp clouds 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = clouds_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = atan.cc \ 9 | clouds_test.cc \ 10 | correlator.cc \ 11 | granular_processor.cc \ 12 | mu_law.cc \ 13 | random.cc \ 14 | resources.cc \ 15 | frame_transformation.cc \ 16 | phase_vocoder.cc \ 17 | stft.cc \ 18 | units.cc 19 | OBJ_FILES = $(CC_FILES:.cc=.o) 20 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 21 | DEPS = $(OBJS:.o=.d) 22 | DEP_FILE = $(BUILD_DIR)depends.mk 23 | 24 | all: clouds_test 25 | 26 | $(BUILD_DIR): 27 | mkdir -p $(BUILD_DIR) 28 | 29 | $(BUILD_DIR)%.o: %.cc 30 | g++ -c -DTEST -g -Wall -Werror -I. $< -o $@ 31 | 32 | $(BUILD_DIR)%.d: %.cc 33 | g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 34 | 35 | clouds_test: $(OBJS) 36 | g++ -o $(TARGET) $(OBJS) 37 | 38 | depends: $(DEPS) 39 | cat $(DEPS) > $(DEP_FILE) 40 | 41 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 42 | cat $(DEPS) > $(DEP_FILE) 43 | 44 | include $(DEP_FILE) 45 | -------------------------------------------------------------------------------- /ears/hardware_design/Ears.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ears/hardware_design/Ears.xlsx -------------------------------------------------------------------------------- /ears/hardware_design/panel/ears_panel_v30.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ears/hardware_design/panel/ears_panel_v30.brd -------------------------------------------------------------------------------- /ears/hardware_design/panel/ears_panel_v30.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ears/hardware_design/panel/ears_panel_v30.sch -------------------------------------------------------------------------------- /ears/hardware_design/pcb/ears_v40.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ears/hardware_design/pcb/ears_v40.brd -------------------------------------------------------------------------------- /ears/hardware_design/pcb/ears_v40.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ears/hardware_design/pcb/ears_v40.sch -------------------------------------------------------------------------------- /edges/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/edges/__init__.py -------------------------------------------------------------------------------- /edges/adc_acquisition.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2012 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // You should have received a copy of the GNU General Public License 14 | // along with this program. If not, see . 15 | // 16 | // ----------------------------------------------------------------------------- 17 | // 18 | // Staged SPI communication with the ADC. Prevents the 128 cycles lock. 19 | 20 | #include "edges/adc_acquisition.h" 21 | 22 | namespace edges { 23 | 24 | /* static */ 25 | ADCInterface ADCAcquisition::adc_; 26 | 27 | /* static */ 28 | Word ADCAcquisition::rx_; 29 | 30 | /* static */ 31 | uint8_t ADCAcquisition::active_channel_; 32 | 33 | /* static */ 34 | uint8_t ADCAcquisition::acquisition_stage_; 35 | 36 | /* static */ 37 | uint16_t ADCAcquisition::channels_[kNumAdcChannels]; 38 | 39 | /* extern */ 40 | ADCAcquisition adc_acquisition; 41 | 42 | } // namespace edges 43 | -------------------------------------------------------------------------------- /edges/audio_buffer.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2012 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // You should have received a copy of the GNU General Public License 14 | // along with this program. If not, see . 15 | // 16 | // ----------------------------------------------------------------------------- 17 | // 18 | // Instance of the audio out buffer. 19 | 20 | #include "edges/audio_buffer.h" 21 | 22 | namespace edges { 23 | 24 | /* extern */ 25 | avrlibx::RingBuffer audio_buffer; 26 | 27 | } // namespace edges 28 | -------------------------------------------------------------------------------- /edges/audio_buffer.h: -------------------------------------------------------------------------------- 1 | // Copyright 2012 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // You should have received a copy of the GNU General Public License 14 | // along with this program. If not, see . 15 | // 16 | // ----------------------------------------------------------------------------- 17 | // 18 | // Instance of the audio buffer class. 19 | 20 | #ifndef EDGES_AUDIO_BUFFER_H_ 21 | #define EDGES_AUDIO_BUFFER_H_ 22 | 23 | #include "avrlibx/io/ring_buffer.h" 24 | 25 | namespace edges { 26 | 27 | struct AudioBufferSpecs { 28 | typedef uint16_t Value; 29 | enum { 30 | buffer_size = 128, 31 | data_size = 16, 32 | }; 33 | }; 34 | 35 | static const uint8_t kAudioBlockSize = 16; 36 | 37 | extern avrlibx::RingBuffer audio_buffer; 38 | 39 | } // namespace edges 40 | 41 | #endif // EDGES_AUDIO_BUFFER_H_ 42 | -------------------------------------------------------------------------------- /edges/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2012 Emilie Gillet. 2 | # 3 | # This program is free software: you can redistribute it and/or modify 4 | # it under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation, either version 3 of the License, or 6 | # (at your option) any later version. 7 | # This program is distributed in the hope that it will be useful, 8 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | # GNU General Public License for more details. 11 | # You should have received a copy of the GNU General Public License 12 | # along with this program. If not, see . 13 | 14 | VERSION = 0.1 15 | F_CPU = 32000000 16 | MCU_NAME = 32a4 17 | TARGET = edges_bootloader 18 | PACKAGES = avrlibx \ 19 | avrlibx/io \ 20 | avrlibx/system \ 21 | avrlibx/utils \ 22 | avrlibx/third_party/sp_driver \ 23 | edges/bootloader 24 | EXTRA_LD_FLAGS = ,--section-start=.text=0x8000,--relax 25 | 26 | FUSE0 = 00 27 | FUSE1 = 00 28 | # bf enables the bootloader 29 | FUSE2 = bf 30 | FUSE4 = fe 31 | FUSE5 = f7 32 | LOCK = 3f 33 | 34 | include avrlibx/makefile.mk 35 | 36 | include $(DEP_FILE) 37 | -------------------------------------------------------------------------------- /edges/hardware_design/Edges.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/edges/hardware_design/Edges.xlsx -------------------------------------------------------------------------------- /edges/hardware_design/panel/edges.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/edges/hardware_design/panel/edges.ai -------------------------------------------------------------------------------- /edges/hardware_design/panel/edges.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/edges/hardware_design/panel/edges.dwg -------------------------------------------------------------------------------- /edges/hardware_design/pcb/edges_expander_v01.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/edges/hardware_design/pcb/edges_expander_v01.brd -------------------------------------------------------------------------------- /edges/hardware_design/pcb/edges_expander_v01.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/edges/hardware_design/pcb/edges_expander_v01.sch -------------------------------------------------------------------------------- /edges/hardware_design/pcb/edges_v20.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/edges/hardware_design/pcb/edges_v20.brd -------------------------------------------------------------------------------- /edges/hardware_design/pcb/edges_v20.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/edges/hardware_design/pcb/edges_v20.sch -------------------------------------------------------------------------------- /edges/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2012 Emilie Gillet. 2 | # 3 | # This program is free software: you can redistribute it and/or modify 4 | # it under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation, either version 3 of the License, or 6 | # (at your option) any later version. 7 | # This program is distributed in the hope that it will be useful, 8 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | # GNU General Public License for more details. 11 | # You should have received a copy of the GNU General Public License 12 | # along with this program. If not, see . 13 | 14 | VERSION = 0.1 15 | F_CPU = 32000000 16 | MCU_NAME = 32a4 17 | TARGET = edges 18 | PACKAGES = avrlibx \ 19 | avrlibx/io \ 20 | avrlibx/system \ 21 | avrlibx/utils \ 22 | avrlibx/third_party/eeprom_driver \ 23 | edges 24 | RESOURCES = edges/resources 25 | SYSEX_FLAGS = --page_size=128 --device_id=10 26 | EXTRA_DEFINES =-DOCTAL_ADC 27 | 28 | FUSE0 = 00 29 | FUSE1 = 00 30 | # bf enables the bootloader 31 | FUSE2 = bf 32 | FUSE4 = fe 33 | FUSE5 = f7 34 | LOCK = 3f 35 | 36 | include avrlibx/makefile.mk 37 | 38 | include $(DEP_FILE) 39 | -------------------------------------------------------------------------------- /edges/midi_handler.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2009 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // You should have received a copy of the GNU General Public License 14 | // along with this program. If not, see . 15 | // 16 | // ----------------------------------------------------------------------------- 17 | // 18 | // Instance of the midi out filter class. 19 | 20 | #include "edges/midi_handler.h" 21 | 22 | namespace edges { 23 | 24 | /* static */ 25 | uint8_t MidiHandler::gate_; 26 | 27 | /* static */ 28 | int16_t MidiHandler::pitch_[kNumChannels]; 29 | 30 | /* static */ 31 | int16_t MidiHandler::pitch_bend_[kNumChannels] = { 0, 0, 0, 0 }; 32 | 33 | /* static */ 34 | NoteStack<10> MidiHandler::stack_[kNumChannels]; 35 | 36 | /* static */ 37 | VoiceAllocator MidiHandler::allocator_; 38 | 39 | /* static */ 40 | bool MidiHandler::learning_; 41 | 42 | /* extern */ 43 | MidiHandler midi_handler; 44 | 45 | } // namespace edges -------------------------------------------------------------------------------- /edges/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/edges/resources/__init__.py -------------------------------------------------------------------------------- /edges/voice_allocator.h: -------------------------------------------------------------------------------- 1 | // Copyright 2011 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // You should have received a copy of the GNU General Public License 14 | // along with this program. If not, see . 15 | // 16 | // ----------------------------------------------------------------------------- 17 | // 18 | // Polyphonic voice allocator. 19 | 20 | #ifndef EDGES_VOICE_ALLOCATOR_H_ 21 | #define EDGES_VOICE_ALLOCATOR_H_ 22 | 23 | #include "avrlibx/avrlibx.h" 24 | 25 | static const uint8_t kMaxPolyphony = 4; 26 | 27 | namespace edges { 28 | 29 | class VoiceAllocator { 30 | public: 31 | VoiceAllocator() { } 32 | void Init() { size_ = 0; Clear(); } 33 | void set_size(uint8_t size) { 34 | size_ = size; 35 | } 36 | uint8_t NoteOn(uint8_t note); 37 | uint8_t NoteOff(uint8_t note); 38 | uint8_t Find(uint8_t note) const; 39 | void Clear(); 40 | void ClearNotes(); 41 | uint8_t size() const { return size_; } 42 | 43 | private: 44 | void Touch(uint8_t voice); 45 | 46 | uint8_t pool_[kMaxPolyphony]; 47 | // Holds the indices of the voices sorted by most recent usage. 48 | uint8_t lru_[kMaxPolyphony]; 49 | uint8_t size_; 50 | 51 | DISALLOW_COPY_AND_ASSIGN(VoiceAllocator); 52 | }; 53 | 54 | } // namespace edges 55 | 56 | #endif // EDGES_VOICE_ALLOCATOR_H_ 57 | -------------------------------------------------------------------------------- /elements/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/__init__.py -------------------------------------------------------------------------------- /elements/bootloader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/bootloader/__init__.py -------------------------------------------------------------------------------- /elements/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 168000000L 28 | SYSCLOCK = SYSCLK_FREQ_168MHz 29 | FAMILY = f4xx 30 | # USB = enabled 31 | 32 | # Preferred upload command 33 | UPLOAD_COMMAND = upload_jtag_no_erase 34 | 35 | # Packages to build 36 | TARGET = elements_bootloader 37 | PACKAGES = elements/bootloader \ 38 | elements/drivers \ 39 | stm_audio_bootloader/qpsk \ 40 | stmlib/dsp \ 41 | stmlib/utils \ 42 | stmlib/system 43 | RESOURCES = elements/resources 44 | 45 | TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ 46 | 47 | include stmlib/makefile.inc 48 | -------------------------------------------------------------------------------- /elements/drivers/gate_input.h: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for the gate input. 28 | 29 | #ifndef ELEMENTS_DRIVERS_GATE_INPUT_H_ 30 | #define ELEMENTS_DRIVERS_GATE_INPUT_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace elements { 35 | 36 | class GateInput { 37 | public: 38 | GateInput() { } 39 | ~GateInput() { } 40 | 41 | void Init(); 42 | bool Read(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(GateInput); 46 | }; 47 | 48 | } // namespace elements 49 | 50 | #endif // ELEMENTS_DRIVERS_GATE_INPUT_H_ 51 | -------------------------------------------------------------------------------- /elements/drivers/system.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System level initialization. 28 | 29 | #include "elements/drivers/system.h" 30 | 31 | #include 32 | 33 | namespace elements { 34 | 35 | void System::Init(bool application) { 36 | if (application) { 37 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); 38 | } 39 | } 40 | 41 | void System::StartTimers() { 42 | SysTick_Config(F_CPU / 1000); 43 | } 44 | 45 | } // namespace elements 46 | -------------------------------------------------------------------------------- /elements/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef ELEMENTS_DRIVERS_SYSTEM_H_ 30 | #define ELEMENTS_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace elements { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(bool application); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace elements 49 | 50 | #endif // ELEMENTS_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /elements/dsp/dsp.h: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Utility DSP routines. 28 | 29 | #ifndef ELEMENTS_DSP_DSP_H_ 30 | #define ELEMENTS_DSP_DSP_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | #include 35 | 36 | namespace elements { 37 | 38 | static const float kSampleRate = 32000.0f; 39 | const size_t kMaxBlockSize = 16; 40 | 41 | } // namespace elements 42 | 43 | #endif // ELEMENTS_DSP_DSP_H_ 44 | -------------------------------------------------------------------------------- /elements/dsp/multistage_envelope.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Simple AD envelope - adapted from Peaks' multistage envelope. 28 | 29 | #include "elements/dsp/multistage_envelope.h" 30 | 31 | #include 32 | 33 | namespace elements { 34 | 35 | using namespace std; 36 | using namespace stmlib; 37 | 38 | void MultistageEnvelope::Init() { 39 | set_adsr(0, 0.25f, 0.25f, 0.5f); 40 | segment_ = num_segments_; 41 | phase_ = 0.0f; 42 | start_value_ = 0.0f; 43 | value_ = 0.0f; 44 | hard_reset_ = false; 45 | } 46 | 47 | } // namespace elements -------------------------------------------------------------------------------- /elements/hardware_design/Elements.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/hardware_design/Elements.xlsx -------------------------------------------------------------------------------- /elements/hardware_design/panel/elements.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/hardware_design/panel/elements.ai -------------------------------------------------------------------------------- /elements/hardware_design/panel/elements.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/hardware_design/panel/elements.dwg -------------------------------------------------------------------------------- /elements/hardware_design/pcb/elements_v02.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/hardware_design/pcb/elements_v02.brd -------------------------------------------------------------------------------- /elements/hardware_design/pcb/elements_v02.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/hardware_design/pcb/elements_v02.sch -------------------------------------------------------------------------------- /elements/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/resources/__init__.py -------------------------------------------------------------------------------- /elements/resources/samples.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python2.5 2 | # 3 | # Copyright 2012 Emilie Gillet. 4 | # 5 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 6 | # 7 | # This program is free software: you can redistribute it and/or modify 8 | # it under the terms of the GNU General Public License as published by 9 | # the Free Software Foundation, either version 3 of the License, or 10 | # (at your option) any later version. 11 | # This program is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # You should have received a copy of the GNU General Public License 16 | # along with this program. If not, see . 17 | # 18 | # ----------------------------------------------------------------------------- 19 | # 20 | # Waveshaper lookup tables. 21 | 22 | import numpy 23 | import audio_io 24 | 25 | boundaries = [0] 26 | sample_data = [] 27 | 28 | TRUNCATE = False 29 | 30 | for i in xrange(1, 10): 31 | audio_data, sr = audio_io.ReadWavFile('elements/samples/hit_%02d.wav' % i) 32 | audio_data = audio_data.sum(axis=1) 33 | audio_data = list(audio_data) 34 | if TRUNCATE: 35 | audio_data = audio_data[:128] 36 | audio_data += [audio_data[-1]] # Add interpolation tail 37 | audio_data = numpy.round(numpy.array(audio_data) * 32767.0) 38 | sample_data += list(audio_data) 39 | boundaries.append(boundaries[-1] + len(audio_data)) 40 | 41 | 42 | sample_data = [('sample_data', sample_data)] 43 | boundaries = [('boundaries', boundaries)] 44 | 45 | audio_data, sr = audio_io.ReadWavFile('elements/samples/noise.wav') 46 | audio_data = audio_data.sum(axis=1) 47 | audio_data = numpy.round(numpy.array(audio_data) * 32767.0) 48 | if TRUNCATE: 49 | audio_data = audio_data[:128] 50 | sample_data += [('noise_sample', audio_data)] 51 | 52 | -------------------------------------------------------------------------------- /elements/samples/hit_01.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/hit_01.wav -------------------------------------------------------------------------------- /elements/samples/hit_02.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/hit_02.wav -------------------------------------------------------------------------------- /elements/samples/hit_03.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/hit_03.wav -------------------------------------------------------------------------------- /elements/samples/hit_04.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/hit_04.wav -------------------------------------------------------------------------------- /elements/samples/hit_05.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/hit_05.wav -------------------------------------------------------------------------------- /elements/samples/hit_06.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/hit_06.wav -------------------------------------------------------------------------------- /elements/samples/hit_07.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/hit_07.wav -------------------------------------------------------------------------------- /elements/samples/hit_08.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/hit_08.wav -------------------------------------------------------------------------------- /elements/samples/hit_09.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/hit_09.wav -------------------------------------------------------------------------------- /elements/samples/noise.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/elements/samples/noise.wav -------------------------------------------------------------------------------- /elements/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = elements/test stmlib/utils elements/dsp elements stmlib/dsp 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = elements_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = ominous_voice.cc \ 9 | elements_test.cc \ 10 | exciter.cc \ 11 | multistage_envelope.cc \ 12 | part.cc \ 13 | resonator.cc \ 14 | resources.cc \ 15 | random.cc \ 16 | tube.cc \ 17 | units.cc \ 18 | voice.cc 19 | OBJ_FILES = $(CC_FILES:.cc=.o) 20 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 21 | DEPS = $(OBJS:.o=.d) 22 | DEP_FILE = $(BUILD_DIR)depends.mk 23 | 24 | all: elements_test 25 | 26 | $(BUILD_DIR): 27 | mkdir -p $(BUILD_DIR) 28 | 29 | $(BUILD_DIR)%.o: %.cc 30 | /opt/local/bin/g++-mp-4.7 -c -DTEST -g -Wl,-no_pie -Wall -Werror -msse2 -Wno-unused-variable -O2 -I. $< -o $@ 31 | 32 | $(BUILD_DIR)%.d: %.cc 33 | /opt/local/bin/g++-mp-4.7 -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 34 | 35 | elements_test: $(OBJS) 36 | /opt/local/bin/g++-mp-4.7 -g -o $(TARGET) $(OBJS) -Wl,-no_pie -lm -lprofiler -L/opt/local/lib 37 | 38 | depends: $(DEPS) 39 | cat $(DEPS) > $(DEP_FILE) 40 | 41 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 42 | cat $(DEPS) > $(DEP_FILE) 43 | 44 | profile: elements_test 45 | env CPUPROFILE_FREQUENCY=1000 CPUPROFILE=$(BUILD_DIR)/elements.prof ./elements_test && pprof --pdf ./elements_test $(BUILD_DIR)/elements.prof > profile.pdf && open profile.pdf 46 | 47 | include $(DEP_FILE) 48 | -------------------------------------------------------------------------------- /frames/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/frames/__init__.py -------------------------------------------------------------------------------- /frames/bootloader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/frames/bootloader/__init__.py -------------------------------------------------------------------------------- /frames/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2013 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 72000000L 28 | SYSCLOCK = SYSCLK_FREQ_72MHz 29 | FAMILY = f10x 30 | DENSITY = md 31 | MEMORY_MODE = flash 32 | # USB = enabled 33 | 34 | # Preferred upload command 35 | UPLOAD_COMMAND = upload_jtag 36 | 37 | # Packages to build 38 | TARGET = frames_bootloader 39 | PACKAGES = frames/bootloader frames/drivers stmlib/utils stmlib/system \ 40 | stm_audio_bootloader/qpsk 41 | 42 | include stmlib/makefile.inc 43 | -------------------------------------------------------------------------------- /frames/drivers/keyframe_led.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for the keyframe indicator LED. 28 | 29 | #ifndef FRAMES_DRIVERS_KEYFRAME_LED_H_ 30 | #define FRAMES_DRIVERS_KEYFRAME_LED_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace frames { 35 | 36 | class KeyframeLed { 37 | public: 38 | KeyframeLed() { } 39 | ~KeyframeLed() { } 40 | 41 | void Init(); 42 | void High(); 43 | void Low(); 44 | 45 | private: 46 | DISALLOW_COPY_AND_ASSIGN(KeyframeLed); 47 | }; 48 | 49 | } // namespace frames 50 | 51 | #endif // FRAMES_DRIVERS_KEYFRAME_LED_H_ 52 | -------------------------------------------------------------------------------- /frames/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef FRAMES_DRIVERS_SYSTEM_H_ 30 | #define FRAMES_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace frames { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(uint32_t timer_period, bool application); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace frames 49 | 50 | #endif // FRAMES_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /frames/drivers/trigger_output.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for the trigger output pin. 28 | 29 | #ifndef FRAMES_DRIVERS_TRIGGER_OUTPUT_H_ 30 | #define FRAMES_DRIVERS_TRIGGER_OUTPUT_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace frames { 35 | 36 | class TriggerOutput { 37 | public: 38 | TriggerOutput() { } 39 | ~TriggerOutput() { } 40 | 41 | void Init(); 42 | void High(); 43 | void Low(); 44 | 45 | private: 46 | 47 | DISALLOW_COPY_AND_ASSIGN(TriggerOutput); 48 | }; 49 | 50 | } // namespace frames 51 | 52 | #endif // FRAMES_DRIVERS_TRIGGER_OUTPUT_H_ 53 | -------------------------------------------------------------------------------- /frames/drivers/uart_logger.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for dumping log messages to the UART (TX pin). 28 | 29 | #ifndef FRAMES_DRIVERS_UART_LOGGER_H_ 30 | #define FRAMES_DRIVERS_UART_LOGGER_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace frames { 35 | 36 | class UartLogger { 37 | public: 38 | UartLogger() { } 39 | ~UartLogger() { } 40 | 41 | void Init(uint32_t baud_rate); 42 | void Trace(uint8_t byte); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(UartLogger); 46 | }; 47 | 48 | } // namespace frames 49 | 50 | #endif // FRAMES_DRIVERS_UART_LOGGER_H_ 51 | -------------------------------------------------------------------------------- /frames/hardware_design/Frames.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/frames/hardware_design/Frames.xlsx -------------------------------------------------------------------------------- /frames/hardware_design/panel/frames.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/frames/hardware_design/panel/frames.ai -------------------------------------------------------------------------------- /frames/hardware_design/panel/frames.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/frames/hardware_design/panel/frames.dwg -------------------------------------------------------------------------------- /frames/hardware_design/pcb/frames_v03.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/frames/hardware_design/pcb/frames_v03.brd -------------------------------------------------------------------------------- /frames/hardware_design/pcb/frames_v03.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/frames/hardware_design/pcb/frames_v03.sch -------------------------------------------------------------------------------- /frames/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/frames/resources/__init__.py -------------------------------------------------------------------------------- /grids/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/grids/__init__.py -------------------------------------------------------------------------------- /grids/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2011 Emilie Gillet. 2 | # 3 | # This program is free software: you can redistribute it and/or modify 4 | # it under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation, either version 3 of the License, or 6 | # (at your option) any later version. 7 | # This program is distributed in the hope that it will be useful, 8 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | # GNU General Public License for more details. 11 | # You should have received a copy of the GNU General Public License 12 | # along with this program. If not, see . 13 | 14 | VERSION = 0.1 15 | MCU_NAME = 328 16 | TARGET = grids_bootloader 17 | PACKAGES = avrlib grids/bootloader avr_audio_bootloader/fsk 18 | EXTRA_DEFINES = -funsigned-char -fno-inline-small-functions -DDISABLE_DEFAULT_UART_RX_ISR 19 | EXTRA_LD_FLAGS = ,--section-start=.text=0x7000,--relax 20 | 21 | LFUSE = ff 22 | HFUSE = d8 23 | EFUSE = 05 24 | LOCK = 2f 25 | 26 | include avrlib/makefile.mk 27 | 28 | include $(DEP_FILE) 29 | -------------------------------------------------------------------------------- /grids/clock.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2011 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // This program is free software: you can redistribute it and/or modify 6 | // it under the terms of the GNU General Public License as published by 7 | // the Free Software Foundation, either version 3 of the License, or 8 | // (at your option) any later version. 9 | // This program is distributed in the hope that it will be useful, 10 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 | // GNU General Public License for more details. 13 | // You should have received a copy of the GNU General Public License 14 | // along with this program. If not, see . 15 | // 16 | // ----------------------------------------------------------------------------- 17 | // 18 | // Global clock. 19 | 20 | #include "grids/clock.h" 21 | 22 | #include "grids/resources.h" 23 | 24 | namespace grids { 25 | 26 | Clock clock; 27 | 28 | /* static */ 29 | bool Clock::locked_; 30 | 31 | /* static */ 32 | uint16_t Clock::bpm_; 33 | 34 | /* static */ 35 | uint32_t Clock::phase_; 36 | 37 | /* static */ 38 | uint32_t Clock::phase_increment_; 39 | 40 | /* static */ 41 | uint8_t Clock::falling_edge_; 42 | 43 | /* static */ 44 | void Clock::Update(uint16_t bpm, ClockResolution resolution) { 45 | bpm_ = bpm; 46 | phase_increment_ = pgm_read_dword(lut_res_tempo_phase_increment + bpm); 47 | if (resolution == CLOCK_RESOLUTION_4_PPQN) { 48 | phase_increment_ >>= 1; 49 | } else if (resolution == CLOCK_RESOLUTION_24_PPQN) { 50 | phase_increment_ = (phase_increment_ << 1) + phase_increment_; 51 | } 52 | } 53 | 54 | } // namespace grids 55 | -------------------------------------------------------------------------------- /grids/hardware_design/Grids.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/grids/hardware_design/Grids.xlsx -------------------------------------------------------------------------------- /grids/hardware_design/panel/grids.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/grids/hardware_design/panel/grids.ai -------------------------------------------------------------------------------- /grids/hardware_design/panel/grids.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/grids/hardware_design/panel/grids.dwg -------------------------------------------------------------------------------- /grids/hardware_design/pcb/grids_v02.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/grids/hardware_design/pcb/grids_v02.brd -------------------------------------------------------------------------------- /grids/hardware_design/pcb/grids_v02.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/grids/hardware_design/pcb/grids_v02.sch -------------------------------------------------------------------------------- /grids/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2012 Emilie Gillet. 2 | # 3 | # This program is free software: you can redistribute it and/or modify 4 | # it under the terms of the GNU General Public License as published by 5 | # the Free Software Foundation, either version 3 of the License, or 6 | # (at your option) any later version. 7 | # This program is distributed in the hope that it will be useful, 8 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 9 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 | # GNU General Public License for more details. 11 | # You should have received a copy of the GNU General Public License 12 | # along with this program. If not, see . 13 | 14 | VERSION = 0.1 15 | MCU_NAME = 328 16 | TARGET = grids 17 | PACKAGES = avrlib avrlib/devices grids 18 | RESOURCES = grids/resources 19 | SYSEX_FLAGS = --page_size=64 --device_id=9 20 | EXTRA_DEFINES = -DDISABLE_DEFAULT_UART_RX_ISR 21 | 22 | LFUSE = ff 23 | HFUSE = d8 24 | EFUSE = 05 25 | LOCK = 2f 26 | 27 | include avrlib/makefile.mk 28 | 29 | include $(DEP_FILE) 30 | 31 | # Rule for building the firmware update file 32 | wav: $(TARGET_BIN) 33 | python avr_audio_bootloader/fsk/encoder.py \ 34 | -s 40000 -b 16 -n 8 -z 4 -p 128 -g 128 -k 10 \ 35 | $(TARGET_BIN) 36 | 37 | bootstrap_all: 38 | make -f grids/makefile 39 | make -f grids/bootloader/makefile 40 | make -f grids/bootloader/makefile fuses 41 | $(AVRDUDE) -B 1 $(AVRDUDE_COM_OPTS) $(AVRDUDE_ISP_OPTS) \ 42 | -U flash:w:build/grids/grids.hex:i \ 43 | -U flash:w:build/grids_bootloader/grids_bootloader.hex:i \ 44 | -U lock:w:0x2f:m 45 | -------------------------------------------------------------------------------- /grids/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/grids/resources/__init__.py -------------------------------------------------------------------------------- /kinks/hardware_design/Kinks.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/kinks/hardware_design/Kinks.xlsx -------------------------------------------------------------------------------- /kinks/hardware_design/panel/kinks.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/kinks/hardware_design/panel/kinks.ai -------------------------------------------------------------------------------- /kinks/hardware_design/panel/kinks.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/kinks/hardware_design/panel/kinks.dwg -------------------------------------------------------------------------------- /kinks/hardware_design/pcb/kinks_v41.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/kinks/hardware_design/pcb/kinks_v41.brd -------------------------------------------------------------------------------- /kinks/hardware_design/pcb/kinks_v41.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/kinks/hardware_design/pcb/kinks_v41.sch -------------------------------------------------------------------------------- /links/hardware_design/Links.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/links/hardware_design/Links.xlsx -------------------------------------------------------------------------------- /links/hardware_design/panel/links.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/links/hardware_design/panel/links.ai -------------------------------------------------------------------------------- /links/hardware_design/panel/links.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/links/hardware_design/panel/links.dwg -------------------------------------------------------------------------------- /links/hardware_design/pcb/links_v40.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/links/hardware_design/pcb/links_v40.brd -------------------------------------------------------------------------------- /links/hardware_design/pcb/links_v40.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/links/hardware_design/pcb/links_v40.sch -------------------------------------------------------------------------------- /marbles/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/marbles/__init__.py -------------------------------------------------------------------------------- /marbles/bootloader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/marbles/bootloader/__init__.py -------------------------------------------------------------------------------- /marbles/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 168000000L 28 | SYSCLOCK = SYSCLK_FREQ_168MHz 29 | FAMILY = f4xx 30 | # USB = enabled 31 | 32 | # Preferred upload command 33 | UPLOAD_COMMAND = upload_jtag_erase_first 34 | 35 | # Packages to build 36 | TARGET = marbles_bootloader 37 | PACKAGES = marbles/bootloader \ 38 | marbles/drivers \ 39 | stm_audio_bootloader/qpsk \ 40 | stmlib/dsp \ 41 | stmlib/utils \ 42 | stmlib/system 43 | RESOURCES = marbles/resources 44 | 45 | TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ 46 | 47 | include stmlib/makefile.inc 48 | -------------------------------------------------------------------------------- /marbles/drivers/system.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2015 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System level initialization. 28 | 29 | #include "marbles/drivers/system.h" 30 | 31 | #include 32 | 33 | namespace marbles { 34 | 35 | void System::Init(bool application) { 36 | if (application) { 37 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); 38 | } 39 | IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 40 | IWDG_SetPrescaler(IWDG_Prescaler_32); 41 | } 42 | 43 | void System::StartTimers() { 44 | SysTick_Config(F_CPU / 1000); 45 | IWDG_Enable(); 46 | } 47 | 48 | } // namespace marbles 49 | -------------------------------------------------------------------------------- /marbles/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef MARBLES_DRIVERS_SYSTEM_H_ 30 | #define MARBLES_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace marbles { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(bool application); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace marbles 49 | 50 | #endif // MARBLES_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /marbles/hardware_design/Marbles.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/marbles/hardware_design/Marbles.xlsx -------------------------------------------------------------------------------- /marbles/hardware_design/panel/marbles_v70.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/marbles/hardware_design/panel/marbles_v70.ai -------------------------------------------------------------------------------- /marbles/hardware_design/panel/marbles_v70.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/marbles/hardware_design/panel/marbles_v70.dwg -------------------------------------------------------------------------------- /marbles/hardware_design/pcb/marbles_v70.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/marbles/hardware_design/pcb/marbles_v70.brd -------------------------------------------------------------------------------- /marbles/hardware_design/pcb/marbles_v70.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/marbles/hardware_design/pcb/marbles_v70.sch -------------------------------------------------------------------------------- /marbles/ramp/ramp.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Timing information is represented as a ramp from 0.0 to kMaxRampValue 28 | 29 | #ifndef MARBLES_RAMP_RAMP_H_ 30 | #define MARBLES_RAMP_RAMP_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace marbles { 35 | 36 | const float kMaxRampValue = 0.9999f; 37 | 38 | } // namespace marbles 39 | 40 | #endif // MARBLES_RAMP_RAMP_H_ 41 | -------------------------------------------------------------------------------- /marbles/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/marbles/resources/__init__.py -------------------------------------------------------------------------------- /marbles/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = marbles/test stmlib/utils marbles/ramp marbles/random marbles stmlib/dsp 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = marbles_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = marbles_test.cc \ 9 | lag_processor.cc \ 10 | output_channel.cc \ 11 | quantizer.cc \ 12 | discrete_distribution_quantizer.cc \ 13 | ramp_extractor.cc \ 14 | random.cc \ 15 | resources.cc \ 16 | units.cc \ 17 | t_generator.cc \ 18 | x_y_generator.cc 19 | OBJ_FILES = $(CC_FILES:.cc=.o) 20 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 21 | DEPS = $(OBJS:.o=.d) 22 | DEP_FILE = $(BUILD_DIR)depends.mk 23 | 24 | all: marbles_test 25 | 26 | $(BUILD_DIR): 27 | mkdir -p $(BUILD_DIR) 28 | 29 | $(BUILD_DIR)%.o: %.cc 30 | g++ -c -DTEST -g -Wall -Werror -msse2 -Wno-unused-variable -O2 -I. $< -o $@ 31 | 32 | $(BUILD_DIR)%.d: %.cc 33 | g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 34 | 35 | marbles_test: $(OBJS) 36 | g++ -g -o $(TARGET) $(OBJS) -Wl,-no_pie -lm -L/opt/local/lib 37 | 38 | depends: $(DEPS) 39 | cat $(DEPS) > $(DEP_FILE) 40 | 41 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 42 | cat $(DEPS) > $(DEP_FILE) 43 | 44 | profile: marbles_test 45 | env CPUPROFILE_FREQUENCY=1000 CPUPROFILE=$(BUILD_DIR)/marbles.prof ./marbles_test && pprof --pdf ./marbles_test $(BUILD_DIR)/marbles.prof > profile.pdf && open profile.pdf 46 | 47 | clean: 48 | rm $(BUILD_DIR)*.* 49 | 50 | include $(DEP_FILE) 51 | -------------------------------------------------------------------------------- /peaks/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/peaks/__init__.py -------------------------------------------------------------------------------- /peaks/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2013 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 72000000L 28 | SYSCLOCK = SYSCLK_FREQ_72MHz 29 | FAMILY = f10x 30 | DENSITY = md 31 | MEMORY_MODE = flash 32 | # USB = enabled 33 | 34 | # Preferred upload command 35 | UPLOAD_COMMAND = upload_jtag 36 | 37 | # Packages to build 38 | TARGET = peaks_bootloader 39 | PACKAGES = peaks/bootloader peaks/drivers stmlib/utils stmlib/system \ 40 | stm_audio_bootloader/fsk 41 | 42 | include stmlib/makefile.inc 43 | -------------------------------------------------------------------------------- /peaks/data/digits.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/peaks/data/digits.bin -------------------------------------------------------------------------------- /peaks/drivers/adc.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for ADC. 28 | 29 | #ifndef PEAKS_DRIVERS_ADC_H_ 30 | #define PEAKS_DRIVERS_ADC_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace peaks { 35 | 36 | const uint8_t kNumAdcChannels = 4; 37 | 38 | class Adc { 39 | public: 40 | Adc() { } 41 | ~Adc() { } 42 | 43 | void Init(); 44 | 45 | inline uint16_t value(uint8_t channel) const { return values_[channel]; } 46 | 47 | private: 48 | uint16_t values_[kNumAdcChannels]; 49 | 50 | DISALLOW_COPY_AND_ASSIGN(Adc); 51 | }; 52 | 53 | } // namespace peaks 54 | 55 | #endif // PEAKS_DRIVERS_ADC_H_ 56 | -------------------------------------------------------------------------------- /peaks/drivers/gate_input.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for the 2 gate inputs. 28 | 29 | #include "peaks/drivers/gate_input.h" 30 | 31 | namespace peaks { 32 | 33 | void GateInput::Init() { 34 | GPIO_InitTypeDef gpio_init; 35 | gpio_init.GPIO_Pin = GPIO_Pin_12; 36 | gpio_init.GPIO_Speed = GPIO_Speed_2MHz; 37 | gpio_init.GPIO_Mode = GPIO_Mode_IPU; 38 | GPIO_Init(GPIOA, &gpio_init); 39 | 40 | gpio_init.GPIO_Pin = GPIO_Pin_11; 41 | gpio_init.GPIO_Speed = GPIO_Speed_2MHz; 42 | gpio_init.GPIO_Mode = GPIO_Mode_IPU; 43 | GPIO_Init(GPIOB, &gpio_init); 44 | } 45 | 46 | } // namespace peaks 47 | -------------------------------------------------------------------------------- /peaks/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef PEAKS_DRIVERS_SYSTEM_H_ 30 | #define PEAKS_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace peaks { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(uint32_t timer_period, bool application); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace peaks 49 | 50 | #endif // PEAKS_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /peaks/hardware_design/Peaks.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/peaks/hardware_design/Peaks.xlsx -------------------------------------------------------------------------------- /peaks/hardware_design/panel/peaks.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/peaks/hardware_design/panel/peaks.ai -------------------------------------------------------------------------------- /peaks/hardware_design/panel/peaks.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/peaks/hardware_design/panel/peaks.dwg -------------------------------------------------------------------------------- /peaks/hardware_design/pcb/peaks_v30.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/peaks/hardware_design/pcb/peaks_v30.brd -------------------------------------------------------------------------------- /peaks/hardware_design/pcb/peaks_v30.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/peaks/hardware_design/pcb/peaks_v30.sch -------------------------------------------------------------------------------- /peaks/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/peaks/resources/__init__.py -------------------------------------------------------------------------------- /peaks/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = peaks/test stmlib/utils peaks peaks/drums peaks/pulse_processor peaks/modulations peaks/number_station 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = peaks_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = bass_drum.cc \ 9 | fm_drum.cc \ 10 | high_hat.cc \ 11 | lfo.cc \ 12 | multistage_envelope.cc \ 13 | number_station.cc \ 14 | peaks_test.cc \ 15 | processors.cc \ 16 | pulse_shaper.cc \ 17 | pulse_randomizer.cc \ 18 | random.cc \ 19 | resources.cc \ 20 | snare_drum.cc 21 | OBJ_FILES = $(CC_FILES:.cc=.o) 22 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 23 | DEPS = $(OBJS:.o=.d) 24 | DEP_FILE = $(BUILD_DIR)depends.mk 25 | 26 | all: peaks_test 27 | 28 | $(BUILD_DIR): 29 | mkdir -p $(BUILD_DIR) 30 | 31 | $(BUILD_DIR)%.o: %.cc 32 | g++ -c -DTEST -g -Wall -Werror -I. $< -o $@ 33 | 34 | $(BUILD_DIR)%.d: %.cc 35 | g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 36 | 37 | peaks_test: $(OBJS) 38 | g++ -o $(TARGET) $(OBJS) 39 | 40 | depends: $(DEPS) 41 | cat $(DEPS) > $(DEP_FILE) 42 | 43 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 44 | cat $(DEPS) > $(DEP_FILE) 45 | 46 | include $(DEP_FILE) 47 | -------------------------------------------------------------------------------- /plaits/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/__init__.py -------------------------------------------------------------------------------- /plaits/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2016 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 72000000L 28 | SYSCLOCK = SYSCLK_FREQ_72MHz 29 | FAMILY = f37x 30 | # USB = enabled 31 | 32 | # Preferred upload command 33 | UPLOAD_COMMAND = upload_jtag_erase_first 34 | 35 | # Packages to build 36 | TARGET = plaits_bootloader 37 | PACKAGES = plaits/bootloader \ 38 | plaits/drivers \ 39 | stm_audio_bootloader/qpsk \ 40 | stmlib/dsp \ 41 | stmlib/utils \ 42 | stmlib/system 43 | 44 | TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ 45 | 46 | include stmlib/makefile.inc 47 | -------------------------------------------------------------------------------- /plaits/dsp/noise/dust.h: -------------------------------------------------------------------------------- 1 | // Copyright 2016 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Randomly clocked samples. 28 | 29 | #ifndef PLAITS_DSP_NOISE_DUST_H_ 30 | #define PLAITS_DSP_NOISE_DUST_H_ 31 | 32 | #include "stmlib/utils/random.h" 33 | 34 | namespace plaits { 35 | 36 | inline float Dust(float frequency) { 37 | float inv_frequency = 1.0f / frequency; 38 | float u = stmlib::Random::GetFloat(); 39 | if (u < frequency) { 40 | return u * inv_frequency; 41 | } else { 42 | return 0.0f; 43 | } 44 | } 45 | 46 | } // namespace plaits 47 | 48 | #endif // PLAITS_DSP_NOISE_DUST_H_ 49 | -------------------------------------------------------------------------------- /plaits/hardware_design/Plaits.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/hardware_design/Plaits.xlsx -------------------------------------------------------------------------------- /plaits/hardware_design/panel/plaits_v50.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/hardware_design/panel/plaits_v50.ai -------------------------------------------------------------------------------- /plaits/hardware_design/panel/plaits_v50.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/hardware_design/panel/plaits_v50.dwg -------------------------------------------------------------------------------- /plaits/hardware_design/pcb/plaits_v50.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/hardware_design/pcb/plaits_v50.brd -------------------------------------------------------------------------------- /plaits/hardware_design/pcb/plaits_v50.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/hardware_design/pcb/plaits_v50.sch -------------------------------------------------------------------------------- /plaits/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/__init__.py -------------------------------------------------------------------------------- /plaits/resources/syx/Guit_Clav1.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/Guit_Clav1.syx -------------------------------------------------------------------------------- /plaits/resources/syx/Guit_Clav2.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/Guit_Clav2.syx -------------------------------------------------------------------------------- /plaits/resources/syx/Guit_Clav3.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/Guit_Clav3.syx -------------------------------------------------------------------------------- /plaits/resources/syx/Guit_Clav4.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/Guit_Clav4.syx -------------------------------------------------------------------------------- /plaits/resources/syx/Guit_Clav5.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/Guit_Clav5.syx -------------------------------------------------------------------------------- /plaits/resources/syx/KV04A.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/KV04A.syx -------------------------------------------------------------------------------- /plaits/resources/syx/KV04B.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/KV04B.syx -------------------------------------------------------------------------------- /plaits/resources/syx/MISC.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/MISC.syx -------------------------------------------------------------------------------- /plaits/resources/syx/PPGVOCAL.SYX: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/PPGVOCAL.SYX -------------------------------------------------------------------------------- /plaits/resources/syx/ROM1A.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/ROM1A.syx -------------------------------------------------------------------------------- /plaits/resources/syx/ROM1B.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/ROM1B.syx -------------------------------------------------------------------------------- /plaits/resources/syx/ROM2A.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/ROM2A.syx -------------------------------------------------------------------------------- /plaits/resources/syx/ROM2B.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/ROM2B.syx -------------------------------------------------------------------------------- /plaits/resources/syx/ROM3A.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/ROM3A.syx -------------------------------------------------------------------------------- /plaits/resources/syx/ROM3B.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/ROM3B.syx -------------------------------------------------------------------------------- /plaits/resources/syx/ROM4A.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/ROM4A.syx -------------------------------------------------------------------------------- /plaits/resources/syx/ROM4B.syx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/ROM4B.syx -------------------------------------------------------------------------------- /plaits/resources/syx/SYN9.SYX: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/syx/SYN9.SYX -------------------------------------------------------------------------------- /plaits/resources/waves.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/plaits/resources/waves.bin -------------------------------------------------------------------------------- /rings/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/rings/__init__.py -------------------------------------------------------------------------------- /rings/bootloader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/rings/bootloader/__init__.py -------------------------------------------------------------------------------- /rings/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2015 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 168000000L 28 | SYSCLOCK = SYSCLK_FREQ_168MHz 29 | FAMILY = f4xx 30 | # USB = enabled 31 | 32 | # Preferred upload command 33 | UPLOAD_COMMAND = upload_jtag_erase_first 34 | 35 | # Packages to build 36 | TARGET = rings_bootloader 37 | PACKAGES = rings/bootloader \ 38 | rings/drivers \ 39 | stm_audio_bootloader/qpsk \ 40 | stmlib/dsp \ 41 | stmlib/utils \ 42 | stmlib/system 43 | RESOURCES = rings/resources 44 | 45 | TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ 46 | 47 | include stmlib/makefile.inc 48 | -------------------------------------------------------------------------------- /rings/drivers/system.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2015 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System level initialization. 28 | 29 | #include "rings/drivers/system.h" 30 | 31 | #include 32 | 33 | namespace rings { 34 | 35 | void System::Init(bool application) { 36 | if (application) { 37 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); 38 | } 39 | } 40 | 41 | void System::StartTimers() { 42 | SysTick_Config(F_CPU / 1000); 43 | } 44 | 45 | } // namespace rings 46 | -------------------------------------------------------------------------------- /rings/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef RINGS_DRIVERS_SYSTEM_H_ 30 | #define RINGS_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace rings { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(bool application); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace rings 49 | 50 | #endif // RINGS_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /rings/dsp/dsp.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Utility DSP routines. 28 | 29 | #ifndef RINGS_DSP_DSP_H_ 30 | #define RINGS_DSP_DSP_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | // #define MIC_W 35 | #define BRYAN_CHORDS 36 | 37 | namespace rings { 38 | 39 | static const float kSampleRate = 48000.0f; 40 | const float a3 = 440.0f / kSampleRate; 41 | const size_t kMaxBlockSize = 24; 42 | 43 | } // namespace rings 44 | 45 | #endif // RINGS_DSP_DSP_H_ 46 | -------------------------------------------------------------------------------- /rings/dsp/patch.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Patch parameters. 28 | 29 | #ifndef RINGS_DSP_PATCH_H_ 30 | #define RINGS_DSP_PATCH_H_ 31 | 32 | namespace rings { 33 | 34 | struct Patch { 35 | float structure; 36 | float brightness; 37 | float damping; 38 | float position; 39 | }; 40 | 41 | } // namespace rings 42 | 43 | #endif // RINGS_DSP_PATCH_H_ 44 | -------------------------------------------------------------------------------- /rings/dsp/performance_state.h: -------------------------------------------------------------------------------- 1 | // Copyright 2015 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Note triggering state. 28 | 29 | #ifndef RINGS_DSP_PERFORMANCE_STATE_H_ 30 | #define RINGS_DSP_PERFORMANCE_STATE_H_ 31 | 32 | namespace rings { 33 | 34 | const int32_t kNumChords = 11; 35 | 36 | struct PerformanceState { 37 | bool strum; 38 | bool internal_exciter; 39 | bool internal_strum; 40 | bool internal_note; 41 | 42 | float tonic; 43 | float note; 44 | float fm; 45 | int32_t chord; 46 | }; 47 | 48 | } // namespace rings 49 | 50 | #endif // RINGS_DSP_PERFORMANCE_STATE_H_ 51 | -------------------------------------------------------------------------------- /rings/hardware_design/Rings.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/rings/hardware_design/Rings.xlsx -------------------------------------------------------------------------------- /rings/hardware_design/panel/rings.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/rings/hardware_design/panel/rings.ai -------------------------------------------------------------------------------- /rings/hardware_design/panel/rings.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/rings/hardware_design/panel/rings.dwg -------------------------------------------------------------------------------- /rings/hardware_design/pcb/rings_v30.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/rings/hardware_design/pcb/rings_v30.brd -------------------------------------------------------------------------------- /rings/hardware_design/pcb/rings_v30.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/rings/hardware_design/pcb/rings_v30.sch -------------------------------------------------------------------------------- /rings/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/rings/resources/__init__.py -------------------------------------------------------------------------------- /rings/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = rings/test stmlib/utils rings/dsp rings stmlib/dsp 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = rings_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = rings_test.cc \ 9 | fm_voice.cc \ 10 | part.cc \ 11 | resonator.cc \ 12 | resources.cc \ 13 | random.cc \ 14 | string.cc \ 15 | string_synth_part.cc \ 16 | units.cc 17 | OBJ_FILES = $(CC_FILES:.cc=.o) 18 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 19 | DEPS = $(OBJS:.o=.d) 20 | DEP_FILE = $(BUILD_DIR)depends.mk 21 | 22 | all: rings_test 23 | 24 | $(BUILD_DIR): 25 | mkdir -p $(BUILD_DIR) 26 | 27 | $(BUILD_DIR)%.o: %.cc 28 | g++ -c -DTEST -g -Wall -Werror -msse2 -Wno-unused-variable -O2 -I. $< -o $@ 29 | 30 | $(BUILD_DIR)%.d: %.cc 31 | g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 32 | 33 | rings_test: $(OBJS) 34 | g++ -g -o $(TARGET) $(OBJS) -Wl,-no_pie -lm -lprofiler -L/opt/local/lib 35 | 36 | depends: $(DEPS) 37 | cat $(DEPS) > $(DEP_FILE) 38 | 39 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 40 | cat $(DEPS) > $(DEP_FILE) 41 | 42 | profile: rings_test 43 | env CPUPROFILE_FREQUENCY=1000 CPUPROFILE=$(BUILD_DIR)/rings.prof ./rings_test && pprof --pdf ./rings_test $(BUILD_DIR)/rings.prof > profile.pdf && open profile.pdf 44 | 45 | clean: 46 | rm $(BUILD_DIR)*.* 47 | 48 | include $(DEP_FILE) 49 | -------------------------------------------------------------------------------- /ripples/hardware_design/Ripples.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ripples/hardware_design/Ripples.xlsx -------------------------------------------------------------------------------- /ripples/hardware_design/panel/ripples.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ripples/hardware_design/panel/ripples.ai -------------------------------------------------------------------------------- /ripples/hardware_design/panel/ripples.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ripples/hardware_design/panel/ripples.dwg -------------------------------------------------------------------------------- /ripples/hardware_design/panel/ripples2.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ripples/hardware_design/panel/ripples2.ai -------------------------------------------------------------------------------- /ripples/hardware_design/panel/ripples2.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ripples/hardware_design/panel/ripples2.dwg -------------------------------------------------------------------------------- /ripples/hardware_design/pcb/ripples_v40.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ripples/hardware_design/pcb/ripples_v40.brd -------------------------------------------------------------------------------- /ripples/hardware_design/pcb/ripples_v40.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ripples/hardware_design/pcb/ripples_v40.sch -------------------------------------------------------------------------------- /ripples/hardware_design/pcb/ripples_v90.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ripples/hardware_design/pcb/ripples_v90.brd -------------------------------------------------------------------------------- /ripples/hardware_design/pcb/ripples_v90.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/ripples/hardware_design/pcb/ripples_v90.sch -------------------------------------------------------------------------------- /shades/hardware_design/Shades.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shades/hardware_design/Shades.xlsx -------------------------------------------------------------------------------- /shades/hardware_design/panel/shades.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shades/hardware_design/panel/shades.ai -------------------------------------------------------------------------------- /shades/hardware_design/panel/shades.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shades/hardware_design/panel/shades.dwg -------------------------------------------------------------------------------- /shades/hardware_design/panel/shades2.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shades/hardware_design/panel/shades2.ai -------------------------------------------------------------------------------- /shades/hardware_design/panel/shades2.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shades/hardware_design/panel/shades2.dwg -------------------------------------------------------------------------------- /shades/hardware_design/pcb/shades_v30.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shades/hardware_design/pcb/shades_v30.brd -------------------------------------------------------------------------------- /shades/hardware_design/pcb/shades_v30.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shades/hardware_design/pcb/shades_v30.sch -------------------------------------------------------------------------------- /shades/hardware_design/pcb/shades_v40.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shades/hardware_design/pcb/shades_v40.brd -------------------------------------------------------------------------------- /shades/hardware_design/pcb/shades_v40.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shades/hardware_design/pcb/shades_v40.sch -------------------------------------------------------------------------------- /shelves/hardware_design/Shelves.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/Shelves.xlsx -------------------------------------------------------------------------------- /shelves/hardware_design/ShelvesExpander.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/ShelvesExpander.xlsx -------------------------------------------------------------------------------- /shelves/hardware_design/panel/shelves.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/panel/shelves.ai -------------------------------------------------------------------------------- /shelves/hardware_design/panel/shelves.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/panel/shelves.dwg -------------------------------------------------------------------------------- /shelves/hardware_design/panel/shelves_expander.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/panel/shelves_expander.ai -------------------------------------------------------------------------------- /shelves/hardware_design/panel/shelves_expander.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/panel/shelves_expander.dwg -------------------------------------------------------------------------------- /shelves/hardware_design/panel/shelves_mk2.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/panel/shelves_mk2.ai -------------------------------------------------------------------------------- /shelves/hardware_design/panel/shelves_mk2.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/panel/shelves_mk2.dwg -------------------------------------------------------------------------------- /shelves/hardware_design/pcb/shelves_expander_v10.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/pcb/shelves_expander_v10.brd -------------------------------------------------------------------------------- /shelves/hardware_design/pcb/shelves_expander_v10.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/pcb/shelves_expander_v10.sch -------------------------------------------------------------------------------- /shelves/hardware_design/pcb/shelves_v05.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/pcb/shelves_v05.brd -------------------------------------------------------------------------------- /shelves/hardware_design/pcb/shelves_v05.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/pcb/shelves_v05.sch -------------------------------------------------------------------------------- /shelves/hardware_design/pcb/shelves_v60.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/pcb/shelves_v60.brd -------------------------------------------------------------------------------- /shelves/hardware_design/pcb/shelves_v60.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/shelves/hardware_design/pcb/shelves_v60.sch -------------------------------------------------------------------------------- /stages/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/stages/__init__.py -------------------------------------------------------------------------------- /stages/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2016 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 72000000L 28 | SYSCLOCK = SYSCLK_FREQ_72MHz 29 | FAMILY = f37x 30 | # USB = enabled 31 | 32 | # Preferred upload command 33 | UPLOAD_COMMAND = upload_jtag_erase_first 34 | 35 | # Packages to build 36 | TARGET = stages_bootloader 37 | PACKAGES = stages/bootloader \ 38 | stages/drivers \ 39 | stm_audio_bootloader/qpsk \ 40 | stmlib/dsp \ 41 | stmlib/utils \ 42 | stmlib/system 43 | RESOURCES = stages/resources 44 | 45 | TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ 46 | 47 | include stmlib/makefile.inc 48 | -------------------------------------------------------------------------------- /stages/drivers/system.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2017 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System level initialization. 28 | 29 | #include "stages/drivers/system.h" 30 | 31 | #include 32 | 33 | namespace stages { 34 | 35 | void System::Init(bool application) { 36 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, application ? 0x8000 : 0x0000); 37 | IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 38 | IWDG_SetPrescaler(IWDG_Prescaler_16); 39 | } 40 | 41 | void System::StartTimers() { 42 | SysTick_Config(F_CPU / 1000); 43 | IWDG_Enable(); 44 | } 45 | 46 | } // namespace stages 47 | -------------------------------------------------------------------------------- /stages/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2017 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef STAGES_DRIVERS_SYSTEM_H_ 30 | #define STAGES_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace stages { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(bool application); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace stages 49 | 50 | #endif // STAGES_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /stages/hardware_design/Stages.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/stages/hardware_design/Stages.xlsx -------------------------------------------------------------------------------- /stages/hardware_design/panel/stages_v70.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/stages/hardware_design/panel/stages_v70.ai -------------------------------------------------------------------------------- /stages/hardware_design/panel/stages_v70.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/stages/hardware_design/panel/stages_v70.dwg -------------------------------------------------------------------------------- /stages/hardware_design/pcb/stages_v70.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/stages/hardware_design/pcb/stages_v70.brd -------------------------------------------------------------------------------- /stages/hardware_design/pcb/stages_v70.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/stages/hardware_design/pcb/stages_v70.sch -------------------------------------------------------------------------------- /stages/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/stages/resources/__init__.py -------------------------------------------------------------------------------- /stages/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = stages/test stmlib/utils stages stmlib/dsp tides2/ramp 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = stages_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = ramp_extractor.cc \ 9 | stages_test.cc \ 10 | segment_generator.cc \ 11 | resources.cc \ 12 | random.cc \ 13 | units.cc 14 | OBJ_FILES = $(CC_FILES:.cc=.o) 15 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 16 | DEPS = $(OBJS:.o=.d) 17 | DEP_FILE = $(BUILD_DIR)depends.mk 18 | 19 | all: stages_test 20 | 21 | $(BUILD_DIR): 22 | mkdir -p $(BUILD_DIR) 23 | 24 | $(BUILD_DIR)%.o: %.cc 25 | g++ -c -DTEST -g -Wall -Werror -msse2 -Wno-unused-variable -O2 -I. $< -o $@ 26 | 27 | $(BUILD_DIR)%.d: %.cc 28 | g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 29 | 30 | stages_test: $(OBJS) 31 | g++ -g -o $(TARGET) $(OBJS) -Wl,-no_pie -lm -lprofiler -L/opt/local/lib 32 | 33 | depends: $(DEPS) 34 | cat $(DEPS) > $(DEP_FILE) 35 | 36 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 37 | cat $(DEPS) > $(DEP_FILE) 38 | 39 | profile: stages_test 40 | env CPUPROFILE_FREQUENCY=1000 CPUPROFILE=$(BUILD_DIR)/stages.prof ./stages_test && pprof --pdf ./stages_test $(BUILD_DIR)/stages.prof > profile.pdf && open profile.pdf 41 | 42 | clean: 43 | rm $(BUILD_DIR)*.* 44 | 45 | include $(DEP_FILE) 46 | -------------------------------------------------------------------------------- /streams/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/__init__.py -------------------------------------------------------------------------------- /streams/bootloader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/bootloader/__init__.py -------------------------------------------------------------------------------- /streams/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2013 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 72000000L 28 | SYSCLOCK = SYSCLK_FREQ_72MHz 29 | FAMILY = f10x 30 | DENSITY = md 31 | MEMORY_MODE = flash 32 | # USB = enabled 33 | 34 | # Preferred upload command 35 | UPLOAD_COMMAND = upload_jtag 36 | 37 | # Packages to build 38 | TARGET = streams_bootloader 39 | PACKAGES = streams/bootloader streams/drivers stmlib/utils stmlib/system \ 40 | stm_audio_bootloader/qpsk 41 | 42 | include stmlib/makefile.inc 43 | -------------------------------------------------------------------------------- /streams/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef STREAMS_DRIVERS_SYSTEM_H_ 30 | #define STREAMS_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace streams { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(bool application); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace streams 49 | 50 | #endif // STREAMS_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /streams/hardware_design/Streams.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/hardware_design/Streams.xlsx -------------------------------------------------------------------------------- /streams/hardware_design/panel/streams.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/hardware_design/panel/streams.ai -------------------------------------------------------------------------------- /streams/hardware_design/panel/streams.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/hardware_design/panel/streams.dwg -------------------------------------------------------------------------------- /streams/hardware_design/pcb/streams_v02_bargraph.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/hardware_design/pcb/streams_v02_bargraph.brd -------------------------------------------------------------------------------- /streams/hardware_design/pcb/streams_v02_bargraph.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/hardware_design/pcb/streams_v02_bargraph.sch -------------------------------------------------------------------------------- /streams/hardware_design/pcb/streams_v05.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/hardware_design/pcb/streams_v05.brd -------------------------------------------------------------------------------- /streams/hardware_design/pcb/streams_v05.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/hardware_design/pcb/streams_v05.sch -------------------------------------------------------------------------------- /streams/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/streams/resources/__init__.py -------------------------------------------------------------------------------- /tides/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/__init__.py -------------------------------------------------------------------------------- /tides/bootloader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/bootloader/__init__.py -------------------------------------------------------------------------------- /tides/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2013 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 72000000L 28 | SYSCLOCK = SYSCLK_FREQ_72MHz 29 | FAMILY = f10x 30 | DENSITY = md 31 | MEMORY_MODE = flash 32 | # USB = enabled 33 | 34 | # Preferred upload command 35 | UPLOAD_COMMAND = upload_serial 36 | 37 | # Packages to build 38 | TARGET = tides_bootloader 39 | PACKAGES = tides/bootloader tides/drivers stmlib/utils stmlib/system \ 40 | stm_audio_bootloader/qpsk 41 | 42 | include stmlib/makefile.inc 43 | -------------------------------------------------------------------------------- /tides/drivers/gate_input.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for the end of cycles output pins. 28 | 29 | #include "tides/drivers/gate_input.h" 30 | 31 | #include 32 | 33 | namespace tides { 34 | 35 | void GateInput::Init() { 36 | GPIO_InitTypeDef gpio_init; 37 | gpio_init.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_10 | GPIO_Pin_11; 38 | gpio_init.GPIO_Speed = GPIO_Speed_10MHz; 39 | gpio_init.GPIO_Mode = GPIO_Mode_IPU; 40 | GPIO_Init(GPIOB, &gpio_init); 41 | previous_state_ = 0; 42 | } 43 | 44 | } // namespace tides 45 | -------------------------------------------------------------------------------- /tides/drivers/gate_output.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for the end of cycles output pins. 28 | 29 | #include "tides/drivers/gate_output.h" 30 | 31 | #include 32 | 33 | namespace tides { 34 | 35 | void GateOutput::Init() { 36 | GPIO_InitTypeDef gpio_init; 37 | gpio_init.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12; 38 | gpio_init.GPIO_Speed = GPIO_Speed_50MHz; 39 | gpio_init.GPIO_Mode = GPIO_Mode_Out_PP; 40 | GPIO_Init(GPIOA, &gpio_init); 41 | } 42 | 43 | } // namespace tides 44 | -------------------------------------------------------------------------------- /tides/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef TIDES_DRIVERS_SYSTEM_H_ 30 | #define TIDES_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace tides { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(uint32_t timer_period, bool application); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace tides 49 | 50 | #endif // TIDES_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /tides/drivers/uart_logger.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for dumping log messages to the UART (TX pin). 28 | 29 | #ifndef TIDES_DRIVERS_UART_LOGGER_H_ 30 | #define TIDES_DRIVERS_UART_LOGGER_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace tides { 35 | 36 | class UartLogger { 37 | public: 38 | UartLogger() { } 39 | ~UartLogger() { } 40 | 41 | void Init(uint32_t baud_rate); 42 | void Trace(uint8_t byte); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(UartLogger); 46 | }; 47 | 48 | } // namespace tides 49 | 50 | #endif // TIDES_DRIVERS_UART_LOGGER_H_ 51 | -------------------------------------------------------------------------------- /tides/hardware_design/Tides.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/hardware_design/Tides.xlsx -------------------------------------------------------------------------------- /tides/hardware_design/panel/sheep.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/hardware_design/panel/sheep.ai -------------------------------------------------------------------------------- /tides/hardware_design/panel/tides.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/hardware_design/panel/tides.ai -------------------------------------------------------------------------------- /tides/hardware_design/panel/tides.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/hardware_design/panel/tides.dwg -------------------------------------------------------------------------------- /tides/hardware_design/pcb/tides_v40.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/hardware_design/pcb/tides_v40.brd -------------------------------------------------------------------------------- /tides/hardware_design/pcb/tides_v40.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/hardware_design/pcb/tides_v40.sch -------------------------------------------------------------------------------- /tides/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/resources/__init__.py -------------------------------------------------------------------------------- /tides/resources/waves.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides/resources/waves.bin -------------------------------------------------------------------------------- /tides/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = tides/test stmlib/utils tides 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = generator_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = generator.cc \ 9 | resources.cc \ 10 | generator_test.cc 11 | OBJ_FILES = $(CC_FILES:.cc=.o) 12 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 13 | DEPS = $(OBJS:.o=.d) 14 | DEP_FILE = $(BUILD_DIR)depends.mk 15 | 16 | all: generator_test 17 | 18 | $(BUILD_DIR): 19 | mkdir -p $(BUILD_DIR) 20 | 21 | $(BUILD_DIR)%.o: %.cc 22 | g++ -c -DTEST -g -Wall -Werror -I. $< -o $@ 23 | 24 | $(BUILD_DIR)%.d: %.cc 25 | g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 26 | 27 | generator_test: $(OBJS) 28 | g++ -o $(TARGET) $(OBJS) 29 | 30 | depends: $(DEPS) 31 | cat $(DEPS) > $(DEP_FILE) 32 | 33 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 34 | cat $(DEPS) > $(DEP_FILE) 35 | 36 | include $(DEP_FILE) 37 | -------------------------------------------------------------------------------- /tides2/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides2/__init__.py -------------------------------------------------------------------------------- /tides2/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2017 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 72000000L 28 | SYSCLOCK = SYSCLK_FREQ_72MHz 29 | FAMILY = f37x 30 | # USB = enabled 31 | 32 | # Preferred upload command 33 | UPLOAD_COMMAND = upload_jtag_erase_first 34 | 35 | # Packages to build 36 | TARGET = tides2_bootloader 37 | PACKAGES = tides2/bootloader \ 38 | tides2/drivers \ 39 | stm_audio_bootloader/qpsk \ 40 | stmlib/dsp \ 41 | stmlib/utils \ 42 | stmlib/system 43 | RESOURCES = tides2/resources 44 | 45 | TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ 46 | 47 | include stmlib/makefile.inc 48 | -------------------------------------------------------------------------------- /tides2/drivers/system.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2017 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System level initialization. 28 | 29 | #include "tides2/drivers/system.h" 30 | 31 | #include 32 | 33 | namespace tides { 34 | 35 | void System::Init(bool application) { 36 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, application ? 0x8000 : 0x0000); 37 | IWDG_WriteAccessCmd(IWDG_WriteAccess_Enable); 38 | IWDG_SetPrescaler(IWDG_Prescaler_16); 39 | } 40 | 41 | void System::StartTimers() { 42 | SysTick_Config(F_CPU / 1000); 43 | IWDG_Enable(); 44 | } 45 | 46 | } // namespace tides 47 | -------------------------------------------------------------------------------- /tides2/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2017 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef TIDES_DRIVERS_SYSTEM_H_ 30 | #define TIDES_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace tides { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(bool application); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace tides 49 | 50 | #endif // TIDES_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /tides2/hardware_design/Tides2.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides2/hardware_design/Tides2.xlsx -------------------------------------------------------------------------------- /tides2/hardware_design/panel/tides2.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides2/hardware_design/panel/tides2.ai -------------------------------------------------------------------------------- /tides2/hardware_design/panel/tides2.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides2/hardware_design/panel/tides2.dwg -------------------------------------------------------------------------------- /tides2/hardware_design/pcb/tides2_v40.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides2/hardware_design/pcb/tides2_v40.brd -------------------------------------------------------------------------------- /tides2/hardware_design/pcb/tides2_v40.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides2/hardware_design/pcb/tides2_v40.sch -------------------------------------------------------------------------------- /tides2/ramp/ratio.h: -------------------------------------------------------------------------------- 1 | // Copyright 2017 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Clock division ratio 28 | 29 | #ifndef TIDES_RAMP_RATIO_H_ 30 | #define TIDES_RAMP_RATIO_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace tides { 35 | 36 | struct Ratio { 37 | float ratio; 38 | int q; 39 | }; 40 | 41 | } // namespace tides 42 | 43 | #endif // TIDES_RAMP_RATIO_H_ 44 | -------------------------------------------------------------------------------- /tides2/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tides2/resources/__init__.py -------------------------------------------------------------------------------- /tides2/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = tides2/test stmlib/utils tides2 stmlib/dsp tides2/ramp 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = tides2_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = tides_test.cc \ 9 | poly_slope_generator.cc \ 10 | ramp_extractor.cc \ 11 | resources.cc \ 12 | units.cc 13 | OBJ_FILES = $(CC_FILES:.cc=.o) 14 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 15 | DEPS = $(OBJS:.o=.d) 16 | DEP_FILE = $(BUILD_DIR)depends.mk 17 | 18 | all: tides2_test 19 | 20 | $(BUILD_DIR): 21 | mkdir -p $(BUILD_DIR) 22 | 23 | $(BUILD_DIR)%.o: %.cc 24 | g++ -c -DTEST -g -Wall -Werror -msse2 -Wno-unused-variable -O2 -I. $< -o $@ 25 | 26 | $(BUILD_DIR)%.d: %.cc 27 | g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 28 | 29 | tides2_test: $(OBJS) 30 | g++ -g -o $(TARGET) $(OBJS) -Wl,-no_pie -lm -lprofiler -L/opt/local/lib 31 | 32 | depends: $(DEPS) 33 | cat $(DEPS) > $(DEP_FILE) 34 | 35 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 36 | cat $(DEPS) > $(DEP_FILE) 37 | 38 | clean: 39 | rm $(BUILD_DIR)*.* 40 | 41 | include $(DEP_FILE) 42 | -------------------------------------------------------------------------------- /tools/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tools/__init__.py -------------------------------------------------------------------------------- /tools/hex2sysex/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tools/hex2sysex/__init__.py -------------------------------------------------------------------------------- /tools/hexfile/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tools/hexfile/__init__.py -------------------------------------------------------------------------------- /tools/learning/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tools/learning/__init__.py -------------------------------------------------------------------------------- /tools/midi/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tools/midi/__init__.py -------------------------------------------------------------------------------- /tools/optimization/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/tools/optimization/__init__.py -------------------------------------------------------------------------------- /veils/hardware_design/Veils.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/veils/hardware_design/Veils.xlsx -------------------------------------------------------------------------------- /veils/hardware_design/panel/veils.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/veils/hardware_design/panel/veils.ai -------------------------------------------------------------------------------- /veils/hardware_design/panel/veils.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/veils/hardware_design/panel/veils.dwg -------------------------------------------------------------------------------- /veils/hardware_design/panel/veils2.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/veils/hardware_design/panel/veils2.ai -------------------------------------------------------------------------------- /veils/hardware_design/panel/veils2.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/veils/hardware_design/panel/veils2.dwg -------------------------------------------------------------------------------- /veils/hardware_design/pcb/veils_v110.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/veils/hardware_design/pcb/veils_v110.brd -------------------------------------------------------------------------------- /veils/hardware_design/pcb/veils_v110.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/veils/hardware_design/pcb/veils_v110.sch -------------------------------------------------------------------------------- /veils/hardware_design/pcb/veils_v40.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/veils/hardware_design/pcb/veils_v40.brd -------------------------------------------------------------------------------- /veils/hardware_design/pcb/veils_v40.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/veils/hardware_design/pcb/veils_v40.sch -------------------------------------------------------------------------------- /volts/hardware_design/pcb/volts_v01.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/volts/hardware_design/pcb/volts_v01.brd -------------------------------------------------------------------------------- /volts/hardware_design/pcb/volts_v01.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/volts/hardware_design/pcb/volts_v01.sch -------------------------------------------------------------------------------- /warps/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /warps/bootloader/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/warps/bootloader/__init__.py -------------------------------------------------------------------------------- /warps/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2014 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 168000000L 28 | SYSCLOCK = SYSCLK_FREQ_168MHz 29 | FAMILY = f4xx 30 | # USB = enabled 31 | 32 | # Preferred upload command 33 | UPLOAD_COMMAND = upload_jtag_erase_first 34 | 35 | # Packages to build 36 | TARGET = warps_bootloader 37 | PACKAGES = warps/bootloader \ 38 | warps/drivers \ 39 | stm_audio_bootloader/qpsk \ 40 | stmlib/dsp \ 41 | stmlib/utils \ 42 | stmlib/system 43 | RESOURCES = warps/resources 44 | 45 | TOOLCHAIN_PATH ?= /usr/local/arm-4.8.3/ 46 | 47 | include stmlib/makefile.inc 48 | -------------------------------------------------------------------------------- /warps/drivers/system.cc: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System level initialization. 28 | 29 | #include "warps/drivers/system.h" 30 | 31 | namespace warps { 32 | 33 | void System::Init(bool application) { 34 | if (application) { 35 | NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x8000); 36 | } 37 | } 38 | 39 | void System::StartTimers() { 40 | SysTick_Config(F_CPU / 1000); 41 | } 42 | 43 | } // namespace warps 44 | -------------------------------------------------------------------------------- /warps/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2014 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef WARPS_DRIVERS_SYSTEM_H_ 30 | #define WARPS_DRIVERS_SYSTEM_H_ 31 | 32 | #include 33 | 34 | #include "stmlib/stmlib.h" 35 | 36 | namespace warps { 37 | 38 | class System { 39 | public: 40 | System() { } 41 | ~System() { } 42 | 43 | void Init(bool application); 44 | void StartTimers(); 45 | 46 | private: 47 | DISALLOW_COPY_AND_ASSIGN(System); 48 | }; 49 | 50 | } // namespace warps 51 | 52 | #endif // WARPS_DRIVERS_SYSTEM_H_ 53 | -------------------------------------------------------------------------------- /warps/hardware_design/Warps.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/warps/hardware_design/Warps.xlsx -------------------------------------------------------------------------------- /warps/hardware_design/panel/warps.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/warps/hardware_design/panel/warps.ai -------------------------------------------------------------------------------- /warps/hardware_design/panel/warps.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/warps/hardware_design/panel/warps.dwg -------------------------------------------------------------------------------- /warps/hardware_design/pcb/warps_v30.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/warps/hardware_design/pcb/warps_v30.brd -------------------------------------------------------------------------------- /warps/hardware_design/pcb/warps_v30.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/warps/hardware_design/pcb/warps_v30.sch -------------------------------------------------------------------------------- /warps/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/warps/resources/__init__.py -------------------------------------------------------------------------------- /warps/resources/timbre.raw: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/warps/resources/timbre.raw -------------------------------------------------------------------------------- /warps/test/makefile: -------------------------------------------------------------------------------- 1 | PACKAGES = warps/dsp warps/test stmlib/utils stmlib/dsp warps 2 | 3 | VPATH = $(PACKAGES) 4 | 5 | TARGET = warps_test 6 | BUILD_ROOT = build/ 7 | BUILD_DIR = $(BUILD_ROOT)$(TARGET)/ 8 | CC_FILES = warps_test.cc \ 9 | filter_bank.cc \ 10 | modulator.cc \ 11 | oscillator.cc \ 12 | random.cc \ 13 | resources.cc \ 14 | units.cc \ 15 | vocoder.cc 16 | OBJ_FILES = $(CC_FILES:.cc=.o) 17 | OBJS = $(patsubst %,$(BUILD_DIR)%,$(OBJ_FILES)) $(STARTUP_OBJ) 18 | DEPS = $(OBJS:.o=.d) 19 | DEP_FILE = $(BUILD_DIR)depends.mk 20 | 21 | all: clouds_test 22 | 23 | $(BUILD_DIR): 24 | mkdir -p $(BUILD_DIR) 25 | 26 | $(BUILD_DIR)%.o: %.cc 27 | g++ -c -O2 -DTEST -g -Wall -Werror -I. $< -o $@ 28 | 29 | $(BUILD_DIR)%.d: %.cc 30 | g++ -MM -DTEST -I. $< -MF $@ -MT $(@:.d=.o) 31 | 32 | clouds_test: $(OBJS) 33 | g++ -o $(TARGET) $(OBJS) 34 | 35 | depends: $(DEPS) 36 | cat $(DEPS) > $(DEP_FILE) 37 | 38 | $(DEP_FILE): $(BUILD_DIR) $(DEPS) 39 | cat $(DEPS) > $(DEP_FILE) 40 | 41 | include $(DEP_FILE) 42 | -------------------------------------------------------------------------------- /yarns/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/__init__.py -------------------------------------------------------------------------------- /yarns/bootloader/characters.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Resources definitions. 28 | // 29 | // Automatically generated with: 30 | // make resources 31 | 32 | 33 | #ifndef YARNS_BOOTLOADER_CHARACTERS_H_ 34 | #define YARNS_BOOTLOADER_CHARACTERS_H_ 35 | 36 | 37 | #include "stmlib/stmlib.h" 38 | 39 | namespace yarns { 40 | 41 | extern const uint16_t chr_characters[]; 42 | 43 | } // namespace yarns 44 | 45 | #endif // YARNS_BOOTLOADER_CHARACTERS_H_ 46 | -------------------------------------------------------------------------------- /yarns/bootloader/makefile: -------------------------------------------------------------------------------- 1 | # Copyright 2013 Emilie Gillet. 2 | # 3 | # Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | # 5 | # Permission is hereby granted, free of charge, to any person obtaining a copy 6 | # of this software and associated documentation files (the "Software"), to deal 7 | # in the Software without restriction, including without limitation the rights 8 | # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | # copies of the Software, and to permit persons to whom the Software is 10 | # furnished to do so, subject to the following conditions: 11 | # 12 | # The above copyright notice and this permission notice shall be included in 13 | # all copies or substantial portions of the Software. 14 | # 15 | # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | # THE SOFTWARE. 22 | # 23 | # See http://creativecommons.org/licenses/MIT/ for more information. 24 | 25 | # System specifications 26 | F_CRYSTAL = 8000000L 27 | F_CPU = 24000000L 28 | SYSCLOCK = SYSCLK_FREQ_24MHz 29 | FAMILY = f10x 30 | DENSITY = md 31 | MEMORY_MODE = flash 32 | 33 | # USB = enabled 34 | 35 | # Preferred upload command 36 | UPLOAD_COMMAND = upload_jtag 37 | 38 | # Packages to build 39 | TARGET = yarns_bootloader 40 | PACKAGES = yarns/bootloader yarns/drivers stmlib/utils stmlib/system 41 | RESOURCES = yarns/resources 42 | 43 | include stmlib/makefile.inc 44 | -------------------------------------------------------------------------------- /yarns/drivers/gate_output.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // Driver for the Gate/Trigger outputs. 28 | 29 | #ifndef YARNS_DRIVERS_GATE_OUTPUT_H_ 30 | #define YARNS_DRIVERS_GATE_OUTPUT_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace yarns { 35 | 36 | class GateOutput { 37 | public: 38 | GateOutput() { } 39 | ~GateOutput() { } 40 | 41 | void Init(); 42 | void Write(const bool* channel); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(GateOutput); 46 | }; 47 | 48 | } // namespace yarns 49 | 50 | #endif // YARNS_DRIVERS_GATE_OUTPUT_H_ 51 | -------------------------------------------------------------------------------- /yarns/drivers/system.h: -------------------------------------------------------------------------------- 1 | // Copyright 2013 Emilie Gillet. 2 | // 3 | // Author: Emilie Gillet (emilie.o.gillet@gmail.com) 4 | // 5 | // Permission is hereby granted, free of charge, to any person obtaining a copy 6 | // of this software and associated documentation files (the "Software"), to deal 7 | // in the Software without restriction, including without limitation the rights 8 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | // copies of the Software, and to permit persons to whom the Software is 10 | // furnished to do so, subject to the following conditions: 11 | // 12 | // The above copyright notice and this permission notice shall be included in 13 | // all copies or substantial portions of the Software. 14 | // 15 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | // THE SOFTWARE. 22 | // 23 | // See http://creativecommons.org/licenses/MIT/ for more information. 24 | // 25 | // ----------------------------------------------------------------------------- 26 | // 27 | // System-level initialization. 28 | 29 | #ifndef YARNS_DRIVERS_SYSTEM_H_ 30 | #define YARNS_DRIVERS_SYSTEM_H_ 31 | 32 | #include "stmlib/stmlib.h" 33 | 34 | namespace yarns { 35 | 36 | class System { 37 | public: 38 | System() { } 39 | ~System() { } 40 | 41 | void Init(); 42 | void StartTimers(); 43 | 44 | private: 45 | DISALLOW_COPY_AND_ASSIGN(System); 46 | }; 47 | 48 | } // namespace yarns 49 | 50 | #endif // YARNS_DRIVERS_SYSTEM_H_ 51 | -------------------------------------------------------------------------------- /yarns/hardware_design/Yarns.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/hardware_design/Yarns.xlsx -------------------------------------------------------------------------------- /yarns/hardware_design/panel/yarns.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/hardware_design/panel/yarns.ai -------------------------------------------------------------------------------- /yarns/hardware_design/panel/yarns.dwg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/hardware_design/panel/yarns.dwg -------------------------------------------------------------------------------- /yarns/hardware_design/pcb/yarns_v03.brd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/hardware_design/pcb/yarns_v03.brd -------------------------------------------------------------------------------- /yarns/hardware_design/pcb/yarns_v03.sch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/hardware_design/pcb/yarns_v03.sch -------------------------------------------------------------------------------- /yarns/resources/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/resources/__init__.py -------------------------------------------------------------------------------- /yarns/scale_editor/README: -------------------------------------------------------------------------------- 1 | AppEngine web app for converting a scala .scl file into a tuning .syx recognized by Yarns. -------------------------------------------------------------------------------- /yarns/scale_editor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/scale_editor/__init__.py -------------------------------------------------------------------------------- /yarns/scale_editor/app.yaml: -------------------------------------------------------------------------------- 1 | application: scale-editor 2 | version: 1 3 | runtime: python27 4 | api_version: 1 5 | threadsafe: true 6 | 7 | handlers: 8 | - url: /static 9 | static_dir: static 10 | 11 | - url: /favicon.ico 12 | static_files: static/favicon.ico 13 | upload: static/favicon.ico 14 | 15 | - url: .* 16 | script: main.application 17 | 18 | - url: /syx 19 | script: main.application 20 | -------------------------------------------------------------------------------- /yarns/scale_editor/index.yaml: -------------------------------------------------------------------------------- 1 | indexes: 2 | 3 | # AUTOGENERATED 4 | 5 | # This index.yaml is automatically updated whenever the dev_appserver 6 | # detects that a new type of query is run. If you want to manage the 7 | # index.yaml file manually, remove the above marker line (the line 8 | # saying "# AUTOGENERATED"). If you want to manage some indexes 9 | # manually, move them above the marker line. The index.yaml file is 10 | # automatically uploaded to the admin console when you next deploy 11 | # your application using appcfg.py. 12 | -------------------------------------------------------------------------------- /yarns/scale_editor/music/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/scale_editor/music/__init__.py -------------------------------------------------------------------------------- /yarns/scale_editor/music/scala/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/scale_editor/music/scala/__init__.py -------------------------------------------------------------------------------- /yarns/scale_editor/static/bg_main.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/scale_editor/static/bg_main.jpg -------------------------------------------------------------------------------- /yarns/scale_editor/static/db_yarns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/scale_editor/static/db_yarns.png -------------------------------------------------------------------------------- /yarns/scale_editor/static/divider_big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/scale_editor/static/divider_big.jpg -------------------------------------------------------------------------------- /yarns/scale_editor/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/scale_editor/static/favicon.ico -------------------------------------------------------------------------------- /yarns/scale_editor/static/logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pichenettes/eurorack/08460a69a7e1f7a81c5a2abcc7189c9a6b7208d4/yarns/scale_editor/static/logo.jpg -------------------------------------------------------------------------------- /yarns/scale_editor/templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | {{ title }} 4 | 5 | 6 | 7 |
8 |
9 | {% block content %} 10 | {% endblock %} 11 | 12 |
13 |
14 |

Mutable Instruments, 2014. Source code.

15 |
16 | 17 |
18 | 21 |
22 | 23 | 24 | -------------------------------------------------------------------------------- /yarns/scale_editor/templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block content %} 4 |

Scala to SysEx conversion

5 | 6 |

Scale editor

7 | 8 |

Upload an existing Scala file:

9 | 10 |
11 |

12 |
13 | 14 |

Or input a scale using Scala's syntax (reference here):

15 | 16 |
17 |

18 |

19 |
20 | 21 | {% if error_message %} 22 | 23 |

Parse error!

24 | 25 |

{{ error_message }}

26 | 27 | {% endif %} 28 | 29 | {% if notes %} 30 | 31 |

Result

32 | 33 |

Download .syx file

34 | 35 |

The scale contains the following notes (in cents):

36 | 37 |
    38 | 39 | {% for note in notes %} 40 | 41 |
  • {{ note|floatformat:2 }}
  • 42 | 43 | {% endfor %} 44 | 45 |
46 | 47 |

The note mapping (for a root note of C) is as follows:

48 | 49 |
    50 | 51 | {% for mapping in mappings %} 52 | 53 |
  • {{ mapping }}
  • 54 | 55 | {% endfor %} 56 | 57 |
58 | 59 | {% endif %} 60 | 61 | 62 | {% endblock %} 63 | --------------------------------------------------------------------------------