From 3779d27261032fe417d3173378df3e92faa1a0ee Mon Sep 17 00:00:00 2001 From: Tim Barrass Date: Sat, 26 Nov 2016 23:16:34 +1100 Subject: [PATCH] update 2016-11-26-23:16 --- README.md | 2 +- extras/NEWS.txt | 2 +- extras/VERSION.txt | 2 +- ...sics_2_vibrato_2_vibrato_8ino-example.html | 111 + ..._control__echo__theremin_8ino-example.html | 111 + ...emelo_2_control__tremelo_8ino-example.html | 111 + ...vent_delay_2_event_delay_8ino-example.html | 111 + ...etronome__sample_huffman_8ino-example.html | 111 + ...b__l_d_r_x2__wave_packet_8ino-example.html | 111 + ..._d_c_filter_2_d_c_filter_8ino-example.html | 111 + ...ilters_2_smooth_2_smooth_8ino-example.html | 111 + ..._s_b__m_i_d_i_portamento_8ino-example.html | 111 + ..._thermistor__over_sample_8ino-example.html | 111 + ...phasing_2_p_w_m__phasing_8ino-example.html | 111 + ...ave_packet_2_wave_packet_8ino-example.html | 111 + ...le_2_wave_packet__sample_8ino-example.html | 111 + ...ave_shaper_2_wave_shaper_8ino-example.html | 111 + ...lope_2_a_d_s_r__envelope_8ino-example.html | 111 + ...envelope_2_ead__envelope_8ino-example.html | 111 + ...e_2_multi_line__envelope_8ino-example.html | 111 + ...amples_2_sample_2_sample_8ino-example.html | 111 + ..._2_sample_huffman__umpah_8ino-example.html | 111 + ...udio_delay_2_audio_delay_8ino-example.html | 111 + ...k_2_audio_delay_feedback_8ino-example.html | 111 + ...rb_tank__s_t_a_n_d_a_r_d_8ino-example.html | 111 + ...filter_2_low_pass_filter_8ino-example.html | 111 + ..._2_state_variable_filter_8ino-example.html | 111 + extras/doc/html/_a_d_s_r_8h_source.html | 140 + ...io_config_hi_speed14bit_pwm_8h_source.html | 111 + ...dio_config_standard9bit_pwm_8h_source.html | 111 + ..._audio_config_standard_plus_8h_source.html | 111 + ...audio_config_teensy3__12bit_8h_source.html | 111 + extras/doc/html/_audio_delay_8h_source.html | 117 + .../html/_audio_delay_feedback_8h_source.html | 133 + extras/doc/html/_auto_map_8h_source.html | 119 + extras/doc/html/_auto_range_8h_source.html | 117 + extras/doc/html/_cap_poll_8h_source.html | 114 + .../doc/html/_circular_buffer_8h_source.html | 113 + extras/doc/html/_control_delay_8h_source.html | 113 + extras/doc/html/_d_cfilter_8h_source.html | 114 + extras/doc/html/_ead_8h_source.html | 123 + extras/doc/html/_event_delay_8h_source.html | 118 + extras/doc/html/_int_map_8h_source.html | 114 + extras/doc/html/_line_8h_source.html | 120 + .../doc/html/_low_pass_filter_8h_source.html | 116 + extras/doc/html/_metronome_8h_source.html | 119 + extras/doc/html/_mozzi_guts_8cpp_source.html | 123 + extras/doc/html/_mozzi_guts_8h_source.html | 121 + extras/doc/html/_multi_line2_8h_source.html | 125 + extras/doc/html/_multi_line_8h_source.html | 137 + extras/doc/html/_oscil_8h_source.html | 131 + extras/doc/html/_over_sample_8h_source.html | 113 + extras/doc/html/_p_d_resonant_8h_source.html | 133 + extras/doc/html/_phasor_8h_source.html | 118 + extras/doc/html/_portamento_8h_source.html | 121 + extras/doc/html/_r_cpoll_8h_source.html | 114 + extras/doc/html/_reverb_tank_8h_source.html | 118 + .../doc/html/_rolling_average_8h_source.html | 115 + extras/doc/html/_rolling_stat_8h_source.html | 120 + extras/doc/html/_sample_8h_source.html | 131 + .../doc/html/_sample_huffman_8h_source.html | 117 + extras/doc/html/_smooth_8h_source.html | 120 + extras/doc/html/_stack_8h_source.html | 115 + .../doc/html/_state_variable_8h_source.html | 120 + extras/doc/html/_wave_packet_8h_source.html | 134 + .../html/_wave_packet_sample_8h_source.html | 116 + extras/doc/html/_wave_shaper_8h_source.html | 116 + extras/doc/html/annotated.html | 153 + extras/doc/html/annotated_dup.js | 42 + extras/doc/html/audio2huff_8py_source.html | 111 + extras/doc/html/bc_s.png | Bin 0 -> 671 bytes extras/doc/html/bdwn.png | Bin 0 -> 143 bytes .../doc/html/blahblah4b__int8_8h_source.html | 111 + extras/doc/html/char2mozzi_8py.html | 144 + extras/doc/html/char2mozzi_8py.js | 4 + extras/doc/html/char2mozzi_8py_source.html | 112 + .../doc/html/chebyshev__int8_8py_source.html | 111 + extras/doc/html/class_a_d_s_r-members.html | 139 + extras/doc/html/class_a_d_s_r.html | 1080 ++++++ extras/doc/html/class_a_d_s_r.js | 29 + .../doc/html/class_audio_delay-members.html | 119 + extras/doc/html/class_audio_delay.html | 370 ++ extras/doc/html/class_audio_delay.js | 9 + extras/doc/html/class_audio_delay.png | Bin 0 -> 1042 bytes .../class_audio_delay_feedback-members.html | 128 + .../doc/html/class_audio_delay_feedback.html | 757 ++++ extras/doc/html/class_audio_delay_feedback.js | 18 + extras/doc/html/class_auto_map-members.html | 120 + extras/doc/html/class_auto_map.html | 381 ++ extras/doc/html/class_auto_map.js | 9 + extras/doc/html/class_auto_map.png | Bin 0 -> 507 bytes extras/doc/html/class_auto_range-members.html | 118 + extras/doc/html/class_auto_range.html | 336 ++ extras/doc/html/class_auto_range.js | 8 + extras/doc/html/class_cap_poll-members.html | 115 + extras/doc/html/class_cap_poll.html | 171 + extras/doc/html/class_cap_poll.js | 5 + .../html/class_circular_buffer-members.html | 119 + extras/doc/html/class_circular_buffer.html | 155 + extras/doc/html/class_circular_buffer.js | 9 + .../doc/html/class_control_delay-members.html | 119 + extras/doc/html/class_control_delay.html | 324 ++ extras/doc/html/class_control_delay.js | 7 + extras/doc/html/class_control_delay.png | Bin 0 -> 1038 bytes extras/doc/html/class_d_cfilter-members.html | 115 + extras/doc/html/class_d_cfilter.html | 209 ++ extras/doc/html/class_d_cfilter.js | 5 + extras/doc/html/class_ead-members.html | 120 + extras/doc/html/class_ead.html | 413 +++ extras/doc/html/class_ead.js | 10 + .../doc/html/class_event_delay-members.html | 120 + extras/doc/html/class_event_delay.html | 335 ++ extras/doc/html/class_event_delay.js | 10 + extras/doc/html/class_event_delay.png | Bin 0 -> 443 bytes extras/doc/html/class_int_map-members.html | 115 + extras/doc/html/class_int_map.html | 234 ++ extras/doc/html/class_int_map.js | 5 + extras/doc/html/class_line-members.html | 118 + extras/doc/html/class_line.html | 361 ++ extras/doc/html/class_line.js | 8 + ...line_3_01unsigned_01char_01_4-members.html | 118 + .../class_line_3_01unsigned_01char_01_4.html | 338 ++ .../class_line_3_01unsigned_01char_01_4.js | 8 + ..._line_3_01unsigned_01int_01_4-members.html | 118 + .../class_line_3_01unsigned_01int_01_4.html | 338 ++ .../class_line_3_01unsigned_01int_01_4.js | 8 + ...line_3_01unsigned_01long_01_4-members.html | 118 + .../class_line_3_01unsigned_01long_01_4.html | 338 ++ .../class_line_3_01unsigned_01long_01_4.js | 8 + .../html/class_low_pass_filter-members.html | 117 + extras/doc/html/class_low_pass_filter.html | 251 ++ extras/doc/html/class_low_pass_filter.js | 7 + extras/doc/html/class_metronome-members.html | 123 + extras/doc/html/class_metronome.html | 376 ++ extras/doc/html/class_metronome.js | 12 + extras/doc/html/class_metronome.png | Bin 0 -> 438 bytes extras/doc/html/class_multi_line-members.html | 146 + extras/doc/html/class_multi_line.html | 1383 ++++++++ extras/doc/html/class_multi_line.js | 36 + extras/doc/html/class_oscil-members.html | 128 + extras/doc/html/class_oscil.html | 746 ++++ extras/doc/html/class_oscil.js | 18 + .../doc/html/class_over_sample-members.html | 116 + extras/doc/html/class_over_sample.html | 199 ++ extras/doc/html/class_over_sample.js | 5 + extras/doc/html/class_over_sample.png | Bin 0 -> 1272 bytes .../doc/html/class_p_d_resonant-members.html | 119 + extras/doc/html/class_p_d_resonant.html | 363 ++ extras/doc/html/class_p_d_resonant.js | 9 + extras/doc/html/class_phasor-members.html | 120 + extras/doc/html/class_phasor.html | 410 +++ extras/doc/html/class_phasor.js | 10 + extras/doc/html/class_portamento-members.html | 118 + extras/doc/html/class_portamento.html | 293 ++ extras/doc/html/class_portamento.js | 8 + extras/doc/html/class_r_cpoll-members.html | 115 + extras/doc/html/class_r_cpoll.html | 171 + extras/doc/html/class_r_cpoll.js | 5 + .../doc/html/class_reverb_tank-members.html | 118 + extras/doc/html/class_reverb_tank.html | 396 +++ extras/doc/html/class_reverb_tank.js | 8 + .../html/class_rolling_average-members.html | 116 + extras/doc/html/class_rolling_average.html | 230 ++ extras/doc/html/class_rolling_average.js | 6 + .../doc/html/class_rolling_stat-members.html | 119 + extras/doc/html/class_rolling_stat.html | 331 ++ extras/doc/html/class_rolling_stat.js | 9 + extras/doc/html/class_sample-members.html | 131 + extras/doc/html/class_sample.html | 716 ++++ extras/doc/html/class_sample.js | 21 + .../html/class_sample_huffman-members.html | 118 + extras/doc/html/class_sample_huffman.html | 240 ++ extras/doc/html/class_sample_huffman.js | 8 + extras/doc/html/class_smooth-members.html | 117 + extras/doc/html/class_smooth.html | 305 ++ extras/doc/html/class_smooth.js | 7 + extras/doc/html/class_stack-members.html | 116 + extras/doc/html/class_stack.html | 218 ++ extras/doc/html/class_stack.js | 6 + .../html/class_state_variable-members.html | 117 + extras/doc/html/class_state_variable.html | 271 ++ extras/doc/html/class_state_variable.js | 7 + .../doc/html/class_wave_packet-members.html | 119 + extras/doc/html/class_wave_packet.html | 370 ++ extras/doc/html/class_wave_packet.js | 9 + extras/doc/html/class_wave_packet.png | Bin 0 -> 839 bytes .../class_wave_packet_sample-members.html | 120 + extras/doc/html/class_wave_packet_sample.html | 406 +++ extras/doc/html/class_wave_packet_sample.js | 9 + extras/doc/html/class_wave_packet_sample.png | Bin 0 -> 832 bytes extras/doc/html/class_wave_shaper.html | 129 + ...ass_wave_shaper_3_01char_01_4-members.html | 115 + .../html/class_wave_shaper_3_01char_01_4.html | 217 ++ .../html/class_wave_shaper_3_01char_01_4.js | 5 + ...lass_wave_shaper_3_01int_01_4-members.html | 115 + .../html/class_wave_shaper_3_01int_01_4.html | 217 ++ .../html/class_wave_shaper_3_01int_01_4.js | 5 + extras/doc/html/classes.html | 142 + extras/doc/html/closed.png | Bin 0 -> 128 bytes extras/doc/html/cogl__sqrti_8h_source.html | 112 + extras/doc/html/custom_stylesheet.css | 49 + .../dir_0d6feda837323b0c7a50b1cca0a6cf12.html | 111 + .../dir_3faa5fff9e46bf8b8f48c87f683ce0e6.html | 118 + .../dir_9ca29615486e86932f4b900563144736.html | 115 + .../dir_9f351d46ce3cc29445a41dc3a31e6919.html | 111 + .../dir_d28a4824dc47e487b107a5db32ef43c4.html | 111 + .../dir_da40a2d191134d083f9bacf4a8879a55.html | 115 + .../dir_dd81b9de5c9027a54e49f977944ecdc1.html | 111 + extras/doc/html/doc.png | Bin 0 -> 734 bytes extras/doc/html/dynsections.js | 104 + extras/doc/html/examples.html | 160 + extras/doc/html/examples.js | 27 + extras/doc/html/files.html | 186 + extras/doc/html/files.js | 75 + extras/doc/html/float2mozzi_8py_source.html | 112 + .../html/float2mozzi__uint8_8py_source.html | 112 + extras/doc/html/folderclosed.png | Bin 0 -> 610 bytes extras/doc/html/folderopen.png | Bin 0 -> 587 bytes extras/doc/html/functions.html | 129 + extras/doc/html/functions_c.html | 116 + extras/doc/html/functions_d.html | 113 + extras/doc/html/functions_dup.js | 18 + extras/doc/html/functions_e.html | 116 + extras/doc/html/functions_func.html | 129 + extras/doc/html/functions_func.js | 18 + extras/doc/html/functions_func_c.html | 116 + extras/doc/html/functions_func_d.html | 113 + extras/doc/html/functions_func_e.html | 116 + extras/doc/html/functions_func_g.html | 131 + extras/doc/html/functions_func_i.html | 116 + extras/doc/html/functions_func_l.html | 119 + extras/doc/html/functions_func_m.html | 116 + extras/doc/html/functions_func_n.html | 149 + extras/doc/html/functions_func_o.html | 118 + extras/doc/html/functions_func_p.html | 137 + extras/doc/html/functions_func_r.html | 133 + extras/doc/html/functions_func_s.html | 336 ++ extras/doc/html/functions_func_u.html | 116 + extras/doc/html/functions_func_w.html | 123 + extras/doc/html/functions_g.html | 131 + extras/doc/html/functions_i.html | 116 + extras/doc/html/functions_l.html | 119 + extras/doc/html/functions_m.html | 116 + extras/doc/html/functions_n.html | 149 + extras/doc/html/functions_o.html | 118 + extras/doc/html/functions_p.html | 137 + extras/doc/html/functions_r.html | 133 + extras/doc/html/functions_s.html | 336 ++ extras/doc/html/functions_u.html | 116 + extras/doc/html/functions_w.html | 123 + extras/doc/html/group__analog.html | 306 ++ extras/doc/html/group__analog.js | 10 + extras/doc/html/group__core.html | 570 +++ extras/doc/html/group__core.js | 20 + extras/doc/html/group__fixmath.html | 3153 +++++++++++++++++ extras/doc/html/group__fixmath.js | 115 + extras/doc/html/group__midi.html | 255 ++ extras/doc/html/group__midi.js | 7 + extras/doc/html/group__random.html | 642 ++++ extras/doc/html/group__random.js | 18 + extras/doc/html/group__soundtables.html | 115 + extras/doc/html/group__util.html | 293 ++ extras/doc/html/group__util.js | 11 + .../doc/html/group__util_struct_int2_type.js | 4 + extras/doc/html/hierarchy.html | 166 + extras/doc/html/hierarchy.js | 60 + extras/doc/html/index.html | 122 + extras/doc/html/jquery.js | 87 + .../html/known__16bit__timers_8h_source.html | 111 + extras/doc/html/meta_8h_source.html | 112 + extras/doc/html/modules.html | 121 + extras/doc/html/modules.js | 10 + extras/doc/html/mozzi-circle.png | Bin 0 -> 5915 bytes .../doc/html/mozzi__analog_8cpp_source.html | 121 + extras/doc/html/mozzi__analog_8h_source.html | 117 + extras/doc/html/mozzi__config_8h_source.html | 111 + .../doc/html/mozzi__fixmath_8cpp_source.html | 117 + extras/doc/html/mozzi__fixmath_8h_source.html | 206 ++ extras/doc/html/mozzi__midi_8cpp_source.html | 114 + extras/doc/html/mozzi__midi_8h_source.html | 114 + extras/doc/html/mozzi__rand_8cpp_source.html | 116 + extras/doc/html/mozzi__rand_8h_source.html | 116 + extras/doc/html/mozzi__utils_8cpp_source.html | 112 + extras/doc/html/mozzi__utils_8h_source.html | 115 + extras/doc/html/mult16x16_8h_source.html | 111 + extras/doc/html/mult16x8_8h_source.html | 111 + extras/doc/html/mult32x16_8h_source.html | 111 + extras/doc/html/nav_f.png | Bin 0 -> 152 bytes extras/doc/html/nav_g.png | Bin 0 -> 95 bytes extras/doc/html/nav_h.png | Bin 0 -> 95 bytes extras/doc/html/navtree.css | 146 + extras/doc/html/navtree.js | 517 +++ extras/doc/html/navtreedata.js | 28 + extras/doc/html/navtreeindex0.js | 253 ++ extras/doc/html/navtreeindex1.js | 253 ++ extras/doc/html/navtreeindex2.js | 101 + extras/doc/html/open.png | Bin 0 -> 118 bytes extras/doc/html/primes_8h_source.html | 114 + extras/doc/html/resize.js | 113 + extras/doc/html/search/all_0.html | 26 + extras/doc/html/search/all_0.js | 23 + extras/doc/html/search/all_1.html | 26 + extras/doc/html/search/all_1.js | 9 + extras/doc/html/search/all_10.html | 26 + extras/doc/html/search/all_10.js | 11 + extras/doc/html/search/all_11.html | 26 + extras/doc/html/search/all_11.js | 10 + extras/doc/html/search/all_12.html | 26 + extras/doc/html/search/all_12.js | 5 + extras/doc/html/search/all_2.html | 26 + extras/doc/html/search/all_2.js | 5 + extras/doc/html/search/all_3.html | 26 + extras/doc/html/search/all_3.js | 5 + extras/doc/html/search/all_4.html | 26 + extras/doc/html/search/all_4.js | 16 + extras/doc/html/search/all_5.html | 26 + extras/doc/html/search/all_5.js | 11 + extras/doc/html/search/all_6.html | 26 + extras/doc/html/search/all_6.js | 6 + extras/doc/html/search/all_7.html | 26 + extras/doc/html/search/all_7.js | 11 + extras/doc/html/search/all_8.html | 26 + extras/doc/html/search/all_8.js | 9 + extras/doc/html/search/all_9.html | 26 + extras/doc/html/search/all_9.js | 6 + extras/doc/html/search/all_a.html | 26 + extras/doc/html/search/all_a.js | 9 + extras/doc/html/search/all_b.html | 26 + extras/doc/html/search/all_b.js | 13 + extras/doc/html/search/all_c.html | 26 + extras/doc/html/search/all_c.js | 101 + extras/doc/html/search/all_d.html | 26 + extras/doc/html/search/all_d.js | 18 + extras/doc/html/search/all_e.html | 26 + extras/doc/html/search/all_e.js | 78 + extras/doc/html/search/all_f.html | 26 + extras/doc/html/search/all_f.js | 4 + extras/doc/html/search/classes_0.html | 26 + extras/doc/html/search/classes_0.js | 14 + extras/doc/html/search/classes_1.html | 26 + extras/doc/html/search/classes_1.js | 6 + extras/doc/html/search/classes_2.html | 26 + extras/doc/html/search/classes_2.js | 4 + extras/doc/html/search/classes_3.html | 26 + extras/doc/html/search/classes_3.js | 5 + extras/doc/html/search/classes_4.html | 26 + extras/doc/html/search/classes_4.js | 5 + extras/doc/html/search/classes_5.html | 26 + extras/doc/html/search/classes_5.js | 10 + extras/doc/html/search/classes_6.html | 26 + extras/doc/html/search/classes_6.js | 5 + extras/doc/html/search/classes_7.html | 26 + extras/doc/html/search/classes_7.js | 8 + extras/doc/html/search/classes_8.html | 26 + extras/doc/html/search/classes_8.js | 7 + extras/doc/html/search/classes_9.html | 26 + extras/doc/html/search/classes_9.js | 8 + extras/doc/html/search/classes_a.html | 26 + extras/doc/html/search/classes_a.js | 8 + extras/doc/html/search/classes_b.html | 26 + extras/doc/html/search/classes_b.js | 8 + extras/doc/html/search/close.png | Bin 0 -> 273 bytes extras/doc/html/search/files_0.html | 26 + extras/doc/html/search/files_0.js | 4 + extras/doc/html/search/functions_0.html | 26 + extras/doc/html/search/functions_0.js | 13 + extras/doc/html/search/functions_1.html | 26 + extras/doc/html/search/functions_1.js | 5 + extras/doc/html/search/functions_10.html | 26 + extras/doc/html/search/functions_10.js | 9 + extras/doc/html/search/functions_11.html | 26 + extras/doc/html/search/functions_11.js | 7 + extras/doc/html/search/functions_12.html | 26 + extras/doc/html/search/functions_12.js | 5 + extras/doc/html/search/functions_2.html | 26 + extras/doc/html/search/functions_2.js | 5 + extras/doc/html/search/functions_3.html | 26 + extras/doc/html/search/functions_3.js | 5 + extras/doc/html/search/functions_4.html | 26 + extras/doc/html/search/functions_4.js | 15 + extras/doc/html/search/functions_5.html | 26 + extras/doc/html/search/functions_5.js | 11 + extras/doc/html/search/functions_6.html | 26 + extras/doc/html/search/functions_6.js | 5 + extras/doc/html/search/functions_7.html | 26 + extras/doc/html/search/functions_7.js | 5 + extras/doc/html/search/functions_8.html | 26 + extras/doc/html/search/functions_8.js | 8 + extras/doc/html/search/functions_9.html | 26 + extras/doc/html/search/functions_9.js | 6 + extras/doc/html/search/functions_a.html | 26 + extras/doc/html/search/functions_a.js | 5 + extras/doc/html/search/functions_b.html | 26 + extras/doc/html/search/functions_b.js | 12 + extras/doc/html/search/functions_c.html | 26 + extras/doc/html/search/functions_c.js | 63 + extras/doc/html/search/functions_d.html | 26 + extras/doc/html/search/functions_d.js | 16 + extras/doc/html/search/functions_e.html | 26 + extras/doc/html/search/functions_e.js | 74 + extras/doc/html/search/functions_f.html | 26 + extras/doc/html/search/functions_f.js | 4 + extras/doc/html/search/groups_0.html | 26 + extras/doc/html/search/groups_0.js | 4 + extras/doc/html/search/groups_1.html | 26 + extras/doc/html/search/groups_1.js | 4 + extras/doc/html/search/groups_2.html | 26 + extras/doc/html/search/groups_2.js | 4 + extras/doc/html/search/groups_3.html | 26 + extras/doc/html/search/groups_3.js | 4 + extras/doc/html/search/groups_4.html | 26 + extras/doc/html/search/groups_4.js | 4 + extras/doc/html/search/groups_5.html | 26 + extras/doc/html/search/groups_5.js | 4 + extras/doc/html/search/groups_6.html | 26 + extras/doc/html/search/groups_6.js | 4 + extras/doc/html/search/mag_sel.png | Bin 0 -> 563 bytes extras/doc/html/search/nomatches.html | 12 + extras/doc/html/search/search.css | 273 ++ extras/doc/html/search/search.js | 791 +++++ extras/doc/html/search/search_l.png | Bin 0 -> 604 bytes extras/doc/html/search/search_m.png | Bin 0 -> 158 bytes extras/doc/html/search/search_r.png | Bin 0 -> 612 bytes extras/doc/html/search/searchdata.js | 30 + extras/doc/html/search/typedefs_0.html | 26 + extras/doc/html/search/typedefs_0.js | 25 + extras/doc/html/sin1024__int8_8py_source.html | 111 + .../doc/html/sin8192__uint8_8py_source.html | 111 + .../sin__multi__levels__int8_8py_source.html | 111 + extras/doc/html/sounddata_8h_source.html | 111 + extras/doc/html/splitbar.png | Bin 0 -> 296 bytes extras/doc/html/sync_off.png | Bin 0 -> 856 bytes extras/doc/html/sync_on.png | Bin 0 -> 847 bytes extras/doc/html/tab_a.png | Bin 0 -> 133 bytes extras/doc/html/tab_b.png | Bin 0 -> 164 bytes extras/doc/html/tab_h.png | Bin 0 -> 167 bytes extras/doc/html/tab_s.png | Bin 0 -> 171 bytes ...table__generator__template_8py_source.html | 111 + extras/doc/html/tabs.css | 1 + .../doc/html/twi__nonblock_8cpp_source.html | 111 + extras/doc/html/twi__nonblock_8h_source.html | 111 + extras/doc/html/umpah__huff_8h_source.html | 111 + 442 files changed, 47298 insertions(+), 3 deletions(-) create mode 100644 extras/doc/html/01_8_basics_2_vibrato_2_vibrato_8ino-example.html create mode 100644 extras/doc/html/02_8_control_2_control__echo__theremin_2_control__echo__theremin_8ino-example.html create mode 100644 extras/doc/html/02_8_control_2_control__tremelo_2_control__tremelo_8ino-example.html create mode 100644 extras/doc/html/02_8_control_2_event_delay_2_event_delay_8ino-example.html create mode 100644 extras/doc/html/02_8_control_2_metronome__sample_huffman_2_metronome__sample_huffman_8ino-example.html create mode 100644 extras/doc/html/03_8_sensors_2_knob__l_d_r_x2__wave_packet_2_knob__l_d_r_x2__wave_packet_8ino-example.html create mode 100644 extras/doc/html/05_8_control__filters_2_d_c_filter_2_d_c_filter_8ino-example.html create mode 100644 extras/doc/html/05_8_control__filters_2_smooth_2_smooth_8ino-example.html create mode 100644 extras/doc/html/05_8_control__filters_2_teensy__u_s_b__m_i_d_i_portamento_2_teensy__u_s_b__m_i_d_i_portamento_8ino-example.html create mode 100644 extras/doc/html/05_8_control__filters_2_thermistor__over_sample_2_thermistor__over_sample_8ino-example.html create mode 100644 extras/doc/html/06_8_synthesis_2_p_w_m__phasing_2_p_w_m__phasing_8ino-example.html create mode 100644 extras/doc/html/06_8_synthesis_2_wave_packet_2_wave_packet_8ino-example.html create mode 100644 extras/doc/html/06_8_synthesis_2_wave_packet__sample_2_wave_packet__sample_8ino-example.html create mode 100644 extras/doc/html/06_8_synthesis_2_wave_shaper_2_wave_shaper_8ino-example.html create mode 100644 extras/doc/html/07_8_envelopes_2_a_d_s_r__envelope_2_a_d_s_r__envelope_8ino-example.html create mode 100644 extras/doc/html/07_8_envelopes_2_ead__envelope_2_ead__envelope_8ino-example.html create mode 100644 extras/doc/html/07_8_envelopes_2_multi_line__envelope_2_multi_line__envelope_8ino-example.html create mode 100644 extras/doc/html/08_8_samples_2_sample_2_sample_8ino-example.html create mode 100644 extras/doc/html/08_8_samples_2_sample_huffman__umpah_2_sample_huffman__umpah_8ino-example.html create mode 100644 extras/doc/html/09_8_delays_2_audio_delay_2_audio_delay_8ino-example.html create mode 100644 extras/doc/html/09_8_delays_2_audio_delay_feedback_2_audio_delay_feedback_8ino-example.html create mode 100644 extras/doc/html/09_8_delays_2_reverb_tank__s_t_a_n_d_a_r_d_2_reverb_tank__s_t_a_n_d_a_r_d_8ino-example.html create mode 100644 extras/doc/html/10_8_audio__filters_2_low_pass_filter_2_low_pass_filter_8ino-example.html create mode 100644 extras/doc/html/11_8_audio__filters_2_state_variable_filter_2_state_variable_filter_8ino-example.html create mode 100644 extras/doc/html/_a_d_s_r_8h_source.html create mode 100644 extras/doc/html/_audio_config_hi_speed14bit_pwm_8h_source.html create mode 100644 extras/doc/html/_audio_config_standard9bit_pwm_8h_source.html create mode 100644 extras/doc/html/_audio_config_standard_plus_8h_source.html create mode 100644 extras/doc/html/_audio_config_teensy3__12bit_8h_source.html create mode 100644 extras/doc/html/_audio_delay_8h_source.html create mode 100644 extras/doc/html/_audio_delay_feedback_8h_source.html create mode 100644 extras/doc/html/_auto_map_8h_source.html create mode 100644 extras/doc/html/_auto_range_8h_source.html create mode 100644 extras/doc/html/_cap_poll_8h_source.html create mode 100644 extras/doc/html/_circular_buffer_8h_source.html create mode 100644 extras/doc/html/_control_delay_8h_source.html create mode 100644 extras/doc/html/_d_cfilter_8h_source.html create mode 100644 extras/doc/html/_ead_8h_source.html create mode 100644 extras/doc/html/_event_delay_8h_source.html create mode 100644 extras/doc/html/_int_map_8h_source.html create mode 100644 extras/doc/html/_line_8h_source.html create mode 100644 extras/doc/html/_low_pass_filter_8h_source.html create mode 100644 extras/doc/html/_metronome_8h_source.html create mode 100644 extras/doc/html/_mozzi_guts_8cpp_source.html create mode 100644 extras/doc/html/_mozzi_guts_8h_source.html create mode 100644 extras/doc/html/_multi_line2_8h_source.html create mode 100644 extras/doc/html/_multi_line_8h_source.html create mode 100644 extras/doc/html/_oscil_8h_source.html create mode 100644 extras/doc/html/_over_sample_8h_source.html create mode 100644 extras/doc/html/_p_d_resonant_8h_source.html create mode 100644 extras/doc/html/_phasor_8h_source.html create mode 100644 extras/doc/html/_portamento_8h_source.html create mode 100644 extras/doc/html/_r_cpoll_8h_source.html create mode 100644 extras/doc/html/_reverb_tank_8h_source.html create mode 100644 extras/doc/html/_rolling_average_8h_source.html create mode 100644 extras/doc/html/_rolling_stat_8h_source.html create mode 100644 extras/doc/html/_sample_8h_source.html create mode 100644 extras/doc/html/_sample_huffman_8h_source.html create mode 100644 extras/doc/html/_smooth_8h_source.html create mode 100644 extras/doc/html/_stack_8h_source.html create mode 100644 extras/doc/html/_state_variable_8h_source.html create mode 100644 extras/doc/html/_wave_packet_8h_source.html create mode 100644 extras/doc/html/_wave_packet_sample_8h_source.html create mode 100644 extras/doc/html/_wave_shaper_8h_source.html create mode 100644 extras/doc/html/annotated.html create mode 100644 extras/doc/html/annotated_dup.js create mode 100644 extras/doc/html/audio2huff_8py_source.html create mode 100644 extras/doc/html/bc_s.png create mode 100644 extras/doc/html/bdwn.png create mode 100644 extras/doc/html/blahblah4b__int8_8h_source.html create mode 100644 extras/doc/html/char2mozzi_8py.html create mode 100644 extras/doc/html/char2mozzi_8py.js create mode 100644 extras/doc/html/char2mozzi_8py_source.html create mode 100644 extras/doc/html/chebyshev__int8_8py_source.html create mode 100644 extras/doc/html/class_a_d_s_r-members.html create mode 100644 extras/doc/html/class_a_d_s_r.html create mode 100644 extras/doc/html/class_a_d_s_r.js create mode 100644 extras/doc/html/class_audio_delay-members.html create mode 100644 extras/doc/html/class_audio_delay.html create mode 100644 extras/doc/html/class_audio_delay.js create mode 100644 extras/doc/html/class_audio_delay.png create mode 100644 extras/doc/html/class_audio_delay_feedback-members.html create mode 100644 extras/doc/html/class_audio_delay_feedback.html create mode 100644 extras/doc/html/class_audio_delay_feedback.js create mode 100644 extras/doc/html/class_auto_map-members.html create mode 100644 extras/doc/html/class_auto_map.html create mode 100644 extras/doc/html/class_auto_map.js create mode 100644 extras/doc/html/class_auto_map.png create mode 100644 extras/doc/html/class_auto_range-members.html create mode 100644 extras/doc/html/class_auto_range.html create mode 100644 extras/doc/html/class_auto_range.js create mode 100644 extras/doc/html/class_cap_poll-members.html create mode 100644 extras/doc/html/class_cap_poll.html create mode 100644 extras/doc/html/class_cap_poll.js create mode 100644 extras/doc/html/class_circular_buffer-members.html create mode 100644 extras/doc/html/class_circular_buffer.html create mode 100644 extras/doc/html/class_circular_buffer.js create mode 100644 extras/doc/html/class_control_delay-members.html create mode 100644 extras/doc/html/class_control_delay.html create mode 100644 extras/doc/html/class_control_delay.js create mode 100644 extras/doc/html/class_control_delay.png create mode 100644 extras/doc/html/class_d_cfilter-members.html create mode 100644 extras/doc/html/class_d_cfilter.html create mode 100644 extras/doc/html/class_d_cfilter.js create mode 100644 extras/doc/html/class_ead-members.html create mode 100644 extras/doc/html/class_ead.html create mode 100644 extras/doc/html/class_ead.js create mode 100644 extras/doc/html/class_event_delay-members.html create mode 100644 extras/doc/html/class_event_delay.html create mode 100644 extras/doc/html/class_event_delay.js create mode 100644 extras/doc/html/class_event_delay.png create mode 100644 extras/doc/html/class_int_map-members.html create mode 100644 extras/doc/html/class_int_map.html create mode 100644 extras/doc/html/class_int_map.js create mode 100644 extras/doc/html/class_line-members.html create mode 100644 extras/doc/html/class_line.html create mode 100644 extras/doc/html/class_line.js create mode 100644 extras/doc/html/class_line_3_01unsigned_01char_01_4-members.html create mode 100644 extras/doc/html/class_line_3_01unsigned_01char_01_4.html create mode 100644 extras/doc/html/class_line_3_01unsigned_01char_01_4.js create mode 100644 extras/doc/html/class_line_3_01unsigned_01int_01_4-members.html create mode 100644 extras/doc/html/class_line_3_01unsigned_01int_01_4.html create mode 100644 extras/doc/html/class_line_3_01unsigned_01int_01_4.js create mode 100644 extras/doc/html/class_line_3_01unsigned_01long_01_4-members.html create mode 100644 extras/doc/html/class_line_3_01unsigned_01long_01_4.html create mode 100644 extras/doc/html/class_line_3_01unsigned_01long_01_4.js create mode 100644 extras/doc/html/class_low_pass_filter-members.html create mode 100644 extras/doc/html/class_low_pass_filter.html create mode 100644 extras/doc/html/class_low_pass_filter.js create mode 100644 extras/doc/html/class_metronome-members.html create mode 100644 extras/doc/html/class_metronome.html create mode 100644 extras/doc/html/class_metronome.js create mode 100644 extras/doc/html/class_metronome.png create mode 100644 extras/doc/html/class_multi_line-members.html create mode 100644 extras/doc/html/class_multi_line.html create mode 100644 extras/doc/html/class_multi_line.js create mode 100644 extras/doc/html/class_oscil-members.html create mode 100644 extras/doc/html/class_oscil.html create mode 100644 extras/doc/html/class_oscil.js create mode 100644 extras/doc/html/class_over_sample-members.html create mode 100644 extras/doc/html/class_over_sample.html create mode 100644 extras/doc/html/class_over_sample.js create mode 100644 extras/doc/html/class_over_sample.png create mode 100644 extras/doc/html/class_p_d_resonant-members.html create mode 100644 extras/doc/html/class_p_d_resonant.html create mode 100644 extras/doc/html/class_p_d_resonant.js create mode 100644 extras/doc/html/class_phasor-members.html create mode 100644 extras/doc/html/class_phasor.html create mode 100644 extras/doc/html/class_phasor.js create mode 100644 extras/doc/html/class_portamento-members.html create mode 100644 extras/doc/html/class_portamento.html create mode 100644 extras/doc/html/class_portamento.js create mode 100644 extras/doc/html/class_r_cpoll-members.html create mode 100644 extras/doc/html/class_r_cpoll.html create mode 100644 extras/doc/html/class_r_cpoll.js create mode 100644 extras/doc/html/class_reverb_tank-members.html create mode 100644 extras/doc/html/class_reverb_tank.html create mode 100644 extras/doc/html/class_reverb_tank.js create mode 100644 extras/doc/html/class_rolling_average-members.html create mode 100644 extras/doc/html/class_rolling_average.html create mode 100644 extras/doc/html/class_rolling_average.js create mode 100644 extras/doc/html/class_rolling_stat-members.html create mode 100644 extras/doc/html/class_rolling_stat.html create mode 100644 extras/doc/html/class_rolling_stat.js create mode 100644 extras/doc/html/class_sample-members.html create mode 100644 extras/doc/html/class_sample.html create mode 100644 extras/doc/html/class_sample.js create mode 100644 extras/doc/html/class_sample_huffman-members.html create mode 100644 extras/doc/html/class_sample_huffman.html create mode 100644 extras/doc/html/class_sample_huffman.js create mode 100644 extras/doc/html/class_smooth-members.html create mode 100644 extras/doc/html/class_smooth.html create mode 100644 extras/doc/html/class_smooth.js create mode 100644 extras/doc/html/class_stack-members.html create mode 100644 extras/doc/html/class_stack.html create mode 100644 extras/doc/html/class_stack.js create mode 100644 extras/doc/html/class_state_variable-members.html create mode 100644 extras/doc/html/class_state_variable.html create mode 100644 extras/doc/html/class_state_variable.js create mode 100644 extras/doc/html/class_wave_packet-members.html create mode 100644 extras/doc/html/class_wave_packet.html create mode 100644 extras/doc/html/class_wave_packet.js create mode 100644 extras/doc/html/class_wave_packet.png create mode 100644 extras/doc/html/class_wave_packet_sample-members.html create mode 100644 extras/doc/html/class_wave_packet_sample.html create mode 100644 extras/doc/html/class_wave_packet_sample.js create mode 100644 extras/doc/html/class_wave_packet_sample.png create mode 100644 extras/doc/html/class_wave_shaper.html create mode 100644 extras/doc/html/class_wave_shaper_3_01char_01_4-members.html create mode 100644 extras/doc/html/class_wave_shaper_3_01char_01_4.html create mode 100644 extras/doc/html/class_wave_shaper_3_01char_01_4.js create mode 100644 extras/doc/html/class_wave_shaper_3_01int_01_4-members.html create mode 100644 extras/doc/html/class_wave_shaper_3_01int_01_4.html create mode 100644 extras/doc/html/class_wave_shaper_3_01int_01_4.js create mode 100644 extras/doc/html/classes.html create mode 100644 extras/doc/html/closed.png create mode 100644 extras/doc/html/cogl__sqrti_8h_source.html create mode 100644 extras/doc/html/custom_stylesheet.css create mode 100644 extras/doc/html/dir_0d6feda837323b0c7a50b1cca0a6cf12.html create mode 100644 extras/doc/html/dir_3faa5fff9e46bf8b8f48c87f683ce0e6.html create mode 100644 extras/doc/html/dir_9ca29615486e86932f4b900563144736.html create mode 100644 extras/doc/html/dir_9f351d46ce3cc29445a41dc3a31e6919.html create mode 100644 extras/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html create mode 100644 extras/doc/html/dir_da40a2d191134d083f9bacf4a8879a55.html create mode 100644 extras/doc/html/dir_dd81b9de5c9027a54e49f977944ecdc1.html create mode 100644 extras/doc/html/doc.png create mode 100644 extras/doc/html/dynsections.js create mode 100644 extras/doc/html/examples.html create mode 100644 extras/doc/html/examples.js create mode 100644 extras/doc/html/files.html create mode 100644 extras/doc/html/files.js create mode 100644 extras/doc/html/float2mozzi_8py_source.html create mode 100644 extras/doc/html/float2mozzi__uint8_8py_source.html create mode 100644 extras/doc/html/folderclosed.png create mode 100644 extras/doc/html/folderopen.png create mode 100644 extras/doc/html/functions.html create mode 100644 extras/doc/html/functions_c.html create mode 100644 extras/doc/html/functions_d.html create mode 100644 extras/doc/html/functions_dup.js create mode 100644 extras/doc/html/functions_e.html create mode 100644 extras/doc/html/functions_func.html create mode 100644 extras/doc/html/functions_func.js create mode 100644 extras/doc/html/functions_func_c.html create mode 100644 extras/doc/html/functions_func_d.html create mode 100644 extras/doc/html/functions_func_e.html create mode 100644 extras/doc/html/functions_func_g.html create mode 100644 extras/doc/html/functions_func_i.html create mode 100644 extras/doc/html/functions_func_l.html create mode 100644 extras/doc/html/functions_func_m.html create mode 100644 extras/doc/html/functions_func_n.html create mode 100644 extras/doc/html/functions_func_o.html create mode 100644 extras/doc/html/functions_func_p.html create mode 100644 extras/doc/html/functions_func_r.html create mode 100644 extras/doc/html/functions_func_s.html create mode 100644 extras/doc/html/functions_func_u.html create mode 100644 extras/doc/html/functions_func_w.html create mode 100644 extras/doc/html/functions_g.html create mode 100644 extras/doc/html/functions_i.html create mode 100644 extras/doc/html/functions_l.html create mode 100644 extras/doc/html/functions_m.html create mode 100644 extras/doc/html/functions_n.html create mode 100644 extras/doc/html/functions_o.html create mode 100644 extras/doc/html/functions_p.html create mode 100644 extras/doc/html/functions_r.html create mode 100644 extras/doc/html/functions_s.html create mode 100644 extras/doc/html/functions_u.html create mode 100644 extras/doc/html/functions_w.html create mode 100644 extras/doc/html/group__analog.html create mode 100644 extras/doc/html/group__analog.js create mode 100644 extras/doc/html/group__core.html create mode 100644 extras/doc/html/group__core.js create mode 100644 extras/doc/html/group__fixmath.html create mode 100644 extras/doc/html/group__fixmath.js create mode 100644 extras/doc/html/group__midi.html create mode 100644 extras/doc/html/group__midi.js create mode 100644 extras/doc/html/group__random.html create mode 100644 extras/doc/html/group__random.js create mode 100644 extras/doc/html/group__soundtables.html create mode 100644 extras/doc/html/group__util.html create mode 100644 extras/doc/html/group__util.js create mode 100644 extras/doc/html/group__util_struct_int2_type.js create mode 100644 extras/doc/html/hierarchy.html create mode 100644 extras/doc/html/hierarchy.js create mode 100644 extras/doc/html/index.html create mode 100644 extras/doc/html/jquery.js create mode 100644 extras/doc/html/known__16bit__timers_8h_source.html create mode 100644 extras/doc/html/meta_8h_source.html create mode 100644 extras/doc/html/modules.html create mode 100644 extras/doc/html/modules.js create mode 100644 extras/doc/html/mozzi-circle.png create mode 100644 extras/doc/html/mozzi__analog_8cpp_source.html create mode 100644 extras/doc/html/mozzi__analog_8h_source.html create mode 100644 extras/doc/html/mozzi__config_8h_source.html create mode 100644 extras/doc/html/mozzi__fixmath_8cpp_source.html create mode 100644 extras/doc/html/mozzi__fixmath_8h_source.html create mode 100644 extras/doc/html/mozzi__midi_8cpp_source.html create mode 100644 extras/doc/html/mozzi__midi_8h_source.html create mode 100644 extras/doc/html/mozzi__rand_8cpp_source.html create mode 100644 extras/doc/html/mozzi__rand_8h_source.html create mode 100644 extras/doc/html/mozzi__utils_8cpp_source.html create mode 100644 extras/doc/html/mozzi__utils_8h_source.html create mode 100644 extras/doc/html/mult16x16_8h_source.html create mode 100644 extras/doc/html/mult16x8_8h_source.html create mode 100644 extras/doc/html/mult32x16_8h_source.html create mode 100644 extras/doc/html/nav_f.png create mode 100644 extras/doc/html/nav_g.png create mode 100644 extras/doc/html/nav_h.png create mode 100644 extras/doc/html/navtree.css create mode 100644 extras/doc/html/navtree.js create mode 100644 extras/doc/html/navtreedata.js create mode 100644 extras/doc/html/navtreeindex0.js create mode 100644 extras/doc/html/navtreeindex1.js create mode 100644 extras/doc/html/navtreeindex2.js create mode 100644 extras/doc/html/open.png create mode 100644 extras/doc/html/primes_8h_source.html create mode 100644 extras/doc/html/resize.js create mode 100644 extras/doc/html/search/all_0.html create mode 100644 extras/doc/html/search/all_0.js create mode 100644 extras/doc/html/search/all_1.html create mode 100644 extras/doc/html/search/all_1.js create mode 100644 extras/doc/html/search/all_10.html create mode 100644 extras/doc/html/search/all_10.js create mode 100644 extras/doc/html/search/all_11.html create mode 100644 extras/doc/html/search/all_11.js create mode 100644 extras/doc/html/search/all_12.html create mode 100644 extras/doc/html/search/all_12.js create mode 100644 extras/doc/html/search/all_2.html create mode 100644 extras/doc/html/search/all_2.js create mode 100644 extras/doc/html/search/all_3.html create mode 100644 extras/doc/html/search/all_3.js create mode 100644 extras/doc/html/search/all_4.html create mode 100644 extras/doc/html/search/all_4.js create mode 100644 extras/doc/html/search/all_5.html create mode 100644 extras/doc/html/search/all_5.js create mode 100644 extras/doc/html/search/all_6.html create mode 100644 extras/doc/html/search/all_6.js create mode 100644 extras/doc/html/search/all_7.html create mode 100644 extras/doc/html/search/all_7.js create mode 100644 extras/doc/html/search/all_8.html create mode 100644 extras/doc/html/search/all_8.js create mode 100644 extras/doc/html/search/all_9.html create mode 100644 extras/doc/html/search/all_9.js create mode 100644 extras/doc/html/search/all_a.html create mode 100644 extras/doc/html/search/all_a.js create mode 100644 extras/doc/html/search/all_b.html create mode 100644 extras/doc/html/search/all_b.js create mode 100644 extras/doc/html/search/all_c.html create mode 100644 extras/doc/html/search/all_c.js create mode 100644 extras/doc/html/search/all_d.html create mode 100644 extras/doc/html/search/all_d.js create mode 100644 extras/doc/html/search/all_e.html create mode 100644 extras/doc/html/search/all_e.js create mode 100644 extras/doc/html/search/all_f.html create mode 100644 extras/doc/html/search/all_f.js create mode 100644 extras/doc/html/search/classes_0.html create mode 100644 extras/doc/html/search/classes_0.js create mode 100644 extras/doc/html/search/classes_1.html create mode 100644 extras/doc/html/search/classes_1.js create mode 100644 extras/doc/html/search/classes_2.html create mode 100644 extras/doc/html/search/classes_2.js create mode 100644 extras/doc/html/search/classes_3.html create mode 100644 extras/doc/html/search/classes_3.js create mode 100644 extras/doc/html/search/classes_4.html create mode 100644 extras/doc/html/search/classes_4.js create mode 100644 extras/doc/html/search/classes_5.html create mode 100644 extras/doc/html/search/classes_5.js create mode 100644 extras/doc/html/search/classes_6.html create mode 100644 extras/doc/html/search/classes_6.js create mode 100644 extras/doc/html/search/classes_7.html create mode 100644 extras/doc/html/search/classes_7.js create mode 100644 extras/doc/html/search/classes_8.html create mode 100644 extras/doc/html/search/classes_8.js create mode 100644 extras/doc/html/search/classes_9.html create mode 100644 extras/doc/html/search/classes_9.js create mode 100644 extras/doc/html/search/classes_a.html create mode 100644 extras/doc/html/search/classes_a.js create mode 100644 extras/doc/html/search/classes_b.html create mode 100644 extras/doc/html/search/classes_b.js create mode 100644 extras/doc/html/search/close.png create mode 100644 extras/doc/html/search/files_0.html create mode 100644 extras/doc/html/search/files_0.js create mode 100644 extras/doc/html/search/functions_0.html create mode 100644 extras/doc/html/search/functions_0.js create mode 100644 extras/doc/html/search/functions_1.html create mode 100644 extras/doc/html/search/functions_1.js create mode 100644 extras/doc/html/search/functions_10.html create mode 100644 extras/doc/html/search/functions_10.js create mode 100644 extras/doc/html/search/functions_11.html create mode 100644 extras/doc/html/search/functions_11.js create mode 100644 extras/doc/html/search/functions_12.html create mode 100644 extras/doc/html/search/functions_12.js create mode 100644 extras/doc/html/search/functions_2.html create mode 100644 extras/doc/html/search/functions_2.js create mode 100644 extras/doc/html/search/functions_3.html create mode 100644 extras/doc/html/search/functions_3.js create mode 100644 extras/doc/html/search/functions_4.html create mode 100644 extras/doc/html/search/functions_4.js create mode 100644 extras/doc/html/search/functions_5.html create mode 100644 extras/doc/html/search/functions_5.js create mode 100644 extras/doc/html/search/functions_6.html create mode 100644 extras/doc/html/search/functions_6.js create mode 100644 extras/doc/html/search/functions_7.html create mode 100644 extras/doc/html/search/functions_7.js create mode 100644 extras/doc/html/search/functions_8.html create mode 100644 extras/doc/html/search/functions_8.js create mode 100644 extras/doc/html/search/functions_9.html create mode 100644 extras/doc/html/search/functions_9.js create mode 100644 extras/doc/html/search/functions_a.html create mode 100644 extras/doc/html/search/functions_a.js create mode 100644 extras/doc/html/search/functions_b.html create mode 100644 extras/doc/html/search/functions_b.js create mode 100644 extras/doc/html/search/functions_c.html create mode 100644 extras/doc/html/search/functions_c.js create mode 100644 extras/doc/html/search/functions_d.html create mode 100644 extras/doc/html/search/functions_d.js create mode 100644 extras/doc/html/search/functions_e.html create mode 100644 extras/doc/html/search/functions_e.js create mode 100644 extras/doc/html/search/functions_f.html create mode 100644 extras/doc/html/search/functions_f.js create mode 100644 extras/doc/html/search/groups_0.html create mode 100644 extras/doc/html/search/groups_0.js create mode 100644 extras/doc/html/search/groups_1.html create mode 100644 extras/doc/html/search/groups_1.js create mode 100644 extras/doc/html/search/groups_2.html create mode 100644 extras/doc/html/search/groups_2.js create mode 100644 extras/doc/html/search/groups_3.html create mode 100644 extras/doc/html/search/groups_3.js create mode 100644 extras/doc/html/search/groups_4.html create mode 100644 extras/doc/html/search/groups_4.js create mode 100644 extras/doc/html/search/groups_5.html create mode 100644 extras/doc/html/search/groups_5.js create mode 100644 extras/doc/html/search/groups_6.html create mode 100644 extras/doc/html/search/groups_6.js create mode 100644 extras/doc/html/search/mag_sel.png create mode 100644 extras/doc/html/search/nomatches.html create mode 100644 extras/doc/html/search/search.css create mode 100644 extras/doc/html/search/search.js create mode 100644 extras/doc/html/search/search_l.png create mode 100644 extras/doc/html/search/search_m.png create mode 100644 extras/doc/html/search/search_r.png create mode 100644 extras/doc/html/search/searchdata.js create mode 100644 extras/doc/html/search/typedefs_0.html create mode 100644 extras/doc/html/search/typedefs_0.js create mode 100644 extras/doc/html/sin1024__int8_8py_source.html create mode 100644 extras/doc/html/sin8192__uint8_8py_source.html create mode 100644 extras/doc/html/sin__multi__levels__int8_8py_source.html create mode 100644 extras/doc/html/sounddata_8h_source.html create mode 100644 extras/doc/html/splitbar.png create mode 100644 extras/doc/html/sync_off.png create mode 100644 extras/doc/html/sync_on.png create mode 100644 extras/doc/html/tab_a.png create mode 100644 extras/doc/html/tab_b.png create mode 100644 extras/doc/html/tab_h.png create mode 100644 extras/doc/html/tab_s.png create mode 100644 extras/doc/html/table__generator__template_8py_source.html create mode 100644 extras/doc/html/tabs.css create mode 100644 extras/doc/html/twi__nonblock_8cpp_source.html create mode 100644 extras/doc/html/twi__nonblock_8h_source.html create mode 100644 extras/doc/html/umpah__huff_8h_source.html diff --git a/README.md b/README.md index 57ab7c71c..6c77f65a9 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Tim Barrass -version 2016-11-26-23:07 +version 2016-11-26-23:16 Currently your Arduino can only beep like a microwave oven. Mozzi brings your Arduino to life by allowing it to produce much more complex and interesting diff --git a/extras/NEWS.txt b/extras/NEWS.txt index 6ea1d39f0..9ed55a97a 100644 --- a/extras/NEWS.txt +++ b/extras/NEWS.txt @@ -3,7 +3,7 @@ Mozzi sound synthesis library for Arduino NEWS get the latest version from https://sensorium.github.io/Mozzi/ -version 2016-11-26-23:07 +version 2016-11-26-23:16 release v1.0.3rc1 diff --git a/extras/VERSION.txt b/extras/VERSION.txt index 6a0fe097a..4be42571f 100644 --- a/extras/VERSION.txt +++ b/extras/VERSION.txt @@ -1 +1 @@ -version 2016-11-26-23:07 +version 2016-11-26-23:16 diff --git a/extras/doc/html/01_8_basics_2_vibrato_2_vibrato_8ino-example.html b/extras/doc/html/01_8_basics_2_vibrato_2_vibrato_8ino-example.html new file mode 100644 index 000000000..d764bfc76 --- /dev/null +++ b/extras/doc/html/01_8_basics_2_vibrato_2_vibrato_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 01.Basics/Vibrato/Vibrato.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
01.Basics/Vibrato/Vibrato.ino
+
+
+

This is an example using Oscil::phMod to produce vibrato using phase modulation.

+
/* Example playing a sinewave with vibrato,
using Mozzi sonification library.
Demonstrates simple FM using phase modulation.
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h>
#include <tables/cos2048_int8.h> // table for Oscils to play
#include <mozzi_midi.h> // for mtof
#include <mozzi_fixmath.h>
#define CONTROL_RATE 64 // powers of 2 please
Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aCos(COS2048_DATA);
Oscil<COS2048_NUM_CELLS, AUDIO_RATE> aVibrato(COS2048_DATA);
const byte intensity = 255;
void setup(){
startMozzi(CONTROL_RATE);
aCos.setFreq(mtof(84.f));
aVibrato.setFreq(15.f);
}
void updateControl(){
}
int updateAudio(){
Q15n16 vibrato = (Q15n16) intensity * aVibrato.next();
return aCos.phMod(vibrato); // phase modulation to modulate frequency
}
void loop(){
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/02_8_control_2_control__echo__theremin_2_control__echo__theremin_8ino-example.html b/extras/doc/html/02_8_control_2_control__echo__theremin_2_control__echo__theremin_8ino-example.html new file mode 100644 index 000000000..c6699c289 --- /dev/null +++ b/extras/doc/html/02_8_control_2_control__echo__theremin_2_control__echo__theremin_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 02.Control/Control_Echo_Theremin/Control_Echo_Theremin.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
02.Control/Control_Echo_Theremin/Control_Echo_Theremin.ino
+
+
+

This is an example of how to use the ControlDelay class.

+
/* Example of a simple light-sensing theremin-like
instrument with long echoes,
using Mozzi sonification library.
Demonstrates ControlDelay() for echoing control values,
and smoothing an analog input from a sensor
signal with RollingAverage().
The circuit:
Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Light dependent resistor (LDR) and 5.1k resistor on analog pin 1:
LDR from analog pin to +5V (3.3V on Teensy 3.1)
5.1k resistor from analog pin to ground
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2013, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h> // oscillator template
#include <tables/sin2048_int8.h> // sine table for oscillator
#include <RollingAverage.h>
#include <ControlDelay.h>
#define INPUT_PIN 0 // analog control input
unsigned int echo_cells_1 = 32;
unsigned int echo_cells_2 = 60;
unsigned int echo_cells_3 = 127;
#define CONTROL_RATE 64
ControlDelay <128, int> kDelay; // 2seconds
// oscils to compare bumpy to averaged control input
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin0(SIN2048_DATA);
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin1(SIN2048_DATA);
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin2(SIN2048_DATA);
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin3(SIN2048_DATA);
// use: RollingAverage <number_type, how_many_to_average> myThing
RollingAverage <int, 32> kAverage; // how_many_to_average has to be power of 2
int averaged;
void setup(){
kDelay.set(echo_cells_1);
startMozzi();
}
void updateControl(){
int bumpy_input = mozziAnalogRead(INPUT_PIN);
averaged = kAverage.next(bumpy_input);
aSin0.setFreq(averaged);
aSin1.setFreq(kDelay.next(averaged));
aSin2.setFreq(kDelay.read(echo_cells_2));
aSin3.setFreq(kDelay.read(echo_cells_3));
}
int updateAudio(){
return 3*((int)aSin0.next()+aSin1.next()+(aSin2.next()>>1)
+(aSin3.next()>>2)) >>3;
}
void loop(){
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/02_8_control_2_control__tremelo_2_control__tremelo_8ino-example.html b/extras/doc/html/02_8_control_2_control__tremelo_2_control__tremelo_8ino-example.html new file mode 100644 index 000000000..b420ed88e --- /dev/null +++ b/extras/doc/html/02_8_control_2_control__tremelo_2_control__tremelo_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 02.Control/Control_Tremelo/Control_Tremelo.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
02.Control/Control_Tremelo/Control_Tremelo.ino
+
+
+

This example demonstrates the Line class.

+
/* Example of amplitude modulation (as tremelo),
using Mozzi sonification library.
Demonstrates audio and control rate updates.
The tremelo oscillator is updated at control rate,
and a Line is used to interpolate the control updates
at audio rate, to remove zipper noise.
A bit contrived and probably less efficient than just
using an audio-rate tremelo oscillator, but hey it's a demo!
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h>
#include <tables/triangle_valve_2048_int8.h>
#include <tables/sin2048_int8.h>
#include <Line.h>
#include <mozzi_midi.h>
#define CONTROL_RATE 64 // powers of 2 please
// audio oscillator
Oscil<TRIANGLE_VALVE_2048_NUM_CELLS, AUDIO_RATE> aSig(TRIANGLE_VALVE_2048_DATA);
// control oscillator for tremelo
Oscil<SIN2048_NUM_CELLS, CONTROL_RATE> kTremelo(SIN2048_DATA);
// a line to interpolate control tremolo at audio rate
Line <unsigned int> aGain;
void setup(){
aSig.setFreq(mtof(65.f));
kTremelo.setFreq(5.5f);
startMozzi(CONTROL_RATE);
}
void updateControl(){
// gain shifted up to give enough range for line's internal steps
unsigned int gain = (128u+kTremelo.next())<<8;
aGain.set(gain, AUDIO_RATE / CONTROL_RATE); // divide of literals should get optimised away
}
int updateAudio(){
// cast to long before multiply to give room for intermediate result,
// and also before shift,
// to give consistent results for both 8 and 32 bit processors.
return (int)((long)((long) aSig.next() * aGain.next()) >> 16); // shifted back to audio range after multiply
}
void loop(){
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/02_8_control_2_event_delay_2_event_delay_8ino-example.html b/extras/doc/html/02_8_control_2_event_delay_2_event_delay_8ino-example.html new file mode 100644 index 000000000..18e12fd45 --- /dev/null +++ b/extras/doc/html/02_8_control_2_event_delay_2_event_delay_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 02.Control/EventDelay/EventDelay.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
02.Control/EventDelay/EventDelay.ino
+
+
+

This example shows how to use the EventDelay class.

+
/* Example of a sound being toggled on an off,
using Mozzi sonification library.
Demonstrates scheduling with EventDelay.
EventDelay is a way to make non-blocking
time delays for events. Use this instead of
the Arduino delay() function, which doesn't
work with Mozzi.
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h> // oscillator template
#include <tables/sin8192_int8.h> // sine table for oscillator
#include <EventDelay.h>
#define CONTROL_RATE 64
// use: Oscil <table_size, update_rate> oscilName (wavetable), look in .h file of table #included above
Oscil <SIN8192_NUM_CELLS, AUDIO_RATE> aSin(SIN8192_DATA);
// for scheduling audio gain changes
EventDelay kGainChangeDelay;
char gain = 1;
void setup(){
startMozzi(CONTROL_RATE);
aSin.setFreq(330); // set the frequency
kGainChangeDelay.set(1000); // 1 second countdown, within resolution of CONTROL_RATE
}
void updateControl(){
if(kGainChangeDelay.ready()){
gain = 1-gain; // flip 0/1
kGainChangeDelay.start();
}
}
int updateAudio(){
return aSin.next()*gain;
}
void loop(){
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/02_8_control_2_metronome__sample_huffman_2_metronome__sample_huffman_8ino-example.html b/extras/doc/html/02_8_control_2_metronome__sample_huffman_2_metronome__sample_huffman_8ino-example.html new file mode 100644 index 000000000..1e47f1f50 --- /dev/null +++ b/extras/doc/html/02_8_control_2_metronome__sample_huffman_2_metronome__sample_huffman_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 02.Control/Metronome_SampleHuffman/Metronome_SampleHuffman.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
02.Control/Metronome_SampleHuffman/Metronome_SampleHuffman.ino
+
+
+

This example shows how to use the Metronome class.

+
/* Example using Metronome to playing samples encoded with Huffman compression.
Demonstrates Metronome start, stop and ready, and the the SampleHuffman class.
Circuit:
Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2013, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Metronome.h>
#include <SampleHuffman.h>
#include <mozzi_rand.h>
#include <samples/thumbpiano_huffman/thumbpiano0.h>
#include <samples/thumbpiano_huffman/thumbpiano1.h>
#include <samples/thumbpiano_huffman/thumbpiano2.h>
#include <samples/thumbpiano_huffman/thumbpiano3.h>
#include <samples/thumbpiano_huffman/thumbpiano4.h>
SampleHuffman thumb0(THUMB0_SOUNDDATA,THUMB0_HUFFMAN,THUMB0_SOUNDDATA_BITS);
SampleHuffman thumb1(THUMB1_SOUNDDATA,THUMB1_HUFFMAN,THUMB1_SOUNDDATA_BITS);
SampleHuffman thumb2(THUMB2_SOUNDDATA,THUMB2_HUFFMAN,THUMB2_SOUNDDATA_BITS);
SampleHuffman thumb3(THUMB3_SOUNDDATA,THUMB3_HUFFMAN,THUMB3_SOUNDDATA_BITS);
SampleHuffman thumb4(THUMB4_SOUNDDATA,THUMB4_HUFFMAN,THUMB4_SOUNDDATA_BITS);
const char NUM_SAMPLES = 5;
Metronome kMetro(800); // enough delay so samples don't overlap, because the load would be too much
void setup() {
startMozzi();
}
void updateControl(){
static unsigned int counter;
counter++;
if(counter==177)kMetro.stop();
if(counter==203){kMetro.start();counter = 0;}
if(kMetro.ready()){
switch(rand(NUM_SAMPLES)){
case 0:
thumb0.start();
break;
case 1:
thumb1.start();
break;
case 2:
thumb2.start();
break;
case 3:
thumb3.start();
break;
case 4:
thumb4.start();
break;
}
}
}
int updateAudio(){
int asig = (int)
thumb0.next() +
thumb1.next() +
thumb2.next() +
thumb3.next() +
thumb4.next();
return asig;
}
void loop() {
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/03_8_sensors_2_knob__l_d_r_x2__wave_packet_2_knob__l_d_r_x2__wave_packet_8ino-example.html b/extras/doc/html/03_8_sensors_2_knob__l_d_r_x2__wave_packet_2_knob__l_d_r_x2__wave_packet_8ino-example.html new file mode 100644 index 000000000..9dedf3b6c --- /dev/null +++ b/extras/doc/html/03_8_sensors_2_knob__l_d_r_x2__wave_packet_2_knob__l_d_r_x2__wave_packet_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 03.Sensors/Knob_LDR_x2_WavePacket/Knob_LDR_x2_WavePacket.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
03.Sensors/Knob_LDR_x2_WavePacket/Knob_LDR_x2_WavePacket.ino
+
+
+

This example demonstrates the AutoMap class.

+
/*
Example of Wavepacket synthesis, using analog
inputs to change the fundamental frequency,
bandwidth and centre frequency,
using Mozzi sonification library.
Demonstrates WavePacket, mozziAnalogRead(), and smoothing
control signals with RollingAverage.
Also demonstrates AutoMap, which maps unpredictable inputs to a set range.
This example goes with a tutorial on the Mozzi site:
http://sensorium.github.io/Mozzi/learn/introductory-tutorial/
The circuit:
Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Potentiometer connected to analog pin 0.
Center pin of the potentiometer goes to the analog pin.
Side pins of the potentiometer go to +5V and ground
Light dependent resistor (LDR) and 5.1k resistor on analog pin 1:
LDR from analog pin to +5V (3.3V on Teensy 3.1)
5.1k resistor from analog pin to ground
Light dependent resistor (LDR) and 5.1k resistor on analog pin 2:
LDR from analog pin to +5V (3.3V on Teensy 3.1)
5.1k resistor from analog pin to ground
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2013, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <WavePacket.h>
#include <RollingAverage.h>
#include <AutoMap.h>
const int KNOB_PIN = 0; // set the input for the knob to analog pin 0
const int LDR1_PIN=1; // set the analog input for fm_intensity to pin 1
const int LDR2_PIN=2; // set the analog input for mod rate to pin 2
// min and max values of synth parameters to map AutoRanged analog inputs to
const int MIN_F = 5;
const int MAX_F = 100;
const int MIN_BW = 1;
const int MAX_BW = 1000;
const int MIN_CF = 60;
const int MAX_CF = 2000;
// for smoothing the control signals
// use: RollingAverage <number_type, how_many_to_average> myThing
RollingAverage <int, 16> kAverageF;
RollingAverage <int, 16> kAverageBw;
RollingAverage <int, 16> kAverageCf;
AutoMap kMapF(0,1023,MIN_F,MAX_F);
AutoMap kMapBw(0,1023,MIN_BW,MAX_BW);
AutoMap kMapCf(0,1023,MIN_CF,MAX_CF);
WavePacket <DOUBLE> wavey; // DOUBLE selects 2 overlapping streams
void setup(){
//Serial.begin(9600); // for Teensy 3.1, beware printout can cause glitches
Serial.begin(115200);
// wait before starting Mozzi to receive analog reads, so AutoRange will not get 0
delay(200);
startMozzi();
}
void updateControl(){
int fundamental = mozziAnalogRead(KNOB_PIN)+1;
Serial.print(fundamental);
Serial.print(" ");
fundamental = kMapF(fundamental);
Serial.print(fundamental);
Serial.println();
int bandwidth = mozziAnalogRead(LDR1_PIN);
bandwidth = kMapBw(bandwidth);
int centre_freq = mozziAnalogRead(LDR2_PIN);
centre_freq = kMapCf(centre_freq);
wavey.set(fundamental, bandwidth, centre_freq);
}
int updateAudio(){
return wavey.next()>>8; // >>8 for AUDIO_MODE STANDARD
}
void loop(){
audioHook(); // required here
}
+
+ + + + diff --git a/extras/doc/html/05_8_control__filters_2_d_c_filter_2_d_c_filter_8ino-example.html b/extras/doc/html/05_8_control__filters_2_d_c_filter_2_d_c_filter_8ino-example.html new file mode 100644 index 000000000..59a4524c8 --- /dev/null +++ b/extras/doc/html/05_8_control__filters_2_d_c_filter_2_d_c_filter_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 05.Control_Filters/DCFilter/DCFilter.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
05.Control_Filters/DCFilter/DCFilter.ino
+
+
+

This example demonstrates the DCFilter class.

+
/* Example of filtering an analog input to remove DC bias,
using Mozzi sonification library.
Demonstrates DCfilter(), DC-blocking filter useful for
highlighting changes in control signals.
The output of the filter settles to 0 if the incoming signal stays constant.
If the input changes, the filter output swings to track the change and
eventually settles back to 0.
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2013, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <DCfilter.h>
int sensorPin = A0;
DCfilter dcFiltered(0.9); // parameter sets how long the filter takes to settle
void setup() {
//Serial.begin(9600); // for Teensy 3.1, beware printout can cause glitches
Serial.begin(115200);
startMozzi();
}
void updateControl(){
// read the value from the sensor:
int sensorValue = mozziAnalogRead(sensorPin);
Serial.print(sensorValue);
Serial.print(" Filtered = ");
Serial.println(dcFiltered.next(sensorValue));
}
int updateAudio(){
return 0;
}
void loop(){
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/05_8_control__filters_2_smooth_2_smooth_8ino-example.html b/extras/doc/html/05_8_control__filters_2_smooth_2_smooth_8ino-example.html new file mode 100644 index 000000000..cf7043ffc --- /dev/null +++ b/extras/doc/html/05_8_control__filters_2_smooth_2_smooth_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 05.Control_Filters/Smooth/Smooth.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
05.Control_Filters/Smooth/Smooth.ino
+
+
+

This example demonstrates the Smooth class.

+
/* Example of a sound changing volume with and without
smoothing of the control signal to remove obvious clicks,
using Mozzi sonification library.
Demonstrates using Smooth to filter a control signal at audio rate,
EventDelay to schedule changes and rand() to choose random volumes.
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
your board check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h> // oscillator template
#include <tables/sin2048_int8.h> // sine table for oscillator
#include <EventDelay.h>
#include <Smooth.h>
#include <mozzi_rand.h>
#define CONTROL_RATE 128
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA);
// for scheduling audio gain changes
EventDelay kGainChangeDelay;
const unsigned int gainChangeMsec = 200;
// for scheduling turning smoothing on and off
EventDelay kSmoothOnOff;
const unsigned int smoothOnOffMsec = 2000;
float smoothness = 0.9975f;
Smooth <long> aSmoothGain(smoothness);
boolean smoothIsOn=true;
long target_gain = 0;
void setup(){
aSin.setFreq(330); // set the frequency
kGainChangeDelay.set(gainChangeMsec);
kSmoothOnOff.set(smoothOnOffMsec);
startMozzi(CONTROL_RATE);
}
void updateControl(){
// switch smoothing on and off to show the difference
if(kSmoothOnOff.ready()){
if (smoothIsOn) {
aSmoothGain.setSmoothness(0.f);
smoothIsOn = false;
}
else{
aSmoothGain.setSmoothness(smoothness);
smoothIsOn = true;
}
kSmoothOnOff.start();
}
// random volume changes
if(kGainChangeDelay.ready()){
target_gain = rand((byte) 255);
kGainChangeDelay.start();
}
}
int updateAudio(){
return (aSmoothGain.next(target_gain) * aSin.next()) >> 8; // shift back to char precision after multiply
}
void loop(){
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/05_8_control__filters_2_teensy__u_s_b__m_i_d_i_portamento_2_teensy__u_s_b__m_i_d_i_portamento_8ino-example.html b/extras/doc/html/05_8_control__filters_2_teensy__u_s_b__m_i_d_i_portamento_2_teensy__u_s_b__m_i_d_i_portamento_8ino-example.html new file mode 100644 index 000000000..3573ec5c0 --- /dev/null +++ b/extras/doc/html/05_8_control__filters_2_teensy__u_s_b__m_i_d_i_portamento_2_teensy__u_s_b__m_i_d_i_portamento_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 05.Control_Filters/Teensy_USB_MIDI_portamento/Teensy_USB_MIDI_portamento.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
05.Control_Filters/Teensy_USB_MIDI_portamento/Teensy_USB_MIDI_portamento.ino
+
+
+

This example demonstrates the Portamento class.

+
+
+ + + + diff --git a/extras/doc/html/05_8_control__filters_2_thermistor__over_sample_2_thermistor__over_sample_8ino-example.html b/extras/doc/html/05_8_control__filters_2_thermistor__over_sample_2_thermistor__over_sample_8ino-example.html new file mode 100644 index 000000000..04281a3e2 --- /dev/null +++ b/extras/doc/html/05_8_control__filters_2_thermistor__over_sample_2_thermistor__over_sample_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 05.Control_Filters/Thermistor_OverSample/Thermistor_OverSample.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
05.Control_Filters/Thermistor_OverSample/Thermistor_OverSample.ino
+
+
+

This is an example demonstrating the OverSample class.

+
/*
Example of oversampling analog input from a thermistor
for increased resolution. It's a basic attempt at a biofeedback
device used as an ineffective treatment for migraines. The idea
is that if you can focus on making your hands warm, increased blood
flow to the extremities is associated with a reduced stress response.
Anyway, the bleeps sweep up if the temperature increases, down for decrease,
and level for no change. The tremelo rate increases with the temperature.
Using Mozzi sonification library.
Demonstrates OverSample object.
The circuit:
Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Temperature dependent resistor (Thermistor) and 5.1k resistor on analog pin 1:
Thermistor from analog pin to +5V (3.3V on Teensy 3.1)
5.1k resistor from analog pin to ground
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2013, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h> // oscillator template
#include <Line.h>
#include <tables/sin2048_int8.h> // SINe table for oscillator
#include <OverSample.h>
#include <ControlDelay.h>
//#define CONTROL_RATE 256
// use: Oscil <table_size, update_rate> oscilName (wavetable)
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA);
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aTremelo(SIN2048_DATA);
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aEnvelope(SIN2048_DATA);
Line <float> freqLine;
OverSample <unsigned int, 3> overSampler; // will give 10+3=13 bits resolution, 0->8191, using 128 bytes
const byte INPUT_PIN = 1;
float ENVELOPE_DURATION = 1.f;
const byte LINE_LENGTH = (byte)((float)CONTROL_RATE*ENVELOPE_DURATION*0.5); // 0.5 seconds per line
// adjustments to get tremelo in useful range from oversampled temperature input
const int TREMOLO_OFFSET = 4000;
const float TREMOLO_SCALE = 0.002;
void setup(){
pinMode(INPUT_PIN,INPUT);
//Serial.begin(9600); // for Teensy 3.1, beware printout can cause glitches
Serial.begin(115200);
aEnvelope.setFreq(ENVELOPE_DURATION);
startMozzi();
}
void updateControl(){
float start_freq, end_freq;
static int counter, old_oversampled;
// read the variable resistor
int sensor_value = mozziAnalogRead(INPUT_PIN); // value is 0-1023
// get the next oversampled sensor value
int oversampled = overSampler.next(sensor_value);
// modulate the amplitude of the sound in proportion to the magnitude of the oversampled sensor
float tremeloRate = TREMOLO_SCALE*(oversampled-TREMOLO_OFFSET);
tremeloRate = tremeloRate*tremeloRate*tremeloRate*tremeloRate*tremeloRate;
aTremelo.setFreq(tremeloRate);
// every half second
if (--counter<0){
if (oversampled>old_oversampled){ // high tweet up if temp rose
start_freq = 550.f;
end_freq = 660.f;
}else if(oversampled<old_oversampled){ // low tweet down if temp fell
start_freq = 330.f;
end_freq = 220.f;
} else { // flat beep if no change
start_freq = 440.f;
end_freq = 440.f;
}
old_oversampled = oversampled;
counter = LINE_LENGTH-1; // reset counter
// set the line to change the main frequency
freqLine.set(start_freq,end_freq,LINE_LENGTH);
// print out for debugging
Serial.print(oversampled);Serial.print("\t");Serial.print(start_freq);Serial.print("\t");Serial.println(end_freq);
}
// update the main frequency of the sound
aSin.setFreq(freqLine.next());
}
int updateAudio(){
return ((((int)aSin.next()*(128+aTremelo.next()))>>8)*aEnvelope.next())>>8;
}
void loop(){
audioHook(); // required here
}
+
+ + + + diff --git a/extras/doc/html/06_8_synthesis_2_p_w_m__phasing_2_p_w_m__phasing_8ino-example.html b/extras/doc/html/06_8_synthesis_2_p_w_m__phasing_2_p_w_m__phasing_8ino-example.html new file mode 100644 index 000000000..cf3d58e61 --- /dev/null +++ b/extras/doc/html/06_8_synthesis_2_p_w_m__phasing_2_p_w_m__phasing_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 06.Synthesis/PWM_Phasing/PWM_Phasing.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
06.Synthesis/PWM_Phasing/PWM_Phasing.ino
+
+
+

This example demonstrates the Phasor class.

+
/* Example of pulse width modulation,
using Mozzi sonification library.
Based Miller Puckette's j03.pulse.width.mod example
in the Pure Data documentation, subtracting 2 sawtooth
waves with slightly different tunings to produce a
varying phase difference.
Demonstrates Phasor().
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Phasor.h>
#define CONTROL_RATE 64 // powers of 2 please
Phasor <AUDIO_RATE> aPhasor1;
Phasor <AUDIO_RATE> aPhasor2;
float freq = 55.f;
void setup(){
aPhasor1.setFreq(freq);
aPhasor2.setFreq(freq+0.2f);
startMozzi(CONTROL_RATE); // set a control rate of 64 (powers of 2 please)
}
void updateControl(){
}
int updateAudio(){
char asig1 = (char)(aPhasor1.next()>>24);
char asig2 = (char)(aPhasor2.next()>>24);
return ((int)asig1-asig2)/2;
}
void loop(){
audioHook(); // required here
}
+
+ + + + diff --git a/extras/doc/html/06_8_synthesis_2_wave_packet_2_wave_packet_8ino-example.html b/extras/doc/html/06_8_synthesis_2_wave_packet_2_wave_packet_8ino-example.html new file mode 100644 index 000000000..b9bdb17ef --- /dev/null +++ b/extras/doc/html/06_8_synthesis_2_wave_packet_2_wave_packet_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 06.Synthesis/WavePacket/WavePacket.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
06.Synthesis/WavePacket/WavePacket.ino
+
+
+

This is an example of how to use the WavePacket class.

+
+
+ + + + diff --git a/extras/doc/html/06_8_synthesis_2_wave_packet__sample_2_wave_packet__sample_8ino-example.html b/extras/doc/html/06_8_synthesis_2_wave_packet__sample_2_wave_packet__sample_8ino-example.html new file mode 100644 index 000000000..ddb90a216 --- /dev/null +++ b/extras/doc/html/06_8_synthesis_2_wave_packet__sample_2_wave_packet__sample_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 06.Synthesis/WavePacket_Sample/WavePacket_Sample.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
06.Synthesis/WavePacket_Sample/WavePacket_Sample.ino
+
+
+

This is an example of how to use the WavePacketSample class.

+
/* Example of Wavepacket synthesis, using Mozzi sonification library.
This sketch draws on Miller Puckette's
Pure Data example, F14.wave.packet.pd, with
two overlapping streams of wave packets.
Demonstrates the WavePacketSample object, which enables a
custom sound table to be used as the audio source for wavepackets.
Circuit:
Audio output on DAC/A14 on Teensy 3.0, 3.1,
or digital pin 9 on a Uno or similar, or
check the README or http://sensorium.github.com/Mozzi/
Potentiometer connected to analog pin 0.
Center pin of the potentiometer goes to the analog pin.
Side pins of the potentiometer go to +5V and ground
Potentiometer connected to analog pin 1.
Center pin of the potentiometer goes to the analog pin.
Side pins of the potentiometer go to +5V and ground
Potentiometer connected to analog pin 2.
Center pin of the potentiometer goes to the analog pin.
Side pins of the potentiometer go to +5V and ground
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2013, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <mozzi_analog.h>
#include <WavePacketSample.h>
#include <RollingAverage.h>
#include <samples/raven_arh_int8.h>
#define FUNDAMENTAL_PIN 0
#define BANDWIDTH_PIN 1
#define CENTREFREQ_PIN 2
// for smoothing the control signals
// use: RollingAverage <number_type, how_many_to_average> myThing
RollingAverage <int, 32> kAverageF;
RollingAverage <int, 32> kAverageBw;
RollingAverage <int, 32> kAverageCf;
WavePacketSample <DOUBLE> wavey; // DOUBLE selects 2 overlapping streams
void setup(){
wavey.setTable(RAVEN_ARH_DATA);
pinMode(11,OUTPUT);
digitalWrite(11,LOW);
startMozzi();
}
void updateControl(){
int f = kAverageF.next(mozziAnalogRead(FUNDAMENTAL_PIN))+1;
int b = kAverageBw.next(mozziAnalogRead(BANDWIDTH_PIN));
int cf = kAverageCf.next(2*mozziAnalogRead(CENTREFREQ_PIN));
wavey.set(f, b, cf);
}
int updateAudio(){
return wavey.next()>>8; // >>8 for AUDIO_MODE STANDARD
}
void loop(){
audioHook(); // required here
}
+
+ + + + diff --git a/extras/doc/html/06_8_synthesis_2_wave_shaper_2_wave_shaper_8ino-example.html b/extras/doc/html/06_8_synthesis_2_wave_shaper_2_wave_shaper_8ino-example.html new file mode 100644 index 000000000..955dc364b --- /dev/null +++ b/extras/doc/html/06_8_synthesis_2_wave_shaper_2_wave_shaper_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 06.Synthesis/WaveShaper/WaveShaper.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
06.Synthesis/WaveShaper/WaveShaper.ino
+
+
+

This is an example of how to use the WaveShaper class.

+
/* Example using waveshaping to modify the spectrum of an audio signal
using Mozzi sonification library.
Demonstrates the use of WaveShaper(), EventDelay(), Smooth(),
rand(), and fixed-point numbers.
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h>
#include <WaveShaper.h>
#include <EventDelay.h>
#include <mozzi_rand.h>
#include <mozzi_midi.h>
#include <Smooth.h>
#include <tables/sin2048_int8.h>
#include <tables/waveshape_chebyshev_3rd_256_int8.h>
#include <tables/waveshape_chebyshev_6th_256_int8.h>
#include <tables/waveshape_compress_512_to_488_int16.h>
// use #define for CONTROL_RATE, not a constant
#define CONTROL_RATE 64 // powers of 2 please
// use: Oscil <table_size, update_rate> oscilName (wavetable), look in .h file of table #included above
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aSin(SIN2048_DATA); // sine wave sound source
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aGain1(SIN2048_DATA); // to fade sine wave in and out before waveshaping
Oscil <SIN2048_NUM_CELLS, AUDIO_RATE> aGain2(SIN2048_DATA); // to fade sine wave in and out before waveshaping
// Chebyshev polynomial curves, The nth curve produces the n+2th harmonic component.
WaveShaper <char> aCheby3rd(CHEBYSHEV_3RD_256_DATA); // 5th harmonic
WaveShaper <char> aCheby6th(CHEBYSHEV_6TH_256_DATA); // 8th harmonic
WaveShaper <int> aCompress(WAVESHAPE_COMPRESS_512_TO_488_DATA); // to compress instead of dividing by 2 after adding signals
// for scheduling note changes
EventDelay kChangeNoteDelay;
// for random notes
Q8n0 octave_start_note = 42;
Q24n8 carrier_freq; // unsigned long with 24 integer bits and 8 fractional bits
// smooth transitions between notes
Smooth <unsigned int> kSmoothFreq(0.85f);
int target_freq, smoothed_freq;
void setup(){
startMozzi(CONTROL_RATE); // set a control rate of 64 (powers of 2 please)
randSeed(); // reseed the random generator for different results each time the sketch runs
aSin.setFreq(110); // set the frequency
aGain1.setFreq(2.f); // use a float for low frequencies, in setup it doesn't need to be fast
aGain2.setFreq(.4f);
kChangeNoteDelay.set(4000); // note duration ms, within resolution of CONTROL_RATE
}
byte rndPentatonic(){
byte note = rand((byte)5);
switch(note){
case 0:
note = 0;
break;
case 1:
note = 3;
break;
case 2:
note = 5;
break;
case 3:
note = 7;
break;
case 4:
note = 10;
break;
}
return note;
}
void updateControl(){
if(kChangeNoteDelay.ready()){
if(rand((byte)5)==0){ // about 1 in 5 or so
// change octave to midi 24 or any of 3 octaves above
octave_start_note = (rand((byte)4)*12)+36;
}
Q16n16 midi_note = Q8n0_to_Q16n16(octave_start_note+rndPentatonic());
target_freq = Q16n16_to_Q16n0(Q16n16_mtof(midi_note)); // has to be 16 bits for Smooth
kChangeNoteDelay.start();
}
smoothed_freq = kSmoothFreq.next(target_freq*4); // temporarily scale up target_freq to get better int smoothing at low values
aSin.setFreq(smoothed_freq/4); // then scale it back down after it's smoothed
}
int updateAudio(){
char asig0 = aSin.next(); // sine wave source
// make 2 signals fading in and out to show effect of amplitude when waveshaping with Chebyshev polynomial curves
// offset the signals by 128 to fit in the 0-255 range for the waveshaping table lookups
byte asig1 = (byte)128+((asig0*((byte)128+aGain1.next()))>>8);
byte asig2 = (byte)128+((asig0*((byte)128+aGain2.next()))>>8);
// get the waveshaped signals
char awaveshaped1 = aCheby3rd.next(asig1);
char awaveshaped2 = aCheby6th.next(asig2);
// use a waveshaping table to squeeze 2 summed 8 bit signals into the range -244 to 243
int awaveshaped3 = aCompress.next(256u + awaveshaped1 + awaveshaped2);
return awaveshaped3;
}
void loop(){
audioHook(); // required here
}
+
+ + + + diff --git a/extras/doc/html/07_8_envelopes_2_a_d_s_r__envelope_2_a_d_s_r__envelope_8ino-example.html b/extras/doc/html/07_8_envelopes_2_a_d_s_r__envelope_2_a_d_s_r__envelope_8ino-example.html new file mode 100644 index 000000000..0cc33e631 --- /dev/null +++ b/extras/doc/html/07_8_envelopes_2_a_d_s_r__envelope_2_a_d_s_r__envelope_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 07.Envelopes/ADSR_Envelope/ADSR_Envelope.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
07.Envelopes/ADSR_Envelope/ADSR_Envelope.ino
+
+
+

This is an example of how to use the ADSR class.

+
+
+ + + + diff --git a/extras/doc/html/07_8_envelopes_2_ead__envelope_2_ead__envelope_8ino-example.html b/extras/doc/html/07_8_envelopes_2_ead__envelope_2_ead__envelope_8ino-example.html new file mode 100644 index 000000000..4b688267b --- /dev/null +++ b/extras/doc/html/07_8_envelopes_2_ead__envelope_2_ead__envelope_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 07.Envelopes/Ead_Envelope/Ead_Envelope.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
07.Envelopes/Ead_Envelope/Ead_Envelope.ino
+
+
+

This is an example of how to use the Ead class.

+
/* Example playing an enveloped noise source
using Mozzi sonification library.
Demonstrates Ead (exponential attack decay).
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h> // oscillator template
#include <tables/brownnoise8192_int8.h> // recorded audio wavetable
#include <Ead.h> // exponential attack decay
#include <EventDelay.h>
#include <mozzi_rand.h>
#define CONTROL_RATE 256 // powers of 2 please
Oscil<BROWNNOISE8192_NUM_CELLS, AUDIO_RATE> aNoise(BROWNNOISE8192_DATA);
EventDelay kDelay; // for triggering envelope start
Ead kEnvelope(CONTROL_RATE); // resolution will be CONTROL_RATE
int gain;
void setup(){
// use float to set freq because it will be small and fractional
aNoise.setFreq((float)AUDIO_RATE/BROWNNOISE8192_SAMPLERATE);
randSeed(); // fresh random, MUST be called before startMozzi - wierd bug
startMozzi(CONTROL_RATE);
kDelay.start(1000);
}
void updateControl(){
// jump around in audio noise table to disrupt obvious looping
aNoise.setPhase(rand((unsigned int)BROWNNOISE8192_NUM_CELLS));
if(kDelay.ready()){
// set random parameters
unsigned int duration = rand(500u)+200;
unsigned int attack = rand(75)+5; // +5 so the internal step size is more likely to be >0
unsigned int decay = duration - attack;
kEnvelope.start(attack,decay);
kDelay.start(duration+500);
}
gain = (int) kEnvelope.next();
}
int updateAudio(){
return (gain*aNoise.next())>>8;
}
void loop(){
audioHook(); // required here
}
+
+ + + + diff --git a/extras/doc/html/07_8_envelopes_2_multi_line__envelope_2_multi_line__envelope_8ino-example.html b/extras/doc/html/07_8_envelopes_2_multi_line__envelope_2_multi_line__envelope_8ino-example.html new file mode 100644 index 000000000..9884901b7 --- /dev/null +++ b/extras/doc/html/07_8_envelopes_2_multi_line__envelope_2_multi_line__envelope_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 07.Envelopes/MultiLine_Envelope/MultiLine_Envelope.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
07.Envelopes/MultiLine_Envelope/MultiLine_Envelope.ino
+
+
+

This is an example of how to use the MultiLine class.

+
+
+ + + + diff --git a/extras/doc/html/08_8_samples_2_sample_2_sample_8ino-example.html b/extras/doc/html/08_8_samples_2_sample_2_sample_8ino-example.html new file mode 100644 index 000000000..1ec3aa4c9 --- /dev/null +++ b/extras/doc/html/08_8_samples_2_sample_2_sample_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 08.Samples/Sample/Sample.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
08.Samples/Sample/Sample.ino
+
+
+

This example demonstrates the Sample class.

+
/* Example of playing a sampled sound,
using Mozzi sonification library.
Demonstrates one-shot samples scheduled
with EventDelay.
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Sample.h> // Sample template
#include <samples/burroughs1_18649_int8.h>
#include <EventDelay.h>
#define CONTROL_RATE 64
// use: Sample <table_size, update_rate> SampleName (wavetable)
Sample <BURROUGHS1_18649_NUM_CELLS, AUDIO_RATE> aSample(BURROUGHS1_18649_DATA);
// for scheduling sample start
EventDelay kTriggerDelay;
void setup(){
startMozzi(CONTROL_RATE);
aSample.setFreq((float) BURROUGHS1_18649_SAMPLERATE / (float) BURROUGHS1_18649_NUM_CELLS); // play at the speed it was recorded
kTriggerDelay.set(1500); // 1500 msec countdown, within resolution of CONTROL_RATE
}
void updateControl(){
if(kTriggerDelay.ready()){
aSample.start();
kTriggerDelay.start();
}
}
int updateAudio(){
return (int) aSample.next();
}
void loop(){
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/08_8_samples_2_sample_huffman__umpah_2_sample_huffman__umpah_8ino-example.html b/extras/doc/html/08_8_samples_2_sample_huffman__umpah_2_sample_huffman__umpah_8ino-example.html new file mode 100644 index 000000000..57f499620 --- /dev/null +++ b/extras/doc/html/08_8_samples_2_sample_huffman__umpah_2_sample_huffman__umpah_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 08.Samples/SampleHuffman_Umpah/SampleHuffman_Umpah.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
08.Samples/SampleHuffman_Umpah/SampleHuffman_Umpah.ino
+
+
+

This example demonstrates the Sample class.

+
/*
Example playing samples encoded with Huffman compression.
Demonstrates the SampleHuffman class.
SampleHuffman, most of this explanation, and the audio2huff.py script are adapted from "audioout",
an Arduino sketch by Thomas Grill, 2011 http//grrrr.org.
Huffman decoding is used on sample differentials,
saving 50-70% of space for 8 bit data, depending on the sample rate.
This implementation just plays back one sample each time next() is called, with no
speed or other adjustments. It's slow, so it's likely you will only be able to play one sound at a time.
Audio data, Huffman decoder table, sample rate and bit depth are defined
in a sounddata.h header file. This file can be generated for a sound file with the
accompanying Python script audio2huff.py, in Mozzi/extras/python/
Invoke with:
python audio2huff.py --sndfile=arduinosnd.wav --hdrfile=sounddata.h --bits=8 --name=soundtablename
You can resample and dither your audio file with SOX,
e.g. to 8 bits depth @ Mozzi's 16384 Hz sample rate:
sox fullglory.wav -b 8 -r 16384 arduinosnd.wav
Alternatively you can export a sound from Audacity, which seems to have less noticeable or no dithering,
using Project Rate 16384 Hz and these output options:
Other uncompressed files, Header: WAV(Microsoft), Encoding: Unsigned 8 bit PCM
The header file contains two lengthy arrays:
One is "SOUNDDATA" which must fit into Flash RAM (available in total: 32k for ATMega328)
The other is "HUFFMAN" which must also fit into Flash RAM
Circuit:
Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2013, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <SampleHuffman.h>
#include "umpah_huff.h"
SampleHuffman umpah(UMPAH_SOUNDDATA,UMPAH_HUFFMAN,UMPAH_SOUNDDATA_BITS);
void setup() {
umpah.setLoopingOn();
startMozzi();
}
void updateControl(){
}
int updateAudio(){
return umpah.next();
}
void loop() {
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/09_8_delays_2_audio_delay_2_audio_delay_8ino-example.html b/extras/doc/html/09_8_delays_2_audio_delay_2_audio_delay_8ino-example.html new file mode 100644 index 000000000..e95473c5a --- /dev/null +++ b/extras/doc/html/09_8_delays_2_audio_delay_2_audio_delay_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 09.Delays/AudioDelay/AudioDelay.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
09.Delays/AudioDelay/AudioDelay.ino
+
+
+

This is an example of how to use the AudioDelay class.

+
/* Example of modulating a signal by using a variable delay,
using Mozzi sonification library.
Demonstrates AudioDelay.
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h>
#include <tables/triangle_analogue512_int8.h> // wavetable
#include <tables/cos2048_int8.h> // wavetable
#include <AudioDelay.h>
#include <mozzi_midi.h> // for mtof
#define CONTROL_RATE 256 // powers of 2 please
Oscil<TRIANGLE_ANALOGUE512_NUM_CELLS, AUDIO_RATE> aTriangle(TRIANGLE_ANALOGUE512_DATA);
Oscil<COS2048_NUM_CELLS, CONTROL_RATE> kFreq(COS2048_DATA);
AudioDelay <256> aDel;
int del_samps;
void setup(){
aTriangle.setFreq(mtof(60.f));
kFreq.setFreq(.63f);
startMozzi(CONTROL_RATE);
}
void loop(){
audioHook();
}
void updateControl(){
del_samps = 128+kFreq.next();
}
int updateAudio(){
char asig = aDel.next(aTriangle.next(), del_samps);
return (int) asig;
}
+
+ + + + diff --git a/extras/doc/html/09_8_delays_2_audio_delay_feedback_2_audio_delay_feedback_8ino-example.html b/extras/doc/html/09_8_delays_2_audio_delay_feedback_2_audio_delay_feedback_8ino-example.html new file mode 100644 index 000000000..d7c8d0b11 --- /dev/null +++ b/extras/doc/html/09_8_delays_2_audio_delay_feedback_2_audio_delay_feedback_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 09.Delays/AudioDelayFeedback/AudioDelayFeedback.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
09.Delays/AudioDelayFeedback/AudioDelayFeedback.ino
+
+
+

This is an example of how to use the AudioDelayFeedback class.

+
/* Example of flanging,
using Mozzi sonification library.
Demonstrates AudioDelayFeedback.
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012-13, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h>
#include <tables/triangle_analogue512_int8.h> // wavetable
#include <tables/triangle512_int8.h> // wavetable
#include <AudioDelayFeedback.h>
#include <mozzi_midi.h> // for mtof
#define CONTROL_RATE 128 // powers of 2 please
Oscil<TRIANGLE_ANALOGUE512_NUM_CELLS, AUDIO_RATE> aTriangle(TRIANGLE_ANALOGUE512_DATA); // audio oscillator
Oscil<TRIANGLE512_NUM_CELLS, CONTROL_RATE> kDelSamps(TRIANGLE512_DATA); // for modulating delay time, measured in audio samples
AudioDelayFeedback <128> aDel;
// the delay time, measured in samples, updated in updateControl, and used in updateAudio
byte del_samps;
void setup(){
startMozzi(CONTROL_RATE);
aTriangle.setFreq(mtof(48.f));
kDelSamps.setFreq(.163f); // set the delay time modulation frequency (ie. the sweep frequency)
aDel.setFeedbackLevel(-111); // can be -128 to 127
}
Q16n16 deltime;
void updateControl(){
// delay time range from 0 to 127 samples, @ 16384 samps per sec = 0 to 7 milliseconds
//del_samps = 64+kDelSamps.next();
// delay time range from 1 to 33 samples, @ 16384 samps per sec = 0 to 2 milliseconds
//del_samps = 17+kDelSamps.next()/8;
deltime = Q8n0_to_Q16n16(17) + ((long)kDelSamps.next()<<12);
}
int updateAudio(){
char asig = aTriangle.next(); // get this so it can be used twice without calling next() again
//return asig/8 + aDel.next(asig, del_samps); // mix some straight signal with the delayed signal
//return aDel.next(aTriangle.next(), del_samps); // instead of the previous 2 lines for only the delayed signal
return asig/8 + aDel.next(asig, deltime); // mix some straight signal with the delayed signal
}
void loop(){
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/09_8_delays_2_reverb_tank__s_t_a_n_d_a_r_d_2_reverb_tank__s_t_a_n_d_a_r_d_8ino-example.html b/extras/doc/html/09_8_delays_2_reverb_tank__s_t_a_n_d_a_r_d_2_reverb_tank__s_t_a_n_d_a_r_d_8ino-example.html new file mode 100644 index 000000000..db2070934 --- /dev/null +++ b/extras/doc/html/09_8_delays_2_reverb_tank__s_t_a_n_d_a_r_d_2_reverb_tank__s_t_a_n_d_a_r_d_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 09.Delays/ReverbTank_STANDARD/ReverbTank_STANDARD.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
09.Delays/ReverbTank_STANDARD/ReverbTank_STANDARD.ino
+
+
+

This example demonstrates the ReverbTank class.

+
/* Example of reverb on a synthesised sound
using Mozzi sonification library.
Demonstrates ReverbTank, a reverb small enough to fit on
the Arduino Nano, which for some reason wasn't able to fit a larger version
which did fit on other 328 based boards.
It's a pretty horrible reverb which sounds like the inside of a tin can.
For simplicity, ReverbTank has hardcoded maximum delay sizes
but also has default delay times which can be changed in the constructor
or by setting during run time to allow live tweaking.
The synthesised sound comes from the phasemod synth example.
Circuit: Audio output on digital pin 9 for STANDARD output on a Uno or similar, or
see the readme.md file for others.
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2013, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <ReverbTank.h>
#include <Oscil.h>
#include <tables/cos8192_int8.h>
#include <tables/envelop2048_uint8.h>
ReverbTank reverb;
#define CONTROL_RATE 512 // quite fast, keeps modulation smooth
// Synth from PhaseMod_Envelope example
Oscil <COS8192_NUM_CELLS, AUDIO_RATE> aCarrier(COS8192_DATA);
Oscil <COS8192_NUM_CELLS, AUDIO_RATE> aModulator(COS8192_DATA);
Oscil <COS8192_NUM_CELLS, AUDIO_RATE> aModWidth(COS8192_DATA);
Oscil <COS8192_NUM_CELLS, CONTROL_RATE> kModFreq1(COS8192_DATA);
Oscil <COS8192_NUM_CELLS, CONTROL_RATE> kModFreq2(COS8192_DATA);
Oscil <ENVELOP2048_NUM_CELLS, AUDIO_RATE> aEnvelop(ENVELOP2048_DATA);
void setup(){
// synth params
aCarrier.setFreq(55);
kModFreq1.setFreq(3.98f);
kModFreq2.setFreq(3.31757f);
aModWidth.setFreq(2.52434f);
aEnvelop.setFreq(9.0f);
startMozzi();
}
void updateControl(){
// synth control
aModulator.setFreq(277.0f + 0.4313f*kModFreq1.next() + kModFreq2.next());
}
int updateAudio(){
int synth = aCarrier.phMod((int)aModulator.next()*(150u+aModWidth.next()));
synth *= (byte)aEnvelop.next();
synth >>= 8;
// here's the reverb
int arev = reverb.next(synth);
// add the dry and wet signals
return synth + (arev>>3);
}
void loop(){
audioHook();
}
+
+ + + + diff --git a/extras/doc/html/10_8_audio__filters_2_low_pass_filter_2_low_pass_filter_8ino-example.html b/extras/doc/html/10_8_audio__filters_2_low_pass_filter_2_low_pass_filter_8ino-example.html new file mode 100644 index 000000000..2869a4b26 --- /dev/null +++ b/extras/doc/html/10_8_audio__filters_2_low_pass_filter_2_low_pass_filter_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 10.Audio_Filters/LowPassFilter/LowPassFilter.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
10.Audio_Filters/LowPassFilter/LowPassFilter.ino
+
+
+

This example demonstrates the LowPassFilter class.

+
/* Example of filtering a wave,
using Mozzi sonification library.
Demonstrates LowPassFilter().
Circuit: Audio output on digital pin 9 on a Uno or similar, or
DAC/A14 on Teensy 3.1, or
check the README or http://sensorium.github.com/Mozzi/
Mozzi help/discussion/announcements:
https://groups.google.com/forum/#!forum/mozzi-users
Tim Barrass 2012, CC by-nc-sa.
*/
//#include <ADC.h> // Teensy 3.1 uncomment this line and install http://github.com/pedvide/ADC
#include <MozziGuts.h>
#include <Oscil.h>
#include <tables/chum9_int8.h> // recorded audio wavetable
#include <tables/cos2048_int8.h> // for filter modulation
#include <LowPassFilter.h>
#include <mozzi_rand.h>
#define CONTROL_RATE 64 // powers of 2 please
Oscil<CHUM9_NUM_CELLS, AUDIO_RATE> aCrunchySound(CHUM9_DATA);
Oscil<COS2048_NUM_CELLS, CONTROL_RATE> kFilterMod(COS2048_DATA);
LowPassFilter lpf;
void setup(){
startMozzi(CONTROL_RATE);
aCrunchySound.setFreq(2.f);
kFilterMod.setFreq(1.3f);
lpf.setResonance(200);
}
void loop(){
audioHook();
}
void updateControl(){
if (rand(CONTROL_RATE/2) == 0){ // about once every half second
kFilterMod.setFreq((float)rand(255)/64); // choose a new modulation frequency
}
// map the modulation into the filter range (0-255)
byte cutoff_freq = 100 + kFilterMod.next()/2;
lpf.setCutoffFreq(cutoff_freq);
}
int updateAudio(){
char asig = lpf.next(aCrunchySound.next());
return (int) asig;
}
+
+ + + + diff --git a/extras/doc/html/11_8_audio__filters_2_state_variable_filter_2_state_variable_filter_8ino-example.html b/extras/doc/html/11_8_audio__filters_2_state_variable_filter_2_state_variable_filter_8ino-example.html new file mode 100644 index 000000000..f7d8e1193 --- /dev/null +++ b/extras/doc/html/11_8_audio__filters_2_state_variable_filter_2_state_variable_filter_8ino-example.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: 11.Audio_Filters/StateVariableFilter/StateVariableFilter.ino + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
11.Audio_Filters/StateVariableFilter/StateVariableFilter.ino
+
+
+

This example demonstrates the StateVariable class.

+
+
+ + + + diff --git a/extras/doc/html/_a_d_s_r_8h_source.html b/extras/doc/html/_a_d_s_r_8h_source.html new file mode 100644 index 000000000..facc3c3b8 --- /dev/null +++ b/extras/doc/html/_a_d_s_r_8h_source.html @@ -0,0 +1,140 @@ + + + + + + + +Mozzi: ADSR.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ADSR.h
+
+
+
1 /*
2  * ADSR.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef ADSR_H_
13 #define ADSR_H_
14 
15 #if ARDUINO >= 100
16  #include "Arduino.h"
17 #else
18  #include "WProgram.h"
19 #endif
20 //#include <util/atomic.h>
21 #include "Line.h"
22 #include "mozzi_fixmath.h"
23 
24 
45 template <unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
46 class ADSR
47 {
48 private:
49 
50  const unsigned int LERPS_PER_CONTROL;
51 
52  unsigned int update_step_counter;
53  unsigned int num_update_steps;
54 
55  enum {ATTACK,DECAY,SUSTAIN,RELEASE,IDLE};
56 
57 
58  struct phase{
59  byte phase_type;
60  unsigned int update_steps;
61  long lerp_steps; // signed, to match params to transition (line) type Q15n16, below
62  Q8n0 level;
63  }attack,decay,sustain,release,idle;
64 
65  phase * current_phase;
66 
67  // Linear audio rate transitions for envelope
68  //Line <unsigned long> transition;
69  Line <Q15n16> transition; // scale up unsigned char levels for better accuracy, then scale down again for output
70 
71  inline
72  unsigned int convertMsecToControlUpdateSteps(unsigned int msec){
73  return (uint16_t) (((uint32_t)msec*CONTROL_UPDATE_RATE)>>10); // approximate /1000 with shift
74  }
75 
76 
77  inline
78  void setPhase(phase * next_phase) {
79  update_step_counter = 0;
80  num_update_steps = next_phase->update_steps;
81  transition.set(Q8n0_to_Q15n16(next_phase->level),next_phase->lerp_steps);
82  current_phase = next_phase;
83  }
84 
85 
86  inline
87  void checkForAndSetNextPhase(phase * next_phase) {
88  if (++update_step_counter >= num_update_steps){
89  setPhase(next_phase);
90  }
91  }
92 
93 
94 
95  inline
96  void setTime(phase * p, unsigned int msec)
97  {
98  p->update_steps = convertMsecToControlUpdateSteps(msec);
99  p->lerp_steps = (long) p->update_steps * LERPS_PER_CONTROL;
100  }
101 
102 
103  inline
104  void setUpdateSteps(phase * p, unsigned int steps)
105  {
106  p->update_steps = steps;
107  p->lerp_steps = (long) steps * LERPS_PER_CONTROL;
108  }
109 
110 
111 
112 public:
113 
116  ADSR():LERPS_PER_CONTROL(LERP_RATE/CONTROL_UPDATE_RATE)
117  {
118  attack.phase_type = ATTACK;
119  decay.phase_type = DECAY;
120  sustain.phase_type = SUSTAIN;
121  release.phase_type = RELEASE;
122  idle.phase_type = IDLE;
123  release.level = 0;
124  }
125 
126 
127 
131  void update(){ // control rate
132 
133  switch(current_phase->phase_type) {
134 
135  case ATTACK:
136  checkForAndSetNextPhase(&decay);
137  break;
138 
139  case DECAY:
140  checkForAndSetNextPhase(&sustain);
141  break;
142 
143  case SUSTAIN:
144  checkForAndSetNextPhase(&release);
145  break;
146 
147  case RELEASE:
148  checkForAndSetNextPhase(&idle);
149  break;
150 
151  case IDLE:
152  adsr_playing = false;
153  break;
154  }
155  }
156 
157 
158 
163  inline
164  unsigned char next()
165  {
166  unsigned char out = 0;
167  if (adsr_playing) out = Q15n16_to_Q8n0(transition.next());
168  return out;
169  }
170 
171 
172 
175  inline
176  void noteOn(){
177  setPhase(&attack);
178  adsr_playing = true;
179  }
180 
181 
182 
186  inline
187  void noteOff(){
188  setPhase(&release);
189  }
190 
191 
192 
196  inline
197  void setAttackLevel(byte value)
198  {
199  attack.level=value;
200  }
201 
202 
203 
207  inline
208  void setDecayLevel(byte value)
209  {
210  decay.level=value;
211  }
212 
213 
218  inline
219  void setSustainLevel(byte value)
220  {
221  sustain.level=value;
222  }
223 
228  inline
229  void setReleaseLevel(byte value)
230  {
231  release.level=value;
232  }
233 
234 
235  inline
236  void setIdleLevel(byte value)
237  {
238  idle.level=value;
239  }
240 
241 
247  inline
248  void setADLevels(byte attack, byte decay)
249  {
250  setAttackLevel(attack);
251  setDecayLevel(decay);
252  setSustainLevel(decay); // stay at decay level
253  setReleaseLevel(1);
254  setIdleLevel(0);
255  }
256 
257 
264  inline
265  void setLevels(byte attack, byte decay, byte sustain, byte release)
266  {
267  setAttackLevel(attack);
268  setDecayLevel(decay);
269  setSustainLevel(sustain);
270  setReleaseLevel(release);
271  setIdleLevel(0);
272  }
273 
274 
281  inline
282  void setAttackTime(unsigned int msec)
283  {
284  setTime(&attack, msec);
285  }
286 
287 
294  inline
295  void setDecayTime(unsigned int msec)
296  {
297  setTime(&decay, msec);
298  }
299 
300 
308  inline
309  void setSustainTime(unsigned int msec)
310  {
311  setTime(&sustain, msec);
312  }
313 
314 
315 
322  inline
323  void setReleaseTime(unsigned int msec)
324  {
325  setTime(&release, msec);
326  }
327 
328 
329  inline
330  void setIdleTime(unsigned int msec)
331  {
332  setTime(&idle, msec);
333  }
334 
335 
345  inline
346  void setTimes(unsigned int attack_ms, unsigned int decay_ms, unsigned int sustain_ms, unsigned int release_ms)
347  {
348  setAttackTime(attack_ms);
349  setDecayTime(decay_ms);
350  setSustainTime(sustain_ms);
351  setReleaseTime(release_ms);
352  setIdleTime(65535); // guarantee step size of line will be 0
353  }
354 
355 
356 
360  inline
361  void setAttackUpdateSteps(unsigned int steps)
362  {
363  setUpdateSteps(&attack, steps);
364  }
365 
366 
370  inline
371  void setDecayUpdateSteps(unsigned int steps)
372  {
373  setUpdateSteps(&decay, steps);
374  }
375 
376 
380  inline
381  void setSustainUpdateSteps(unsigned int steps)
382  {
383  setUpdateSteps(&sustain, steps);
384  }
385 
386 
390  inline
391  void setReleaseUpdateSteps(unsigned int steps)
392  {
393  setUpdateSteps(&release, steps);
394  }
395 
396 
397  inline
398  void setIdleUpdateSteps(unsigned int steps)
399  {
400  setUpdateSteps(&idle, steps);
401  }
402 
409  inline
410  void setAllUpdateSteps(unsigned int attack_steps, unsigned int decay_steps, unsigned int sustain_steps, unsigned int release_steps)
411  {
412  setAttackUpdateSteps(attack_steps);
413  setDecayUpdateSteps(decay_steps);
414  setSustainUpdateSteps(sustain_steps);
415  setReleaseUpdateSteps(release_steps);
416  setIdleUpdateSteps(65535); // guarantee step size of line will be 0
417  }
418 
419 
420 bool adsr_playing;
421 
425  inline
426  bool playing()
427  {
428  return adsr_playing;
429  }
430 
431 
432 };
433 
434 
439 #endif /* ADSR_H_ */
void set(T value)
Set the current value of the line.
Definition: Line.h:77
+
unsigned char next()
Advances one audio step along the ADSR and returns the level.
Definition: ADSR.h:164
+
void setSustainLevel(byte value)
Set the sustain level of the ADSR.
Definition: ADSR.h:219
+
void setDecayLevel(byte value)
Set the decay level of the ADSR.
Definition: ADSR.h:208
+
void setReleaseUpdateSteps(unsigned int steps)
Set the release time of the ADSR, expressed as the number of update steps (not ADSR::next() interpola...
Definition: ADSR.h:391
+
void setTimes(unsigned int attack_ms, unsigned int decay_ms, unsigned int sustain_ms, unsigned int release_ms)
Set the attack, decay and release times of the ADSR in milliseconds.
Definition: ADSR.h:346
+
void setAttackUpdateSteps(unsigned int steps)
Set the attack time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolat...
Definition: ADSR.h:361
+
void setLevels(byte attack, byte decay, byte sustain, byte release)
Set the attack, decay, sustain and release levels.
Definition: ADSR.h:265
+
void setReleaseTime(unsigned int msec)
Set the release time of the ADSR in milliseconds.
Definition: ADSR.h:323
+
Q8n0 Q15n16_to_Q8n0(Q15n16 a)
Convert Q15n16 fixed to Q8n0 uint8_t.
+
void setAllUpdateSteps(unsigned int attack_steps, unsigned int decay_steps, unsigned int sustain_steps, unsigned int release_steps)
Set the attack, decay and release times of the ADSR, expressed in update steps (not ADSR::next() inte...
Definition: ADSR.h:410
+
void setSustainTime(unsigned int msec)
Set the sustain time of the ADSR in milliseconds.
Definition: ADSR.h:309
+
void noteOff()
Start the release phase of the ADSR.
Definition: ADSR.h:187
+
void setAttackTime(unsigned int msec)
Set the attack time of the ADSR in milliseconds.
Definition: ADSR.h:282
+ +
Q15n16 Q8n0_to_Q15n16(Q8n0 a)
Convert Q8n0 uint8_t to Q15n16 fix.
+
void setDecayTime(unsigned int msec)
Set the decay time of the ADSR in milliseconds.
Definition: ADSR.h:295
+
void setDecayUpdateSteps(unsigned int steps)
Set the decay time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolati...
Definition: ADSR.h:371
+
void setReleaseLevel(byte value)
Set the release level of the ADSR.
Definition: ADSR.h:229
+
void setSustainUpdateSteps(unsigned int steps)
Set the sustain time of the ADSR, expressed as the number of update steps (not ADSR::next() interpola...
Definition: ADSR.h:381
+
void update()
Updates the internal controls of the ADSR.
Definition: ADSR.h:131
+
void setADLevels(byte attack, byte decay)
Set the attack and decay levels of the ADSR.
Definition: ADSR.h:248
+
uint8_t Q8n0
normal uint8_t with 0 fractional bits, represents 0.0 to 255.0
Definition: mozzi_fixmath.h:28
+
void noteOn()
Start the attack phase of the ADSR.
Definition: ADSR.h:176
+
ADSR()
Constructor.
Definition: ADSR.h:116
+
void setAttackLevel(byte value)
Set the attack level of the ADSR.
Definition: ADSR.h:197
+
A simple ADSR envelope generator.
Definition: ADSR.h:46
+
T next()
Increments one step along the line.
Definition: Line.h:59
+
bool playing()
Tells if the envelope is currently playing.
Definition: ADSR.h:426
+
+
+ + + + diff --git a/extras/doc/html/_audio_config_hi_speed14bit_pwm_8h_source.html b/extras/doc/html/_audio_config_hi_speed14bit_pwm_8h_source.html new file mode 100644 index 000000000..6cede0395 --- /dev/null +++ b/extras/doc/html/_audio_config_hi_speed14bit_pwm_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: AudioConfigHiSpeed14bitPwm.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AudioConfigHiSpeed14bitPwm.h
+
+
+
1 #ifndef AUDIOCONFIGHISPEED14BITPWM_H
2 #define AUDIOCONFIGHISPEED14BITPWM_H
3 
4 /*
5 14 bit sound at 16384 Hz and 125kHz pwm rate
6 Timer 1: PWM 125kHz
7 Timer 2: called at AUDIO_RATE 16384 Hz, setting Timer1 pwm levels
8 Output on Timer1, low uint8_t on Pin 10, and high uint8_t on Pin 9 (on 328 based Arduino boards)
9 Add signals through a 3.9k resistor on high uint8_t pin and 499k resistor on low uint8_t pin.
10 Use 0.5% resistors or select the most accurate from a batch.
11 As discussed on http://www.openmusiclabs.com/learning/digital/pwm-dac/dual-pwm-circuits/
12 Also, there are higher quality output circuits are on the site.
13 
14 Boards, pins and resistor positions are documented in MozziGuts.h
15 */
16 
17 /* PWM carrier frequency, for HIFI this should be well out of hearing range, about 5 times the nyquist frequency if possible. */
18 #define PWM_RATE 125000
19 // following doesn't play nice
20 //#define PWM_RATE 65536 // count will be 244 (7+ bits) on each pin = 14+ bits
21 
22 
23 // pins defined in TimerOne/config/known_16bit_timers.h
24 #define AUDIO_CHANNEL_1_highByte_PIN TIMER1_A_PIN // 3.9k resistor
25 #define AUDIO_CHANNEL_1_lowByte_PIN TIMER1_B_PIN // 1 M resistor
26 #define AUDIO_CHANNEL_1_highByte_REGISTER OCR1AL
27 #define AUDIO_CHANNEL_1_lowByte_REGISTER OCR1BL
28 
29 /* Used internally to put the 0-biased generated audio into the right range for PWM output.*/
30 // 14 bit
31 #define AUDIO_BIAS ((unsigned int) 0x2000)
32 
33 
34 #endif // #ifndef AUDIOCONFIGHISPEED14BITPWM_H
35 
+
+ + + + diff --git a/extras/doc/html/_audio_config_standard9bit_pwm_8h_source.html b/extras/doc/html/_audio_config_standard9bit_pwm_8h_source.html new file mode 100644 index 000000000..ff529c13e --- /dev/null +++ b/extras/doc/html/_audio_config_standard9bit_pwm_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: AudioConfigStandard9bitPwm.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AudioConfigStandard9bitPwm.h
+
+
+
1 #ifndef AUDIOCONFIGSTANDARD9BITPWM_H
2 #define AUDIOCONFIGSTANDARD9BITPWM_H
3 
4 
11 #define STANDARD_PWM_RESOLUTION 488
12 
13 /* PWM carrier frequency, for standard mode this will be the same as the audio rate. */
14 #define PWM_RATE 16384
15 
16 /* Used internally to put the 0-biased generated audio into the right range for PWM output.*/
17 #define AUDIO_BIAS ((uint8_t) 244)
18 
19 // Used internally. If there was a channel 2, it would be OCR1B.
20 #define AUDIO_CHANNEL_1_OUTPUT_REGISTER OCR1A
21 
22 #define AUDIO_CHANNEL_1_PIN TIMER1_A_PIN // defined in TimerOne/config/known_16bit_timers.h
23 
24 #endif // #ifndef AUDIOCONFIGSTANDARD9BITPWM_H
25 
+
+ + + + diff --git a/extras/doc/html/_audio_config_standard_plus_8h_source.html b/extras/doc/html/_audio_config_standard_plus_8h_source.html new file mode 100644 index 000000000..2a4cb2225 --- /dev/null +++ b/extras/doc/html/_audio_config_standard_plus_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: AudioConfigStandardPlus.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AudioConfigStandardPlus.h
+
+
+
1 #ifndef AUDIOCONFIGSTANDARDPLUS_H
2 #define AUDIOCONFIGSTANDARDPLUS_H
3 
4 
11 #define STANDARD_PWM_RESOLUTION 488
12 
13 /* Used internally for standard mode because the audio gets updated every alternate ISR, so the PWM rate is double the audio update rate */
14 #define PWM_RATE 32768
15 
16 /* Used internally to put the 0-biased generated audio into the right range for PWM output.*/
17 #define AUDIO_BIAS ((uint8_t) 244)
18 
19 // Used internally. If there was a channel 2, it would be OCR1B.
20 #define AUDIO_CHANNEL_1_OUTPUT_REGISTER OCR1A
21 #define AUDIO_CHANNEL_2_OUTPUT_REGISTER OCR1B
22 
23 #define AUDIO_CHANNEL_1_PIN TIMER1_A_PIN // defined in TimerOne/config/known_16bit_timers.h
24 #define AUDIO_CHANNEL_2_PIN TIMER1_B_PIN
25 
26 #endif // #ifndef AUDIOCONFIGSTANDARDPLUS_H
27 
+
+ + + + diff --git a/extras/doc/html/_audio_config_teensy3__12bit_8h_source.html b/extras/doc/html/_audio_config_teensy3__12bit_8h_source.html new file mode 100644 index 000000000..a3942b6ce --- /dev/null +++ b/extras/doc/html/_audio_config_teensy3__12bit_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: AudioConfigTeensy3_12bit.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AudioConfigTeensy3_12bit.h
+
+
+
1 #ifndef AUDIOCONFIGTEENSY3_12BIT_H
2 #define AUDIOCONFIGTEENSY3_12BIT_H
3 
4 
7 /* Used internally to put the 0-biased generated audio into the centre of the output range (12 bits on Teensy 3) */
8 #define AUDIO_BIAS ((uint16_t) 2048)
9 
10 #define AUDIO_CHANNEL_1_PIN A14
11 
12 #endif // #ifndef AUDIOCONFIGTEENSY3_12BIT_H
13 
+
+ + + + diff --git a/extras/doc/html/_audio_delay_8h_source.html b/extras/doc/html/_audio_delay_8h_source.html new file mode 100644 index 000000000..79b4f38ef --- /dev/null +++ b/extras/doc/html/_audio_delay_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +Mozzi: AudioDelay.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AudioDelay.h
+
+
+
1 /*
2  * AudioDelay.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef AUDIODELAY_H_
13 #define AUDIODELAY_H_
14 
15 
26 template <unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
28 {
29 
30 private:
31 
32  T delay_array[NUM_BUFFER_SAMPLES];
33  unsigned int _write_pos;
34  unsigned int _delaytime_cells;
35 
36 public:
37 
40  AudioDelay(): _write_pos(0)
41  {}
42 
43 
49  AudioDelay(unsigned int delaytime_cells): _write_pos(0), _delaytime_cells(delaytime_cells)
50  {}
51 
52 
53 
58  inline
59  T next(T in_value, unsigned int delaytime_cells)
60  {
61  ++_write_pos &= (NUM_BUFFER_SAMPLES - 1);
62  unsigned int read_pos = (_write_pos - delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
63 
64  // why does delay jump if I read it before writing?
65  delay_array[_write_pos] = in_value; // write to buffer
66  int8_t delay_sig = delay_array[read_pos] ; // read the delay buffer
67 
68  return (T)delay_sig;
69  }
70 
71 
72 
76  inline
77  T next(T in_value)
78  {
79  ++_write_pos &= (NUM_BUFFER_SAMPLES - 1);
80  unsigned int read_pos = (_write_pos - _delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
81 
82  // why does delay jump if I read it before writing?
83  delay_array[_write_pos] = in_value; // write to buffer
84  T delay_sig = delay_array[read_pos] ; // read the delay buffer
85 
86  return delay_sig;
87  }
88 
89 
93  inline
94  void set(unsigned int delaytime_cells){
95  _delaytime_cells = delaytime_cells;
96  }
97 
98 
103  inline
104  T read(unsigned int delaytime_cells)
105  {
106  unsigned int read_pos = (_write_pos - delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
107  return delay_array[read_pos];
108  }
109 
110 
111  // /** Input a value to the delay but don't advance the write position, change the delay time or retrieve the output signal.
112  // This can be useful for manually adding feedback to the delay line, "behind" the advancing write head.
113  // @param input the signal input.
114  // */
115  // inline
116  // void writeFeedback(T input)
117  // {
118  // delay_array[_write_pos] = input;
119  // }
120 
121 };
122 
128 #endif // #ifndef AUDIODELAY_H_
129 
T next(T in_value)
Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells...
Definition: AudioDelay.h:77
+
Audio delay line for comb filter, flange, chorus and short echo effects.
Definition: AudioDelay.h:27
+
AudioDelay(unsigned int delaytime_cells)
Constructor.
Definition: AudioDelay.h:49
+
T next(T in_value, unsigned int delaytime_cells)
Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells...
Definition: AudioDelay.h:59
+
AudioDelay()
Constructor.
Definition: AudioDelay.h:40
+
T read(unsigned int delaytime_cells)
Retrieve the signal in the delay line at the position delaytime_cells.
Definition: AudioDelay.h:104
+
+
+ + + + diff --git a/extras/doc/html/_audio_delay_feedback_8h_source.html b/extras/doc/html/_audio_delay_feedback_8h_source.html new file mode 100644 index 000000000..ec1140909 --- /dev/null +++ b/extras/doc/html/_audio_delay_feedback_8h_source.html @@ -0,0 +1,133 @@ + + + + + + + +Mozzi: AudioDelayFeedback.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AudioDelayFeedback.h
+
+
+
1 /*
2  * AudioDelayFeedback.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef AUDIODELAY_FEEDBACK_H_
13 #define AUDIODELAY_FEEDBACK_H_
14 
15 #if ARDUINO >= 100
16  #include "Arduino.h"
17 #else
18  #include "WProgram.h"
19 #endif
20 
21 #include "mozzi_utils.h"
22 #include "meta.h"
23 
24 enum interpolation_types {LINEAR,ALLPASS};
25 
26 
39 template <uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
41 {
42 
43 public:
46  AudioDelayFeedback(): write_pos(0), _feedback_level(0), _delaytime_cells(0)
47  {}
48 
49 
55  AudioDelayFeedback(uint16_t delaytime_cells): write_pos(0), _feedback_level(0), _delaytime_cells(delaytime_cells)
56  {}
57 
58 
65  AudioDelayFeedback(uint16_t delaytime_cells, int8_t feedback_level): write_pos(0), _feedback_level(feedback_level), _delaytime_cells(delaytime_cells)
66  {}
67 
68 
69 
74  inline
75  int16_t next(int8_t input)
76  {
77  // chooses a different next() function depending on whether the
78  // the template parameter is LINEAR(default if none provided) or ALLPASS.
79  // See meta.h.
80  return next(input, Int2Type<INTERP_TYPE>());
81  }
82 
83 
84 
91  inline
92  int16_t next(int8_t input, uint16_t delaytime_cells)
93  {
94  //setPin13High();
95  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
96  uint16_t read_pos = (write_pos - delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
97  // < 1us to here
98  int16_t delay_sig = delay_array[read_pos]; // read the delay buffer
99  // with this line, the method takes 18us
100  //int8_t feedback_sig = (int8_t) min(max(((delay_sig * _feedback_level)/128),-128),127); // feedback clipped
101  // this line, the whole method takes 4us... Compiler doesn't optimise pow2 divides. Why?
102  int8_t feedback_sig = (int8_t) min(max(((delay_sig * _feedback_level)>>7),-128),127); // feedback clipped
103  delay_array[write_pos] = (int16_t) input + feedback_sig; // write to buffer
104  //setPin13Low();
105  return delay_sig;
106  }
107 
108 
109 
116  inline
117  int16_t next(int8_t input, Q16n16 delaytime_cells)
118  {
119  //setPin13High();
120  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
121 
122  uint16_t index = Q16n16_to_Q16n0(delaytime_cells);
123  uint16_t fraction = (uint16_t) delaytime_cells; // keeps low word
124 
125  uint16_t read_pos1 = (write_pos - index) & (NUM_BUFFER_SAMPLES - 1);
126  int16_t delay_sig1 = delay_array[read_pos1]; // read the delay buffer
127 
128  uint16_t read_pos2 = (write_pos - (index+1)) & (NUM_BUFFER_SAMPLES - 1);
129  int16_t delay_sig2 = delay_array[read_pos2]; // read the delay buffer
130 
131 
132  int16_t difference = delay_sig2 - delay_sig1;
133  int16_t delay_sig_fraction = (int16_t)((int32_t)((int32_t) fraction * difference) >> 16);
134 
135  int16_t delay_sig = delay_sig1+delay_sig_fraction;
136 
137  //int16_t delay_sig = delay_sig1 + ((int32_t)delay_sig2*fraction)>>16;
138 
139  int8_t feedback_sig = (int8_t) min(max((((int16_t)(delay_sig * _feedback_level))>>7),-128),127); // feedback clipped
140  delay_array[write_pos] = (int16_t) input + feedback_sig; // write to buffer
141  //setPin13Low();
142  return delay_sig;
143  }
144 
145 
149  inline
150  void write(int8_t input)
151  {
152  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
153  delay_array[write_pos] = input;
154  }
155 
156 
161  inline
162  void writeFeedback(int8_t input)
163  {
164  delay_array[write_pos] = input;
165  }
166 
167 
173  inline
174  void write(int8_t input, uint16_t offset)
175  {
176  (write_pos + offset) &= (NUM_BUFFER_SAMPLES - 1);
177  delay_array[write_pos] = input;
178  }
179 
180 
185  inline
186  int16_t read(Q16n16 delaytime_cells)
187  {
188  return read(delaytime_cells, Int2Type<INTERP_TYPE>());
189  }
190 
191 
195  inline
196  int16_t read()
197  {
198  return read(Int2Type<INTERP_TYPE>());
199  }
200 
201 
207  inline
208  void setDelayTimeCells(uint16_t delaytime_cells)
209  {
210  _delaytime_cells = (uint16_t) delaytime_cells;
211  }
212 
213 
219  inline
220  void setDelayTimeCells(Q16n16 delaytime_cells)
221  {
222  return setDelayTimeCells(delaytime_cells, Int2Type<INTERP_TYPE>());
223  }
224 
225 
231  inline
232  void setDelayTimeCells(float delaytime_cells)
233  {
234  return setDelayTimeCells(delaytime_cells, Int2Type<INTERP_TYPE>());
235  }
236 
237 
241  inline
242  void setFeedbackLevel(int8_t feedback_level)
243  {
244  _feedback_level = feedback_level;
245  }
246 
247 
248 
249 private:
250  int16_t delay_array[NUM_BUFFER_SAMPLES];
251  uint16_t write_pos;
252  int8_t _feedback_level;
253  uint16_t _delaytime_cells;
254  Q15n16 _coeff; // for allpass interpolation
255 
256 
257 
261  inline
262  int16_t next(int8_t in_value, Int2Type<LINEAR>)
263  {
264  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
265  uint16_t read_pos = (write_pos - _delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
266 
267  int16_t delay_sig = delay_array[read_pos]; // read the delay buffer
268  int8_t feedback_sig = (int8_t) min(max(((delay_sig * _feedback_level)/128),-128),127); // feedback clipped
269  delay_array[write_pos] = (int16_t) in_value + feedback_sig; // write to buffer
270 
271  return delay_sig;
272  }
273 
274 
275 
283  inline
284  int16_t next(int8_t input, Int2Type<ALLPASS>)
285  {
286  /*
287  http://www.scandalis.com/Jarrah/Documents/DelayLine.pdf
288  also https://ccrma.stanford.edu/~jos/Interpolation/Interpolation_4up.pdf
289  for desired fractional delay of d samples,
290  coeff = (1-d)/(1+d)
291  or
292  coeff = ((d-1)>1) + (((d-1)*(d-1))>>2) - (((d-1)*(d-1)*(d-1))>>3)
293  out = coeff * in + last_in - coeff * last_out
294  = coeff * (in-last_out) + last_in
295  */
296  //setPin13High();
297  static int8_t last_in;
298  static int16_t last_out;
299 
300  ++write_pos &= (NUM_BUFFER_SAMPLES - 1);
301 
302  uint16_t read_pos1 = (write_pos - _delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
303  int16_t delay_sig = delay_array[read_pos1]; // read the delay buffer
304 
305  int16_t interp = (int16_t)(_coeff * ((int16_t)input - last_out)>>16) + last_in; // Q15n16*Q15n0 + Q15n0 = Q15n16 + Q15n0 = Q15n16
306  delay_sig += interp;
307 
308  int8_t feedback_sig = (int8_t) min(max(((delay_sig * _feedback_level)>>7),-128),127); // feedback clipped
309  delay_array[write_pos] = (int16_t) input + feedback_sig; // write to buffer
310 
311  last_in = input;
312  last_out = delay_sig;
313  //setPin13Low();
314  return delay_sig;
315  }
316 
317 
318 
319  // 20-25us
320  inline
321  void setDelayTimeCells(Q16n16 delaytime_cells, Int2Type<ALLPASS>)
322  {
323  /*
324  integer optimisation/approximation from
325  Van Duyne, Jaffe, Scandalis, Stilson 1997
326  http://www.scandalis.com/Jarrah/Documents/DelayLine.pdf
327  //coeff = -((d-1)>1) + (((d-1)*(d-1))>>2) - (((d-1)*(d-1)*(d-1))>>3) , d is fractional part
328  */
329  _delaytime_cells = delaytime_cells>>16; // whole integer part
330  Q15n16 dminus1 = - Q15n16_FIX1 + (uint16_t) delaytime_cells;
331  Q15n16 dminus1squared = (dminus1)*(dminus1)>>16;
332  _coeff = -(dminus1>>1) + (dminus1squared>>2) - (((dminus1squared*dminus1)>>16)>>3);
333  }
334 
335 
336  // 100us
337  inline
338  void setDelayTimeCells(float delaytime_cells, Int2Type<ALLPASS>)
339  {
340  //coeff = (1-d)/(1+d)
341  _delaytime_cells = (uint16_t) delaytime_cells;
342 
343  float fraction = delaytime_cells - _delaytime_cells;
344 
345  // modified from stk DelayA.cpp
346  float alpha_ = 1.0f + fraction; // fractional part
347  if ( alpha_ < 0.5f ) {
348  // (stk): The optimal range for alpha is about 0.5 - 1.5 in order to
349  // achieve the flattest phase delay response.
350 
351  // something's not right about how I use _delaytime_cells and
352  // NUM_BUFFER_SAMPLES etc. in my ringbuffer compared to stk
353  _delaytime_cells += 1;
354  if ( _delaytime_cells >= NUM_BUFFER_SAMPLES ) _delaytime_cells -= NUM_BUFFER_SAMPLES;
355  alpha_ += 1.0f;
356  }
357  // otherwise this would use fraction instead of alpha
358  _coeff = float_to_Q15n16((1.f-alpha_)/(1.f+alpha_));
359  }
360 
361  // Retrieve the signal in the delay line at the position delaytime_cells.
362  // It doesn't change the stored internal value of _delaytime_cells or feedback the output to the input.
363  // param delaytime_cells indicates the delay time in terms of cells in the delay buffer.
364  //
365  // inline
366  // int16_t read(uint16_t delaytime_cells, Int2Type<LINEAR>)
367  // {
368  // uint16_t read_pos = (write_pos - delaytime_cells) & (NUM_BUFFER_SAMPLES - 1);
369  // int16_t delay_sig = delay_array[read_pos]; // read the delay buffer
370  //
371  // return delay_sig;
372  // }
373 
378  inline
379  int16_t read(Q16n16 delaytime_cells, Int2Type<LINEAR>)
380  {
381  uint16_t index = (Q16n16)delaytime_cells >> 16;
382  uint16_t fraction = (uint16_t) delaytime_cells; // keeps low word
383 
384  uint16_t read_pos1 = (write_pos - index) & (NUM_BUFFER_SAMPLES - 1);
385  int16_t delay_sig1 = delay_array[read_pos1]; // read the delay buffer
386 
387  uint16_t read_pos2 = (write_pos - (index+1)) & (NUM_BUFFER_SAMPLES - 1);
388  int16_t delay_sig2 = delay_array[read_pos2]; // read the delay buffer
389 
390  /*
391  int16_t difference = delay_sig2 - delay_sig1;
392  int16_t delay_sig_fraction = ((int32_t) fraction * difference) >> 16;
393 
394  int16_t delay_sig = delay_sig1+delay_sig_fraction;
395  */
396  int16_t delay_sig = delay_sig1 + ((int32_t)delay_sig2*fraction)>>16;
397 
398  return delay_sig;
399  }
400 
401 
402 };
403 
409 #endif // #ifndef AUDIODELAY_FEEDBACK_H_
int16_t next(int8_t input, uint16_t delaytime_cells)
Input a value to the delay, retrieve the signal in the delay line at the position delaytime_cells...
+
void write(int8_t input)
Input a value to the delay but don&#39;t change the delay time or retrieve the output signal...
+
Audio delay line with feedback for comb filter, flange, chorus and short echo effects.
+
void write(int8_t input, uint16_t offset)
Input a value to the delay at an offset from the current write position.
+
void setFeedbackLevel(int8_t feedback_level)
Set the feedback gain.
+
int32_t Q15n16
signed fractional number using 15 integer bits and 16 fractional bits, represents -32767...
Definition: mozzi_fixmath.h:40
+
int16_t read(Q16n16 delaytime_cells)
Retrieve the signal in the delay line at the interpolated fractional position delaytime_cells.
+
Q15n16 float_to_Q15n16(float a)
Convert float to Q15n16 fix.
+
Enables you to instantiate a template based on an integer value.
Definition: meta.h:20
+
AudioDelayFeedback()
Constructor.
+
void writeFeedback(int8_t input)
Input a value to the delay but don&#39;t advance the write position, change the delay time or retrieve th...
+
void setDelayTimeCells(float delaytime_cells)
Set delay time expressed in samples, fractional float for an interpolating delay. ...
+
#define Q15n16_FIX1
1 in Q15n16 format
Definition: mozzi_fixmath.h:63
+
int16_t read()
Retrieve the signal in the delay line at the current stored delaytime_cells.
+
AudioDelayFeedback(uint16_t delaytime_cells)
Constructor.
+
void setDelayTimeCells(Q16n16 delaytime_cells)
Set delay time expressed in samples, fractional Q16n16 for an interpolating delay.
+
Q16n0 Q16n16_to_Q16n0(Q16n16 a)
Convert Q16n16 fixed to Q16n0 uint16_t.
+
int16_t next(int8_t input)
Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells...
+
int16_t next(int8_t input, Q16n16 delaytime_cells)
Input a value to the delay, retrieve the signal in the delay line at the interpolated fractional posi...
+
void setDelayTimeCells(uint16_t delaytime_cells)
Set delay time expressed in samples.
+
uint32_t Q16n16
unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535...
Definition: mozzi_fixmath.h:46
+
AudioDelayFeedback(uint16_t delaytime_cells, int8_t feedback_level)
Constructor.
+
+
+ + + + diff --git a/extras/doc/html/_auto_map_8h_source.html b/extras/doc/html/_auto_map_8h_source.html new file mode 100644 index 000000000..30d266251 --- /dev/null +++ b/extras/doc/html/_auto_map_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: AutoMap.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AutoMap.h
+
+
+
1 /*
2  * AutoMap.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef AUTOMAP_H_
13 #define AUTOMAP_H_
14 
15 // for map - maybe rewrite my own templated map for better efficiency
16 #if ARDUINO >= 100
17  #include "Arduino.h" // for map
18 #else
19  #include "WProgram.h"
20 #endif
21 
22 #include "AutoRange.h"
23 
28 class AutoMap : public AutoRange<int>
29 {
30 public:
35  AutoMap(int min_expected, int max_expected, int map_to_min, int map_to_max)
36  : inherited(min_expected,max_expected),map_min(map_to_min), map_max(map_to_max)
37  {
38  }
39 
40 
46  inline
47  int next(int n){
48  inherited::next(n);
49  return map(n,inherited::getMin(),inherited::getMax(),map_min,map_max);
50  }
51 
57  inline
58  int operator()(int n) {
59  return next(n);
60  }
61 
62 private:
63  typedef AutoRange <int> inherited;
64  int map_min, map_max;
65 };
66 
67 
73 #endif // #ifndef AUTOMAP_H_
74 
int next(int n)
Process the next value and return it mapped to the range which was set in the constructor.
Definition: AutoMap.h:47
+
int operator()(int n)
Process the next value and return it mapped to the range which was set in the constructor.
Definition: AutoMap.h:58
+
Automatically map an input value to an output range without knowing the precise range of inputs befor...
Definition: AutoMap.h:28
+
int getMax()
Returns the current maximum.
Definition: AutoRange.h:57
+
int getMin()
Returns the current minimum.
Definition: AutoRange.h:49
+
Keeps a running calculation of the range of the input values it receives.
Definition: AutoRange.h:18
+
AutoMap(int min_expected, int max_expected, int map_to_min, int map_to_max)
Constructor.
Definition: AutoMap.h:35
+
void next(int n)
Updates the current range.
Definition: AutoRange.h:34
+
+
+ + + + diff --git a/extras/doc/html/_auto_range_8h_source.html b/extras/doc/html/_auto_range_8h_source.html new file mode 100644 index 000000000..d13a6dd04 --- /dev/null +++ b/extras/doc/html/_auto_range_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +Mozzi: AutoRange.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AutoRange.h
+
+
+
1 /*
2  * AutoRange.h
3  *
4  * Copyright 2013 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 #ifndef AUTORANGE_H
12 #define AUTORANGE_H
13 
17 template <class T>
18 class
19  AutoRange {
20 
21 public:
27  AutoRange(T min_expected, T max_expected):range_min(max_expected),range_max(min_expected),range(0)
28  {}
29 
30 
34  void next(T n){
35  if (n > range_max) {
36  range_max = n;
37  range = range_max - range_min;
38  }else{
39  if (n< range_min) {
40  range_min = n;
41  range = range_max - range_min;
42  }
43  }
44  }
45 
49  T getMin(){
50  return range_min;
51  }
52 
53 
57  T getMax(){
58  return range_max;
59  }
60 
61 
65  T getRange(){
66  return range;
67  }
68 
69 private:
70  T range_max, range_min , range;
71 
72 };
73 
74 #endif // #ifndef AUTORANGE_H
T getRange()
Returns the current range.
Definition: AutoRange.h:65
+
T getMax()
Returns the current maximum.
Definition: AutoRange.h:57
+
T getMin()
Returns the current minimum.
Definition: AutoRange.h:49
+
Keeps a running calculation of the range of the input values it receives.
Definition: AutoRange.h:18
+
void next(T n)
Updates the current range.
Definition: AutoRange.h:34
+
AutoRange(T min_expected, T max_expected)
Constructor.
Definition: AutoRange.h:27
+
+
+ + + + diff --git a/extras/doc/html/_cap_poll_8h_source.html b/extras/doc/html/_cap_poll_8h_source.html new file mode 100644 index 000000000..54ec0883b --- /dev/null +++ b/extras/doc/html/_cap_poll_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +Mozzi: CapPoll.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
CapPoll.h
+
+
+
1 #ifndef RCPOLL_H
2 #define RCPOLL_H
3 
4 
11 template <unsigned char SENSOR_PIN, unsigned char SEND_PIN>
12 class CapPoll
13 {
14 
15 public:
18  CapPoll():result(0),rc_cued(true), output(0)
19  {
20  ;
21  }
22 
28  inline
29  unsigned int next(){
30  if (rc_cued){
31  pinMode(SENSOR_PIN, INPUT); // turn pin into an input and time till pin goes low
32  digitalWrite(SENSOR_PIN, LOW); // turn pullups off - or it won't work
33  rc_cued = false;
34  }
35  if(digitalRead(SENSOR_PIN)){ // wait for pin to go low
36  result++;
37  }
38  else{
39  output = result;
40  result = 0;
41  pinMode(SENSOR_PIN, OUTPUT); // make pin OUTPUT
42  digitalWrite(SENSOR_PIN, HIGH); // make pin HIGH to discharge capacitor - see the schematic
43  rc_cued = true;
44  }
45  return output;
46  }
47 
48 private:
49  unsigned int result;
50  boolean rc_cued;
51  unsigned int output;
52 
53 };
54 
55 #endif // #ifndef RCPOLL_H
56 
CapPoll()
Constructor.
Definition: CapPoll.h:18
+
A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime.
Definition: CapPoll.h:12
+
unsigned int next()
Checks whether the capacitor has charged, and returns how long it took for the most recent charge...
Definition: CapPoll.h:29
+
+
+ + + + diff --git a/extras/doc/html/_circular_buffer_8h_source.html b/extras/doc/html/_circular_buffer_8h_source.html new file mode 100644 index 000000000..a5e8810bd --- /dev/null +++ b/extras/doc/html/_circular_buffer_8h_source.html @@ -0,0 +1,113 @@ + + + + + + + +Mozzi: CircularBuffer.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
CircularBuffer.h
+
+
+
1 /*
2 Modified from https://en.wikipedia.org/wiki/Circular_buffer
3 Mirroring version
4 On 18 April 2014, the simplified version on the Wikipedia page for power of 2 sized buffers
5 doesn't work - cbIsEmpty() returns true whether the buffer is full or empty.
6 */
7 
11 template <class ITEM_TYPE>
13 {
14 
15 public:
18  CircularBuffer(): start(0),end(0),s_msb(0),e_msb(0)
19  {
20  }
21 
22  inline
23  bool isFull() {
24  return end == start && e_msb != s_msb;
25  }
26 
27  inline
28  bool isEmpty() {
29  return end == start && e_msb == s_msb;
30  }
31 
32  inline
33  void write(ITEM_TYPE in) {
34  items[end] = in;
35  //if (isFull()) cbIncrStart(); /* full, overwrite moves start pointer */
36  cbIncrEnd();
37  }
38 
39  inline
40  ITEM_TYPE read() {
41  ITEM_TYPE out = items[start];
42  cbIncrStart();
43  return out;
44  }
45 
46  inline
47  unsigned long count() {
48  return (num_buffers_read << 8) + start;
49  }
50 
51 private:
52  ITEM_TYPE items[256];
53  uint8_t start; /* index of oldest itement */
54  uint8_t end; /* index at which to write new itement */
55  uint8_t s_msb;
56  uint8_t e_msb;
57  unsigned long num_buffers_read;
58 
59 
60  inline
61  void cbIncrStart() {
62  start++;
63  if (start == 0) {
64  s_msb ^= 1;
65  num_buffers_read++;
66  }
67  }
68 
69  inline
70  void cbIncrEnd() {
71  end++;
72  if (end == 0) e_msb ^= 1;
73  }
74 
75 };
CircularBuffer()
Constructor.
+
Circular buffer object.
+
+
+ + + + diff --git a/extras/doc/html/_control_delay_8h_source.html b/extras/doc/html/_control_delay_8h_source.html new file mode 100644 index 000000000..658f55b59 --- /dev/null +++ b/extras/doc/html/_control_delay_8h_source.html @@ -0,0 +1,113 @@ + + + + + + + +Mozzi: ControlDelay.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ControlDelay.h
+
+
+
1 /*
2  * ControlDelay.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef CONTROLDELAY_H_
13 #define CONTROLDELAY_H_
14 
15 #include "AudioDelay.h"
16 
28 template <unsigned int NUM_BUFFER_SAMPLES, class T = int>
29 class ControlDelay: public AudioDelay<NUM_BUFFER_SAMPLES, T>
30 {
31 
32 };
33 
39 #endif // #ifndef CONTROLDELAY_H_
40 
Control-rate delay line for delaying control signals.
Definition: ControlDelay.h:29
+
Audio delay line for comb filter, flange, chorus and short echo effects.
Definition: AudioDelay.h:27
+
+
+ + + + diff --git a/extras/doc/html/_d_cfilter_8h_source.html b/extras/doc/html/_d_cfilter_8h_source.html new file mode 100644 index 000000000..f2fe340f3 --- /dev/null +++ b/extras/doc/html/_d_cfilter_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +Mozzi: DCfilter.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
DCfilter.h
+
+
+
1 /*
2  * DCfilter.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef DCFILTER_H
13 #define DCFILTER_H
14 
15 /*
16 tb2010 adapted from:
17 robert bristow-johnson, DSP Trick: Fixed-Point DC Blocking Filter with Noise-Shaping
18 http://www.dspguru.com/book/export/html/126
19 
20 y[n] = x[n] - x[n-1] + a * y[n-1]
21 
22 Where y[n] is the output at the current time n, and x[n] is the input at the current time n.
23 
24 also, see DC Blocker Algorithms, http://www.ingelec.uns.edu.ar/pds2803/materiales/articulos/04472252.pdf
25  */
26 
32 class DCfilter {
33 public:
39  DCfilter(float pole):acc(0),prev_x(0),prev_y(0)
40  {
41  A = (int)(32768.0*(1.0 - pole));
42  }
43 
44 /* almost original
45  // timing: 20us
46  int next(int x)
47  {
48  setPin13High();
49  acc -= prev_x;
50  prev_x = (long)x<<15;
51  acc += prev_x;
52  acc -= A*prev_y;
53  prev_y = acc>>15; // quantization happens here
54  int filtered = (int)prev_y;
55  // acc has y[n] in upper 17 bits and -e[n] in lower 15 bits
56  setPin13Low();
57  return filtered;
58  }
59  */
60 
66  // timing :8us
67  inline
68  int next(int x)
69  {
70  acc += ((long)(x-prev_x)<<16)>>1;
71  prev_x = x;
72  acc -= (long)A*prev_y; // acc has y[n] in upper 17 bits and -e[n] in lower 15 bits
73  prev_y = (acc>>16)<<1; // faster than >>15 but loses bit 0
74  if (acc & 32784) prev_y += 1; // adds 1 if it was in the 0 bit position lost in the shifts above
75  return prev_y;
76  }
77 
78 private:
79  long acc;
80  int prev_x, prev_y,A;
81 };
82 
88 #endif // #ifndef DCFILTER_H
89 
DCfilter(float pole)
Instantiate a DC-blocking filter.
Definition: DCfilter.h:39
+
int next(int x)
Filter the incoming value and return the result.
Definition: DCfilter.h:68
+
A DC-blocking filter useful for highlighting changes in control signals.
Definition: DCfilter.h:32
+
+
+ + + + diff --git a/extras/doc/html/_ead_8h_source.html b/extras/doc/html/_ead_8h_source.html new file mode 100644 index 000000000..6fc2401ba --- /dev/null +++ b/extras/doc/html/_ead_8h_source.html @@ -0,0 +1,123 @@ + + + + + + + +Mozzi: Ead.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Ead.h
+
+
+
1 /*
2  * Ead.h
3  *
4  * Adapted from ead~.c puredata external (creb library)
5  * Copyright (c) 2000-2003 by Tom Schouten
6  *
7  * Copyright 2012 Tim Barrass, 2000-2003 Tom Schouten
8  *
9  * This file is part of Mozzi.
10  *
11  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
12  *
13  */
14 
15 #ifndef EAD_H_
16 #define EAD_H_
17 
18 #include "math.h"
19 #include "mozzi_fixmath.h"
20 
21 
29 class Ead
30 {
31 
32 public:
33 
41  Ead(unsigned int update_rate) : UPDATE_RATE(update_rate)
42  {
43  ;
44  }
45 
50  inline
51  void setAttack(unsigned int attack_ms)
52  {
53  Q8n8attack = float_to_Q8n8(millisToOneMinusRealPole(attack_ms));
54  }
55 
56 
61  inline
62  void setDecay(unsigned int decay_ms)
63  {
64  Q8n8decay = float_to_Q8n8(millisToOneMinusRealPole(decay_ms));
65  }
66 
67 
74  inline
75  void set(unsigned int attack_ms, unsigned int decay_ms)
76  {
77  setAttack(attack_ms);
78  setDecay(decay_ms);
79  }
80 
81 
85  inline
86  void start()
87  {
88  Q8n24state = 0;
89  attack_phase = true;
90  }
91 
92 
100  inline
101  void start(unsigned int attack_ms, unsigned int decay_ms)
102  {
103  set(attack_ms, decay_ms);
104  //Q8n24state = 0; // don't restart from 0, just go from whatever the current level is, to avoid glitches
105  attack_phase = true;
106  }
107 
108 
113  inline
114  uint8_t next()
115  {
116  if(attack_phase)
117  {
118  // multiply A(a1,b1) * A(a2,b2) = A(a1+a2, b1+b2)
119  Q8n24state += (((Q8n24)(Q8n24_FIX1 - Q8n24state) * Q8n8attack)) >> 8; // Q8n24, shifts all back into n24
120  if (Q8n24state >= Q8n24_FIX1-256)
121  {
122  Q8n24state = Q8n24_FIX1-256;
123  attack_phase = false;
124  }
125  }else{ /* decay phase */
126  Q8n24state -= (Q8n24state * Q8n8decay)>>8;
127  }
128  return Q8n24_to_Q0n8(Q8n24state);
129  }
130 
131 
132 private:
133 
134  Q8n8 Q8n8attack;
135  Q8n8 Q8n8decay;
136  Q8n24 Q8n24state;
137  bool attack_phase;
138  const unsigned int UPDATE_RATE;
139 
140 
141  /* convert milliseconds to 1-p, with p a real pole */
142  inline
143  float millisToOneMinusRealPole(unsigned int milliseconds)
144  {
145  static const float NUMERATOR = 1000.0f * log(0.001f);
146  return -expm1(NUMERATOR / ((float)UPDATE_RATE * milliseconds));
147  }
148 
149 
150  // Compute exp(x) - 1 without loss of precision for small values of x.
151  inline
152  float expm1(float x)
153  {
154  if (fabs(x) < 1e-5)
155  {
156  return x + 0.5*x*x;
157  }
158  else
159  {
160  return exp(x) - 1.0;
161  }
162  }
163 
164 };
165 
171 #endif /* EAD_H_ */
uint16_t Q8n8
unsigned fractional number using 8 integer bits and 8 fractional bits, represents 0 to 255...
Definition: mozzi_fixmath.h:35
+
void start(unsigned int attack_ms, unsigned int decay_ms)
Set attack and decay times in milliseconds, and start the envelope from the beginning.
Definition: Ead.h:101
+
Exponential attack decay envelope.
Definition: Ead.h:29
+
Ead(unsigned int update_rate)
Constructor.
Definition: Ead.h:41
+
void start()
Start the envelope from the beginning.
Definition: Ead.h:86
+
Q8n8 float_to_Q8n8(float a)
Convert float to Q8n8 fix.
+
void setAttack(unsigned int attack_ms)
Set the attack time in milliseconds.
Definition: Ead.h:51
+
void setDecay(unsigned int decay_ms)
Set the decay time in milliseconds.
Definition: Ead.h:62
+
uint8_t next()
Calculate and return the next envelope value, in the range -128 to 127.
Definition: Ead.h:114
+
uint32_t Q8n24
signed fractional number using 8 integer bits and 24 fractional bits, represents 0 to 255...
Definition: mozzi_fixmath.h:44
+
#define Q8n24_FIX1
1 in Q8n24 format
Definition: mozzi_fixmath.h:64
+
Q0n8 Q8n24_to_Q0n8(Q8n24 a)
Convert Q8n24 fixed to Q0n8 uint8_t.
+
+
+ + + + diff --git a/extras/doc/html/_event_delay_8h_source.html b/extras/doc/html/_event_delay_8h_source.html new file mode 100644 index 000000000..36aea6468 --- /dev/null +++ b/extras/doc/html/_event_delay_8h_source.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: EventDelay.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
EventDelay.h
+
+
+
1 /*
2  * EventDelay.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef EVENTDELAY_H_
13 #define EVENTDELAY_H_
14 
15 
21 {
22 
23 public:
24 
29  EventDelay(unsigned int delay_milliseconds = 0): AUDIO_TICKS_PER_MILLISECOND((float)AUDIO_RATE/1000.0f)
30  {
31  set(delay_milliseconds);
32  }
33 
34 
39  inline
40  void set(unsigned int delay_milliseconds)
41  {
42  ticks = (unsigned long)(AUDIO_TICKS_PER_MILLISECOND*delay_milliseconds); // 12us
43  }
44 
45 
50  inline
51  void start()
52  {
53  deadline=audioTicks()+ticks;
54  }
55 
56 
60  inline
61  void start(unsigned int delay_milliseconds)
62  {
63  set(delay_milliseconds);
64  start();
65  }
66 
67 
72  inline
73  bool ready()
74  {
75  return(audioTicks()>=deadline); // 1us
76  }
77 
78 
79 protected:
80  // Metronome accesses these
81  unsigned long deadline;
82  unsigned long ticks;
83 
84 private:
85  const float AUDIO_TICKS_PER_MILLISECOND;
86 };
87 
93 #endif /* EVENTDELAY_H_ */
void start(unsigned int delay_milliseconds)
Set the delay time and start the delay.
Definition: EventDelay.h:61
+
EventDelay(unsigned int delay_milliseconds=0)
Constructor.
Definition: EventDelay.h:29
+
void start()
Start the delay.
Definition: EventDelay.h:51
+
#define AUDIO_RATE
Holds the audio rate setting.
Definition: mozzi_config.h:61
+
A non-blocking replacement for Arduino&#39;s delay() function (which is disabled by Mozzi).
Definition: EventDelay.h:20
+
unsigned long audioTicks()
An alternative for Arduino time funcitions like micros() which are disabled by Mozzi when it takes ov...
Definition: MozziGuts.cpp:627
+
bool ready()
Call this in updateControl() or updateAudio() to check if the delay time is up.
Definition: EventDelay.h:73
+
+
+ + + + diff --git a/extras/doc/html/_int_map_8h_source.html b/extras/doc/html/_int_map_8h_source.html new file mode 100644 index 000000000..4d95295c0 --- /dev/null +++ b/extras/doc/html/_int_map_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +Mozzi: IntMap.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IntMap.h
+
+
+
1 /*
2  * IntMap.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef INTMAP_H_
13 #define INTMAP_H_
14 
18 class IntMap {
19 
20 public:
27  IntMap(int in_min, int in_max, int out_min, int out_max)
28  : _IN_MIN(in_min),_IN_MAX(in_max),_OUT_MIN(out_min),_OUT_MAX(out_max),
29  _MULTIPLIER((256L * (out_max-out_min)) / (in_max-in_min))
30  {
31  ;
32  }
33 
38  int operator()(int n) const {
39  return (int) (((_MULTIPLIER*(n-_IN_MIN))>>8) + _OUT_MIN);
40  }
41 
42 
43 private:
44  const int _IN_MIN, _IN_MAX, _OUT_MIN, _OUT_MAX;
45  const long _MULTIPLIER;
46 };
47 
48 #endif /* INTMAP_H_ */
A faster version of Arduino&#39;s map() function.
Definition: IntMap.h:18
+
int operator()(int n) const
Process the next input value.
Definition: IntMap.h:38
+
IntMap(int in_min, int in_max, int out_min, int out_max)
Constructor.
Definition: IntMap.h:27
+
+
+ + + + diff --git a/extras/doc/html/_line_8h_source.html b/extras/doc/html/_line_8h_source.html new file mode 100644 index 000000000..f6dc50608 --- /dev/null +++ b/extras/doc/html/_line_8h_source.html @@ -0,0 +1,120 @@ + + + + + + + +Mozzi: Line.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Line.h
+
+
+
1 /*
2  * Line.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef LINE_H_
13 #define LINE_H_
14 
15 #if ARDUINO >= 100
16  #include "Arduino.h"
17 #else
18  #include "WProgram.h"
19 #endif
20 #include <util/atomic.h>
21 
37 template <class T>
38 class Line
39 {
40 private:
41  volatile T current_value; // volatile because it could be set in control interrupt and updated in audio
42  volatile T step_size;
43 
44 public:
48  Line ()
49  {
50  ;
51  }
52 
53 
54 
58  inline
59  T next()
60  {
61  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
62  {
63  current_value += step_size;
64  }
65  //Serial.println(current_value);
66  return current_value;
67  }
68 
69 
70 
76  inline
77  void set(T value)
78  {
79  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
80  {
81  current_value=value;
82  }
83  }
84 
85 
86 
91  inline
92  void set(T targetvalue, T num_steps)
93  {
94  T numerator;
95 // ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
96 // {
97  numerator = targetvalue-current_value;
98 // }
99  //float step = (float)numerator/num_steps;
100  T step = numerator/num_steps;
101 // ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
102 // {
103  step_size= (T)step;
104 // }
105  //Serial.print("numerator");Serial.print(" \t");Serial.println(numerator);
106  //Serial.print("num_steps");Serial.print(" \t");Serial.println(num_steps);
107  //Serial.print(step);Serial.print(" \t");Serial.println(step_size);
108  //step_size=(T)((((float)targetvalue-current_value)/num_steps));
109 
110  }
111 
117  inline
118  void set(T startvalue, T targetvalue, T num_steps)
119  {
120  set(startvalue);
121  set(targetvalue, num_steps);
122  }
123 };
124 
125 
126 /* unsigned char specialisation (probably not very useful because step size will likely = 0) */
127 template <>
128 class Line <unsigned char>
129 {
130 private:
131  volatile unsigned char current_value; // volatile because it could be set in control interrupt and updated in audio
132  char step_size;
133 
134 public:
138  Line ()
139  {
140  ;
141  }
142 
143 
144 
148  inline
149  unsigned char next()
150  {
151  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
152  {
153  current_value += step_size;
154  }
155  return current_value;
156  }
157 
158 
159 
165  inline
166  void set(unsigned char value)
167  {
168  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
169  {
170  current_value=value;
171  }
172  }
173 
174 
175 
180  inline
181  void set(unsigned char targetvalue, unsigned char num_steps)
182  {
183  step_size=(char)((((float)targetvalue-current_value)/num_steps));
184  }
185 
191  inline
192  void set(unsigned char startvalue, unsigned char targetvalue, unsigned char num_steps)
193  {
194  set(startvalue);
195  set(targetvalue, num_steps);
196  }
197 
198 };
199 
200 
201 /* unsigned int specialisation */
202 template <>
203 class Line <unsigned int>
204 {
205 private:
206  volatile unsigned int current_value; // volatile because it could be set in control interrupt and updated in audio
207  int step_size;
208 
209 public:
213  Line ()
214  {
215  ;
216  }
217 
218 
219 
223  inline
224  unsigned int next()
225  {
226  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
227  {
228  current_value += step_size;
229  }
230  return current_value;
231  }
232 
233 
234 
240  inline
241  void set(unsigned int value)
242  {
243  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
244  {
245  current_value=value;
246  }
247  }
248 
249 
250 
255  inline
256  void set(unsigned int targetvalue, unsigned int num_steps)
257  {
258  step_size=(int)((((float)targetvalue-current_value)/num_steps));
259  }
260 
261 
267  inline
268  void set(unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)
269  {
270  set(startvalue);
271  set(targetvalue, num_steps);
272  }
273 };
274 
275 
276 
277 
278 
279 /* unsigned long specialisation */
280 template <>
281 class Line <unsigned long>
282 {
283 private:
284  volatile unsigned long current_value; // volatile because it could be set in control interrupt and updated in audio
285  long step_size;
286 
287 public:
291  Line ()
292  {
293  ;
294  }
295 
296 
297 
301  inline
302  unsigned long next()
303  {
304  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
305  {
306  current_value += step_size;
307  }
308  return current_value;
309  }
310 
311 
312 
318  inline
319  void set(unsigned long value)
320  {
321  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
322  {
323  current_value=value;
324  }
325  }
326 
327 
328 
333  inline
334  void set(unsigned long targetvalue, unsigned long num_steps)
335  {
336  step_size=(long)((((float)targetvalue-current_value)/num_steps));
337  }
338 
344  inline
345  void set(unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)
346  {
347  set(startvalue);
348  set(targetvalue, num_steps);
349  }
350 };
351 
357 #endif /* LINE_H_ */
Line()
Constructor.
Definition: Line.h:213
+
unsigned char next()
Increments one step along the line.
Definition: Line.h:149
+
Line()
Constructor.
Definition: Line.h:48
+
For linear changes with a minimum of calculation at each step.
Definition: Line.h:38
+
Line()
Constructor.
Definition: Line.h:138
+
Line()
Constructor.
Definition: Line.h:291
+
unsigned long next()
Increments one step along the line.
Definition: Line.h:302
+
unsigned int next()
Increments one step along the line.
Definition: Line.h:224
+
T next()
Increments one step along the line.
Definition: Line.h:59
+
+
+ + + + diff --git a/extras/doc/html/_low_pass_filter_8h_source.html b/extras/doc/html/_low_pass_filter_8h_source.html new file mode 100644 index 000000000..ae32dcead --- /dev/null +++ b/extras/doc/html/_low_pass_filter_8h_source.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: LowPassFilter.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
LowPassFilter.h
+
+
+
1 /*
2  * LowPassFilter.h
3  *
4  * Copyright 2012 Tim Barrass
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef LOWPASS_H_
13 #define LOWPASS_H_
14 
15 /*
16 simple resonant filter posted to musicdsp.org by Paul Kellett http://www.musicdsp.org/archive.php?classid=3#259
17 
18 // set feedback amount given f and q between 0 and 1
19 fb = q + q/(1.0 - f);
20 
21 // for each sample...
22 buf0 = buf0 + f * (in - buf0 + fb * (buf0 - buf1));
23 buf1 = buf1 + f * (buf0 - buf1);
24 out = buf1;
25 
26 fixed point version of the filter
27 "dave's blog of art and programming" http://www.pawfal.org/dave/blog/2011/09/
28 */
29 
30 
31 // we are using .n fixed point (n bits for the fractional part)
32 #define FX_SHIFT 8
33 #define SHIFTED_1 ((uint8_t) 255)
34 
38 {
39 
40 public:
41 
42 
46  }
47 
48 
53  void setCutoffFreq(uint8_t cutoff)
54  {
55  f = cutoff;
56  fb = q+ucfxmul(q, SHIFTED_1 - cutoff);
57  }
58 
59 
63  void setResonance(uint8_t resonance)
64  {
65  q = resonance;
66  }
67 
73  // 10.5 to 12.5 us, mostly 10.5 us (was 14us)
74  inline
75  int next(int in)
76  {
77  //setPin13High();
78  buf0+=fxmul(((in - buf0) + fxmul(fb, buf0-buf1)), f);
79  buf1+=ifxmul(buf0-buf1, f); // could overflow if input changes fast
80  //setPin13Low();
81  return buf1;
82  }
83 
84 
85 private:
86  uint8_t q;
87  uint8_t f;
88  unsigned int fb;
89  int buf0,buf1;
90 
91 
92  // // multiply two fixed point numbers (returns fixed point)
93  // inline
94  // long fxmul(long a, long b)
95  // {
96  // return (a*b)>>FX_SHIFT;
97  // }
98 
99  // multiply two fixed point numbers (returns fixed point)
100  inline
101  unsigned int ucfxmul(uint8_t a, uint8_t b)
102  {
103  return (((unsigned int)a*b)>>FX_SHIFT);
104  }
105 
106  // multiply two fixed point numbers (returns fixed point)
107  inline
108  int ifxmul(int a, uint8_t b)
109  {
110  return ((a*b)>>FX_SHIFT);
111  }
112 
113  // multiply two fixed point numbers (returns fixed point)
114  inline
115  long fxmul(long a, int b)
116  {
117  return ((a*b)>>FX_SHIFT);
118  }
119 
120 };
121 
127 #endif /* LOWPASS_H_ */
void setResonance(uint8_t resonance)
Set the resonance.
Definition: LowPassFilter.h:63
+
A resonant low pass filter for audio signals.
Definition: LowPassFilter.h:37
+
LowPassFilter()
Constructor.
Definition: LowPassFilter.h:45
+
int next(int in)
Calculate the next sample, given an input signal.
Definition: LowPassFilter.h:75
+
void setCutoffFreq(uint8_t cutoff)
Set the cut off frequency,.
Definition: LowPassFilter.h:53
+
+
+ + + + diff --git a/extras/doc/html/_metronome_8h_source.html b/extras/doc/html/_metronome_8h_source.html new file mode 100644 index 000000000..4fef2a231 --- /dev/null +++ b/extras/doc/html/_metronome_8h_source.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: Metronome.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Metronome.h
+
+
+
1 /*
2  * Metronome.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef METRO_H_
13 #define METRO_H_
14 
15 #include "EventDelay.h"
16 
22 class Metronome: public EventDelay
23 {
24 
25 public:
26 
31  Metronome(unsigned int delay_milliseconds = 0): EventDelay(delay_milliseconds), stopped(false) {
32  }
33 
34 
39  inline
40  void start()
41  {
42  deadline=audioTicks()+ticks;
43  stopped = false;
44  }
45 
46 
50  inline
51  void start(unsigned int delay_milliseconds)
52  {
53  set(delay_milliseconds);
54  start();
55  }
56 
57 
58 
62  inline
63  void setBPM(float bpm)
64  {
65  set((unsigned int) (60000.f/bpm));
66  }
67 
68 
69 
70 
74  inline
75  bool ready()
76  {
77  unsigned long now = audioTicks();
78  if ((now<deadline) || stopped) return false;
79 
80  deadline=now-(now-deadline)+ticks; // subtract overrun so the timing doesn't slip
81  return true;
82  }
83 
84 
85  inline
86  void stop(){
87  stopped = true;
88  }
89 
90 private:
91  bool stopped;
92 };
93 
94 
95 
96 
102 #endif /* METRO_H_ */
Metronome(unsigned int delay_milliseconds=0)
Constructor.
Definition: Metronome.h:31
+
void setBPM(float bpm)
Set the beats per minute.
Definition: Metronome.h:63
+
bool ready()
Call this in updateControl() or updateAudio() to check if it is time for a beat.
Definition: Metronome.h:75
+
A metronome class which is like an EventDelay which retriggers itself when the delay time is up...
Definition: Metronome.h:22
+
void start(unsigned int delay_milliseconds)
Set the time between beats and start the metronome.
Definition: Metronome.h:51
+
A non-blocking replacement for Arduino&#39;s delay() function (which is disabled by Mozzi).
Definition: EventDelay.h:20
+
void start()
Start the metronome.
Definition: Metronome.h:40
+
unsigned long audioTicks()
An alternative for Arduino time funcitions like micros() which are disabled by Mozzi when it takes ov...
Definition: MozziGuts.cpp:627
+
+
+ + + + diff --git a/extras/doc/html/_mozzi_guts_8cpp_source.html b/extras/doc/html/_mozzi_guts_8cpp_source.html new file mode 100644 index 000000000..d96ff5463 --- /dev/null +++ b/extras/doc/html/_mozzi_guts_8cpp_source.html @@ -0,0 +1,123 @@ + + + + + + + +Mozzi: MozziGuts.cpp Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
MozziGuts.cpp
+
+
+
1 /*
2  * MozziGuts.cpp
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi by Tim Barrass is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12  #if ARDUINO >= 100
13  #include "Arduino.h"
14 #else
15  #include "WProgram.h"
16 #endif
17 
18 #include <util/atomic.h>
19 #include "MozziGuts.h"
20 #include "mozzi_config.h" // at the top of all MozziGuts and analog files
21 #include "mozzi_analog.h"
22 #include "CircularBuffer.h"
23 //#include "mozzi_utils.h"
24 
25 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
26 #include "IntervalTimer.h"
27 #else
28 #include "TimerZero.h"
29 #include "TimerOne.h"
30 #include "FrequencyTimer2.h"
31 #endif
32 
33 
34 #if !(F_CPU == 16000000 || F_CPU == 48000000)
35 #warning "Mozzi has been tested with a cpu clock speed of 16MHz on Arduino and 48MHz on Teensy 3! Results may vary with other speeds."
36 #endif
37 
38 // this seems to get included before mozzi_analog.cpp
39 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
40  ADC *adc; // adc object
41  uint8_t teensy_pin;
42 #endif
43 
44 /*
45 ATmega328 technical manual, Section 12.7.4:
46 The dual-slope operation [of phase correct pwm] has lower maximum operation
47 frequency than single slope operation. However, due to the symmetric feature
48 of the dual-slope PWM modes, these modes are preferred for motor control
49 applications.
50 Due to the single-slope operation, the operating frequency of the
51 fast PWM mode can be twice as high as the phase correct PWM mode that use
52 dual-slope operation. This high frequency makes the fast PWM mode well suited
53 for power regulation, rectification, and DAC applications. High frequency allows
54 physically small sized external components (coils, capacitors)..
55 
56 DAC, that's us! Fast PWM.
57 
58 PWM frequency tests
59 62500Hz, single 8 or dual 16 bits, bad aliasing
60 125000Hz dual 14 bits, sweet
61 250000Hz dual 12 bits, gritty, if you're gonna have 2 pins, have 14 bits
62 500000Hz dual 10 bits, grittier
63 16384Hz single nearly 9 bits (original mode) not bad for a single pin, but carrier freq noise can be an issue
64 */
65 
66 
67 //-----------------------------------------------------------------------------------------------------------------
68 // ring buffer for audio output
69 CircularBuffer <unsigned int> output_buffer; // fixed size 256
70 #if (STEREO_HACK == true)
71 CircularBuffer <unsigned int> output_buffer2; // fixed size 256
72 #endif
73 //-----------------------------------------------------------------------------------------------------------------
74 
75 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
76 // not storing backups, just turning timer on and off for pause
77 #else
78 
79 // to store backups of timer registers so Mozzi can be stopped and pre_mozzi timer values can be restored
80 static uint8_t pre_mozzi_TCCR0A, pre_mozzi_TCCR0B, pre_mozzi_OCR0A, pre_mozzi_TIMSK0;
81 static uint8_t pre_mozzi_TCCR1A, pre_mozzi_TCCR1B, pre_mozzi_OCR1A, pre_mozzi_TIMSK1;
82 
83 #if (AUDIO_MODE == HIFI)
84 #if defined(TCCR2A)
85 static uint8_t pre_mozzi_TCCR2A, pre_mozzi_TCCR2B, pre_mozzi_OCR2A, pre_mozzi_TIMSK2;
86 #elif defined(TCCR2)
87 static uint8_t pre_mozzi_TCCR2, pre_mozzi_OCR2, pre_mozzi_TIMSK;
88 #elif defined(TCCR4A)
89 static uint8_t pre_mozzi_TCCR4A, pre_mozzi_TCCR4B, pre_mozzi_TCCR4C, pre_mozzi_TCCR4D, pre_mozzi_TCCR4E, pre_mozzi_OCR4C, pre_mozzi_TIMSK4;
90 #endif
91 #endif
92 
93 
94 static void backupPreMozziTimer1()
95 {
96  // backup pre-mozzi register values for pausing later
97  pre_mozzi_TCCR1A = TCCR1A;
98  pre_mozzi_TCCR1B = TCCR1B;
99  pre_mozzi_OCR1A = OCR1A;
100  pre_mozzi_TIMSK1 = TIMSK1;
101 }
102 
103 
104 //-----------------------------------------------------------------------------------------------------------------
105 
106 
107 // to store backups of mozzi's changes to timer registers so Mozzi can be paused and unPaused
108 static uint8_t mozzi_TCCR0A, mozzi_TCCR0B, mozzi_OCR0A, mozzi_TIMSK0;
109 static uint8_t mozzi_TCCR1A, mozzi_TCCR1B, mozzi_OCR1A, mozzi_TIMSK1;
110 
111 #if (AUDIO_MODE == HIFI)
112 #if defined(TCCR2A)
113 static uint8_t mozzi_TCCR2A, mozzi_TCCR2B, mozzi_OCR2A, mozzi_TIMSK2;
114 #elif defined(TCCR2)
115 static uint8_t mozzi_TCCR2, mozzi_OCR2, mozzi_TIMSK;
116 #elif defined(TCCR4A)
117 static uint8_t mozzi_TCCR4A, mozzi_TCCR4B, mozzi_TCCR4C, mozzi_TCCR4D, mozzi_TCCR4E, mozzi_OCR4C, mozzi_TIMSK4;
118 #endif
119 #endif
120 
121 
122 static void backupMozziTimer1()
123 {
124  // backup mozzi register values for unpausing later
125  mozzi_TCCR1A = TCCR1A;
126  mozzi_TCCR1B = TCCR1B;
127  mozzi_OCR1A = OCR1A;
128  mozzi_TIMSK1 = TIMSK1;
129 }
130 
131 #endif // end of timer backups for non-Teensy 3 boards
132 //-----------------------------------------------------------------------------------------------------------------
133 
134 #if (USE_AUDIO_INPUT==true)
135 
136 // ring buffer for audio input
137 CircularBuffer <unsigned int>input_buffer; // fixed size 256
138 
139 static boolean audio_input_is_available;
140 static int audio_input; // holds the latest audio from input_buffer
141 uint8_t adc_count = 0;
142 
143 
145 {
146  return audio_input;
147 }
148 
149 
150 static void startFirstAudioADC()
151 {
152 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
153  adc->startSingleRead(AUDIO_INPUT_PIN); // ADC lib converts pin/channel in startSingleRead
154 #else
155  adcStartConversion(adcPinToChannelNum(AUDIO_INPUT_PIN));
156 #endif
157 }
158 
159 /*
160 static void receiveFirstAudioADC()
161 {
162  // nothing
163 }
164 */
165 
166 static void startSecondAudioADC()
167 {
168 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
169  adc->startSingleRead(AUDIO_INPUT_PIN);
170 #else
171  ADCSRA |= (1 << ADSC); // start a second conversion on the current channel
172 #endif
173 }
174 
175 
176 
177 static void receiveSecondAudioADC()
178 {
179  if (!input_buffer.isFull())
180 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
181  input_buffer.write(adc->readSingle());
182 #else
183  input_buffer.write(ADC);
184 #endif
185 }
186 
187 
188 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
189 void adc0_isr(void)
190 #else
191 ISR(ADC_vect, ISR_BLOCK)
192 #endif
193 {
194  switch (adc_count){
195  case 0:
196  // 6us
197  receiveSecondAudioADC();
198  adcReadSelectedChannels();
199  break;
200 
201  case 1:
202  // <2us, <1us w/o receive
203  //receiveFirstControlADC();
204  startSecondControlADC();
205  break;
206 
207  case 2:
208  // 3us
209  receiveSecondControlADC();
210  startFirstAudioADC();
211  break;
212 
213 
214  // case 3:
215  // invisible
216  // receiveFirstAudioADC();
217  // break;
218 
219  }
220  adc_count++;
221 }
222 #endif // end main audio input section
223 
224 #if (STEREO_HACK == true)
225 extern int audio_out_1, audio_out_2;
226 #endif
227 
228 void audioHook() // 2us excluding updateAudio()
229 {
230 //setPin13High();
231 #if (USE_AUDIO_INPUT==true)
232  if (!input_buffer.isEmpty())
233  audio_input = input_buffer.read();
234 #endif
235 
236  if (!output_buffer.isFull()) {
237  #if (STEREO_HACK == true)
238  updateAudio(); // in hacked version, this returns void
239  output_buffer.write((unsigned int) (audio_out_1 + AUDIO_BIAS));
240  output_buffer2.write((unsigned int) (audio_out_2 + AUDIO_BIAS));
241  #else
242  output_buffer.write((unsigned int) (updateAudio() + AUDIO_BIAS));
243  #endif
244 
245  }
246 //setPin13Low();
247 }
248 
249 
250 
251 //-----------------------------------------------------------------------------------------------------------------
252 #if (AUDIO_MODE == STANDARD) || (AUDIO_MODE == STANDARD_PLUS)
253 
254 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
255 //teensy 3 architecture
256 
257  IntervalTimer timer1;
258 
259 
260 static void teensyAudioOutput()
261 {
262 
263 #if (USE_AUDIO_INPUT==true)
264  adc_count = 0;
265  startSecondAudioADC();
266 #endif
267 
268  analogWrite(AUDIO_CHANNEL_1_PIN, (int)output_buffer.read());
269 }
270 
271 
272 static void startAudioStandard()
273 {
274  //backupPreMozziTimer1(); // not for Teensy 3.1
275 
276  analogWriteResolution(12);
277  adc->setAveraging(0);
278  adc->setConversionSpeed(ADC_MED_SPEED); // could be ADC_HIGH_SPEED, noisier
279  timer1.begin(teensyAudioOutput, 1000000UL/AUDIO_RATE);
280 
281  //backupMozziTimer1(); // // not for Teensy 3.1
282 }
283 
284 #else
285 
286 // avr architecture
287 static void startAudioStandard()
288 {
289  backupPreMozziTimer1();
290 
291  pinMode(AUDIO_CHANNEL_1_PIN, OUTPUT); // set pin to output for audio
292  // pinMode(AUDIO_CHANNEL_2_PIN, OUTPUT); // set pin to output for audio
293 #if (AUDIO_MODE == STANDARD)
294  Timer1.initializeCPUCycles(16000000UL/AUDIO_RATE, PHASE_FREQ_CORRECT); // set period, phase and frequency correct
295 #else // (AUDIO_MODE == STANDARD_PLUS)
296  Timer1.initializeCPUCycles(16000000UL/PWM_RATE, FAST); // fast mode enables higher PWM rate
297 #endif
298  Timer1.pwm(AUDIO_CHANNEL_1_PIN, AUDIO_BIAS); // pwm pin, 50% of Mozzi's duty cycle, ie. 0 signal
299  //Timer1.pwm(AUDIO_CHANNEL_2_PIN, AUDIO_BIAS);
300  TIMSK1 = _BV(TOIE1); // Overflow Interrupt Enable (when not using Timer1.attachInterrupt())
301  //TIMSK1 |= _BV(TOIE1) | _BV(OCIE1A); // Overflow Interrupt Enable and Output Compare A Match Interrupt Enable
302  backupMozziTimer1();
303 }
304 
305 /*
306 // trying to get ac output for piezo
307 unsigned int output;
308 
309 //extern unsigned long interruptcounter;
310 ISR(TIMER1_COMPA_vect){
311  //Serial.print(9);
312  //interruptcounter++;
313  // change polarity of pwm output pins 9 and 10 - one becomes ground, the other becomes max-output
314  AUDIO_CHANNEL_1_OUTPUT_REGISTER = 0;//STANDARD_PWM_RESOLUTION;
315  //AUDIO_CHANNEL_2_OUTPUT_REGISTER = STANDARD_PWM_RESOLUTION-output;
316 }
317 */
318 
319 /* Interrupt service routine moves sound data from the output buffer to the
320 Arduino output register, running at AUDIO_RATE. */
321 
322 ISR(TIMER1_OVF_vect, ISR_BLOCK)
323 {
324 
325 #if (AUDIO_MODE == STANDARD_PLUS) && (AUDIO_RATE == 16384) // only update every second ISR, if lower audio rate
326  static boolean alternate;
327  alternate = !alternate;
328  if(alternate)
329  {
330 #endif
331 
332 #if (USE_AUDIO_INPUT==true)
333  adc_count = 0;
334  startSecondAudioADC();
335 #endif
336 
337 //if (!output_buffer.isEmpty()) {
338 /*
339 output = output_buffer.read();
340 AUDIO_CHANNEL_1_OUTPUT_REGISTER = output;
341 AUDIO_CHANNEL_2_OUTPUT_REGISTER = 0;
342 */
343 
344  AUDIO_CHANNEL_1_OUTPUT_REGISTER = output_buffer.read();
345 #if (STEREO_HACK == true)
346  AUDIO_CHANNEL_2_OUTPUT_REGISTER = output_buffer2.read();
347 #endif
348 
349 //}
350 
351  // flip signal polarity - instead of signal going to 0 (both pins 0), it goes to pseudo-negative of its current value.
352  // this would set non-inverted when setting sample value, and then inverted when top is reached (in an interrupt)
353  // non-invert
354  //TCCR1A |= _BV(COM1A1);
355  // invert
356  //TCCR1A |= ~_BV(COM1A1)
357 
358 
359 #if (AUDIO_MODE == STANDARD_PLUS) && (AUDIO_RATE==16384) // all this conditional compilation is so clutsy!
360  }
361 #endif
362 
363 }
364 // end avr
365 #endif
366 // end STANDARD
367 
368 //-----------------------------------------------------------------------------------------------------------------
369 #elif (AUDIO_MODE == HIFI)
370 
371 static void startAudioHiFi()
372 {
373  backupPreMozziTimer1();
374  // pwm on timer 1
375  pinMode(AUDIO_CHANNEL_1_highByte_PIN, OUTPUT); // set pin to output for audio, use 3.9k resistor
376  pinMode(AUDIO_CHANNEL_1_lowByte_PIN, OUTPUT); // set pin to output for audio, use 499k resistor
377  Timer1.initializeCPUCycles(16000000UL/125000, FAST); // set period for 125000 Hz fast pwm carrier frequency = 14 bits
378  Timer1.pwm(AUDIO_CHANNEL_1_highByte_PIN, 0); // pwm pin, 0% duty cycle, ie. 0 signal
379  Timer1.pwm(AUDIO_CHANNEL_1_lowByte_PIN, 0); // pwm pin, 0% duty cycle, ie. 0 signal
380  backupMozziTimer1();
381  // audio output interrupt on timer 2, sets the pwm levels of timer 1
382  setupTimer2();
383 }
384 
385 /* set up Timer 2 using modified FrequencyTimer2 library */
386 void dummy(){}
387 
388 
389 static void backupPreMozziTimer2()
390 {
391  //backup Timer2 register values
392 #if defined(TCCR2A)
393  pre_mozzi_TCCR2A = TCCR2A;
394  pre_mozzi_TCCR2B = TCCR2B;
395  pre_mozzi_OCR2A = OCR2A;
396  pre_mozzi_TIMSK2 = TIMSK2;
397 #elif defined(TCCR2)
398  pre_mozzi_TCCR2 = TCCR2;
399  pre_mozzi_OCR2 = OCR2;
400  pre_mozzi_TIMSK = TIMSK;
401 #elif defined(TCCR4A)
402  pre_mozzi_TCCR4B = TCCR4A;
403  pre_mozzi_TCCR4B = TCCR4B;
404  pre_mozzi_TCCR4B = TCCR4C;
405  pre_mozzi_TCCR4B = TCCR4D;
406  pre_mozzi_TCCR4B = TCCR4E;
407  pre_mozzi_OCR4C = OCR4C;
408  pre_mozzi_TIMSK4 = TIMSK4;
409 #endif
410 }
411 
412 
413 
414 static void backupMozziTimer2()
415 {
416 #if defined(TCCR2A)
417  mozzi_TCCR2A = TCCR2A;
418  mozzi_TCCR2B = TCCR2B;
419  mozzi_OCR2A = OCR2A;
420  mozzi_TIMSK2 = TIMSK2;
421 #elif defined(TCCR2)
422  mozzi_TCCR2 = TCCR2;
423  mozzi_OCR2 = OCR2;
424  mozzi_TIMSK = TIMSK;
425 #elif defined(TCCR4A)
426  mozzi_TCCR4B = TCCR4A;
427  mozzi_TCCR4B = TCCR4B;
428  mozzi_TCCR4B = TCCR4C;
429  mozzi_TCCR4B = TCCR4D;
430  mozzi_TCCR4B = TCCR4E;
431  mozzi_OCR4C = OCR4C;
432  mozzi_TIMSK4 = TIMSK4;
433 #endif
434 }
435 
436 
437 // audio output interrupt on timer 2 (or 4 on ATMEGA32U4 cpu), sets the pwm levels of timer 1
438 static void setupTimer2()
439 {
440  backupPreMozziTimer2(); // to reset while pausing
441 
442  FrequencyTimer2::setPeriodCPUCycles(16000000UL/AUDIO_RATE);
443  FrequencyTimer2::setOnOverflow(dummy);
444  FrequencyTimer2::enable();
445 
446  // backup mozzi register values for unpausing later
447  backupMozziTimer2();
448 }
449 
450 
451 
452 #if defined(TIMER2_COMPA_vect)
453 ISR(TIMER2_COMPA_vect)
454 #elif defined(TIMER2_COMP_vect)
455 ISR(TIMER2_COMP_vect)
456 #elif defined(TIMER4_COMPA_vect)
457 ISR(TIMER4_COMPA_vect)
458 #else
459 #error "This board does not have a hardware timer which is compatible with FrequencyTimer2"
460 void dummy_function(void)
461 #endif
462 {
463 #if (USE_AUDIO_INPUT==true)
464  adc_count = 0;
465  startSecondAudioADC();
466 #endif
467 
468  // read about dual pwm at http://www.openmusiclabs.com/learning/digital/pwm-dac/dual-pwm-circuits/
469  // sketches at http://wiki.openmusiclabs.com/wiki/PWMDAC, http://wiki.openmusiclabs.com/wiki/MiniArDSP
470  //if (!output_buffer.isEmpty()){
471  unsigned int out = output_buffer.read();
472  // 14 bit, 7 bits on each pin
473  //AUDIO_CHANNEL_1_highByte_REGISTER = out >> 7; // B00111111 10000000 becomes B1111111
474  // try to avoid looping over 7 shifts - need to check timing or disassemble to see what really happens
475  unsigned int out_high = out<<1; // B00111111 10000000 becomes B01111111 00000000
476  AUDIO_CHANNEL_1_highByte_REGISTER = out_high >> 8; // B01111111 00000000 produces B01111111
477  //
478  AUDIO_CHANNEL_1_lowByte_REGISTER = out & 127;
479  //}
480 }
481 
482 // end of HIFI
483 
484 #endif
485 
486 
487 //-----------------------------------------------------------------------------------------------------------------
488 
489 static void updateControlWithAutoADC()
490 {
491  updateControl();
492  /*
493  #if (USE_AUDIO_INPUT==true)
494  adc_count = 0;
495  startSecondAudioADC();
496 #endif
497 */
498  adcStartReadCycle();
499 }
500 
501 
502 /* Sets up Timer 0 for control interrupts. This is the same for all output
503 options Using Timer0 for control disables Arduino's time functions but also
504 saves on the interrupts and blocking action of those functions. May add a config
505 option for Using Timer2 instead if needed. (MozziTimer2 can be re-introduced for
506 that). */
507 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
508 IntervalTimer timer0;
509 #endif
510 
511 
512 static void startControl(unsigned int control_rate_hz)
513 {
514 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
515  timer0.begin(updateControlWithAutoADC, 1000000/control_rate_hz);
516 #else
517  // backup pre-mozzi register values
518  pre_mozzi_TCCR0A = TCCR0A;
519  pre_mozzi_TCCR0B = TCCR0B;
520  pre_mozzi_OCR0A = OCR0A;
521  pre_mozzi_TIMSK0 = TIMSK0;
522 
523  TimerZero::init(1000000/control_rate_hz,updateControlWithAutoADC); // set period, attach updateControlWithAutoADC()
524  TimerZero::start();
525 
526  // backup mozzi register values for unpausing later
527  mozzi_TCCR0A = TCCR0A;
528  mozzi_TCCR0B = TCCR0B;
529  mozzi_OCR0A = OCR0A;
530  mozzi_TIMSK0 = TIMSK0;
531 #endif
532 }
533 
534 
535 void startMozzi(int control_rate_hz)
536 {
537  setupMozziADC(); // you can use setupFastAnalogRead() with FASTER or FASTEST in setup() if desired (not for Teensy 3.1)
538  // delay(200); // so AutoRange doesn't read 0 to start with
539  startControl(control_rate_hz);
540 #if (AUDIO_MODE == STANDARD) || (AUDIO_MODE == STANDARD_PLUS)
541  startAudioStandard();
542 #elif (AUDIO_MODE == HIFI)
543  startAudioHiFi();
544 #endif
545 }
546 
547 
548 void pauseMozzi(){
549 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
550  timer1.end();
551 #else
552  // restore backed up register values
553  TCCR0A = pre_mozzi_TCCR0A;
554  TCCR0B = pre_mozzi_TCCR0B;
555  OCR0A = pre_mozzi_OCR0A;
556  TIMSK0 = pre_mozzi_TIMSK0;
557 
558  TCCR1A = pre_mozzi_TCCR1A;
559  TCCR1B = pre_mozzi_TCCR1B;
560  OCR1A = pre_mozzi_OCR1A;
561  TIMSK1 = pre_mozzi_TIMSK1;
562 
563 #if (AUDIO_MODE == HIFI)
564 #if defined(TCCR2A)
565  TCCR2A = pre_mozzi_TCCR2A;
566  TCCR2B = pre_mozzi_TCCR2B;
567  OCR2A = pre_mozzi_OCR2A;
568  TIMSK2 = pre_mozzi_TIMSK2;
569 #elif defined(TCCR2)
570  TCCR2 = pre_mozzi_TCCR2;
571  OCR2 = pre_mozzi_OCR2;
572  TIMSK = pre_mozzi_TIMSK;
573 #elif defined(TCCR4A)
574  TCCR4B = pre_mozzi_TCCR4A;
575  TCCR4B = pre_mozzi_TCCR4B;
576  TCCR4B = pre_mozzi_TCCR4C;
577  TCCR4B = pre_mozzi_TCCR4D;
578  TCCR4B = pre_mozzi_TCCR4E;
579  OCR4C = pre_mozzi_OCR4C;
580  TIMSK4 = pre_mozzi_TIMSK4;
581 #endif
582 #endif
583 #endif
584 }
585 
586 
588 {
589 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
590  timer1.begin(teensyAudioOutput, 1000000UL/AUDIO_RATE);
591 #else
592  // restore backed up register values
593  TCCR0A = mozzi_TCCR0A;
594  TCCR0B = mozzi_TCCR0B;
595  OCR0A = mozzi_OCR0A;
596  TIMSK0 = mozzi_TIMSK0;
597 
598  TCCR1A = mozzi_TCCR1A;
599  TCCR1B = mozzi_TCCR1B;
600  OCR1A = mozzi_OCR1A;
601  TIMSK1 = mozzi_TIMSK1;
602 
603 #if (AUDIO_MODE == HIFI)
604 #if defined(TCCR2A)
605  TCCR2A = mozzi_TCCR2A;
606  TCCR2B = mozzi_TCCR2B;
607  OCR2A = mozzi_OCR2A;
608  TIMSK2 = mozzi_TIMSK2;
609 #elif defined(TCCR2)
610  TCCR2 = mozzi_TCCR2;
611  OCR2 = mozzi_OCR2;
612  TIMSK = mozzi_TIMSK;
613 #elif defined(TCCR4A)
614  TCCR4B = mozzi_TCCR4A;
615  TCCR4B = mozzi_TCCR4B;
616  TCCR4B = mozzi_TCCR4C;
617  TCCR4B = mozzi_TCCR4D;
618  TCCR4B = mozzi_TCCR4E;
619  OCR4C = mozzi_OCR4C;
620  TIMSK4 = mozzi_TIMSK4;
621 #endif
622 #endif
623 #endif
624 }
625 
626 
627 unsigned long audioTicks()
628 {
629  return output_buffer.count();
630 }
631 
632 
633 unsigned long mozziMicros()
634 {
635  return audioTicks() * MICROS_PER_AUDIO_TICK;
636 }
637 
638 
639 
640 // Unmodified TimerOne.cpp has TIMER3_OVF_vect.
641 // Watch out if you update the library file.
642 // The symptom will be no sound.
643 // ISR(TIMER1_OVF_vect)
644 // {
645 // Timer1.isrCallback();
646 // }
unsigned long mozziMicros()
A replacement for Arduino micros() which is disabled by Mozzi which takes over Timer 0 for control in...
Definition: MozziGuts.cpp:633
+
void updateAudio()
This is where you put your audio code.
+
void updateControl()
This is where you put your control code.
+
#define AUDIO_RATE
Holds the audio rate setting.
Definition: mozzi_config.h:61
+
#define AUDIO_INPUT_PIN
This sets which analog input channel to use for audio input, if you have #define USE_AUDIO_INPUT true...
Definition: mozzi_config.h:83
+
Circular buffer object.
+
void audioHook()
This is required in Arduino&#39;s loop().
Definition: MozziGuts.cpp:228
+
void unPauseMozzi()
Restores Mozzi audio and control interrupts, if they have been temporarily disabled with pauseMozzi()...
Definition: MozziGuts.cpp:587
+
unsigned long audioTicks()
An alternative for Arduino time funcitions like micros() which are disabled by Mozzi when it takes ov...
Definition: MozziGuts.cpp:627
+
void pauseMozzi()
Stops audio and control interrupts and restores the timers to the values they had before Mozzi was st...
Definition: MozziGuts.cpp:548
+
int getAudioInput()
This returns audio input from the input buffer, if #define USE_AUDIO_INPUT true is in the Mozzi/mozzi...
Definition: MozziGuts.cpp:144
+
void startMozzi(int control_rate_hz)
Sets up the timers for audio and control rate processes, storing the timer registers so they can be r...
Definition: MozziGuts.cpp:535
+
+
+ + + + diff --git a/extras/doc/html/_mozzi_guts_8h_source.html b/extras/doc/html/_mozzi_guts_8h_source.html new file mode 100644 index 000000000..27d027f49 --- /dev/null +++ b/extras/doc/html/_mozzi_guts_8h_source.html @@ -0,0 +1,121 @@ + + + + + + + +Mozzi: MozziGuts.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
MozziGuts.h
+
+
+
1 /*
2  * MozziGuts.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi by Tim Barrass is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef MOZZIGUTS_H_
13 #define MOZZIGUTS_H_
14 
15 //#define F_CPU 8000000 // testing
16 
17 #if ARDUINO >= 100
18  #include "Arduino.h"
19 #else
20  #include "WProgram.h"
21 #endif
22 
23 
24 
25 #include "mozzi_analog.h"
26 
38 #define CONTROL_RATE 64
39 
40 
41 
139 //enum audio_modes {STANDARD,STANDARD_PLUS,HIFI};
140 #define STANDARD 0
141 #define STANDARD_PLUS 1
142 #define HIFI 2
143 
144 
145 #include "mozzi_config.h" // User can change the config file to set audio mode
146 
147 
148 // Print warning/reminder about the AUDIO_MODE setting to the arduino console while compiling
149 #if AUDIO_MODE == STANDARD
150 #warning "AUDIO_MODE is set to STANDARD in mozzi_config.h. If things sound wrong, check if STANDARD is the correct AUDIO_MODE for your sketch."
151 #elif AUDIO_MODE == STANDARD_PLUS
152 #warning "AUDIO_MODE is set to STANDARD_PLUS in mozzi_config.h. If things sound wrong, check if STANDARD_PLUS is the correct AUDIO_MODE for your sketch."
153 #elif AUDIO_MODE == HIFI
154 #warning "AUDIO_MODE is set to HIFI in mozzi_config.h. If things sound wrong, check if HIFI is the correct AUDIO_MODE for your sketch."
155 #endif
156 
157 #if (AUDIO_MODE == STANDARD) && (AUDIO_RATE == 32768)
158 #error AUDIO_RATE 32768 does not work when AUDIO_MODE is STANDARD, try setting the AUDIO_MODE to STANDARD_PLUS in Mozzi/mozzi_config.h
159 #endif
160 
161 
162 #define CLOCK_TICKS_PER_AUDIO_TICK (F_CPU / AUDIO_RATE)
163 
164 
165 #if AUDIO_RATE == 16384
166 #define AUDIO_RATE_AS_LSHIFT 14
167 #define MICROS_PER_AUDIO_TICK 61 // 1000000 / 16384 = 61.035, ...* 256 = 15625
168 #elif AUDIO_RATE == 32768
169 #define AUDIO_RATE_AS_LSHIFT 15
170 #define MICROS_PER_AUDIO_TICK 31 // = 1000000 / 32768 = 30.518, ...* 256 = 7812.6
171 #endif
172 
173 
174 #if defined(__MK20DX128__) || defined(__MK20DX256__) // Teensy 3
175 #include "AudioConfigTeensy3_12bit.h"
176 #else
177 #if (AUDIO_MODE == STANDARD)
178 #include "AudioConfigStandard9bitPwm.h"
179 #elif (AUDIO_MODE == STANDARD_PLUS)
180 #include "AudioConfigStandardPlus.h"
181 #elif (AUDIO_MODE == HIFI)
182 #include "AudioConfigHiSpeed14bitPwm.h"
183 #endif
184 
185 #endif
186 
187 // common numeric types
188 typedef unsigned char uchar;
189 typedef unsigned int uint;
190 typedef unsigned long ulong;
191 
192 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
193 //typedef uint8_t byte;//unsigned char;
194 //typedef int8_t char;
195 //typedef (uint16_t) (short unsigned int);
196 //typedef int16_t int;
197 //typedef (uint32_t) (unsigned long);
198 //typedef int32_t long;
199 #else
200 typedef unsigned char uint8_t;
201 typedef signed char int8_t;
202 typedef unsigned int uint16_t;
203 typedef signed int int16_t;
204 typedef unsigned long uint32_t;
205 typedef signed long int32_t;
206 #endif
207 
208 
234 void startMozzi(int control_rate_hz = CONTROL_RATE);
235 
236 
237 
254 void pauseMozzi();
255 
256 
257 
264 void unPauseMozzi();
265 
273 #if (STEREO_HACK == true)
274 void updateAudio();
275 #else
276 int updateAudio();
277 #endif
278 
285 void updateControl();
286 
287 
301 void audioHook();
302 
303 
304 
320 #if (USE_AUDIO_INPUT == true)
321 int getAudioInput();
322 #endif
323 
324 
332 unsigned long audioTicks();
333 
334 
335 
344 unsigned long mozziMicros();
345 
346 
347 
348 
349 // internal use
350 #if (AUDIO_MODE == HIFI)
351 static void setupTimer2();
352 #endif
353 
354 #endif /* MOZZIGUTS_H_ */
#define CONTROL_RATE
Control rate setting.
Definition: MozziGuts.h:38
+
unsigned long mozziMicros()
A replacement for Arduino micros() which is disabled by Mozzi which takes over Timer 0 for control in...
Definition: MozziGuts.cpp:633
+
void updateAudio()
This is where you put your audio code.
+
void updateControl()
This is where you put your control code.
+
void audioHook()
This is required in Arduino&#39;s loop().
Definition: MozziGuts.cpp:228
+
void unPauseMozzi()
Restores Mozzi audio and control interrupts, if they have been temporarily disabled with pauseMozzi()...
Definition: MozziGuts.cpp:587
+
unsigned long audioTicks()
An alternative for Arduino time funcitions like micros() which are disabled by Mozzi when it takes ov...
Definition: MozziGuts.cpp:627
+
void pauseMozzi()
Stops audio and control interrupts and restores the timers to the values they had before Mozzi was st...
Definition: MozziGuts.cpp:548
+
int getAudioInput()
This returns audio input from the input buffer, if #define USE_AUDIO_INPUT true is in the Mozzi/mozzi...
Definition: MozziGuts.cpp:144
+
void startMozzi(int control_rate_hz=CONTROL_RATE)
Sets up the timers for audio and control rate processes, storing the timer registers so they can be r...
Definition: MozziGuts.cpp:535
+
+
+ + + + diff --git a/extras/doc/html/_multi_line2_8h_source.html b/extras/doc/html/_multi_line2_8h_source.html new file mode 100644 index 000000000..5186197bc --- /dev/null +++ b/extras/doc/html/_multi_line2_8h_source.html @@ -0,0 +1,125 @@ + + + + + + + +Mozzi: MultiLine2.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
MultiLine2.h
+
+
+
1 /*
2  * MultiLine.h
3  *
4  * Copyright 2012-2015 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef MultiLine_H_
13 #define MultiLine_H_
14 
15 #if ARDUINO >= 100
16  #include "Arduino.h"
17 #else
18  #include "WProgram.h"
19 #endif
20 //#include <util/atomic.h>
21 #include "Line.h"
22 #include "mozzi_fixmath.h"
23 
24 
45 template <unsigned int NUM_PHASES, unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
46 class MultiLine
47 {
48 private:
49 
50  const unsigned int LERPS_PER_CONTROL;
51 
52  unsigned int update_step_counter;
53  unsigned int num_update_steps;
54 
55  //enum {LINE1,LINE2,LINE3,LINE4,IDLE};
56 
57 
58  struct phase{
59  byte phase_type;
60  unsigned int update_steps;
61  long lerp_steps; // signed, to match params to transition (line) type Q15n16, below
62  Q15n16 level;
63  };//target1,target2,target3,target4,idle;
64 
65  phase phases[NUM_PHASES];
66  unsigned int current_phase_num;
67 
68  phase * current_phase;
69 
70  Line <Q15n16> transition;
71 
72 
73  inline
74  unsigned int convertMsecToControlUpdateSteps(unsigned int msec){
75  return (uint16_t) (((uint32_t)msec*CONTROL_UPDATE_RATE)>>10); // approximate /1000 with shift
76  }
77 
78 
79  inline
80  void setPhase(phase * next_phase) {
81  update_step_counter = 0;
82  num_update_steps = next_phase->update_steps;
83  transition.set(next_phase->level, next_phase->lerp_steps);
84  current_phase = next_phase;
85  }
86 
87 
88 
89  inline
90  void checkForAndSetNextPhase() {
91  if (++update_step_counter >= num_update_steps){
92  if(current_phase_num < NUM_PHASES) current_phase_num++;
93  setPhase(&(phases[current_phase_num]));
94  }
95  }
96 
97 
98 
99  inline
100  void setTime(phase * p, unsigned int msec)
101  {
102  p->update_steps = convertMsecToControlUpdateSteps(msec);
103  p->lerp_steps = (long) p->update_steps * LERPS_PER_CONTROL;
104  }
105 
106 
107  inline
108  void setUpdateSteps(phase * p, unsigned int steps)
109  {
110  p->update_steps = steps;
111  p->lerp_steps = (long) steps * LERPS_PER_CONTROL;
112  }
113 
114 
115 
116 public:
117 
120  MultiLine():LERPS_PER_CONTROL(LERP_RATE/CONTROL_UPDATE_RATE)
121  {
122  //for(int i=0;i++;i<NUM_PHASES-1) phases[i].phase_type =
123  // target1.phase_type = LINE1;
124  // target2.phase_type = LINE2;
125  // target3.phase_type = LINE3;
126  // target4.phase_type = LINE4;
127  // idle.phase_type = IDLE;
128  // target4.level = 0;
129  }
130 
131 
132 
136  void update(){ // control rate
137  checkForAndSetNextPhase();
138  //checkForAndSetNextPhase(&(phases[current_phase_num]));
139  /*
140  switch(current_phase->phase_type) {
141 
142  case LINE1:
143  checkForAndSetNextPhase(&target2);
144  break;
145 
146  case LINE2:
147  checkForAndSetNextPhase(&target3);
148  break;
149 
150  case LINE3:
151  checkForAndSetNextPhase(&target4);
152  break;
153 
154  case LINE4:
155  checkForAndSetNextPhase(&idle);
156  //checkForAndSetIdle();
157  break;
158 
159  case IDLE:
160  break;
161  }
162  */
163  }
164 
165 
166 
171  inline
173  {
174  return transition.next();
175  }
176 
177 
178 
181  inline
182  void start(){
183  current_phase_num = 0;
184  setPhase(&(phases[current_phase_num]));
185  }
186 
187 
188 
192  inline
193  void stop(){
194  setPhase(&(phases[NUM_PHASES-1]));
195  }
196 
197 
198 
202  inline
203  void setTargetLevel(uint8_t phase_num, Q15n16 value)
204  {
205  phases[phase_num].level=value;
206  }
207 
208 
209  // /** Set the target levels.
210  // @param target1 the new target1 level.
211  // @param target2 the new target3 level.
212  // @param target1 the new target3 level.
213  // @param target2 the new target4 level.
214  // */
215  // inline
216  // void setLevels(Q15n16 target1, Q15n16 target2, Q15n16 target3, Q15n16 target4)
217  // {
218  // setTarget1Level(target1);
219  // setTarget2Level(target2);
220  // setTarget3Level(target3);
221  // setTarget4Level(target4);
222  // setIdleLevel(0);
223  // }
224 
225 
232  inline
233  void setTargetTime(uint8_t phase_num, unsigned int msec)
234  {
235  setTime(&(phases[phase_num]), msec);
236  }
237 
238 //
239  // /** Set the target1, target2 and target4 times of the MultiLine in milliseconds.
240  // The actual times will be resolved within the resolution of CONTROL_RATE.
241  // @param target1_ms the new target1 time in milliseconds.
242  // @param target2_ms the new target2 time in milliseconds.
243  // @param target3_ms the new target3 time in milliseconds.
244  // @param target4_ms the new target4 time in milliseconds.
245  // @note Beware of low values (less than 20 or so, depending on how many steps are being taken),
246  // in case internal step size gets calculated as 0, which would mean nothing happens.
247  // */
248  // inline
249  // void setTimes(unsigned int target1_ms, unsigned int target2_ms, unsigned int target3_ms, unsigned int target4_ms)
250  // {
251  // setTarget1Time(target1_ms);
252  // setTarget2Time(target2_ms);
253  // setTarget3Time(target3_ms);
254  // setTarget4Time(target4_ms);
255  // setIdleTime(65535); // guarantee step size of line will be 0
256  // }
257 
258 
259 
263  inline
264  void setTargetUpdateSteps(uint8_t phase_num, unsigned int steps)
265  {
266  setUpdateSteps(&(phases[phase_num]), steps);
267  }
268 
269 
270  // /** Set the target1, target2 and target4 times of the MultiLine, expressed in update steps (not MultiLine::next() interpolation steps).
271  // @param target1_steps the number of update steps in the target1 phase
272  // @param target2_steps the number of update steps in the target2 phase
273  // @param target3_steps the number of update steps in the target3 phase
274  // @param target4_steps the number of update steps in the target4 phase
275  // */
276  // inline
277  // void setAllUpdateSteps(unsigned int target1_steps, unsigned int target2_steps, unsigned int target3_steps, unsigned int target4_steps)
278  // {
279  // setTarget1UpdateSteps(target1_steps);
280  // setTarget2UpdateSteps(target2_steps);
281  // setTarget3UpdateSteps(target3_steps);
282  // setTarget4UpdateSteps(target4_steps);
283  // setIdleUpdateSteps(65535); // guarantee? step size of line will be 0?
284  // }
285 
286 
287 
291  inline
292  bool playing()
293  {
294  return current_phase_num != NUM_PHASES-1;
295  }
296 
297 
298 };
299 
300 
305 #endif /* MultiLine_H_ */
void set(T value)
Set the current value of the line.
Definition: Line.h:77
+
void setTargetLevel(uint8_t phase_num, Q15n16 value)
Set the target1 level of the MultiLine.
Definition: MultiLine2.h:203
+
int32_t Q15n16
signed fractional number using 15 integer bits and 16 fractional bits, represents -32767...
Definition: mozzi_fixmath.h:40
+
void stop()
Start the target4 phase of the MultiLine.
Definition: MultiLine2.h:193
+
bool playing()
Set the target1, target2 and target4 times of the MultiLine, expressed in update steps (not MultiLine...
Definition: MultiLine2.h:292
+
MultiLine()
Constructor.
Definition: MultiLine2.h:120
+
void setTargetTime(uint8_t phase_num, unsigned int msec)
Set the target levels.
Definition: MultiLine2.h:233
+
void update()
Updates the internal controls of the MultiLine.
Definition: MultiLine2.h:136
+
A simple MultiLine envelope generator.
Definition: MultiLine.h:45
+
void setTargetUpdateSteps(uint8_t phase_num, unsigned int steps)
Set the target1, target2 and target4 times of the MultiLine in milliseconds.
Definition: MultiLine2.h:264
+ +
Q15n16 next()
Advances one step along the MultiLine and returns the level.
Definition: MultiLine2.h:172
+
void start()
Start the target1 phase of the MultiLine.
Definition: MultiLine2.h:182
+
T next()
Increments one step along the line.
Definition: Line.h:59
+
+
+ + + + diff --git a/extras/doc/html/_multi_line_8h_source.html b/extras/doc/html/_multi_line_8h_source.html new file mode 100644 index 000000000..55534f2e6 --- /dev/null +++ b/extras/doc/html/_multi_line_8h_source.html @@ -0,0 +1,137 @@ + + + + + + + +Mozzi: MultiLine.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
MultiLine.h
+
+
+
1 /*
2  * MultiLine.h
3  *
4  * Copyright 2012-2015 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef MultiLine_H_
13 #define MultiLine_H_
14 
15 #if ARDUINO >= 100
16  #include "Arduino.h"
17 #else
18  #include "WProgram.h"
19 #endif
20 //#include <util/atomic.h>
21 #include "Line.h"
22 #include "mozzi_fixmath.h"
23 
24 
44 template <unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
45 class MultiLine
46 {
47 private:
48 
49  const unsigned int LERPS_PER_CONTROL;
50 
51  unsigned int update_step_counter;
52  unsigned int num_update_steps;
53 
54  enum {LINE1,LINE2,LINE3,LINE4,IDLE};
55 
56 
57  struct phase{
58  byte phase_type;
59  unsigned int update_steps;
60  long lerp_steps; // signed, to match params to transition (line) type Q15n16, below
61  Q15n16 level;
62  }target1,target2,target3,target4,idle;
63 
64  phase * current_phase;
65  Line <Q15n16> transition;
66 
67  inline
68  unsigned int convertMsecToControlUpdateSteps(unsigned int msec){
69  return (uint16_t) (((uint32_t)msec*CONTROL_UPDATE_RATE)>>10); // approximate /1000 with shift
70  }
71 
72 
73  inline
74  void setPhase(phase * next_phase) {
75  update_step_counter = 0;
76  num_update_steps = next_phase->update_steps;
77  transition.set(next_phase->level, next_phase->lerp_steps);
78  current_phase = next_phase;
79  }
80 
81 
82 
83  inline
84  void checkForAndSetNextPhase(phase * next_phase) {
85  if (++update_step_counter >= num_update_steps){
86  setPhase(next_phase);
87  }
88  }
89 
90 
91 
92  inline
93  void setTime(phase * p, unsigned int msec)
94  {
95  p->update_steps = convertMsecToControlUpdateSteps(msec);
96  p->lerp_steps = (long) p->update_steps * LERPS_PER_CONTROL;
97  }
98 
99 
100  inline
101  void setUpdateSteps(phase * p, unsigned int steps)
102  {
103  p->update_steps = steps;
104  p->lerp_steps = (long) steps * LERPS_PER_CONTROL;
105  }
106 
107 
108 
109 public:
110 
113  MultiLine():LERPS_PER_CONTROL(LERP_RATE/CONTROL_UPDATE_RATE)
114  {
115  target1.phase_type = LINE1;
116  target2.phase_type = LINE2;
117  target3.phase_type = LINE3;
118  target4.phase_type = LINE4;
119  idle.phase_type = IDLE;
120  target4.level = 0;
121  }
122 
123 
124 
128  void update(){ // control rate
129 
130  switch(current_phase->phase_type) {
131 
132  case LINE1:
133  checkForAndSetNextPhase(&target2);
134  break;
135 
136  case LINE2:
137  checkForAndSetNextPhase(&target3);
138  break;
139 
140  case LINE3:
141  checkForAndSetNextPhase(&target4);
142  break;
143 
144  case LINE4:
145  checkForAndSetNextPhase(&idle);
146  //checkForAndSetIdle();
147  break;
148 
149  case IDLE:
150  break;
151  }
152  }
153 
154 
155 
160  inline
162  {
163  return transition.next();
164  }
165 
166 
167 
170  inline
171  void start(){
172  setPhase(&target1);
173  }
174 
175 
176 
180  inline
181  void stop(){
182  setPhase(&target4);
183  }
184 
185 
186 
190  inline
192  {
193  target1.level=value;
194  }
195 
196 
197 
201  inline
203  {
204  target2.level=value;
205  }
206 
207 
212  inline
214  {
215  target3.level=value;
216  }
217 
222  inline
224  {
225  target4.level=value;
226  }
227 
228 
229  inline
230  void setIdleLevel(Q15n16 value)
231  {
232  idle.level=value;
233  }
234 
235 
242  inline
243  void setLevels(Q15n16 target1, Q15n16 target2, Q15n16 target3, Q15n16 target4)
244  {
245  setTarget1Level(target1);
246  setTarget2Level(target2);
247  setTarget3Level(target3);
248  setTarget4Level(target4);
249  setIdleLevel(0);
250  }
251 
252 
259  inline
260  void setTarget1Time(unsigned int msec)
261  {
262  setTime(&target1, msec);
263  }
264 
265 
272  inline
273  void setTarget2Time(unsigned int msec)
274  {
275  setTime(&target2, msec);
276  }
277 
278 
286  inline
287  void setTarget3Time(unsigned int msec)
288  {
289  setTime(&target3, msec);
290  }
291 
292 
293 
300  inline
301  void setTarget4Time(unsigned int msec)
302  {
303  setTime(&target4, msec);
304  }
305 
306 
307  inline
308  void setIdleTime(unsigned int msec)
309  {
310  setTime(&idle, msec);
311  }
312 
313 
323  inline
324  void setTimes(unsigned int target1_ms, unsigned int target2_ms, unsigned int target3_ms, unsigned int target4_ms)
325  {
326  setTarget1Time(target1_ms);
327  setTarget2Time(target2_ms);
328  setTarget3Time(target3_ms);
329  setTarget4Time(target4_ms);
330  setIdleTime(65535); // guarantee step size of line will be 0
331  }
332 
333 
334 
338  inline
339  void setTarget1UpdateSteps(unsigned int steps)
340  {
341  setUpdateSteps(&target1, steps);
342  }
343 
344 
348  inline
349  void setTarget2UpdateSteps(unsigned int steps)
350  {
351  setUpdateSteps(&target2, steps);
352  }
353 
354 
358  inline
359  void setTarget3UpdateSteps(unsigned int steps)
360  {
361  setUpdateSteps(&target3, steps);
362  }
363 
364 
368  inline
369  void setTarget4UpdateSteps(unsigned int steps)
370  {
371  setUpdateSteps(&target4, steps);
372  }
373 
374 
375  inline
376  void setIdleUpdateSteps(unsigned int steps)
377  {
378  setUpdateSteps(&idle, steps);
379  }
380 
387  inline
388  void setAllUpdateSteps(unsigned int target1_steps, unsigned int target2_steps, unsigned int target3_steps, unsigned int target4_steps)
389  {
390  setTarget1UpdateSteps(target1_steps);
391  setTarget2UpdateSteps(target2_steps);
392  setTarget3UpdateSteps(target3_steps);
393  setTarget4UpdateSteps(target4_steps);
394  setIdleUpdateSteps(65535); // guarantee? step size of line will be 0?
395  }
396 
397 
398 
402  inline
403  bool playing()
404  {
405  return !(current_phase->phase_type==IDLE);
406  }
407 
408 
409 };
410 
411 
416 #endif /* MultiLine_H_ */
void set(T value)
Set the current value of the line.
Definition: Line.h:77
+
void setTarget3Level(Q15n16 value)
Set the target3 level of the MultiLine.
Definition: MultiLine.h:213
+
void setTarget3Time(unsigned int msec)
Set the target3 time of the MultiLine in milliseconds.
Definition: MultiLine.h:287
+
int32_t Q15n16
signed fractional number using 15 integer bits and 16 fractional bits, represents -32767...
Definition: mozzi_fixmath.h:40
+
void setTarget2Level(Q15n16 value)
Set the target2 level of the MultiLine.
Definition: MultiLine.h:202
+
void stop()
Start the target4 phase of the MultiLine.
Definition: MultiLine.h:181
+
bool playing()
Tells if the envelope is currently playing.
Definition: MultiLine.h:403
+
MultiLine()
Constructor.
Definition: MultiLine.h:113
+
void setTarget4UpdateSteps(unsigned int steps)
Set the target4 time of the MultiLine, expressed as the number of update steps (not MultiLine::next()...
Definition: MultiLine.h:369
+
void setTarget4Time(unsigned int msec)
Set the target4 time of the MultiLine in milliseconds.
Definition: MultiLine.h:301
+
void update()
Updates the internal controls of the MultiLine.
Definition: MultiLine.h:128
+
void setTarget2Time(unsigned int msec)
Set the target2 time of the MultiLine in milliseconds.
Definition: MultiLine.h:273
+
A simple MultiLine envelope generator.
Definition: MultiLine.h:45
+
void setTarget1Level(Q15n16 value)
Set the target1 level of the MultiLine.
Definition: MultiLine.h:191
+ +
void setTarget3UpdateSteps(unsigned int steps)
Set the target3 time of the MultiLine, expressed as the number of update steps (not MultiLine::next()...
Definition: MultiLine.h:359
+
Q15n16 next()
Advances one step along the MultiLine and returns the level.
Definition: MultiLine.h:161
+
void setTimes(unsigned int target1_ms, unsigned int target2_ms, unsigned int target3_ms, unsigned int target4_ms)
Set the target1, target2 and target4 times of the MultiLine in milliseconds.
Definition: MultiLine.h:324
+
void setTarget4Level(Q15n16 value)
Set the target4 level of the MultiLine.
Definition: MultiLine.h:223
+
void setTarget2UpdateSteps(unsigned int steps)
Set the target2 time of the MultiLine, expressed as the number of update steps (not MultiLine::next()...
Definition: MultiLine.h:349
+
void setAllUpdateSteps(unsigned int target1_steps, unsigned int target2_steps, unsigned int target3_steps, unsigned int target4_steps)
Set the target1, target2 and target4 times of the MultiLine, expressed in update steps (not MultiLine...
Definition: MultiLine.h:388
+
void start()
Start the target1 phase of the MultiLine.
Definition: MultiLine.h:171
+
void setTarget1Time(unsigned int msec)
Set the target1 time of the MultiLine in milliseconds.
Definition: MultiLine.h:260
+
void setTarget1UpdateSteps(unsigned int steps)
Set the target1 time of the MultiLine, expressed as the number of update steps (not MultiLine::next()...
Definition: MultiLine.h:339
+
void setLevels(Q15n16 target1, Q15n16 target2, Q15n16 target3, Q15n16 target4)
Set the target1, target2, target3 and target4 levels.
Definition: MultiLine.h:243
+
T next()
Increments one step along the line.
Definition: Line.h:59
+
+
+ + + + diff --git a/extras/doc/html/_oscil_8h_source.html b/extras/doc/html/_oscil_8h_source.html new file mode 100644 index 000000000..37e5d35ab --- /dev/null +++ b/extras/doc/html/_oscil_8h_source.html @@ -0,0 +1,131 @@ + + + + + + + +Mozzi: Oscil.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Oscil.h
+
+
+
1 /*
2  * Oscil.h
3  *
4  * Oscil.h owes much to AF_precision_synthesis.pde, 2009, Adrian Freed.
5  *
6  * Copyright 2012 Tim Barrass, 2009 Adrian Freed.
7  *
8  * This file is part of Mozzi.
9  *
10  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
11  *
12  */
13 
14 #ifndef OSCIL_H_
15 #define OSCIL_H_
16 
17 #if ARDUINO >= 100
18  #include "Arduino.h"
19 #else
20  #include "WProgram.h"
21 #endif
22 #include "MozziGuts.h"
23 #include "mozzi_fixmath.h"
24 #include <util/atomic.h>
25 
26 
27 #ifdef OSCIL_DITHER_PHASE
28 #include "mozzi_rand.h"
29 #endif
30 
31 // fractional bits for oscillator index precision
32 #define OSCIL_F_BITS 16
33 #define OSCIL_F_BITS_AS_MULTIPLIER 65536
34 
35 // phmod_proportion is an 15n16 fixed-point number
36 #define OSCIL_PHMOD_BITS 16
37 
38 
39 
63 //template <unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, bool DITHER_PHASE=false>
64 template <uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
65 class Oscil
66 {
67 
68 
69 public:
75  Oscil(const int8_t * TABLE_NAME):table(TABLE_NAME)
76  {}
77 
78 
86  {}
87 
88 
92  inline
93  int8_t next()
94  {
95  incrementPhase();
96  return readTable();
97  }
98 
99 
103  void setTable(const int8_t * TABLE_NAME)
104  {
105  table = TABLE_NAME;
106  }
107 
108 
113  // This could be called in the control interrupt, so phase_fractional should really be volatile,
114  // but that could limit optimisation. Since phase_fractional gets changed often in updateAudio()
115  // (in loop()), it's probably worth keeping it nonvolatile until it causes problems
116  void setPhase(unsigned int phase)
117  {
118  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
119  {
120  phase_fractional = (unsigned long)phase << OSCIL_F_BITS;
121  }
122  }
123 
128  // This could be called in the control interrupt, so phase_fractional should really be volatile,
129  // but that could limit optimisation. Since phase_fractional gets changed often in updateAudio()
130  // (in loop()), it's probably worth keeping it nonvolatile until it causes problems
131  void setPhaseFractional(unsigned long phase)
132  {
133  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
134  {
135  phase_fractional = phase;
136  }
137  }
138 
139 
143  unsigned long getPhaseFractional()
144  {
145  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
146  {
147  return phase_fractional;
148  }
149  }
150 
151 
152 
160  // PM: cos((angle += incr) + change)
161  // FM: cos(angle += (incr + change))
162  // The ratio of deviation to modulation frequency is called the "index of modulation". ( I = d / Fm )
163  inline
164  int8_t phMod(Q15n16 phmod_proportion)
165  {
166  incrementPhase();
167  return (int8_t)pgm_read_byte_near(table + (((phase_fractional+(phmod_proportion * NUM_TABLE_CELLS))>>OSCIL_F_BITS) & (NUM_TABLE_CELLS - 1)));
168  }
169 
170 
178  inline
179  void setFreq (int frequency) {
180  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
181  {
182  // TB2014-8-20 change this following Austin Grossman's suggestion on user list
183  // https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mozzi-users/u4D5NMzVnQs/pCmiWInFvrkJ
184  //phase_increment_fractional = ((((unsigned long)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)*frequency)/UPDATE_RATE) << (OSCIL_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS);
185  // to this:
186  phase_increment_fractional = ((unsigned long)frequency) * ((OSCIL_F_BITS_AS_MULTIPLIER*NUM_TABLE_CELLS)/UPDATE_RATE);
187  }
188  }
189 
190 
196  inline
197  void setFreq(float frequency)
198  { // 1 us - using float doesn't seem to incur measurable overhead with the oscilloscope
199  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
200  {
201  phase_increment_fractional = (unsigned long)((((float)NUM_TABLE_CELLS * frequency)/UPDATE_RATE) * OSCIL_F_BITS_AS_MULTIPLIER);
202  }
203  }
204 
205 
213  inline
214  void setFreq_Q24n8(Q24n8 frequency)
215  {
216 
217  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
218  {
219  //phase_increment_fractional = (frequency* (NUM_TABLE_CELLS>>3)/(UPDATE_RATE>>6)) << (F_BITS-(8-3+6));
220 // TB2016-10-2 line below might have been left in accidentally while making the 2014 change below, remove for now
221 // phase_increment_fractional = (((((unsigned long)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)>>3)*frequency)/(UPDATE_RATE>>6))
222 // << (OSCIL_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS - (8-3+6));
223 
224  // TB2014-8-20 change this following Austin Grossman's suggestion on user list
225  // https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mozzi-users/u4D5NMzVnQs/pCmiWInFvrkJ
226  if ((256UL*NUM_TABLE_CELLS) >= UPDATE_RATE) {
227  phase_increment_fractional = ((unsigned long)frequency) * ((256UL*NUM_TABLE_CELLS)/UPDATE_RATE);
228  } else {
229  phase_increment_fractional = ((unsigned long)frequency) / (UPDATE_RATE/(256UL*NUM_TABLE_CELLS));
230  }
231  }
232 
233 
234  }
235 
236 
245  inline
246  void setFreq_Q16n16(Q16n16 frequency)
247  {
248  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
249  {
250  //phase_increment_fractional = ((frequency * (NUM_TABLE_CELLS>>7))/(UPDATE_RATE>>6)) << (F_BITS-16+1);
251  // TB2014-8-20 change this following Austin Grossman's suggestion on user list
252  // https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mozzi-users/u4D5NMzVnQs/pCmiWInFvrkJ
253  //phase_increment_fractional = (((((uint32_t)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)>>7)*frequency)/(UPDATE_RATE>>6))
254  // << (OSCIL_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS - 16 + 1);
255  if (NUM_TABLE_CELLS >= UPDATE_RATE) {
256  phase_increment_fractional = ((unsigned long)frequency) * (NUM_TABLE_CELLS/UPDATE_RATE);
257  } else {
258  phase_increment_fractional = ((unsigned long)frequency) / (UPDATE_RATE/NUM_TABLE_CELLS);
259  }
260 
261  }
262  }
263 /*
264  inline
265  void setFreqMidi(int8_t note_num) {
266  setFreq_Q16n16(mtof(note_num));
267  }
268 */
274  inline
275  int8_t atIndex(unsigned int index)
276  {
277  return (int8_t)pgm_read_byte_near(table + (index & (NUM_TABLE_CELLS - 1)));
278  }
279 
280 
291  inline
292  const
293  unsigned long phaseIncFromFreq(int frequency)
294  {
295  // TB2014-8-20 change this following Austin Grossman's suggestion on user list
296  // https://groups.google.com/forum/?utm_medium=email&utm_source=footer#!msg/mozzi-users/u4D5NMzVnQs/pCmiWInFvrkJ
297  //return (((unsigned long)frequency * NUM_TABLE_CELLS)/UPDATE_RATE) << OSCIL_F_BITS;
298  return ((unsigned long)frequency) * ((OSCIL_F_BITS_AS_MULTIPLIER*NUM_TABLE_CELLS)/UPDATE_RATE);
299  }
300 
301 
305  inline
306  void setPhaseInc(unsigned long phaseinc_fractional)
307  {
308  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
309  {
310  phase_increment_fractional = phaseinc_fractional;
311  }
312  }
313 
314 
315 
316 private:
317 
318 
321 static const uint8_t ADJUST_FOR_NUM_TABLE_CELLS = (NUM_TABLE_CELLS<2048) ? 8 : 0;
322 
323 
326  inline
327  void incrementPhase()
328  {
329  //phase_fractional += (phase_increment_fractional | 1); // odd phase incr, attempt to reduce frequency spurs in output
330  phase_fractional += phase_increment_fractional;
331  }
332 
333 
336  inline
337  int8_t readTable()
338  {
339 #ifdef OSCIL_DITHER_PHASE
340  return (int8_t)pgm_read_byte_near(table + (((phase_fractional + ((int)(xorshift96()>>16))) >> OSCIL_F_BITS) & (NUM_TABLE_CELLS - 1)));
341 #else
342  return (int8_t)pgm_read_byte_near(table + ((phase_fractional >> OSCIL_F_BITS) & (NUM_TABLE_CELLS - 1)));
343  //return (int8_t)pgm_read_byte_near(table + (((phase_fractional >> OSCIL_F_BITS) | 1 ) & (NUM_TABLE_CELLS - 1))); odd phase, attempt to reduce frequency spurs in output
344 #endif
345  }
346 
347 
348  unsigned long phase_fractional;
349  volatile unsigned long phase_increment_fractional; // volatile with atomic access because it can
350  // be set in the updateControl() interrupt and
351  // used in updateAudio(), which is outside the
352  // interrupt.
353  const int8_t * table;
354 
355 };
356 
357 
363 #endif /* OSCIL_H_ */
int8_t next()
Updates the phase according to the current frequency and returns the sample at the new phase position...
Definition: Oscil.h:93
+
int32_t Q15n16
signed fractional number using 15 integer bits and 16 fractional bits, represents -32767...
Definition: mozzi_fixmath.h:40
+
unsigned long getPhaseFractional()
Get the phase of the Oscil in fractional format.
Definition: Oscil.h:143
+
Oscil plays a wavetable, cycling through the table to generate an audio or control signal...
Definition: Oscil.h:65
+
const unsigned long phaseIncFromFreq(int frequency)
phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies...
Definition: Oscil.h:293
+
void setFreq(int frequency)
Set the oscillator frequency with an unsigned int.
Definition: Oscil.h:179
+
void setPhaseFractional(unsigned long phase)
Set the phase of the Oscil.
Definition: Oscil.h:131
+
void setPhase(unsigned int phase)
Set the phase of the Oscil.
Definition: Oscil.h:116
+
int8_t phMod(Q15n16 phmod_proportion)
Returns the next sample given a phase modulation value.
Definition: Oscil.h:164
+
Oscil(const int8_t *TABLE_NAME)
Constructor.
Definition: Oscil.h:75
+
void setTable(const int8_t *TABLE_NAME)
Change the sound table which will be played by the Oscil.
Definition: Oscil.h:103
+
void setFreq(float frequency)
Set the oscillator frequency with a float.
Definition: Oscil.h:197
+
int8_t atIndex(unsigned int index)
Returns the sample at the given table index.
Definition: Oscil.h:275
+
unsigned long xorshift96()
Random number generator.
Definition: mozzi_rand.cpp:17
+
uint32_t Q24n8
unsigned fractional number using 24 integer bits and 8 fractional bits, represents 0 to 16777215 ...
Definition: mozzi_fixmath.h:45
+
void setFreq_Q16n16(Q16n16 frequency)
Set the frequency using Q16n16 fixed-point number format.
Definition: Oscil.h:246
+
void setPhaseInc(unsigned long phaseinc_fractional)
Set a specific phase increment.
Definition: Oscil.h:306
+
uint32_t Q16n16
unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535...
Definition: mozzi_fixmath.h:46
+
Oscil()
Constructor.
Definition: Oscil.h:85
+
void setFreq_Q24n8(Q24n8 frequency)
Set the frequency using Q24n8 fixed-point number format.
Definition: Oscil.h:214
+
+
+ + + + diff --git a/extras/doc/html/_over_sample_8h_source.html b/extras/doc/html/_over_sample_8h_source.html new file mode 100644 index 000000000..812836010 --- /dev/null +++ b/extras/doc/html/_over_sample_8h_source.html @@ -0,0 +1,113 @@ + + + + + + + +Mozzi: OverSample.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
OverSample.h
+
+
+
1 #ifndef OVERSAMPLE_H
2 #define OVERSAMPLE_H
3 
4 /*
5  * OverSample.h
6  *
7  * Copyright 2013 Tim Barrass.
8  *
9  * This file is part of Mozzi.
10  *
11  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
12  *
13  */
14 
15  #include "RollingAverage.h"
16 
17 
41 template <class T, const uint8_t RESOLUTION_INCREASE_BITS>
42 class OverSample: public RollingAverage<T, (1<<(RESOLUTION_INCREASE_BITS*2))>
43 {
44 
45 public:
46  using RollingAverage<T, (1<<(RESOLUTION_INCREASE_BITS*2))>::add;
47 
53  T next(T input)
54  {
55  return add(input)>>RESOLUTION_INCREASE_BITS;
56  }
57 
58 };
59 
60 
66 #endif // #ifndef OVERSAMPLE_H
Calculates a running average over a specified number of the most recent readings. ...
+
Enables the resolution of analog inputs to be increased by oversampling and decimation.
Definition: OverSample.h:42
+
+
+ + + + diff --git a/extras/doc/html/_p_d_resonant_8h_source.html b/extras/doc/html/_p_d_resonant_8h_source.html new file mode 100644 index 000000000..5cf09b918 --- /dev/null +++ b/extras/doc/html/_p_d_resonant_8h_source.html @@ -0,0 +1,133 @@ + + + + + + + +Mozzi: PDResonant.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PDResonant.h
+
+
+
1 /*
2  * PDResonant.h
3  *
4  * This implementation copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 
13 
14 #include <mozzi_midi.h>
15 #include <ADSR.h>
16 #include <Oscil.h>
17 #include <Phasor.h>
18 // wavetable for oscillator:
19 #include <tables/sin2048_int8.h>
20 
34 {
35 
36 public:
37 
41  PDM_SCALE(0.05)
42  {
43  aOsc.setTable(SIN2048_DATA);
44  aAmpEnv.setADLevels(255, 255);
45  aAmpEnv.setTimes(50, 300, 60000, 1000);
46  kResonantFreqEnv.setADLevels(255,100);
47  }
48 
54  void noteOn(byte channel, byte pitch, byte velocity)
55  {
56  kResonantFreqEnv.noteOn();
57  aAmpEnv.noteOn();
58  freq = mtof(pitch);
59  aBaseCounter.setFreq(freq); // gets modulated in updateControl()
60  aResonanceFreqCounter.setFreq(freq);
61  }
62 
63 
69  void noteOff(byte channel, byte pitch, byte velocity)
70  {
71  aAmpEnv.noteOff();
72  kResonantFreqEnv.noteOff();
73  }
74 
75 
80  void setPDEnv(int attack, int decay)
81  {
82  // sustain and release timesare hardcoded here but don't need to be
83  kResonantFreqEnv.setTimes(attack, decay, 60000, 1000);
84  kResonantFreqEnv.update();
85 
86  float resonance_freq = freq + ((float)freq * ((float)kResonantFreqEnv.next()*PDM_SCALE));
87  aResonanceFreqCounter.setFreq(resonance_freq);
88  }
89 
90 
93  void update()
94  {
95  aAmpEnv.update();
96  kResonantFreqEnv.update();
97  // change freq of resonant freq counter, following the envelope
98  float resonance_freq = freq + ((float)freq * ((float)kResonantFreqEnv.next()*PDM_SCALE));
99  aResonanceFreqCounter.setFreq(resonance_freq);
100  }
101 
104  int next()
105  {
106  static byte previous_base_counter;
107  byte base_counter = aBaseCounter.next()>>24;
108 
109  // reset resonance counter (wiki b.)
110  if (base_counter<previous_base_counter) aResonanceFreqCounter.set(0);
111  previous_base_counter= base_counter;
112 
113  // index (phase) needs to end up as 11bit to match 2048 wavetable size
114  unsigned int index = aResonanceFreqCounter.next()>>21; // 11 bits fits 2048 cell sin table
115 
116  // amp ramp smooths the jump when aResonanceFreqCounter is reset (wiki d.)
117  byte amp_ramp = 255-base_counter;
118 
119  // wiki e., with amp envelope added
120  return ((long)aAmpEnv.next() * amp_ramp * aOsc.atIndex(index))>>16;
121 
122  // return ((index>>3)*amp_ramp)>>8; // this also sounds good - squelchy sawtooth
123  }
124 
125 
126 private:
127  const float PDM_SCALE;
128  byte amp;
129  int freq;
130 
131  Phasor <AUDIO_RATE> aBaseCounter;
132  Phasor <AUDIO_RATE> aResonanceFreqCounter;
133 
136  ADSR <CONTROL_RATE, CONTROL_RATE> kResonantFreqEnv;
137 
138 };
unsigned char next()
Advances one audio step along the ADSR and returns the level.
Definition: ADSR.h:164
+
void setFreq(int frequency)
Set the Phasor frequency with an unsigned int.
Definition: Phasor.h:76
+
int next()
Produce the audio output.
Definition: PDResonant.h:104
+
float mtof(float midival)
Converts midi note number to frequency.
Definition: mozzi_midi.cpp:17
+
void setTimes(unsigned int attack_ms, unsigned int decay_ms, unsigned int sustain_ms, unsigned int release_ms)
Set the attack, decay and release times of the ADSR in milliseconds.
Definition: ADSR.h:346
+ +
PDResonant()
Constructor.
Definition: PDResonant.h:40
+
void noteOff()
Start the release phase of the ADSR.
Definition: ADSR.h:187
+
void update()
Update the filter sweep.
Definition: PDResonant.h:93
+
void setTable(const int8_t *TABLE_NAME)
Change the sound table which will be played by the Oscil.
Definition: Oscil.h:103
+
int8_t atIndex(unsigned int index)
Returns the sample at the given table index.
Definition: Oscil.h:275
+
PDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter...
Definition: PDResonant.h:33
+
void set(unsigned long value)
Set the current value of the phasor.
Definition: Phasor.h:64
+
void noteOn(byte channel, byte pitch, byte velocity)
Play a note in response to midi input.
Definition: PDResonant.h:54
+
unsigned long next()
Increments one step along the phase.
Definition: Phasor.h:51
+
void update()
Updates the internal controls of the ADSR.
Definition: ADSR.h:131
+
void setADLevels(byte attack, byte decay)
Set the attack and decay levels of the ADSR.
Definition: ADSR.h:248
+
void noteOn()
Start the attack phase of the ADSR.
Definition: ADSR.h:176
+ +
void setPDEnv(int attack, int decay)
Set the resonant filter sweep parameters.
Definition: PDResonant.h:80
+
void noteOff(byte channel, byte pitch, byte velocity)
Stop a note in response to midi input.
Definition: PDResonant.h:69
+ +
+
+ + + + diff --git a/extras/doc/html/_phasor_8h_source.html b/extras/doc/html/_phasor_8h_source.html new file mode 100644 index 000000000..db6575725 --- /dev/null +++ b/extras/doc/html/_phasor_8h_source.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Phasor.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Phasor.h
+
+
+
1 /*
2  * Phasor.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef PHASOR_H_
13 #define PHASOR_H_
14 
15 #if ARDUINO >= 100
16  #include "Arduino.h"
17 #else
18  #include "WProgram.h"
19 #endif
20 #include "mozzi_fixmath.h"
21 #include <util/atomic.h>
22 
23 #define PHASOR_MAX_VALUE_UL 4294967295UL
24 
32 template <unsigned int UPDATE_RATE>
33 class Phasor
34 {
35 private:
36  unsigned long current_value;
37  volatile unsigned long step_size;
38 
39 public:
43  Phasor (){
44  ;
45  }
46 
50  inline
51  unsigned long next()
52  {
53  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
54  {
55  current_value += step_size; // will wrap
56  }
57  return current_value;
58  }
59 
63  inline
64  void set(unsigned long value)
65  {
66  current_value=value;
67  }
68 
69 
75  inline
76  void setFreq( int frequency)
77  {
78  step_size = ((((unsigned long)((PHASOR_MAX_VALUE_UL>>8)+1))/(UPDATE_RATE))*frequency)<<8;
79  }
80 
81 
86  inline
87  void setFreq(float frequency)
88  { // 1 us - using float doesn't seem to incur measurable overhead with the oscilloscope
89  //ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
90  //{
91  step_size = (unsigned long)(((float)PHASOR_MAX_VALUE_UL/UPDATE_RATE)*frequency);
92 
93  //}
94  }
95 
105  inline
106  unsigned long phaseIncFromFreq(int frequency)
107  {
108  return ((((unsigned long)((PHASOR_MAX_VALUE_UL>>8)+1))/(UPDATE_RATE))*frequency)<<8;
109  }
110 
111 
115  inline
116  void setPhaseInc(unsigned long stepsize)
117  {
118  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
119  {
120  step_size = stepsize;
121  }
122  }
123 
124 };
125 
131 #endif /* PHASOR_H_ */
unsigned long phaseIncFromFreq(int frequency)
phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies...
Definition: Phasor.h:106
+
void setFreq(int frequency)
Set the Phasor frequency with an unsigned int.
Definition: Phasor.h:76
+
Phasor()
Constructor.
Definition: Phasor.h:43
+
void setFreq(float frequency)
Set the Phasor frequency with a float.
Definition: Phasor.h:87
+
void setPhaseInc(unsigned long stepsize)
Set a specific phase increment.
Definition: Phasor.h:116
+
unsigned long next()
Increments one step along the phase.
Definition: Phasor.h:51
+
Phasor repeatedly generates a high resolution ramp at a variable frequency.
Definition: Phasor.h:33
+
+
+ + + + diff --git a/extras/doc/html/_portamento_8h_source.html b/extras/doc/html/_portamento_8h_source.html new file mode 100644 index 000000000..b593b1ed5 --- /dev/null +++ b/extras/doc/html/_portamento_8h_source.html @@ -0,0 +1,121 @@ + + + + + + + +Mozzi: Portamento.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Portamento.h
+
+
+
1 /*
2  * Portamento.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef PORTAMENTO_H_
13 #define PORTAMENTO_H_
14 
15 #include "mozzi_midi.h"
16 #include "mozzi_fixmath.h"
17 #include "Line.h"
18 
21 template <unsigned int CONTROL_UPDATE_RATE>
22 class
23  Portamento {
24 
25 public:
26 
30  MICROS_PER_CONTROL_STEP(1000000/CONTROL_UPDATE_RATE)
31  {
32  }
33 
37  inline
38  void setTime(unsigned int milliseconds){
39  //control_steps_per_portamento = ((long)milliseconds*1000)/MICROS_PER_CONTROL_STEP; // more accurate but slower
40  control_steps_per_portamento = convertMsecToControlSteps(milliseconds);
41  }
42 
46  inline
47  void start(uint8_t note) {
48  target_freq = Q16n16_mtof(Q8n0_to_Q16n16(note));
49  aPortamentoLine.set(target_freq, control_steps_per_portamento);
50  countdown = control_steps_per_portamento;
51  portamento_on=true;
52  }
53 
57  inline
58  void start(Q16n16 note) {
59  target_freq = Q16n16_mtof(note);
60  aPortamentoLine.set(target_freq, control_steps_per_portamento);
61  countdown = control_steps_per_portamento;
62  portamento_on=true;
63  }
64 
65 
71  inline
73  if (portamento_on==true){
74  if(--countdown < 0) {
75  // stay level when portamento has finished
76  aPortamentoLine.set(target_freq, target_freq, control_steps_per_portamento);
77  portamento_on=false;
78  }
79  }
80  return aPortamentoLine.next();
81  }
82 
83  private:
84 
85  int countdown;
86  int control_steps_per_portamento;
87  Q16n16 target_freq;
88  bool portamento_on;
89  const unsigned int MICROS_PER_CONTROL_STEP;
90  Line <Q16n16> aPortamentoLine;
91 
92 
93  // copied from ADSR.h
94  inline
95  static const unsigned int convertMsecToControlSteps(unsigned int msec){
96  return (uint16_t) (((uint32_t)msec*CONTROL_UPDATE_RATE)>>10); // approximate /1000 with shift
97  }
98 
99 };
100 
106 #endif /* PORTAMENTO_H_ */
Q16n16 Q16n16_mtof(Q16n16 midival_fractional)
Converts midi note number to frequency with speed and accuracy.
Definition: mozzi_midi.cpp:131
+
A simple portamento (pitch slide from one note to the next) effect, useful for note-based application...
Definition: Portamento.h:22
+
void setTime(unsigned int milliseconds)
Set how long it will take to slide from note to note, in milliseconds.
Definition: Portamento.h:38
+
void start(uint8_t note)
Call this at note-on, it initialises the portamento.
Definition: Portamento.h:47
+
void start(Q16n16 note)
Call this at note-on, it initialises the portamento.
Definition: Portamento.h:58
+ +
uint32_t Q16n16
unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535...
Definition: mozzi_fixmath.h:46
+
Q16n16 Q8n0_to_Q16n16(Q8n0 a)
Convert Q8n0 uint8_t to Q16n16 fix.
+
Q16n16 next()
Use this in updateControl() to provide a frequency to the oscillator it&#39;s controlling.
Definition: Portamento.h:72
+
Portamento()
Constructor.
Definition: Portamento.h:29
+
+
+ + + + diff --git a/extras/doc/html/_r_cpoll_8h_source.html b/extras/doc/html/_r_cpoll_8h_source.html new file mode 100644 index 000000000..9fd00fbda --- /dev/null +++ b/extras/doc/html/_r_cpoll_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +Mozzi: RCpoll.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
RCpoll.h
+
+
+
1 #ifndef RCPOLL_H
2 #define RCPOLL_H
3 
4 
11 template <unsigned char SENSOR_PIN>
12 class RCpoll
13 {
14 
15 public:
18  RCpoll():result(0),rc_cued(true), output(0)
19  {
20  ;
21  }
22 
28  inline
29  unsigned int next(){
30  if (rc_cued){
31  pinMode(SENSOR_PIN, INPUT); // turn pin into an input and time till pin goes low
32  digitalWrite(SENSOR_PIN, LOW); // turn pullups off - or it won't work
33  rc_cued = false;
34  }
35  if(digitalRead(SENSOR_PIN)){ // wait for pin to go low
36  result++;
37  }
38  else{
39  output = result;
40  result = 0;
41  pinMode(SENSOR_PIN, OUTPUT); // make pin OUTPUT
42  digitalWrite(SENSOR_PIN, HIGH); // make pin HIGH to discharge capacitor - see the schematic
43  rc_cued = true;
44  }
45  return output;
46  }
47 
48 private:
49  unsigned int result;
50  boolean rc_cued;
51  unsigned int output;
52 
53 };
54 
55 #endif // #ifndef RCPOLL_H
56 
unsigned int next()
Checks whether the capacitor has charged, and returns how long it took for the most recent charge...
Definition: RCpoll.h:29
+
A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime.
Definition: RCpoll.h:12
+
RCpoll()
Constructor.
Definition: RCpoll.h:18
+
+
+ + + + diff --git a/extras/doc/html/_reverb_tank_8h_source.html b/extras/doc/html/_reverb_tank_8h_source.html new file mode 100644 index 000000000..750ef23a0 --- /dev/null +++ b/extras/doc/html/_reverb_tank_8h_source.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: ReverbTank.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ReverbTank.h
+
+
+
1 #ifndef REVERBTANK_H
2 #define REVERBTANK_H
3 
4 /*
5  * ReverbTank.h
6  *
7  * Copyright 2013 Tim Barrass.
8  *
9  * This file is part of Mozzi.
10  *
11  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
12  *
13  */
14 
15 #include "AudioDelay.h"
32 class
33  ReverbTank {
34 
35 public:
46  int8_t early_reflection1 = 37,
47  int8_t early_reflection2 = 77,
48  int8_t early_reflection3 = 127,
49  int8_t loop1_delay=117,
50  uint8_t loop2_delay=255,
51  int8_t feedback_level = 85):
52  _early_reflection1(early_reflection1),_early_reflection2(early_reflection3),_early_reflection3(early_reflection3),
53  _feedback_level(feedback_level)
54  {
55  aLoopDel1.set(loop1_delay);
56  aLoopDel2.set(loop2_delay);
57  }
58 
59 
65  int next(int input){
66  static int recycle1, recycle2;
67 
68  // early reflections
69  int asig = aLoopDel0.next(input, _early_reflection1);
70  asig += aLoopDel0.read(_early_reflection2);
71  asig += aLoopDel0.read(_early_reflection3);
72  asig >>= 2;
73 
74  // recirculating delays
75  int8_t feedback_sig1 = (int8_t) min(max(((recycle1 * _feedback_level)>>7),-128),127); // feedback clipped
76  int8_t feedback_sig2 = (int8_t) min(max(((recycle2 * _feedback_level)>>7),-128),127); // feedback clipped
77  int sig3 = aLoopDel1.next(asig+feedback_sig1);
78  int sig4 = aLoopDel2.next(asig+feedback_sig2);
79  recycle1 = sig3 + sig4;
80  recycle2 = sig3 - sig4;
81 
82  return recycle1;
83  }
84 
85 
91  void setEarlyReflections(int8_t early_reflection1, int8_t early_reflection2, int8_t early_reflection3){
92  _early_reflection1=early_reflection1;
93  _early_reflection2=early_reflection2;
94  _early_reflection3=early_reflection3;
95  }
96 
97 
102  void setLoopDelays(int8_t loop1_delay, uint8_t loop2_delay){
103  aLoopDel1.set(loop1_delay);
104  aLoopDel2.set(loop2_delay);
105  }
106 
110  void setFeebackLevel(int8_t feedback_level){
111  _feedback_level=feedback_level;
112  }
113 
114 
115 private:
116  int8_t _early_reflection1;
117  int8_t _early_reflection2;
118  int8_t _early_reflection3;
119 
120  int8_t _feedback_level;
121 
122  AudioDelay <128> aLoopDel0; // 128/16384 seconds * 340.29 m/s speed of sound = 3.5 metres
123  AudioDelay <128,int> aLoopDel1;
124  AudioDelay <256,int> aLoopDel2; // 7 metres
125 
126 };
127 
133 #endif // #ifndef REVERBTANK_H
void setEarlyReflections(int8_t early_reflection1, int8_t early_reflection2, int8_t early_reflection3)
Set the early reflection times in terms of delay cells.
Definition: ReverbTank.h:91
+ +
A reverb which sounds like the inside of a tin can.
Definition: ReverbTank.h:32
+
int next(int input)
Process the next audio sample and return the reverbed signal.
Definition: ReverbTank.h:65
+
void setFeebackLevel(int8_t feedback_level)
Set the feedback level for the recirculating delays.
Definition: ReverbTank.h:110
+
void setLoopDelays(int8_t loop1_delay, uint8_t loop2_delay)
Set the loop delay times in terms of delay cells.
Definition: ReverbTank.h:102
+
ReverbTank(int8_t early_reflection1=37, int8_t early_reflection2=77, int8_t early_reflection3=127, int8_t loop1_delay=117, uint8_t loop2_delay=255, int8_t feedback_level=85)
Constructor.
Definition: ReverbTank.h:45
+
+
+ + + + diff --git a/extras/doc/html/_rolling_average_8h_source.html b/extras/doc/html/_rolling_average_8h_source.html new file mode 100644 index 000000000..e8111d723 --- /dev/null +++ b/extras/doc/html/_rolling_average_8h_source.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: RollingAverage.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
RollingAverage.h
+
+
+
1 #ifndef ROLLINGAVERAGE_H
2 #define ROLLINGAVERAGE_H
3 
4 /*
5  * RollingAverage.h
6  *
7  * Copyright 2013 Tim Barrass.
8  *
9  * This file is part of Mozzi.
10  *
11  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
12  *
13  */
14 /*
15  Draws on Arduino Smoothing example,
16  Created 22 April 2007
17  By David A. Mellis <dam@mellis.org>
18  modified 9 Apr 2012
19  by Tom Igoe
20  http://www.arduino.cc/en/Tutorial/Smoothing
21 */
22 
23 #include "mozzi_utils.h" // for trailingZeros()
24 
25 
36 template <class T, int WINDOW_LENGTH>
37 class
39 
40 public:
41 
51  RollingAverage():index(0),total(0), WINDOW_LENGTH_AS_RSHIFT((uint8_t)trailingZeros((unsigned long)WINDOW_LENGTH))
52  {
53  // initialize all the readings to 0:
54  for (int thisReading = 0; thisReading < WINDOW_LENGTH; thisReading++)
55  readings[thisReading] = 0;
56  }
57 
58 
64  T next(T input)
65  {
66  return add(input)>>WINDOW_LENGTH_AS_RSHIFT;
67  }
68 
69 
70 protected:
71 
72  inline
73  T add(T input){
74  // out with the old
75  total -= readings[index];
76  // in with the new
77  total += input;
78  readings[index] = input;
79 
80  // advance and wrap index
81  ++index &= WINDOW_LENGTH -1;
82  return total;
83  }
84 
85 
86 private:
87  T readings[WINDOW_LENGTH]; // the readings from the analog input
88  unsigned int index; // the index of the current reading
89  long total; // the running total
90  const uint8_t WINDOW_LENGTH_AS_RSHIFT;
91 
92 };
93 
94 // no need to show the specialisations
100 template <int WINDOW_LENGTH>
101 class RollingAverage <unsigned int, WINDOW_LENGTH>
102 {
103 public:
111  RollingAverage():index(0),total(0), WINDOW_LENGTH_AS_RSHIFT((uint8_t)trailingZeros((unsigned long)WINDOW_LENGTH))
112  {
113  // initialize all the readings to 0:
114  for (int thisReading = 0; thisReading < WINDOW_LENGTH; thisReading++)
115  readings[thisReading] = 0;
116  }
117 
123  unsigned int next(unsigned int input)
124  {
125  // calculate the average:
126  // this unsigned cast is the only difference between the int and unsigned int specialisations
127  // it tells the shift not to sign extend in from the left
128  return (unsigned)add(input)>>WINDOW_LENGTH_AS_RSHIFT;
129  }
130 
131 protected:
132 
133 
134  inline
135  unsigned int add(unsigned int input){
136  // out with the old
137  total -= readings[index];
138  // in with the new
139  total += input;
140  readings[index] = input;
141 
142  // advance and wrap index
143  ++index &= WINDOW_LENGTH -1;
144  return total;
145  }
146 
147 
148 private:
149  unsigned int readings[WINDOW_LENGTH]; // the readings from the analog input
150  unsigned int index; // the index of the current reading
151  long total; // the running total
152  const uint8_t WINDOW_LENGTH_AS_RSHIFT;
153 
154 };
155 
156 
157 
159 template <int WINDOW_LENGTH>
160 class RollingAverage <float, WINDOW_LENGTH>
161 {
162 public:
170  RollingAverage():index(0),total(0.0)
171  {
172  // initialize all the readings to 0:
173  for (int thisReading = 0; thisReading < WINDOW_LENGTH; thisReading++)
174  readings[thisReading] = 0.0;
175  }
176 
182  float next(float input)
183  {
184  // out with the old
185  total -= readings[index];
186  // in with the new
187  total += input;
188  readings[index] = input;
189 
190  // advance and wrap index
191  ++index &= WINDOW_LENGTH -1;
192 
193  // calculate the average:
194  return total/WINDOW_LENGTH;
195  }
196 
197 private:
198  float readings[WINDOW_LENGTH]; // the readings from the analog input
199  unsigned int index; // the index of the current reading
200  float total; // the running total
201 
202 };
203 
204 
205 // no need to show the specialisations
214 #endif // #ifndef ROLLINGAVERAGE_H
long trailingZeros(const unsigned long v)
Given a power of 2, work out the number to shift right by to do a divide by the number, or shift left to multiply.
Definition: mozzi_utils.cpp:8
+
Calculates a running average over a specified number of the most recent readings. ...
+
T next(T input)
Give the average of the last WINDOW_LENGTH.
+
RollingAverage()
Constructor.
+
+
+ + + + diff --git a/extras/doc/html/_rolling_stat_8h_source.html b/extras/doc/html/_rolling_stat_8h_source.html new file mode 100644 index 000000000..d0ff8fa38 --- /dev/null +++ b/extras/doc/html/_rolling_stat_8h_source.html @@ -0,0 +1,120 @@ + + + + + + + +Mozzi: RollingStat.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
RollingStat.h
+
+
+
1 #ifndef ROLLINGSTAT_H
2 #define ROLLINGSTAT_H
3 
4 /*
5  * RollingStat.h
6  *
7  * Copyright 2013 Tim Barrass.
8  *
9  * This file is part of Mozzi.
10  *
11  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
12  *
13  */
14 
15 #include "RollingAverage.h"
16 #include "mozzi_fixmath.h"
17 
18 // adapted from RunningStat, http://www.johndcook.com/standard_deviation.html
24 template <class T, int WINDOW_LENGTH>
26 {
27 public:
28 
30  RollingStat() : _previous_mean(0), _mean(0), _variance(0), WINDOW_LENGTH_AS_RSHIFT((uint8_t)trailingZeros((unsigned long)WINDOW_LENGTH))
31  {}
32 
33 
38  void update(T x) {
39  _mean = rollingMean.next(x);
40  _variance = (((long)x - _previous_mean)*((long)x - _mean))>>WINDOW_LENGTH_AS_RSHIFT; // should really be div by (WINDOW_LENGTH-1), but exact values are not important for this application
41  _previous_mean = _mean;
42  }
43 
44 
48  void update(int8_t x) {
49  _mean = rollingMean.next(x);
50  _variance = (((int)x - _previous_mean)*((int)x - _mean))>>WINDOW_LENGTH_AS_RSHIFT; // should really be div by (WINDOW_LENGTH-1), but exact values are not important for this application
51  _previous_mean = _mean;
52  }
53 
54 
58  T getMean() const {
59  return _mean;
60  }
61 
62 
68  T getVariance() const {
69  return _variance;
70  }
71 
76  return isqrt16(_variance);
77  }
78 
79 
80 
81 private:
82  T _previous_mean, _mean, _variance;
84  const uint8_t WINDOW_LENGTH_AS_RSHIFT;
85 };
86 
87 // no need to show the specialisations
91 template <int WINDOW_LENGTH>
92 class RollingStat <float, WINDOW_LENGTH>
93 {
94 public:
95 
97  RollingStat() : _previous_mean(0), _mean(0), _variance(0), WINDOW_LENGTH_AS_RSHIFT((uint8_t)trailingZeros((unsigned long)WINDOW_LENGTH))
98  {}
99 
100 
105  void update(float x) {
106  _mean = rollingMean.next(x);
107  _variance = ((x - _previous_mean)*(x - _mean))/(WINDOW_LENGTH-1);
108  _previous_mean = _mean;
109  }
110 
111 
115  float getMean() const {
116  return _mean;
117  }
118 
119 
123  float getVariance() const {
124  return _variance;
125  }
126 
131  float getStandardDeviation() const {
132  return sqrt(_variance);
133  }
134 
135 
136 
137 private:
138  float _previous_mean, _mean, _variance;
140  const uint8_t WINDOW_LENGTH_AS_RSHIFT;
141 };
142 
143 // no need to show the specialisations
146 #endif // #ifndef ROLLINGSTAT_H
147 
long trailingZeros(const unsigned long v)
Given a power of 2, work out the number to shift right by to do a divide by the number, or shift left to multiply.
Definition: mozzi_utils.cpp:8
+
T getVariance() const
Return the approximate variance of the last WINDOW_LENGTH number of inputs.
Definition: RollingStat.h:68
+
void update(int8_t x)
Update the mean and variance given a new input value.
Definition: RollingStat.h:48
+
Calculates a running average over a specified number of the most recent readings. ...
+
T getMean() const
Return the mean of the last WINDOW_LENGTH number of inputs.
Definition: RollingStat.h:58
+
RollingStat()
Constructor.
Definition: RollingStat.h:30
+
void update(T x)
Update the mean and variance given a new input value.
Definition: RollingStat.h:38
+
Calculates an approximation of the variance and standard deviation for a window of recent inputs...
Definition: RollingStat.h:25
+
T getStandardDeviation() const
Return the approximate standard deviation of the last WINDOW_LENGTH number of inputs.
Definition: RollingStat.h:75
+
+
+ + + + diff --git a/extras/doc/html/_sample_8h_source.html b/extras/doc/html/_sample_8h_source.html new file mode 100644 index 000000000..938cbe3e8 --- /dev/null +++ b/extras/doc/html/_sample_8h_source.html @@ -0,0 +1,131 @@ + + + + + + + +Mozzi: Sample.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Sample.h
+
+
+
1 /*
2  * Sample.h
3  *
4  * Oscil.h owes much to AF_precision_synthesis.pde, 2009, Adrian Freed.
5  *
6  * Copyright 2012 Tim Barrass, 2009 Adrian Freed.
7  *
8  * This file is part of Mozzi.
9  *
10  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
11  *
12  */
13 
14 #ifndef SAMPLE_H_
15 #define SAMPLE_H_
16 
17 #include "MozziGuts.h"
18 #include "mozzi_fixmath.h"
19 #include <util/atomic.h>
20 
21 // fractional bits for sample index precision
22 #define SAMPLE_F_BITS 16
23 #define SAMPLE_F_BITS_AS_MULTIPLIER 65536
24 
25 // phmod_proportion is an 1n15 fixed-point number only using
26 // the fractional part and the sign bit
27 #define SAMPLE_PHMOD_BITS 16
28 
29 enum interpolation {INTERP_NONE, INTERP_LINEAR};
30 
49 template <unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP=INTERP_NONE>
50 class Sample
51 {
52 
53 public:
54 
61  Sample(const int8_t * TABLE_NAME):table(TABLE_NAME),endpos_fractional((unsigned long) NUM_TABLE_CELLS << SAMPLE_F_BITS) // so isPlaying() will work
62  {
63  setLoopingOff();
64  //rangeWholeSample();
65  }
66 
67 
68 
73  Sample():endpos_fractional(4294967295UL) // biggest UL number so isPlaying() will work
74  {
75  setLoopingOff();
76  //rangeWholeSample();
77  }
78 
79 
83  inline
84  void setTable(const int8_t * TABLE_NAME)
85  {
86  table = TABLE_NAME;
87  }
88 
89 
93  inline
94  void setStart(unsigned int startpos)
95  {
96  startpos_fractional = (unsigned long) startpos << SAMPLE_F_BITS;
97  }
98 
99 
102  inline
103  void start()
104  {
105  // atomic because start() can be called on a sample in the control interrupt
106  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
107  {
108  phase_fractional = startpos_fractional;
109  }
110  }
111 
112 
116  inline
117  void start(unsigned int startpos)
118  {
119  setStart(startpos);
120  start();
121  }
122 
123 
127  inline
128  void setEnd(unsigned int end)
129  {
130  endpos_fractional = (unsigned long) end << SAMPLE_F_BITS;
131  }
132 
133 
136  inline
138  {
139  startpos_fractional = 0;
140  endpos_fractional = (unsigned long) NUM_TABLE_CELLS << SAMPLE_F_BITS;
141  }
142 
143 
146  inline
148  {
149  looping=true;
150  }
151 
152 
155  inline
157  {
158  looping=false;
159  }
160 
161 
162 
170  inline
171  int8_t next() { // 4us
172 
173  if (phase_fractional>endpos_fractional){
174  if (looping) {
175  phase_fractional = startpos_fractional + (phase_fractional - endpos_fractional);
176  }else{
177  return 0;
178  }
179  }
180  int8_t out;
181  if(INTERP==INTERP_LINEAR){
182  // WARNNG this is hard coded for when SAMPLE_F_BITS is 16
183  unsigned int index = phase_fractional >> SAMPLE_F_BITS;
184  out = (int8_t)pgm_read_byte_near(table + index);
185  int8_t difference = (int8_t)pgm_read_byte_near((table + 1) + index) - out;
186  int8_t diff_fraction = (int8_t)(((((unsigned int) phase_fractional)>>8)*difference)>>8); // (unsigned int) phase_fractional keeps low word, then>> for only 8 bit precision
187  out += diff_fraction;
188  }else{
189  out = (int8_t)pgm_read_byte_near(table + (phase_fractional >> SAMPLE_F_BITS));
190  }
191  incrementPhase();
192  return out;
193  }
194 
195 
199  inline
200  boolean isPlaying(){
201  return phase_fractional<endpos_fractional;
202  }
203 
204 
205  // Not readjusted for arbitrary table length yet
206  //
207  // Returns the next sample given a phase modulation value.
208  // @param phmod_proportion phase modulation value given as a proportion of the wave. The
209  // phmod_proportion parameter is a Q15n16 fixed-point number where to fractional
210  // n16 part represents -1 to 1, modulating the phase by one whole table length in
211  // each direction.
212  // @return a sample from the table.
213  //
214  // inline
215  // int8_t phMod(long phmod_proportion)
216  // {
217  // incrementPhase();
218  // return (int8_t)pgm_read_byte_near(table + (((phase_fractional+(phmod_proportion * NUM_TABLE_CELLS))>>SAMPLE_SAMPLE_F_BITS) & (NUM_TABLE_CELLS - 1)));
219  // }
220 
221 
222 
230  inline
231  void setFreq (int frequency) {
232  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
233  {
234  phase_increment_fractional = ((((unsigned long)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)*frequency)/UPDATE_RATE) << (SAMPLE_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS);
235  }
236  }
237 
238 
244  inline
245  void setFreq(float frequency)
246  { // 1 us - using float doesn't seem to incur measurable overhead with the oscilloscope
247  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
248  {
249  phase_increment_fractional = (unsigned long)((((float)NUM_TABLE_CELLS * frequency)/UPDATE_RATE) * SAMPLE_F_BITS_AS_MULTIPLIER);
250  }
251  }
252 
253 
262  inline
263  void setFreq_Q24n8(Q24n8 frequency)
264  {
265  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
266  {
267  //phase_increment_fractional = (frequency* (NUM_TABLE_CELLS>>3)/(UPDATE_RATE>>6)) << (F_BITS-(8-3+6));
268  phase_increment_fractional = (((((unsigned long)NUM_TABLE_CELLS<<ADJUST_FOR_NUM_TABLE_CELLS)>>3)*frequency)/(UPDATE_RATE>>6))
269  << (SAMPLE_F_BITS - ADJUST_FOR_NUM_TABLE_CELLS - (8-3+6));
270  }
271  }
272 
273 
278  inline
279  int8_t atIndex(unsigned int index)
280  {
281  return (int8_t)pgm_read_byte_near(table + index);
282  }
283 
284 
295  inline
296  unsigned long phaseIncFromFreq(unsigned int frequency)
297  {
298  return (((unsigned long)frequency * NUM_TABLE_CELLS)/UPDATE_RATE) << SAMPLE_F_BITS;
299  }
300 
301 
305  inline
306  void setPhaseInc(unsigned long phaseinc_fractional)
307  {
308  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
309  {
310  phase_increment_fractional = phaseinc_fractional;
311  }
312  }
313 
314 
315 private:
316 
317 
320 static const uint8_t ADJUST_FOR_NUM_TABLE_CELLS = (NUM_TABLE_CELLS<2048) ? 8 : 0;
321 
322 
325  inline
326  void incrementPhase()
327  {
328  phase_fractional += phase_increment_fractional;
329  }
330 
331 
332  volatile unsigned long phase_fractional;
333  volatile unsigned long phase_increment_fractional;
334  const int8_t * table;
335  bool looping;
336  unsigned long startpos_fractional, endpos_fractional;
337 };
338 
339 
345 #endif /* SAMPLE_H_ */
void setFreq_Q24n8(Q24n8 frequency)
Set the frequency using Q24n8 fixed-point number format.
Definition: Sample.h:263
+
void setLoopingOn()
Turns looping on.
Definition: Sample.h:147
+
void setFreq(int frequency)
Set the oscillator frequency with an unsigned int.
Definition: Sample.h:231
+
void setEnd(unsigned int end)
Sets the end position in samples from the beginning of the sound.
Definition: Sample.h:128
+
Sample(const int8_t *TABLE_NAME)
Constructor.
Definition: Sample.h:61
+
void rangeWholeSample()
Sets the start and end points to include the range of the whole sound table.
Definition: Sample.h:137
+
unsigned long phaseIncFromFreq(unsigned int frequency)
phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies...
Definition: Sample.h:296
+
int8_t atIndex(unsigned int index)
Returns the sample at the given table index.
Definition: Sample.h:279
+
void setPhaseInc(unsigned long phaseinc_fractional)
Set a specific phase increment.
Definition: Sample.h:306
+
void setStart(unsigned int startpos)
Sets the starting position in samples.
Definition: Sample.h:94
+
void start(unsigned int startpos)
Sets a new start position plays the sample from that position.
Definition: Sample.h:117
+
void setTable(const int8_t *TABLE_NAME)
Change the sound table which will be played by the Sample.
Definition: Sample.h:84
+
int8_t next()
Returns the sample at the current phase position, or 0 if looping is off and the phase overshoots the...
Definition: Sample.h:171
+
uint32_t Q24n8
unsigned fractional number using 24 integer bits and 8 fractional bits, represents 0 to 16777215 ...
Definition: mozzi_fixmath.h:45
+
boolean isPlaying()
Checks if the sample is playing by seeing if the phase is within the limits of its end position...
Definition: Sample.h:200
+
void start()
Resets the phase (the playhead) to the start position, which will be 0 unless set to another value wi...
Definition: Sample.h:103
+
void setFreq(float frequency)
Set the sample frequency with a float.
Definition: Sample.h:245
+
Sample is like Oscil, it plays a wavetable.
Definition: Sample.h:50
+
Sample()
Constructor.
Definition: Sample.h:73
+
void setLoopingOff()
Turns looping off.
Definition: Sample.h:156
+
+
+ + + + diff --git a/extras/doc/html/_sample_huffman_8h_source.html b/extras/doc/html/_sample_huffman_8h_source.html new file mode 100644 index 000000000..07dc8faf7 --- /dev/null +++ b/extras/doc/html/_sample_huffman_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +Mozzi: SampleHuffman.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SampleHuffman.h
+
+
+
1 /*
2  * SampleHuffman.h
3  *
4  * Copyright 2013 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 #ifndef SAMPLEHUFFMAN_H
12 #define SAMPLEHUFFMAN_H
13 
47 #include <util/atomic.h>
48 
50 {
51 
52 public:
53 
59  SampleHuffman(uint8_t const * SOUNDDATA, int16_t const * HUFFMAN_DATA, uint32_t const SOUNDDATA_BITS):sounddata(SOUNDDATA),huffman(HUFFMAN_DATA),sounddata_bits(SOUNDDATA_BITS)
60  {
61  setLoopingOff();
62  }
63 
64 
69  inline
70  int16_t next()
71  {
72  if(datapos >= sounddata_bits){
73  if(looping){
74  // at end of sample, restart from zero, looping the sound
75  datapos = 0;
76  }else{
77  return 0;
78  }
79  }
80 
81  int16_t dif = decode();
82  current += dif; // add differential
83  return current;
84  }
85 
86 
89  inline
90  void setLoopingOn()
91  {
92  looping=true;
93  }
94 
95 
98  inline
100  {
101  looping=false;
102  }
103 
106  inline
107  void start()
108  {
109  // atomic because start() can be called on a sample in the control interrupt
110  ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
111  {
112  current = 0;
113  datapos = 0;
114  bt = 0;
115  }
116  }
117 
118 private:
119  uint8_t const * sounddata;
120  int16_t const * huffman;
121  uint32_t const sounddata_bits;
122  uint32_t datapos; // current sample position
123  int16_t current; // current amplitude value
124  bool looping;
125  uint8_t bt;
126 
127  // Get one bit from sound data
128  inline
129  bool getbit()
130  {
131  const uint8_t b = datapos&7;
132  //static uint8_t bt;
133  if(!b) bt = pgm_read_byte(sounddata+((uint32_t)datapos>>3));
134  // extract the indexed bit
135  return ((uint8_t)bt>>(7-b))&1;
136  }
137 
138 
139  // Decode bit stream using Huffman codes
140  inline
141  int16_t decode()
142  {
143  int16_t const * huffcode = huffman;
144  do {
145  if(getbit()) {
146  const int16_t offs = pgm_read_word(huffcode);
147  huffcode += offs?offs+1:2;
148  }
149  datapos++;
150  }
151  while(pgm_read_word(huffcode++));
152  return pgm_read_word(huffcode);
153  }
154 
155 
156 };
157 
163 #endif // #ifndef SAMPLEHUFFMAN_H
void setLoopingOn()
Turns looping on, with the whole sample length as the loop range.
Definition: SampleHuffman.h:90
+
SampleHuffman(uint8_t const *SOUNDDATA, int16_t const *HUFFMAN_DATA, uint32_t const SOUNDDATA_BITS)
Constructor.
Definition: SampleHuffman.h:59
+
void start()
Sets the playhead to the beginning of the sample.
+
void setLoopingOff()
Turns looping off.
Definition: SampleHuffman.h:99
+
A sample player for samples encoded with Huffman compression.
Definition: SampleHuffman.h:49
+
int16_t next()
Update and return the next audio sample.
Definition: SampleHuffman.h:70
+
+
+ + + + diff --git a/extras/doc/html/_smooth_8h_source.html b/extras/doc/html/_smooth_8h_source.html new file mode 100644 index 000000000..be1f7fae3 --- /dev/null +++ b/extras/doc/html/_smooth_8h_source.html @@ -0,0 +1,120 @@ + + + + + + + +Mozzi: Smooth.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Smooth.h
+
+
+
1 /*
2  * Smooth.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef SMOOTH_H_
13 #define SMOOTH_H_
14 
15 #include "Arduino.h"
16 #include "mozzi_fixmath.h"
17 
34 template <class T>
35 class Smooth
36 {
37 private:
38  long last_out;
39  Q0n16 a;
40 
41 public:
47  Smooth(float smoothness)
48  {
49  setSmoothness(smoothness);
50  }
51 
56  inline
57  T next(T in)
58  {
59  long out = ((((((long)in - (last_out>>8)) * a))>>8) + last_out);
60  last_out = out;
61  return (T)(out>>8);
62  }
63 
64 
69  inline
70  T operator()(T n) {
71  return next(n);
72  }
73 
74 
80  inline
81  void setSmoothness(float smoothness)
82  {
83  a=float_to_Q0n16(1.f-smoothness);
84  }
85 
86 };
87 
88  // doxygen can ignore the specialisations
90 
92 template <>
93 class Smooth <uint8_t>
94 {
95 private:
96  unsigned int last_out;
97  Q0n8 a;
98 
99 public:
105  Smooth(float smoothness)
106  {
107  setSmoothness(smoothness);
108  }
109 
114  inline
115  uint8_t next(uint8_t in)
116  {
117  unsigned int out = (((((int)in - (last_out>>8)) * a)) + last_out);
118  last_out = out;
119  return (uint8_t)(out>>8);
120  }
121 
122 
127  inline
128  uint8_t operator()(uint8_t n) {
129  return next(n);
130  }
131 
132 
138  inline
139  void setSmoothness(float smoothness)
140  {
141  a=float_to_Q0n8(1.f-smoothness);
142  }
143 
144 };
145 
146 
148 template <>
149 class Smooth <int8_t>
150 {
151 private:
152  int last_out;
153  Q0n8 a;
154 
155 public:
161  Smooth(float smoothness)
162  {
163  setSmoothness(smoothness);
164  }
165 
166 
171  inline
172  int8_t next(int8_t in)
173  {
174  int out = (((((int)in - (last_out>>8)) * a)) + last_out);
175  last_out = out;
176  return (int8_t)(out>>8);
177  }
178 
179 
184  inline
185  int8_t operator()(int8_t n) {
186  return next(n);
187  }
188 
189 
195  inline
196  void setSmoothness(float smoothness)
197  {
198  a=float_to_Q0n8(1.f-smoothness);
199  }
200 
201 };
202 
204 template <>
205 class Smooth <float>
206 {
207 private:
208  float last_out;
209  float a;
210 
211 public:
217  Smooth(float smoothness)
218  {
219  setSmoothness(smoothness);
220  }
221 
226  inline
227  float next(float in)
228  {
229  float out = last_out + a * (in - last_out);
230  //float out = (in - last_out * a) + last_out;
231  last_out = out;
232  return out;
233  }
234 
235 
240  inline
241  float operator()(float n) {
242  return next(n);
243  }
244 
245 
251  inline
252  void setSmoothness(float smoothness)
253  {
254  a=1.f-smoothness;
255  }
256 
257 };
258 
259 
267 #endif /* SMOOTH_H_ */
void setSmoothness(float smoothness)
Sets how much smoothing the filter will apply to its input.
Definition: Smooth.h:81
+
Smooth(float smoothness)
Constructor.
Definition: Smooth.h:47
+
Q0n8 float_to_Q0n8(float a)
Convert float to Q0n8 fix.
Definition: mozzi_fixmath.h:97
+
uint16_t Q0n16
unsigned fractional number using 16 fractional bits, represents 0.0 to 0.999
Definition: mozzi_fixmath.h:29
+
A simple infinite impulse response low pass filter for smoothing control or audio signals...
Definition: Smooth.h:35
+
T operator()(T n)
Filters the input and returns the filtered value.
Definition: Smooth.h:70
+
Q0n16 float_to_Q0n16(float a)
Convert float to Q0n16 fix.
+
T next(T in)
Filters the input and returns the filtered value.
Definition: Smooth.h:57
+
uint8_t Q0n8
unsigned fractional number using 8 fractional bits, represents 0.0 to 0.996
Definition: mozzi_fixmath.h:27
+
+
+ + + + diff --git a/extras/doc/html/_stack_8h_source.html b/extras/doc/html/_stack_8h_source.html new file mode 100644 index 000000000..85c8144c1 --- /dev/null +++ b/extras/doc/html/_stack_8h_source.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: Stack.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Stack.h
+
+
+
1 /*
2  * Stack.h
3  *
4  * Copyright 2013 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
17 template <class T, int NUM_ITEMS>
18 class Stack
19 {
20 private:
21  T _array[NUM_ITEMS];
22  int top;
23 
24 public:
27  Stack(): top(-1)
28  {
29  }
30 
34  void push(T item)
35  {
36  if (top< (NUM_ITEMS-1)){
37  top++;
38  _array[top]=item;
39  }
40  }
41 
45  T pop()
46  {
47  if(top==-1) return -1;
48  T item =_array[top];
49  top--;
50  return item;
51  }
52 
53 };
A simple stack, used internally for keeping track of analog input channels as they are read...
Definition: Stack.h:18
+
T pop()
Get the item on top of the stack.
Definition: Stack.h:45
+
void push(T item)
Put an item on the stack.
Definition: Stack.h:34
+
Stack()
Constructor.
Definition: Stack.h:27
+
+
+ + + + diff --git a/extras/doc/html/_state_variable_8h_source.html b/extras/doc/html/_state_variable_8h_source.html new file mode 100644 index 000000000..61a257232 --- /dev/null +++ b/extras/doc/html/_state_variable_8h_source.html @@ -0,0 +1,120 @@ + + + + + + + +Mozzi: StateVariable.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
StateVariable.h
+
+
+
1 /*
2  * StateVariable.h
3  *
4  * This implementation copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 
44 #ifndef STATEVARIABLE_H_
45 #define STATEVARIABLE_H_
46 
47 #include "Arduino.h"
48 #include "util/atomic.h"
49 #include "mozzi_fixmath.h"
50 #include "math.h"
51 #include "mozzi_utils.h"
52 #include "meta.h"
53 
54 enum filter_types {LOWPASS,BANDPASS,HIGHPASS,NOTCH};
55 
64 template <int8_t FILTER_TYPE>
66 {
67 
68 public:
69 
70 
74  {
75  }
76 
77 
78 
86  void setResonance(Q0n8 resonance){
87  // qvalue goes from 255 to 0, representing .999 to 0 in fixed point
88  // lower q, more resonance
89  q = resonance;
90  //ATOMIC_BLOCK(ATOMIC_RESTORESTATE)
91  //{
92  scale = (Q0n8)sqrt((unsigned int) resonance<<8);
93  //}
94  }
95 
96 
97 
105  void setCentreFreq(unsigned int centre_freq){
106  // simple frequency tuning with error towards nyquist (reference? where did this come from?)
107  //f = (Q1n15)(((Q16n16_2PI*centre_freq)>>AUDIO_RATE_AS_LSHIFT)>>1);
108  f = (Q15n16)((Q16n16_2PI*centre_freq)>>(AUDIO_RATE_AS_LSHIFT)); // this works best for now
109  //f = (Q15n16)(((Q16n16_2PI*centre_freq)<<(16-AUDIO_RATE_AS_LSHIFT))>>16); // a small shift left and a round 16 right is faster than big non-uint8_t-aligned right in one go
110  //float ff = Q16n16_to_float(((Q16n16_PI*centre_freq))>>AUDIO_RATE_AS_LSHIFT);
111  //f = float_to_Q15n16(2.0f *sin(ff));
112  //}
113  }
114 
115 
121  inline
122  int next(int input)
123  {
124  // chooses a different next() function depending on whether the
125  // filter is declared as LOWPASS, BANDPASS, HIGHPASS or NOTCH.
126  // See meta.h.
127  return next(input, Int2Type<FILTER_TYPE>());
128  }
129 
130 
131 
132 
133 private:
134  int low, band;
135  Q0n8 q,scale;
136  volatile Q15n16 f;
137 
138 
144  inline
145  int next(int input, Int2Type<LOWPASS>)
146  {
147  //setPin13High();
148  low += ((f*band)>>16);
149  int high = (((long)input - low - (((long)band * q)>>8))*scale)>>8;
150  band += ((f*high)>>16);
151  //int notch = high + low;
152  //setPin13Low();
153  return low;
154  }
155 
156 
162  inline
163  int next(int input, Int2Type<BANDPASS>)
164  {
165  //setPin13High();
166  low += ((f*band)>>16);
167  int high = (((long)input - low - (((long)band * q)>>8))*scale)>>8;
168  band += ((f*high)>>16);
169  //int notch = high + low;
170  //setPin13Low();
171  return band;
172  }
173 
174 
175 
181  inline
182  int next(int input, Int2Type<HIGHPASS>)
183  {
184  //setPin13High();
185  low += ((f*band)>>16);
186  int high = (((long)input - low - (((long)band * q)>>8))*scale)>>8;
187  band += ((f*high)>>16);
188  //int notch = high + low;
189  //setPin13Low();
190  return high;
191  }
192 
193 
194 
200  inline
201  int next(int input, Int2Type<NOTCH>)
202  {
203  //setPin13High();
204  low += ((f*band)>>16);
205  int high = (((long)input - low - (((long)band * q)>>8))*scale)>>8;
206  band += ((f*high)>>16);
207  int notch = high + low;
208  //setPin13Low();
209  return notch;
210  }
211 
212 };
213 
219 #endif /* STATEVARIABLE_H_ */
int32_t Q15n16
signed fractional number using 15 integer bits and 16 fractional bits, represents -32767...
Definition: mozzi_fixmath.h:40
+
void setResonance(Q0n8 resonance)
Set how resonant the filter will be.
Definition: StateVariable.h:86
+
Enables you to instantiate a template based on an integer value.
Definition: meta.h:20
+
StateVariable()
Constructor.
Definition: StateVariable.h:73
+
int next(int input)
Calculate the next sample, given an input signal.
+
A State Variable filter which offers 12db resonant low, high, bandpass and notch modes.
Definition: StateVariable.h:65
+
#define Q16n16_2PI
2*PI in Q16n16 format
Definition: mozzi_fixmath.h:69
+
uint8_t Q0n8
unsigned fractional number using 8 fractional bits, represents 0.0 to 0.996
Definition: mozzi_fixmath.h:27
+
void setCentreFreq(unsigned int centre_freq)
Set the centre or corner frequency of the filter.
+
+
+ + + + diff --git a/extras/doc/html/_wave_packet_8h_source.html b/extras/doc/html/_wave_packet_8h_source.html new file mode 100644 index 000000000..26d88d136 --- /dev/null +++ b/extras/doc/html/_wave_packet_8h_source.html @@ -0,0 +1,134 @@ + + + + + + + +Mozzi: WavePacket.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WavePacket.h
+
+
+
1 /*
2  * WavePacket.h
3  *
4  * Copyright 2013 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 
13 #ifndef WAVEPACKET_H
14 #define WAVEPACKET_H
15 
16 #include <MozziGuts.h>
17 #include <Oscil.h>
18 #include <tables/cos8192_int8.h>
19 #include <mozzi_fixmath.h>
20 #include <Phasor.h>
21 #include <Line.h>
22 #include <meta.h>
23 
24 
25 enum algorithms {SINGLE,DOUBLE};
26 
35 template <int8_t ALGORITHM>
37 {
38 public:
39 
42  WavePacket():AUDIO_STEPS_PER_CONTROL(AUDIO_RATE / CONTROL_RATE)
43  {
44  aCos.setTable(COS8192_DATA);
45  }
46 
47 
56  inline
57  void set(int fundamental, int bandwidth, int centrefreq)
58  {
59  setFundamental(fundamental);
60  setBandwidth(bandwidth);
61  setCentreFreq(centrefreq);
62  }
63 
64 
69  inline
70  void setFundamental(int fundamental)
71  {
72  aPhasor.setFreq(fundamental);
73  invFreq = Q8n24_FIX1 / fundamental;
74  }
75 
76 
77 
84  inline
85  void setBandwidth(int bandwidth)
86  {
87  Q15n16 bw = invFreq*bandwidth;
88  bw >>= 9;
89  bw = max(bw, Q15n16_FIX1>>3);
90  aBandwidth.set(bw, AUDIO_STEPS_PER_CONTROL);
91  }
92 
93 
94 
99  inline
100  void setCentreFreq(int centrefreq)
101  {
102  Q15n16 cf = invFreq * centrefreq;
103  cf >>= 3;
104  aCentrefreq.set(cf, AUDIO_STEPS_PER_CONTROL);
105  }
106 
107 
112  inline
113  int next()
114  {
115  gcentrefreq = aCentrefreq.next();
116  gbandwidth = aBandwidth.next();
117  int phase1 = aPhasor.next()>>16; // -0.5 to 0.5, 0n15
118  if (ALGORITHM == DOUBLE) {
119  return (signalPath(params1, phase1)+signalPath(params2, phase1+32768))>>1;
120  } else {
121  return signalPath(params1, phase1);
122  }
123  }
124 
125 
126 
127 private:
128  //Q15n16 fundamental; // range 4 to 6271 in pd patch, 13 integer bits
129  Q8n24 invFreq;
130  Q15n16 gcentrefreq; // range 0 to 3068, 12 integer bits
131  Q15n16 gbandwidth; // range 1 to 3068, 12 integer bits
132 
133  // Lines to interpolate controls at audio rate
134  Line <Q15n16> aCentrefreq;
135  Line <Q16n16> aBandwidth;
136  Line <Q16n16> aFreq;
137 
138  // different sets of params for each audio phase stream
139  struct parameters
140  {
141  int previous_phase;
142  Q15n16 centrefreq;
143  Q23n8 bandwidth;
144  }
145  params1,params2;
146 
147  // the number of audio steps the line has to take to reach the next control value
148  const unsigned int AUDIO_STEPS_PER_CONTROL;
149 
151  Phasor <AUDIO_RATE> aPhasor;
152 
153 
154  inline
155  int signalPath(struct parameters &param, int phase) // 25us? * 2
156  {
157  //setPin13High();
158  int index;
159 
160  if(phase<param.previous_phase)
161  {
162  param.centrefreq = gcentrefreq>>8;
163  param.bandwidth = Q15n16_to_Q23n8(gbandwidth);
164  }
165  param.previous_phase = phase;
166 
167  // oscillation
168  index = (param.centrefreq * phase)>>16;
169  // hack to make peak in middle of packet, otherwise it centres around a zero-crossing..
170  index += COS8192_NUM_CELLS>>1;
171  index &= COS8192_NUM_CELLS-1;
172  int8_t sig1 = aCos.atIndex(index);
173 
174  // packet envelope
175  Q23n8 bwphase = (param.bandwidth * phase)>>8;
176  bwphase += COS8192_NUM_CELLS>>1;
177  index = constrain(bwphase, 0, (COS8192_NUM_CELLS-1));
178  uint8_t packet_width = 128 + aCos.atIndex(index);
179  // if (AUDIO_MODE == HIFI){
180  // return ((int) sig1 * packet_width)>>3; // scaled to fit HIFI updateAudio output
181  // }else{
182  // return ((int) sig1 * packet_width)>>8; // scaled to fit STANDARD updateAudio output
183  // }
184 
185  return ((int) sig1 * packet_width);
186  }
187 
188 };
189 
194 #endif // #ifndef WAVEPACKET_H
void set(T value)
Set the current value of the line.
Definition: Line.h:77
+
Q23n8 Q15n16_to_Q23n8(Q15n16 a)
Convert Q15n16 fixed to Q23n8 signed int32_t.
+
#define CONTROL_RATE
Control rate setting.
Definition: MozziGuts.h:38
+
void setCentreFreq(int centrefreq)
Set the centre frequency.
Definition: WavePacket.h:100
+
void setFreq(int frequency)
Set the Phasor frequency with an unsigned int.
Definition: Phasor.h:76
+
int next()
Calculate the next synthesised sample.
Definition: WavePacket.h:113
+
int32_t Q15n16
signed fractional number using 15 integer bits and 16 fractional bits, represents -32767...
Definition: mozzi_fixmath.h:40
+
WavePacket()
Constructor.
Definition: WavePacket.h:42
+ +
void setFundamental(int fundamental)
Set the fundamental frequency.
Definition: WavePacket.h:70
+
#define AUDIO_RATE
Holds the audio rate setting.
Definition: mozzi_config.h:61
+ +
void setTable(const int8_t *TABLE_NAME)
Change the sound table which will be played by the Oscil.
Definition: Oscil.h:103
+
int8_t atIndex(unsigned int index)
Returns the sample at the given table index.
Definition: Oscil.h:275
+
#define Q15n16_FIX1
1 in Q15n16 format
Definition: mozzi_fixmath.h:63
+
void setBandwidth(int bandwidth)
Set the bandwidth.
Definition: WavePacket.h:85
+
Wavepacket synthesis, with two overlapping streams of wave packets.
Definition: WavePacket.h:36
+
unsigned long next()
Increments one step along the phase.
Definition: Phasor.h:51
+
uint32_t Q8n24
signed fractional number using 8 integer bits and 24 fractional bits, represents 0 to 255...
Definition: mozzi_fixmath.h:44
+
#define Q8n24_FIX1
1 in Q8n24 format
Definition: mozzi_fixmath.h:64
+ +
int32_t Q23n8
signed fractional number using 23 integer bits and 8 fractional bits, represents -8388607.996 to 8388607.996
Definition: mozzi_fixmath.h:39
+
T next()
Increments one step along the line.
Definition: Line.h:59
+
+
+ + + + diff --git a/extras/doc/html/_wave_packet_sample_8h_source.html b/extras/doc/html/_wave_packet_sample_8h_source.html new file mode 100644 index 000000000..7c8e790cd --- /dev/null +++ b/extras/doc/html/_wave_packet_sample_8h_source.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: WavePacketSample.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WavePacketSample.h
+
+
+
1 /*
2  * WavePacketSample.h
3  *
4  * Copyright 2013 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef WAVEPACKETSAMPLE_H
13 #define WAVEPACKETSAMPLE_H
14 
15 
16 #include "WavePacket.h"
21 template <int8_t ALGORITHM>
22 class WavePacketSample: public WavePacket<ALGORITHM>
23 {
24 public:
28  inline
29  void setTable(const int8_t * TABLE_NAME)
30  {
31  aWav.setTable(TABLE_NAME);
32  }
33 
34 private:
36 };
37 
41 #endif // #ifndef WAVEPACKETSAMPLE_H
42 
+
void setTable(const int8_t *TABLE_NAME)
Change the sound table which will be played.
+
void setTable(const int8_t *TABLE_NAME)
Change the sound table which will be played by the Oscil.
Definition: Oscil.h:103
+
A WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains...
+
Wavepacket synthesis, with two overlapping streams of wave packets.
Definition: WavePacket.h:36
+
+
+ + + + diff --git a/extras/doc/html/_wave_shaper_8h_source.html b/extras/doc/html/_wave_shaper_8h_source.html new file mode 100644 index 000000000..7860a5f2e --- /dev/null +++ b/extras/doc/html/_wave_shaper_8h_source.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: WaveShaper.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WaveShaper.h
+
+
+
1 /*
2  * WaveShaper.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef WAVESHAPER_H_
13 #define WAVESHAPER_H_
14 
15 #include "Arduino.h"
16 
21 template <class T>
23  {}
24 ;
25 
26 
28 template <>
29 class WaveShaper <char>
30 {
31 
32 public:
38  WaveShaper(const int8_t * TABLE_NAME):table(TABLE_NAME)
39  {
40  ;
41  }
42 
43 
51  inline
52  int8_t next(byte in)
53  {
54  return (int8_t) pgm_read_byte_near(table + in);
55  }
56 
57 private:
58  const int8_t * table;
59 };
60 
61 
62 
64 template <>
65 class WaveShaper <int>
66 {
67 
68 public:
74  WaveShaper(const int16_t * TABLE_NAME):table(TABLE_NAME)
75  {
76  ;
77  }
78 
79 
90  inline
91  int next(int in)
92  {
93  return (uint16_t) pgm_read_word_near(table + in);
94  }
95 
96 private:
97  const int16_t * table;
98 };
99 
103 #endif /* WAVESHAPER_H_ */
104 
105 
int8_t next(byte in)
Maps input to output, transforming it according to the table being used.
Definition: WaveShaper.h:52
+
WaveShaper maps values from its input to values in a table, which are returned as output...
Definition: WaveShaper.h:22
+
int next(int in)
Maps input to output, transforming it according to the table being used.
Definition: WaveShaper.h:91
+
WaveShaper(const int16_t *TABLE_NAME)
Constructor.
Definition: WaveShaper.h:74
+
WaveShaper(const int8_t *TABLE_NAME)
Constructor.
Definition: WaveShaper.h:38
+
+
+ + + + diff --git a/extras/doc/html/annotated.html b/extras/doc/html/annotated.html new file mode 100644 index 000000000..348dbade9 --- /dev/null +++ b/extras/doc/html/annotated.html @@ -0,0 +1,153 @@ + + + + + + + +Mozzi: Class List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 CADSRA simple ADSR envelope generator
 CAudioDelayAudio delay line for comb filter, flange, chorus and short echo effects
 CAudioDelayFeedbackAudio delay line with feedback for comb filter, flange, chorus and short echo effects
 CAutoMapAutomatically map an input value to an output range without knowing the precise range of inputs beforehand
 CAutoRangeKeeps a running calculation of the range of the input values it receives
 CCapPollA class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime
 CCircularBufferCircular buffer object
 CControlDelayControl-rate delay line for delaying control signals
 CDCfilterA DC-blocking filter useful for highlighting changes in control signals
 CEadExponential attack decay envelope
 CEventDelayA non-blocking replacement for Arduino's delay() function (which is disabled by Mozzi)
 CInt2TypeEnables you to instantiate a template based on an integer value
 CIntMapA faster version of Arduino's map() function
 CLineFor linear changes with a minimum of calculation at each step
 CLine< unsigned char >
 CLine< unsigned int >
 CLine< unsigned long >
 CLowPassFilterA resonant low pass filter for audio signals
 CMetronomeA metronome class which is like an EventDelay which retriggers itself when the delay time is up, to produce a repeating beat
 CMultiLineA simple MultiLine envelope generator
 COscilOscil plays a wavetable, cycling through the table to generate an audio or control signal
 COverSampleEnables the resolution of analog inputs to be increased by oversampling and decimation
 CPDResonantPDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter, based on https://en.wikipedia.org/wiki/Phase_distortion_synthesis
 CPhasorPhasor repeatedly generates a high resolution ramp at a variable frequency
 CPortamentoA simple portamento (pitch slide from one note to the next) effect, useful for note-based applications
 CRCpollA class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime
 CReverbTankA reverb which sounds like the inside of a tin can
 CRollingAverageCalculates a running average over a specified number of the most recent readings
 CRollingStatCalculates an approximation of the variance and standard deviation for a window of recent inputs
 CSampleSample is like Oscil, it plays a wavetable
 CSampleHuffmanA sample player for samples encoded with Huffman compression
 CSmoothA simple infinite impulse response low pass filter for smoothing control or audio signals
 CStackA simple stack, used internally for keeping track of analog input channels as they are read
 CStateVariableA State Variable filter which offers 12db resonant low, high, bandpass and notch modes
 CWavePacketWavepacket synthesis, with two overlapping streams of wave packets
 CWavePacketSampleA WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains)
 CWaveShaperWaveShaper maps values from its input to values in a table, which are returned as output
 CWaveShaper< char >Int8_t specialisation of WaveShaper template
 CWaveShaper< int >Int specialisation of WaveShaper template
+
+
+
+ + + + diff --git a/extras/doc/html/annotated_dup.js b/extras/doc/html/annotated_dup.js new file mode 100644 index 000000000..7a8c1c63c --- /dev/null +++ b/extras/doc/html/annotated_dup.js @@ -0,0 +1,42 @@ +var annotated_dup = +[ + [ "ADSR", "class_a_d_s_r.html", "class_a_d_s_r" ], + [ "AudioDelay", "class_audio_delay.html", "class_audio_delay" ], + [ "AudioDelayFeedback", "class_audio_delay_feedback.html", "class_audio_delay_feedback" ], + [ "AutoMap", "class_auto_map.html", "class_auto_map" ], + [ "AutoRange", "class_auto_range.html", "class_auto_range" ], + [ "CapPoll", "class_cap_poll.html", "class_cap_poll" ], + [ "CircularBuffer", "class_circular_buffer.html", "class_circular_buffer" ], + [ "ControlDelay", "class_control_delay.html", "class_control_delay" ], + [ "DCfilter", "class_d_cfilter.html", "class_d_cfilter" ], + [ "Ead", "class_ead.html", "class_ead" ], + [ "EventDelay", "class_event_delay.html", "class_event_delay" ], + [ "Int2Type", "group__util.html#struct_int2_type", "group__util_struct_int2_type" ], + [ "IntMap", "class_int_map.html", "class_int_map" ], + [ "Line", "class_line.html", "class_line" ], + [ "Line< unsigned char >", "class_line_3_01unsigned_01char_01_4.html", "class_line_3_01unsigned_01char_01_4" ], + [ "Line< unsigned int >", "class_line_3_01unsigned_01int_01_4.html", "class_line_3_01unsigned_01int_01_4" ], + [ "Line< unsigned long >", "class_line_3_01unsigned_01long_01_4.html", "class_line_3_01unsigned_01long_01_4" ], + [ "LowPassFilter", "class_low_pass_filter.html", "class_low_pass_filter" ], + [ "Metronome", "class_metronome.html", "class_metronome" ], + [ "MultiLine", "class_multi_line.html", "class_multi_line" ], + [ "Oscil", "class_oscil.html", "class_oscil" ], + [ "OverSample", "class_over_sample.html", "class_over_sample" ], + [ "PDResonant", "class_p_d_resonant.html", "class_p_d_resonant" ], + [ "Phasor", "class_phasor.html", "class_phasor" ], + [ "Portamento", "class_portamento.html", "class_portamento" ], + [ "RCpoll", "class_r_cpoll.html", "class_r_cpoll" ], + [ "ReverbTank", "class_reverb_tank.html", "class_reverb_tank" ], + [ "RollingAverage", "class_rolling_average.html", "class_rolling_average" ], + [ "RollingStat", "class_rolling_stat.html", "class_rolling_stat" ], + [ "Sample", "class_sample.html", "class_sample" ], + [ "SampleHuffman", "class_sample_huffman.html", "class_sample_huffman" ], + [ "Smooth", "class_smooth.html", "class_smooth" ], + [ "Stack", "class_stack.html", "class_stack" ], + [ "StateVariable", "class_state_variable.html", "class_state_variable" ], + [ "WavePacket", "class_wave_packet.html", "class_wave_packet" ], + [ "WavePacketSample", "class_wave_packet_sample.html", "class_wave_packet_sample" ], + [ "WaveShaper", "class_wave_shaper.html", null ], + [ "WaveShaper< char >", "class_wave_shaper_3_01char_01_4.html", "class_wave_shaper_3_01char_01_4" ], + [ "WaveShaper< int >", "class_wave_shaper_3_01int_01_4.html", "class_wave_shaper_3_01int_01_4" ] +]; \ No newline at end of file diff --git a/extras/doc/html/audio2huff_8py_source.html b/extras/doc/html/audio2huff_8py_source.html new file mode 100644 index 000000000..d3263a75e --- /dev/null +++ b/extras/doc/html/audio2huff_8py_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: audio2huff.py Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
audio2huff.py
+
+
+
1 #! /usr/bin/python
2 #
3 # Generator for compressed Arduino audio data
4 # Thomas Grill, 2011
5 # http://grrrr.org
6 #
7 # Modified by TIm Barrass 2013
8 # - changed PROGMEM to __attribute__((section(".progmem.data"))), to stop compiler warning
9 # - moved huffman table to progmem
10 # - added --name argument to give all constants specific names
11 # - changed all constant names to upper case
12 # - added include guards, Arduino and avr includes
13 #
14 # Dependencies:
15 # Numerical Python (numpy): http://numpy.scipy.org/
16 # scikits.audiolab: http://pypi.python.org/pypi/scikits.audiolab/
17 # purehuff: http://grrrr.org/purehuff
18 # pylab / matplotlib (only for plotting): http://matplotlib.sourceforge.net/
19 #
20 # For help on options invoke with:
21 # audio2huff --help
22 
23 import sys,os.path
24 from itertools import imap,chain,izip
25 
26 try:
27  import numpy as N
28 except ImportError:
29  print >>sys.stderr, "Error: Numerical Python not found"
30  exit(-1)
31 
32 try:
33  from scikits.audiolab import Sndfile
34 except ImportError:
35  print >>sys.stderr, "Error: Scikits.audiolab not found"
36  exit(-1)
37 
38 try:
39  import purehuff
40 except ImportError:
41  print >>sys.stderr, "Error: purehuff module not found"
42  exit(-1)
43 
44 
45 def grouper(n,seq):
46  """group list elements"""
47  it = iter(seq)
48  while True:
49  l = [v for _,v in izip(xrange(n),it)]
50  if l:
51  yield l
52  if len(l) < n:
53  break
54 
55 def arrayformatter(seq,perline=40):
56  """format list output linewise"""
57  return ",\n".join(",".join(imap(str,s)) for s in grouper(perline,seq))
58 
59 if __name__ == "__main__":
60  from optparse import OptionParser
61  parser = OptionParser()
62  parser.add_option("--bits", type="int", default=8, dest="bits",help="bit resolution")
63  parser.add_option("--sndfile", dest="sndfile",help="input sound file")
64  parser.add_option("--hdrfile", dest="hdrfile",help="output C header file")
65  parser.add_option("--name", dest="name",help="prefix for tables and constants in file")
66  parser.add_option("--plothist", type="int", default=0, dest="plothist",help="plot histogram")
67  (options, args) = parser.parse_args()
68 
69  if not options.sndfile:
70  print >>sys.stderr,"Error: --sndfile argument required"
71  exit(-1)
72 
73  sndf = Sndfile(options.sndfile,'r')
74  sound = sndf.read_frames(sndf.nframes)
75  fs = sndf.samplerate
76  del sndf
77 
78  # mix down multi-channel audio
79  if len(sound.shape) > 1:
80  sound = N.mean(sound,axis=1)
81 
82  # convert to n bits (no dithering, except it has already been done with the same bit resolution for the soundfile)
83  sound8 = N.clip((sound*(2**(options.bits-1))).astype(int),-2**(options.bits-1),2**(options.bits-1)-1)
84  # the following mapping with int is necessary as numpy.int32 types are not digested well by the HuffmanTree class
85  dsound8 = map(int,chain((sound8[0],),imap(lambda x: x[1]-x[0],izip(sound8[:-1],sound8[1:]))))
86 
87  print >>sys.stderr,"min/max: %i/%i"%(N.min(sound8),N.max(sound8))
88  print >>sys.stderr,"data bits: %i"%(len(sound8)*options.bits)
89 
90  hist = purehuff.histogram(dsound8)
91 
92  if options.plothist:
93  try:
94  import pylab as P
95  except ImportError:
96  print >>sys.stderr, "Plotting needs pylab"
97 
98  from collections import defaultdict
99  d = defaultdict(float)
100  for n,v in hist:
101  d[v] += n
102  x = range(min(d.iterkeys()),max(d.iterkeys())+1)
103  y = [d[xi] for xi in x]
104 
105  P.title("Histogram of sample differentials, file %s"%os.path.split(options.sndfile)[-1])
106  P.plot(x,y,marker='x')
107  P.show()
108 
109  hufftree = purehuff.HuffTree(hist)
110 
111  # get decoder instance
112  decoder = hufftree.decoder()
113  # get encoder instance
114  encoder = hufftree.encoder()
115  # encode data
116  enc = encoder(dsound8)
117 
118  print >>sys.stderr,"encoded bits: %i"%len(enc)
119  print >>sys.stderr,"ratio: %.0f%%"%((len(enc)*100.)/(len(sound8)*8))
120  print >>sys.stderr,"decoder length: %.0f words"%(len(decoder.huff))
121 
122  if options.hdrfile:
123  hdrf = file(options.hdrfile,'wt')
124  print >>hdrf,"// generated by Mozzi/extras/python/audio2huff.py \n"
125  print >>hdrf,"#ifndef " + options.name + "_H_"
126  print >>hdrf,"#define " + options.name + "_H_\n"
127  print >>hdrf,'#if ARDUINO >= 100'
128  print >>hdrf,'#include "Arduino.h"'
129  print >>hdrf,'#else'
130  print >>hdrf,'#include "WProgram.h"'
131  print >>hdrf,'#endif \n'
132  print >>hdrf,'#include <avr/pgmspace.h>\n \n'
133  print >>hdrf,"#define " + options.name + "_SAMPLERATE %i"%fs
134  print >>hdrf,"#define " + options.name + "_SAMPLE_BITS %i"%options.bits
135  print >>hdrf,'int const __attribute__((section(".progmem.data"))) ' + options.name + '_HUFFMAN[%i] = {\n%s\n};'%(len(decoder.huff),arrayformatter(decoder.huff))
136  print >>hdrf,'unsigned long const ' + options.name + '_SOUNDDATA_BITS = %iL;'%len(enc)
137  print >>hdrf,'unsigned char const __attribute__((section(".progmem.data"))) ' + options.name + '_SOUNDDATA[] = {\n%s\n};'%arrayformatter(enc.data)
138  print >>hdrf,"#endif /* " + options.name + "_H_ */"
+
+ + + + diff --git a/extras/doc/html/bc_s.png b/extras/doc/html/bc_s.png new file mode 100644 index 0000000000000000000000000000000000000000..7ed6ae0e924ddf2236811504220bcca0825800e0 GIT binary patch literal 671 zcmV;Q0$}}#P)xKxFuZ&O5J6sz zRswOSD_15&gX~OPs0n>dr`3f?ZQWo@EZ&(owYTwKxcN@bxpRIwGxyvxd-Oca}0 z2fFrUQ^{`tzzCo2J#|13MM8*$l#0bI0APgHj~!Pt>4ydopMO*f zL_|?sYw`PcX@!pe0s4Bc1Vau&@SvK>yh5vUMy1--FF70+T(Yd@GMQeqJUasbj2bwO zE6^$&;<$roX=WM#px!2F(;_yTw22lT+y?-tx06zJ9#zRhh`@x0D#d4UqF!vCg(L(eT}Ba z#%hy?1yNY{c)dThtZH-;cSobOz^K#ZvSNbcKT73y#=z|DRm`LdA+CoPc&Jn=3G+FQ zb#bMJ5%9AXJ@}nl8Q8W69Ayz{s3Y{wEPG2sdE4T002ovPDHLk FV1hQoG&TSL literal 0 HcmV?d00001 diff --git a/extras/doc/html/bdwn.png b/extras/doc/html/bdwn.png new file mode 100644 index 0000000000000000000000000000000000000000..d767bc5858a796665cb4031c55d9211d98b36fab GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)H!3HEvS)PKZFi#i9kP61Pb5HX&C z@Zrr=s|Kqbx0V~Rl{z!&zDc?NCOwPcpOyE{HSr8?v-Gn=m|iU1X_s7op(dvM{oDm# r-+m2^{17|qc}>fQBT5$z=&_hr{FT<2TgtZ%Xaj?%tDnm{r-UW|R);i) literal 0 HcmV?d00001 diff --git a/extras/doc/html/blahblah4b__int8_8h_source.html b/extras/doc/html/blahblah4b__int8_8h_source.html new file mode 100644 index 000000000..2daed6012 --- /dev/null +++ b/extras/doc/html/blahblah4b__int8_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: blahblah4b_int8.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
blahblah4b_int8.h
+
+
+
1 #ifndef BLAHBLAH4B_H_
2 #define BLAHBLAH4B_H_
3 
4 #if ARDUINO >= 100
5 #include "Arduino.h"
6 #else
7 #include "WProgram.h"
8 #endif
9 #include <avr/pgmspace.h>
10 
11 #define BLAHBLAH4B_NUM_CELLS 22569
12 #define BLAHBLAH4B_SAMPLERATE 16384
13 
14 const int8_t __attribute__((section(".progmem.data"))) BLAHBLAH4B_DATA [] = { -1, 2, 6, 9, 12, 15, 17, 20, 22, 25, 28, 30,
15 32, 34, 37, 38, 40, 42, 44, 46, 47, 49, 50, 52, 53, 53, 54, 55, 55, 55, 54, 54,
16 53, 51, 48, 46, 42, 38, 34, 29, 25, 20, 15, 10, 5, -1, -6, -11, -16, -21, -25,
17 -29, -33, -37, -40, -43, -47, -50, -52, -55, -57, -58, -59, -59, -59, -59, -58,
18 -57, -56, -55, -54, -53, -51, -50, -48, -45, -42, -39, -35, -32, -27, -23, -18,
19 -14, -9, -5, -1, 3, 7, 10, 13, 16, 19, 22, 25, 28, 30, 33, 36, 38, 40, 43, 45,
20 47, 49, 51, 53, 54, 56, 57, 57, 58, 58, 58, 58, 58, 57, 56, 55, 52, 49, 46, 41,
21 37, 33, 28, 23, 17, 12, 7, 1, -5, -10, -15, -20, -25, -30, -34, -38, -42, -46,
22 -49, -52, -55, -57, -59, -61, -62, -63, -62, -62, -61, -60, -59, -58, -57, -56,
23 -54, -52, -51, -48, -45, -42, -38, -34, -31, -26, -22, -18, -13, -9, -5, -1, 3,
24 6, 9, 12, 15, 18, 21, 24, 27, 29, 32, 34, 37, 39, 41, 43, 45, 47, 49, 51, 53,
25 55, 56, 57, 59, 59, 59, 59, 58, 58, 57, 55, 53, 50, 47, 43, 38, 34, 29, 24, 19,
26 15, 9, 4, -2, -8, -13, -18, -24, -28, -32, -37, -40, -44, -47, -50, -54, -56,
27 -59, -61, -62, -64, -64, -64, -63, -62, -61, -60, -58, -58, -57, -55, -53, -50,
28 -48, -45, -42, -39, -35, -31, -27, -22, -22, -17, -8, -2, 4, 8, 12, 14, 17, 21,
29 23, 25, 28, 30, 32, 36, 39, 42, 44, 45, 46, 48, 50, 51, 53, 54, 56, 58, 58, 60,
30 60, 59, 59, 57, 55, 53, 51, 49, 46, 42, 39, 35, 29, 24, 19, 13, 8, 2, -4, -10,
31 -15, -20, -27, -31, -33, -39, -41, -45, -49, -50, -55, -56, -59, -61, -62, -64,
32 -64, -63, -62, -61, -59, -58, -54, -52, -50, -47, -44, -42, -42, -41, -39, -37,
33 -35, -34, -33, -30, -23, -15, -8, -2, 4, 6, 8, 11, 13, 16, 22, 26, 27, 27, 27,
34 28, 29, 29, 30, 33, 36, 40, 44, 47, 49, 49, 48, 48, 47, 46, 47, 48, 51, 53, 55,
35 56, 57, 56, 53, 49, 43, 39, 34, 30, 26, 22, 19, 17, 14, 9, 3, -2, -8, -14, -22,
36 -28, -32, -36, -38, -39, -41, -41, -43, -46, -49, -52, -55, -58, -60, -61, -59,
37 -58, -57, -55, -52, -50, -51, -51, -50, -49, -48, -47, -46, -42, -37, -34, -29,
38 -24, -20, -16, -12, -10, -7, -3, 0, 3, 6, 10, 14, 17, 20, 23, 26, 28, 29, 31,
39 33, 35, 36, 39, 42, 44, 47, 48, 50, 52, 53, 53, 54, 54, 55, 56, 56, 56, 56, 56,
40 54, 51, 47, 42, 37, 33, 29, 24, 19, 15, 10, 6, 0, -5, -10, -15, -21, -27, -33,
41 -37, -40, -42, -45, -48, -48, -50, -53, -55, -56, -57, -59, -60, -60, -58, -57,
42 -56, -55, -53, -52, -54, -53, -49, -48, -46, -48, -48, -48, -52, -43, -28, -21,
43 -14, -17, -20, -9, 0, 7, 14, 14, 13, 15, 21, 29, 34, 33, 32, 32, 32, 37, 44, 46,
44 46, 46, 45, 46, 49, 55, 56, 55, 55, 51, 49, 52, 54, 57, 58, 56, 55, 54, 52, 50,
45 48, 44, 35, 28, 23, 17, 13, 10, 5, -2, -11, -20, -26, -27, -33, -41, -44, -51,
46 -59, -62, -64, -65, -65, -66, -68, -70, -68, -67, -66, -63, -65, -59, -54, -57,
47 -52, -41, -38, -41, -43, -38, -32, -32, -31, -27, -23, -20, -23, -24, -12, -3,
48 0, 7, 11, 11, 14, 13, 17, 22, 16, 15, 20, 23, 28, 34, 38, 43, 40, 37, 37, 38,
49 44, 47, 47, 48, 47, 48, 51, 53, 57, 56, 54, 55, 56, 55, 55, 54, 54, 50, 43, 40,
50 39, 36, 32, 26, 16, 7, 0, -7, -14, -19, -23, -29, -38, -47, -52, -60, -65, -72,
51 -80, -84, -86, -87, -85, -86, -83, -84, -86, -82, -79, -73, -64, -57, -41, -30,
52 -32, -27, -15, -5, -6, -10, 0, 12, 16, 15, 19, 30, 33, 28, 29, 31, 31, 31, 21,
53 17, 17, 15, 18, 19, 22, 20, 17, 19, 19, 17, 14, 8, 8, 11, 11, 10, 8, 15, 21, 16,
54 10, 15, 24, 23, 18, 24, 30, 29, 30, 35, 37, 36, 37, 38, 40, 40, 37, 40, 43, 40,
55 34, 30, 27, 26, 19, 13, 9, 4, -1, -9, -15, -18, -28, -34, -37, -48, -54, -58,
56 -61, -60, -67, -71, -72, -72, -70, -77, -76, -70, -69, -68, -66, -60, -52, -42,
57 -33, -35, -32, -20, -14, -14, -15, -6, 6, 8, 7, 13, 22, 28, 26, 29, 36, 32, 32,
58 37, 40, 41, 39, 42, 48, 46, 42, 36, 33, 34, 30, 26, 23, 22, 26, 25, 19, 14, 16,
59 21, 13, 9, 16, 19, 16, 13, 18, 21, 14, 17, 21, 20, 20, 21, 27, 31, 26, 26, 26,
60 25, 24, 20, 18, 16, 14, 11, 5, 3, 0, -7, -10, -16, -20, -28, -33, -33, -39, -43,
61 -50, -53, -51, -58, -61, -60, -61, -61, -62, -63, -60, -60, -58, -53, -53, -52,
62 -48, -37, -25, -25, -24, -11, -1, -1, -3, 2, 13, 17, 18, 19, 24, 33, 36, 37, 38,
63 38, 37, 38, 39, 39, 39, 41, 41, 39, 38, 33, 29, 28, 25, 23, 18, 16, 18, 18, 14,
64 8, 4, 9, 14, 6, 1, 10, 18, 14, 8, 11, 16, 15, 15, 18, 19, 21, 25, 28, 31, 28,
65 23, 25, 28, 23, 15, 12, 19, 20, 10, 3, 1, -2, -7, -16, -22, -27, -30, -31, -37,
66 -46, -51, -52, -53, -57, -63, -66, -64, -62, -63, -65, -65, -61, -57, -56, -57,
67 -54, -51, -46, -40, -35, -24, -17, -15, -5, 4, 7, 2, 5, 20, 27, 24, 25, 31, 43,
68 46, 39, 39, 44, 44, 41, 38, 40, 42, 42, 43, 39, 35, 31, 26, 24, 23, 18, 14, 12,
69 13, 13, 8, 2, 4, 11, 8, -2, 1, 10, 10, 6, 6, 11, 11, 10, 12, 14, 17, 18, 20, 26,
70 26, 21, 20, 24, 24, 15, 10, 13, 15, 9, 3, 3, 0, -7, -13, -18, -21, -29, -34,
71 -32, -37, -46, -49, -49, -50, -56, -59, -59, -61, -59, -58, -59, -57, -54, -51,
72 -50, -49, -47, -42, -38, -36, -34, -24, -10, -11, -9, 3, 12, 13, 7, 14, 28, 30,
73 29, 30, 39, 48, 44, 44, 50, 49, 45, 43, 43, 44, 41, 39, 41, 38, 35, 29, 23, 23,
74 20, 14, 8, 4, 4, 6, 1, -2, 0, 5, 1, -5, -2, 2, 2, 1, 4, 8, 8, 8, 13, 16, 18, 17,
75 20, 26, 25, 21, 21, 23, 22, 17, 13, 14, 12, 9, 6, 3, -1, -8, -13, -14, -20, -29,
76 -32, -30, -36, -47, -45, -46, -51, -52, -55, -54, -55, -56, -53, -54, -52, -49,
77 -49, -44, -43, -42, -35, -34, -32, -27, -25, -15, -1, -3, -3, 8, 18, 17, 10, 18,
78 30, 30, 31, 29, 35, 45, 42, 40, 44, 43, 39, 37, 38, 38, 33, 34, 33, 30, 29, 22,
79 17, 17, 15, 11, 4, 0, 1, 4, 3, -4, -4, 5, 4, -4, -3, 4, 6, 5, 5, 11, 13, 13, 16,
80 19, 22, 19, 19, 27, 26, 20, 18, 21, 22, 16, 11, 8, 8, 7, -1, -6, -9, -16, -19,
81 -21, -27, -36, -38, -35, -43, -50, -47, -50, -53, -51, -52, -54, -54, -51, -47,
82 -48, -48, -44, -41, -36, -36, -36, -29, -27, -23, -19, -19, -13, 1, 8, 2, 4, 16,
83 22, 17, 15, 24, 32, 32, 28, 30, 38, 39, 34, 36, 41, 35, 29, 31, 32, 30, 25, 22,
84 23, 22, 18, 12, 10, 11, 8, 3, -1, -4, -2, 3, 0, -2, 3, 6, 3, 2, 6, 8, 7, 8, 13,
85 17, 17, 16, 22, 25, 23, 19, 21, 24, 19, 15, 16, 17, 12, 6, 5, 5, 0, -10, -11,
86 -9, -17, -26, -29, -28, -32, -40, -41, -41, -45, -46, -47, -50, -50, -50, -49,
87 -48, -49, -45, -42, -41, -37, -36, -34, -32, -30, -25, -22, -20, -17, -14, -5,
88 9, 6, 0, 11, 21, 22, 12, 13, 28, 32, 28, 24, 26, 35, 34, 30, 33, 34, 30, 29, 30,
89 29, 25, 21, 23, 22, 20, 16, 10, 13, 14, 9, 3, -3, -2, 3, 2, -4, -4, 7, 9, 0, -1,
90 5, 7, 4, 5, 10, 13, 13, 14, 18, 21, 18, 15, 21, 24, 16, 13, 14, 18, 14, 6, 3, 6,
91 5, -6, -7, -4, -14, -20, -17, -21, -31, -35, -29, -33, -39, -37, -40, -43, -39,
92 -43, -46, -42, -42, -41, -36, -36, -35, -32, -28, -29, -31, -25, -22, -23, -18,
93 -16, -16, -4, 6, -1, -2, 8, 13, 11, 6, 10, 20, 22, 19, 14, 20, 27, 22, 21, 28,
94 26, 22, 25, 24, 22, 21, 16, 16, 17, 15, 11, 9, 12, 11, 7, 2, -2, -1, 4, 3, -2,
95 3, 9, 8, 6, 4, 8, 12, 11, 9, 14, 19, 18, 19, 24, 26, 22, 22, 28, 27, 21, 19, 21,
96 22, 17, 9, 9, 11, 5, -3, -2, -2, -11, -18, -15, -20, -32, -32, -30, -35, -38,
97 -38, -40, -42, -42, -43, -46, -44, -41, -41, -38, -37, -37, -33, -31, -31, -30,
98 -27, -25, -25, -20, -19, -20, -16, -3, 2, -6, -4, 5, 12, 7, 0, 9, 19, 18, 13,
99 11, 19, 22, 19, 20, 23, 22, 22, 23, 22, 23, 18, 16, 18, 16, 15, 12, 11, 14, 13,
100 11, 5, 2, 5, 9, 7, 8, 12, 13, 14, 14, 13, 14, 15, 19, 21, 23, 24, 23, 28, 31,
101 30, 27, 29, 32, 29, 24, 23, 24, 20, 14, 11, 8, 6, 1, 0, -2, -8, -13, -20, -21,
102 -28, -33, -33, -38, -37, -41, -45, -44, -48, -47, -48, -50, -50, -49, -46, -45,
103 -45, -41, -37, -38, -37, -35, -34, -29, -29, -27, -24, -25, -20, -6, -1, -10,
104 -7, 7, 12, 3, -2, 12, 22, 18, 14, 13, 23, 29, 23, 26, 31, 28, 28, 30, 29, 28,
105 26, 27, 27, 23, 24, 22, 21, 23, 21, 17, 13, 8, 11, 15, 12, 12, 20, 19, 16, 17,
106 19, 18, 16, 21, 23, 20, 23, 24, 25, 29, 27, 24, 26, 28, 22, 18, 18, 18, 15, 8,
107 3, 5, 4, -6, -8, -7, -13, -24, -28, -25, -36, -44, -39, -42, -44, -49, -51, -49,
108 -52, -56, -56, -57, -57, -54, -52, -50, -49, -46, -40, -43, -42, -35, -34, -32,
109 -30, -28, -24, -22, -22, -19, -3, 6, -3, -4, 10, 18, 10, 4, 15, 26, 29, 24, 22,
110 31, 39, 36, 32, 37, 36, 35, 39, 37, 36, 37, 37, 36, 32, 31, 29, 25, 25, 24, 18,
111 14, 9, 8, 14, 12, 9, 11, 11, 11, 10, 6, 5, 6, 11, 11, 8, 10, 14, 16, 19, 18, 14,
112 16, 20, 16, 11, 10, 12, 12, 6, 2, 1, -1, -6, -9, -12, -19, -24, -28, -31, -35,
113 -40, -41, -44, -45, -47, -53, -51, -52, -54, -53, -55, -56, -53, -48, -45, -44,
114 -41, -38, -35, -32, -30, -29, -24, -18, -18, -16, -12, -10, -7, -4, 1, 13, 14,
115 9, 14, 24, 29, 21, 20, 33, 39, 37, 33, 32, 41, 47, 40, 38, 40, 41, 43, 39, 36,
116 35, 33, 34, 28, 21, 23, 20, 16, 14, 8, 3, 0, -5, -6, -3, -3, -4, -7, -5, 0, -6,
117 -10, -7, -1, 2, -2, -1, 6, 11, 11, 12, 14, 16, 17, 19, 15, 12, 14, 16, 13, 9, 8,
118 7, 5, 2, -4, -8, -11, -19, -21, -22, -29, -33, -31, -32, -37, -41, -41, -44,
119 -45, -43, -47, -48, -43, -41, -41, -38, -35, -33, -31, -27, -25, -25, -19, -16,
120 -15, -11, -9, -7, -3, 0, 1, 1, 1, 9, 21, 17, 11, 19, 29, 30, 20, 21, 33, 36, 33,
121 28, 27, 33, 34, 29, 31, 31, 27, 27, 24, 20, 17, 13, 14, 10, 4, 4, 1, -3, -4, -8,
122 -11, -14, -17, -12, -7, -10, -12, -8, -4, -5, -8, -4, 3, 7, 9, 10, 13, 19, 24,
123 26, 29, 30, 31, 33, 32, 27, 26, 26, 27, 26, 20, 16, 17, 13, 6, 1, -4, -8, -14,
124 -20, -19, -26, -32, -29, -34, -38, -41, -45, -44, -46, -48, -48, -49, -46, -41,
125 -42, -41, -37, -35, -31, -31, -31, -25, -23, -22, -18, -16, -13, -12, -10, -6,
126 -6, -5, -6, 2, 13, 9, 6, 13, 22, 22, 13, 15, 23, 25, 25, 20, 18, 26, 28, 25, 26,
127 23, 22, 23, 18, 14, 11, 11, 14, 8, 4, 6, 2, 0, -2, -4, -2, -5, -9, -2, 4, 1, -1,
128 3, 10, 10, 7, 10, 14, 20, 23, 22, 25, 32, 37, 37, 37, 40, 40, 39, 36, 32, 31,
129 29, 27, 26, 23, 17, 13, 11, 5, -4, -8, -11, -20, -24, -25, -32, -38, -36, -38,
130 -47, -50, -49, -52, -55, -56, -57, -56, -54, -53, -52, -47, -45, -43, -39, -39,
131 -38, -33, -30, -27, -24, -18, -14, -14, -10, -8, -5, -2, -2, -1, 9, 17, 11, 13,
132 23, 29, 27, 20, 24, 30, 32, 30, 24, 28, 35, 34, 30, 30, 30, 29, 27, 21, 17, 17,
133 18, 16, 10, 10, 10, 7, 7, 3, 3, 5, 3, 3, 5, 7, 7, 7, 11, 13, 13, 14, 16, 19, 24,
134 25, 24, 30, 33, 35, 35, 35, 36, 34, 32, 27, 23, 23, 21, 17, 11, 8, 6, -2, -7,
135 -13, -17, -20, -27, -35, -38, -39, -45, -50, -50, -50, -57, -63, -58, -59, -64,
136 -61, -60, -56, -55, -54, -49, -47, -43, -40, -38, -34, -30, -26, -20, -16, -14,
137 -9, -5, -3, 1, 2, 6, 8, 8, 20, 25, 24, 26, 32, 39, 36, 29, 33, 39, 39, 36, 33,
138 36, 41, 38, 36, 35, 32, 31, 28, 23, 21, 17, 19, 19, 13, 10, 8, 6, 4, -1, -4, -6,
139 -9, -7, -5, -7, -6, -4, -2, 0, -3, -2, 0, 4, 7, 6, 8, 14, 18, 21, 22, 23, 25,
140 24, 22, 22, 20, 18, 17, 18, 17, 10, 8, 9, 4, -3, -8, -9, -14, -20, -24, -27,
141 -30, -33, -35, -37, -41, -44, -44, -46, -51, -50, -47, -46, -45, -44, -40, -39,
142 -37, -34, -32, -29, -27, -22, -17, -15, -12, -7, -3, 0, 0, 2, 5, 7, 7, 7, 9, 13,
143 16, 21, 22, 22, 25, 27, 26, 23, 23, 25, 26, 25, 23, 23, 25, 25, 23, 22, 21, 18,
144 16, 14, 11, 10, 9, 8, 5, 1, -2, -5, -7, -9, -12, -12, -10, -11, -11, -8, -6, -6,
145 -6, -3, -1, -1, 2, 5, 9, 13, 16, 21, 26, 29, 32, 34, 37, 38, 38, 39, 38, 37, 38,
146 36, 33, 31, 26, 24, 19, 13, 8, 3, 0, -9, -14, -16, -23, -28, -32, -35, -39, -44,
147 -46, -49, -51, -52, -53, -54, -54, -51, -51, -49, -46, -44, -38, -38, -36, -28,
148 -27, -24, -18, -15, -13, -10, -5, -1, -1, 2, 5, 5, 6, 7, 7, 8, 8, 7, 12, 13, 12,
149 12, 15, 17, 14, 9, 12, 11, 9, 8, 5, 6, 8, 7, 6, 5, 4, 5, 4, 1, 0, -2, 2, 4, 1,
150 5, 9, 10, 13, 13, 17, 22, 22, 24, 28, 30, 32, 32, 37, 42, 41, 43, 47, 49, 51,
151 51, 50, 52, 51, 49, 44, 40, 37, 32, 25, 20, 13, 8, 2, -6, -9, -17, -27, -29,
152 -32, -40, -50, -52, -54, -61, -65, -67, -71, -71, -67, -71, -73, -69, -66, -62,
153 -63, -58, -54, -51, -43, -42, -34, -27, -26, -18, -11, -8, -5, 0, 6, 8, 9, 9,
154 13, 14, 16, 14, 16, 26, 27, 24, 28, 30, 30, 27, 23, 23, 22, 21, 18, 14, 15, 18,
155 16, 15, 14, 10, 11, 10, 4, 2, 3, 5, 1, -1, 2, 2, 2, 2, 2, 4, 4, 4, 8, 13, 14,
156 17, 21, 25, 27, 28, 32, 34, 37, 39, 39, 41, 46, 47, 47, 48, 49, 48, 45, 42, 38,
157 31, 28, 22, 15, 9, 2, 0, -5, -15, -19, -22, -30, -37, -42, -47, -54, -61, -59,
158 -64, -70, -67, -69, -68, -69, -70, -64, -64, -62, -56, -55, -49, -45, -41, -31,
159 -30, -24, -14, -13, -6, -1, 1, 7, 9, 14, 16, 16, 21, 20, 20, 23, 20, 21, 26, 26,
160 24, 26, 28, 28, 24, 23, 22, 18, 19, 17, 12, 14, 14, 13, 14, 13, 11, 11, 10, 8,
161 5, 4, 4, 1, -1, 1, -3, -3, -3, -3, -2, -1, 3, 4, 5, 11, 13, 14, 16, 19, 23, 25,
162 27, 30, 34, 38, 40, 42, 47, 48, 48, 50, 50, 47, 45, 42, 38, 33, 28, 23, 17, 12,
163 6, -2, -8, -14, -21, -28, -34, -42, -47, -51, -58, -64, -64, -65, -71, -71, -68,
164 -70, -71, -67, -66, -64, -58, -57, -52, -45, -39, -36, -30, -20, -17, -13, -5,
165 -2, 2, 6, 9, 12, 15, 19, 19, 20, 24, 24, 21, 22, 20, 16, 16, 13, 13, 12, 10, 11,
166 10, 11, 8, 4, 4, 3, -2, -5, -5, -6, -6, -5, -5, -4, -2, 0, 0, -1, 4, 5, 6, 9,
167 11, 15, 19, 21, 26, 31, 36, 39, 40, 43, 46, 46, 47, 46, 48, 51, 50, 49, 51, 52,
168 52, 48, 46, 44, 38, 32, 26, 19, 12, 4, -4, -8, -16, -26, -28, -34, -42, -48,
169 -50, -57, -63, -65, -69, -71, -73, -76, -75, -71, -69, -76, -68, -60, -62, -61,
170 -52, -44, -43, -35, -27, -24, -18, -11, -5, 0, 5, 7, 12, 18, 18, 20, 23, 25, 23,
171 22, 22, 19, 17, 15, 12, 14, 16, 12, 9, 13, 15, 9, 3, 3, 2, -1, -5, -9, -9, -5,
172 -4, -5, -3, -1, 1, 2, 2, -2, -3, 1, 2, -1, -1, 3, 8, 14, 18, 21, 31, 38, 38, 39,
173 44, 46, 42, 44, 48, 48, 49, 53, 55, 59, 61, 59, 59, 60, 57, 51, 45, 42, 36, 29,
174 21, 11, 6, 1, -8, -16, -19, -25, -38, -47, -47, -55, -65, -67, -68, -73, -76,
175 -76, -77, -78, -77, -73, -71, -71, -68, -62, -57, -52, -49, -40, -32, -29, -20,
176 -12, -8, -3, 6, 13, 13, 16, 20, 24, 25, 26, 27, 29, 29, 29, 27, 25, 22, 19, 20,
177 20, 14, 13, 16, 16, 12, 9, 9, 9, 7, 5, 2, 0, 2, 3, 4, 4, 4, 6, 9, 9, 8, 8, 10,
178 10, 8, 8, 6, 5, 7, 8, 8, 8, 10, 15, 16, 16, 18, 20, 21, 20, 21, 22, 22, 24, 28,
179 29, 30, 33, 36, 38, 38, 38, 39, 37, 35, 33, 30, 25, 22, 20, 15, 11, 6, 3, -1,
180 -8, -14, -21, -27, -33, -40, -43, -50, -52, -53, -55, -57, -62, -59, -57, -62,
181 -61, -59, -58, -58, -52, -48, -46, -40, -31, -26, -24, -18, -13, -10, -5, -4, 1,
182 3, 5, 9, 11, 14, 15, 17, 18, 17, 14, 12, 9, 4, 2, 0, -1, -1, -3, 0, 3, 5, 3, 0,
183 2, 2, -2, -4, -5, -4, 0, 2, 3, 7, 12, 17, 18, 17, 19, 22, 25, 24, 23, 29, 35,
184 37, 40, 45, 50, 54, 54, 53, 53, 53, 50, 47, 47, 46, 45, 45, 46, 46, 46, 44, 40,
185 37, 32, 25, 17, 10, 2, -5, -12, -19, -22, -28, -34, -36, -43, -49, -52, -58,
186 -62, -68, -71, -70, -74, -75, -72, -69, -67, -67, -60, -56, -55, -51, -46, -39,
187 -36, -34, -25, -19, -15, -9, -2, 5, 10, 14, 17, 19, 19, 23, 23, 20, 21, 19, 18,
188 13, 8, 9, 4, 5, 8, 5, 5, 6, 6, 6, 2, -1, -1, -3, -5, -8, -10, -4, -2, -1, 5, 8,
189 10, 12, 13, 13, 10, 11, 12, 10, 11, 12, 13, 18, 24, 27, 29, 35, 42, 41, 39, 42,
190 43, 41, 40, 39, 42, 43, 44, 46, 48, 50, 50, 49, 48, 46, 41, 39, 33, 28, 23, 15,
191 7, 0, -3, -10, -22, -25, -28, -37, -45, -51, -53, -58, -64, -67, -70, -71, -74,
192 -74, -73, -73, -72, -69, -64, -62, -59, -52, -47, -42, -35, -28, -24, -19, -8,
193 -4, -3, 5, 11, 14, 17, 20, 25, 25, 27, 29, 26, 26, 25, 20, 18, 16, 11, 8, 10,
194 10, 8, 8, 10, 8, 5, 5, 3, -1, 0, -2, -4, -3, -2, 1, 4, 7, 9, 10, 13, 12, 10, 10,
195 8, 6, 6, 5, 4, 5, 8, 9, 9, 12, 14, 15, 17, 17, 16, 19, 19, 19, 21, 24, 27, 29,
196 33, 36, 37, 40, 42, 42, 43, 43, 43, 42, 40, 38, 34, 31, 26, 21, 16, 11, 3, -3,
197 -8, -16, -22, -29, -36, -40, -47, -51, -56, -59, -63, -68, -67, -69, -70, -68,
198 -67, -65, -63, -58, -55, -52, -45, -41, -35, -29, -25, -19, -12, -7, -3, 1, 7,
199 9, 10, 13, 15, 14, 16, 18, 15, 14, 13, 9, 6, 1, -2, -2, -1, -2, -4, 0, 2, 0, 0,
200 1, 0, -2, -3, -4, -5, -3, 0, 2, 6, 10, 13, 16, 19, 19, 21, 27, 26, 24, 28, 33,
201 35, 36, 42, 46, 49, 51, 50, 49, 51, 49, 46, 45, 45, 43, 42, 43, 43, 43, 44, 42,
202 38, 36, 32, 25, 21, 17, 9, 2, -4, -10, -17, -22, -26, -33, -35, -39, -48, -51,
203 -53, -57, -61, -63, -64, -67, -66, -65, -68, -62, -59, -56, -56, -53, -45, -44,
204 -40, -34, -28, -22, -20, -14, -6, -3, -1, 4, 11, 12, 13, 13, 16, 18, 18, 17, 13,
205 15, 14, 6, 2, 1, -2, -6, -7, -6, -7, -6, -4, -4, -3, -2, -4, -4, -3, -4, -5, -3,
206 1, 3, 7, 12, 14, 19, 23, 24, 25, 25, 25, 23, 23, 21, 19, 19, 22, 22, 20, 25, 31,
207 32, 33, 35, 38, 35, 32, 32, 30, 30, 29, 28, 30, 34, 36, 38, 40, 42, 42, 41, 39,
208 35, 31, 27, 20, 13, 9, 3, -4, -8, -13, -19, -24, -29, -37, -42, -48, -55, -60,
209 -65, -68, -70, -72, -74, -71, -69, -68, -67, -63, -59, -59, -55, -48, -46, -42,
210 -32, -28, -23, -14, -8, -3, 4, 8, 9, 13, 16, 15, 16, 20, 20, 16, 18, 19, 12, 10,
211 7, 2, -1, -1, -2, -2, 0, 1, 2, 5, 6, 4, 5, 8, 6, 4, 7, 10, 12, 18, 22, 24, 30,
212 36, 37, 38, 40, 39, 37, 37, 35, 31, 30, 31, 29, 27, 27, 24, 21, 20, 16, 12, 9,
213 6, 3, 1, 1, -1, -1, 3, 5, 4, 6, 8, 9, 10, 10, 12, 12, 13, 14, 12, 12, 10, 8, 8,
214 6, 1, 0, -2, -7, -10, -13, -17, -22, -25, -29, -34, -37, -41, -46, -44, -49,
215 -51, -48, -49, -48, -48, -45, -41, -40, -35, -33, -30, -24, -23, -20, -14, -10,
216 -7, -4, 2, 6, 6, 11, 10, 9, 13, 8, 4, 4, 1, -5, -7, -11, -14, -17, -19, -16,
217 -17, -15, -11, -10, -5, -5, -7, -2, 0, -1, 0, 4, 8, 11, 17, 23, 28, 35, 40, 43,
218 46, 47, 47, 47, 46, 44, 42, 42, 42, 40, 42, 42, 40, 39, 36, 33, 28, 21, 19, 13,
219 9, 7, 4, 4, 6, 6, 8, 9, 10, 11, 10, 9, 7, 4, 2, -1, -6, -9, -12, -13, -12, -17,
220 -20, -20, -19, -24, -30, -30, -31, -38, -40, -43, -47, -46, -45, -46, -48, -43,
221 -41, -45, -41, -40, -38, -37, -36, -30, -28, -23, -21, -17, -7, -6, -3, 1, 2, 2,
222 5, 4, 1, 2, 2, 0, -2, 0, -2, -7, -6, -5, -12, -15, -16, -17, -16, -14, -14, -14,
223 -7, -3, -3, -2, 1, 3, 4, 6, 5, 5, 10, 14, 17, 19, 22, 26, 30, 32, 30, 29, 29,
224 28, 24, 21, 24, 24, 27, 36, 37, 40, 46, 48, 48, 46, 46, 42, 37, 37, 34, 32, 35,
225 37, 40, 45, 47, 46, 46, 45, 38, 30, 23, 12, 1, -7, -15, -24, -28, -31, -35, -40,
226 -43, -47, -53, -57, -64, -71, -73, -77, -81, -78, -74, -74, -70, -61, -55, -54,
227 -47, -40, -39, -34, -29, -26, -21, -14, -8, -2, 5, 11, 15, 21, 24, 21, 23, 20,
228 14, 12, 11, 6, -1, -2, -2, -7, -10, -12, -12, -10, -8, -9, -11, -7, -4, -4, -2,
229 -1, 3, 9, 14, 15, 19, 28, 34, 38, 40, 44, 47, 49, 50, 48, 47, 47, 45, 43, 38,
230 35, 32, 29, 25, 20, 15, 11, 5, 1, -2, -6, -10, -11, -11, -11, -12, -11, -8, -4,
231 -2, 1, 2, 7, 11, 13, 17, 20, 22, 26, 27, 26, 24, 23, 22, 19, 15, 11, 5, 2, -2,
232 -7, -11, -17, -20, -25, -32, -38, -43, -45, -51, -55, -55, -57, -59, -56, -53,
233 -53, -50, -43, -42, -39, -33, -30, -27, -22, -17, -12, -7, -3, 1, 7, 11, 12, 12,
234 15, 15, 11, 8, 4, 2, -2, -8, -12, -14, -17, -21, -21, -17, -18, -18, -13, -8,
235 -9, -8, -4, -3, 0, 1, 2, 6, 13, 17, 22, 30, 37, 42, 48, 52, 52, 52, 53, 52, 49,
236 46, 44, 43, 42, 40, 38, 37, 35, 31, 27, 24, 18, 12, 7, 3, -2, -5, -5, -5, -4, 0,
237 1, 3, 7, 9, 9, 9, 9, 7, 6, 4, 1, -3, -5, -6, -8, -9, -10, -11, -14, -16, -16,
238 -21, -24, -28, -32, -34, -39, -45, -45, -44, -47, -48, -46, -46, -42, -37, -36,
239 -36, -30, -22, -23, -25, -16, -9, -11, -11, -2, 1, 0, 3, 7, 8, 8, 9, 6, 4, 4,
240 -3, -7, -7, -11, -16, -17, -18, -22, -21, -16, -12, -11, -9, -4, -3, -1, -1, -2,
241 2, 4, 4, 4, 6, 12, 18, 21, 25, 28, 31, 33, 31, 29, 28, 25, 22, 21, 16, 15, 20,
242 25, 27, 30, 38, 42, 40, 39, 41, 38, 34, 31, 28, 28, 28, 28, 33, 39, 43, 46, 48,
243 48, 45, 40, 35, 25, 14, 5, -7, -18, -23, -29, -34, -37, -40, -44, -47, -51, -55,
244 -60, -65, -70, -74, -76, -76, -77, -72, -65, -61, -53, -46, -38, -31, -26, -21,
245 -16, -10, -9, -5, 2, 3, 9, 15, 19, 22, 25, 27, 25, 23, 19, 13, 9, 3, -5, -13,
246 -17, -18, -23, -26, -25, -26, -23, -19, -18, -16, -11, -7, -6, -3, -1, 3, 9, 14,
247 18, 22, 31, 37, 41, 45, 48, 48, 47, 46, 42, 37, 32, 27, 23, 18, 13, 8, 6, 5, 0,
248 -4, -6, -8, -10, -12, -13, -13, -12, -8, -4, -1, 4, 11, 18, 25, 30, 34, 41, 45,
249 48, 50, 51, 52, 53, 50, 46, 40, 35, 28, 20, 11, 1, -7, -17, -26, -34, -43, -52,
250 -57, -60, -69, -74, -73, -77, -82, -79, -76, -78, -74, -66, -62, -58, -49, -39,
251 -33, -23, -12, -8, -1, 11, 16, 18, 24, 27, 28, 30, 30, 26, 25, 26, 19, 14, 11,
252 6, -1, -9, -14, -23, -30, -35, -39, -38, -37, -35, -30, -23, -18, -13, -6, 0, 3,
253 8, 12, 16, 20, 27, 35, 42, 51, 57, 63, 70, 72, 72, 70, 67, 61, 53, 45, 36, 30,
254 24, 17, 12, 6, 1, -4, -8, -14, -21, -26, -30, -33, -36, -36, -34, -30, -23, -16,
255 -8, 1, 9, 16, 23, 28, 32, 35, 37, 37, 35, 33, 31, 26, 21, 19, 17, 11, 4, 0, -6,
256 -18, -24, -29, -40, -48, -52, -62, -69, -68, -72, -73, -68, -69, -67, -59, -53,
257 -51, -46, -33, -28, -29, -15, -6, -6, 5, 15, 17, 23, 32, 31, 30, 35, 33, 27, 24,
258 21, 12, 7, 4, -8, -13, -11, -20, -26, -19, -16, -22, -20, -12, -12, -14, -12,
259 -11, -10, -5, -4, -5, 3, 12, 16, 23, 31, 36, 41, 47, 46, 42, 43, 42, 34, 28, 25,
260 20, 16, 16, 14, 11, 15, 16, 14, 13, 12, 11, 8, 6, 4, 1, 3, 4, 5, 12, 17, 20, 27,
261 33, 34, 36, 36, 32, 26, 20, 11, 2, -5, -10, -17, -23, -24, -28, -34, -35, -36,
262 -42, -48, -54, -57, -64, -71, -70, -68, -70, -64, -53, -48, -41, -30, -21, -13,
263 -10, -5, 0, 4, 6, 4, 10, 17, 18, 20, 25, 27, 27, 28, 23, 17, 11, 3, -5, -19,
264 -27, -32, -43, -44, -46, -48, -39, -33, -29, -19, -12, -6, 0, 3, 7, 12, 15, 20,
265 23, 29, 40, 45, 52, 61, 65, 68, 69, 65, 60, 52, 42, 32, 21, 11, 1, -8, -13, -17,
266 -21, -22, -23, -25, -24, -25, -26, -25, -24, -21, -18, -13, -5, 5, 15, 26, 37,
267 47, 56, 62, 67, 70, 70, 66, 61, 56, 45, 34, 25, 14, 3, -5, -16, -29, -35, -43,
268 -57, -64, -71, -81, -86, -86, -94, -100, -90, -83, -83, -75, -62, -52, -42, -27,
269 -19, -9, 5, 14, 19, 26, 35, 38, 44, 49, 49, 52, 53, 50, 46, 42, 33, 21, 12, 3,
270 -13, -26, -35, -45, -54, -62, -68, -66, -61, -58, -51, -41, -32, -23, -13, -4,
271 4, 12, 22, 29, 35, 43, 53, 62, 70, 76, 81, 84, 84, 82, 75, 67, 57, 45, 31, 17,
272 3, -9, -19, -29, -37, -42, -48, -51, -52, -53, -53, -51, -45, -40, -35, -24,
273 -13, -2, 11, 25, 38, 50, 60, 70, 79, 83, 84, 84, 81, 76, 67, 56, 43, 30, 17, 2,
274 -11, -26, -38, -51, -64, -71, -79, -93, -99, -96, -101, -108, -105, -95, -86,
275 -81, -70, -55, -39, -24, -15, -2, 16, 27, 32, 45, 52, 53, 59, 63, 63, 62, 60,
276 54, 47, 41, 31, 16, 5, -4, -21, -36, -47, -60, -68, -76, -87, -88, -79, -76,
277 -73, -58, -42, -31, -19, -4, 7, 19, 31, 38, 44, 55, 64, 70, 77, 83, 87, 92, 92,
278 86, 81, 75, 62, 46, 32, 16, -1, -14, -26, -39, -46, -49, -52, -53, -50, -48,
279 -43, -38, -35, -32, -24, -12, -1, 10, 18, 26, 41, 59, 72, 80, 82, 79, 79, 79,
280 73, 60, 42, 21, 5, -6, -22, -39, -45, -55, -70, -74, -73, -81, -91, -91, -92,
281 -97, -97, -92, -89, -81, -69, -55, -36, -18, -6, 13, 32, 43, 55, 64, 68, 68, 71,
282 69, 61, 57, 55, 47, 38, 32, 21, 10, 1, -13, -27, -41, -57, -72, -85, -95, -96,
283 -88, -83, -79, -63, -41, -25, -13, 4, 21, 33, 40, 43, 47, 56, 62, 64, 68, 74,
284 78, 83, 84, 81, 77, 71, 58, 41, 25, 9, -9, -23, -35, -45, -48, -46, -42, -36,
285 -28, -19, -10, -3, 3, 8, 11, 14, 19, 24, 30, 33, 40, 49, 52, 53, 53, 50, 42, 29,
286 15, 1, -14, -34, -48, -57, -68, -78, -83, -81, -80, -82, -83, -79, -71, -71,
287 -70, -61, -51, -44, -34, -20, -7, 10, 25, 37, 50, 62, 68, 69, 73, 72, 64, 57,
288 49, 40, 28, 17, 5, -5, -13, -26, -39, -47, -56, -64, -68, -69, -70, -68, -59,
289 -51, -44, -32, -17, -4, 7, 17, 28, 39, 48, 54, 58, 65, 67, 67, 68, 66, 61, 57,
290 52, 43, 33, 23, 12, 1, -8, -20, -29, -34, -37, -40, -38, -32, -26, -17, -6, 1,
291 10, 21, 28, 35, 40, 42, 44, 47, 47, 43, 38, 35, 30, 20, 9, 1, -5, -20, -32, -37,
292 -50, -62, -65, -72, -82, -84, -84, -86, -83, -79, -70, -61, -51, -40, -27, -13,
293 -3, 9, 24, 31, 36, 46, 51, 51, 55, 53, 51, 48, 42, 34, 24, 16, 4, -9, -21, -35,
294 -47, -55, -64, -68, -62, -61, -58, -45, -33, -24, -13, 0, 11, 19, 25, 32, 38,
295 44, 49, 52, 58, 60, 62, 66, 65, 61, 56, 51, 42, 29, 16, 4, -8, -18, -29, -37,
296 -41, -41, -41, -38, -32, -25, -16, -6, 3, 9, 18, 28, 34, 39, 43, 47, 50, 49, 43,
297 39, 35, 27, 16, 4, -7, -18, -29, -41, -53, -59, -67, -76, -77, -79, -83, -80,
298 -74, -71, -64, -55, -45, -32, -19, -8, 4, 19, 31, 40, 50, 56, 59, 63, 64, 58,
299 53, 48, 39, 28, 16, 3, -9, -20, -32, -45, -56, -64, -68, -69, -71, -70, -61,
300 -52, -45, -33, -18, -6, 8, 21, 31, 41, 52, 61, 67, 70, 72, 75, 76, 72, 65, 61,
301 56, 46, 35, 24, 13, 1, -10, -22, -32, -39, -43, -46, -47, -44, -39, -32, -22,
302 -12, -2, 9, 18, 28, 37, 41, 42, 45, 45, 42, 38, 30, 23, 18, 9, -5, -14, -20,
303 -29, -39, -47, -56, -60, -64, -71, -73, -69, -68, -66, -58, -49, -42, -30, -15,
304 -6, 3, 17, 27, 34, 42, 46, 47, 49, 48, 43, 37, 32, 24, 15, 6, -4, -13, -20, -27,
305 -34, -38, -41, -43, -42, -41, -42, -38, -31, -27, -23, -15, -6, 3, 12, 21, 30,
306 39, 47, 52, 55, 58, 58, 57, 53, 48, 42, 37, 31, 24, 18, 12, 7, 4, 1, -3, -6, -6,
307 -7, -8, -8, -8, -6, -6, -7, -8, -10, -11, -13, -18, -21, -25, -29, -33, -35,
308 -37, -37, -37, -37, -33, -30, -30, -26, -20, -18, -17, -12, -8, -4, 0, 3, 8, 13,
309 17, 21, 24, 26, 27, 25, 22, 17, 11, 4, -3, -11, -20, -23, -25, -28, -29, -27,
310 -25, -20, -15, -12, -9, -6, -4, -2, 1, 3, 6, 9, 11, 17, 24, 28, 30, 34, 35, 34,
311 33, 29, 23, 17, 10, 4, -1, -5, -9, -10, -11, -10, -7, -5, -2, 1, 2, 4, 5, 5, 5,
312 4, 1, 1, -1, -3, -6, -8, -11, -14, -17, -19, -24, -26, -27, -30, -34, -32, -30,
313 -30, -30, -27, -22, -18, -15, -9, -5, -1, 3, 7, 11, 15, 15, 16, 17, 16, 15, 12,
314 9, 7, 8, 6, 5, 6, 8, 8, 8, 9, 10, 8, 5, 3, 0, -3, -5, -7, -8, -8, -6, -3, -1, 1,
315 4, 6, 6, 6, 6, 4, 1, 0, -2, -4, -3, -3, -2, 1, 5, 8, 10, 13, 14, 16, 16, 15, 12,
316 8, 5, 2, -1, -5, -9, -14, -18, -22, -27, -31, -34, -39, -42, -43, -44, -44, -42,
317 -38, -32, -26, -21, -13, -6, 2, 8, 13, 18, 22, 23, 25, 25, 24, 22, 19, 15, 11,
318 6, 1, -4, -9, -14, -16, -17, -18, -19, -17, -15, -11, -8, -6, -2, 2, 4, 6, 10,
319 13, 15, 16, 19, 21, 21, 21, 20, 18, 16, 12, 8, 4, -1, -6, -10, -13, -14, -15,
320 -16, -15, -14, -11, -8, -5, -1, 2, 4, 7, 9, 10, 11, 10, 10, 8, 5, 2, -1, -8,
321 -13, -20, -28, -33, -39, -47, -50, -51, -54, -51, -45, -42, -36, -28, -18, -11,
322 -4, 4, 9, 14, 18, 20, 22, 23, 21, 20, 18, 15, 11, 6, -1, -7, -12, -17, -21, -25,
323 -28, -30, -29, -28, -26, -23, -19, -15, -10, -5, 1, 7, 12, 15, 21, 26, 29, 30,
324 31, 30, 29, 27, 23, 18, 14, 8, 2, -2, -6, -10, -14, -17, -19, -19, -19, -19,
325 -18, -16, -14, -11, -8, -4, -2, 0, 2, 5, 6, 5, 4, 5, 2, -4, -7, -9, -16, -23,
326 -27, -29, -33, -36, -35, -34, -32, -27, -24, -20, -14, -10, -7, -4, -1, 1, 1, 0,
327 0, 0, -1, -4, -6, -7, -10, -12, -13, -13, -13, -13, -12, -9, -7, -6, -4, -3, -1,
328 0, 0, 2, 3, 4, 4, 5, 7, 7, 7, 7, 7, 5, 3, 1, -1, -4, -8, -10, -12, -12, -12,
329 -12, -11, -8, -5, -1, 2, 6, 9, 12, 15, 17, 18, 19, 19, 17, 15, 14, 10, 5, -1,
330 -7, -13, -20, -28, -34, -39, -47, -52, -53, -52, -53, -51, -42, -34, -28, -18,
331 -5, 4, 12, 20, 27, 30, 32, 32, 30, 25, 21, 15, 7, 0, -6, -13, -18, -20, -22,
332 -25, -25, -24, -24, -22, -22, -21, -20, -20, -18, -16, -13, -11, -6, -2, 2, 6,
333 10, 13, 14, 14, 14, 12, 9, 5, 1, -3, -6, -9, -10, -11, -10, -9, -7, -5, -3, -1,
334 0, 1, 2, 3, 3, 4, 4, 4, 4, 4, 4, 1, -1, -4, -8, -13, -19, -23, -28, -35, -38,
335 -39, -42, -45, -41, -37, -35, -29, -19, -14, -7, 3, 9, 14, 21, 24, 24, 24, 23,
336 20, 14, 8, 2, -6, -13, -18, -22, -26, -29, -28, -25, -24, -21, -15, -13, -10,
337 -5, -2, 0, 3, 5, 5, 8, 10, 11, 12, 13, 13, 13, 12, 9, 7, 2, -3, -7, -11, -16,
338 -20, -23, -25, -25, -24, -22, -19, -15, -10, -6, -1, 3, 6, 9, 10, 12, 12, 12,
339 11, 10, 9, 6, 4, 1, -2, -6, -9, -13, -18, -22, -26, -32, -36, -37, -42, -46,
340 -44, -42, -41, -35, -28, -22, -14, -4, 4, 10, 16, 20, 19, 19, 17, 11, 4, -2, -9,
341 -15, -18, -21, -23, -19, -16, -14, -7, -1, 1, 3, 7, 7, 6, 7, 5, 3, 3, 4, 4, 4,
342 7, 9, 9, 10, 11, 9, 5, 2, -2, -7, -11, -16, -19, -20, -20, -19, -16, -12, -7,
343 -1, 4, 9, 13, 16, 17, 18, 17, 14, 11, 8, 4, 1, -2, -5, -8, -10, -11, -15, -16,
344 -18, -23, -24, -27, -31, -34, -36, -36, -37, -37, -33, -30, -25, -17, -10, -3,
345 4, 11, 15, 19, 21, 19, 17, 13, 6, -1, -7, -15, -20, -22, -26, -27, -24, -21,
346 -17, -12, -6, -3, 0, 4, 5, 5, 6, 4, 3, 4, 4, 4, 5, 7, 9, 10, 12, 12, 11, 9, 7,
347 3, 0, -5, -9, -12, -14, -14, -13, -11, -7, -3, 2, 7, 10, 14, 17, 17, 17, 16, 14,
348 11, 7, 5, 2, 0, -2, -4, -4, -5, -6, -7, -8, -11, -14, -16, -21, -26, -29, -34,
349 -35, -36, -38, -35, -30, -24, -17, -9, -2, 6, 14, 19, 20, 22, 21, 15, 11, 5, -3,
350 -9, -14, -19, -22, -21, -19, -17, -13, -8, -5, 0, 3, 4, 6, 5, 4, 4, 2, 1, 0, 0,
351 2, 3, 4, 6, 7, 8, 9, 8, 5, 3, 0, -4, -7, -10, -12, -13, -13, -11, -9, -5, -1, 4,
352 8, 12, 15, 17, 18, 18, 16, 14, 11, 7, 5, 2, 0, 0, 0, 0, 2, 4, 5, 6, 6, 5, 3, 2,
353 -2, -6, -11, -16, -21, -26, -27, -32, -35, -32, -33, -29, -23, -21, -14, -7, -1,
354 6, 10, 14, 17, 18, 18, 17, 14, 11, 7, 4, 2, 0, -2, -3, -3, -3, -2, -1, -2, -2,
355 -1, -3, -3, -4, -6, -7, -6, -6, -5, -3, -1, 2, 5, 9, 11, 12, 14, 13, 12, 11, 8,
356 5, 2, -1, -3, -4, -4, -4, -2, 0, 3, 6, 9, 11, 13, 14, 15, 14, 12, 10, 8, 5, 2,
357 1, 0, -1, 1, 1, 3, 5, 5, 6, 6, 5, 2, 0, -3, -6, -9, -13, -15, -18, -20, -21,
358 -24, -22, -22, -21, -18, -14, -11, -7, -2, 1, 5, 8, 10, 12, 12, 11, 10, 8, 6, 4,
359 2, -1, -1, -3, -4, -3, -4, -3, -2, -2, -1, 0, 0, 1, 3, 4, 6, 8, 10, 12, 13, 14,
360 14, 13, 12, 9, 7, 4, 0, -3, -7, -9, -11, -13, -13, -13, -11, -8, -5, -2, 2, 6,
361 10, 13, 15, 17, 18, 18, 17, 16, 14, 12, 10, 7, 5, 3, 2, 1, 1, 1, 2, 2, 3, 4, 4,
362 4, 4, 4, 3, 1, 0, -1, -3, -5, -6, -10, -12, -16, -21, -24, -29, -33, -36, -38,
363 -36, -34, -28, -20, -11, 1, 12, 24, 33, 41, 45, 45, 44, 36, 29, 19, 6, -4, -15,
364 -24, -30, -34, -35, -33, -28, -22, -15, -7, 1, 7, 13, 17, 20, 21, 21, 20, 18,
365 16, 15, 12, 11, 9, 7, 6, 4, 2, -1, -4, -7, -10, -13, -15, -16, -16, -14, -11,
366 -7, -2, 4, 9, 15, 19, 22, 24, 23, 21, 17, 12, 6, -1, -7, -13, -17, -20, -21,
367 -20, -18, -14, -9, -3, 2, 7, 12, 15, 17, 18, 17, 15, 13, 11, 9, 8, 8, 9, 11, 14,
368 17, 20, 23, 24, 23, 21, 18, 11, 4, -3, -12, -20, -27, -33, -37, -38, -38, -35,
369 -32, -28, -23, -18, -10, -3, 2, 11, 16, 22, 28, 31, 34, 34, 32, 28, 24, 17, 9,
370 1, -7, -14, -20, -25, -27, -28, -26, -22, -17, -10, -2, 5, 12, 19, 24, 28, 30,
371 30, 30, 27, 24, 19, 14, 9, 4, 0, -5, -8, -10, -12, -13, -13, -12, -10, -8, -5,
372 -3, 1, 4, 7, 10, 13, 15, 16, 17, 17, 17, 16, 14, 11, 8, 4, 1, -3, -5, -8, -10,
373 -11, -11, -11, -9, -7, -4, -1, 3, 6, 9, 12, 14, 16, 17, 17, 17, 15, 13, 12, 9,
374 7, 4, 2, 1, -1, 0, 1, 4, 8, 12, 18, 23, 27, 31, 32, 31, 27, 21, 13, 4, -6, -16,
375 -24, -31, -35, -37, -36, -32, -27, -19, -11, -4, 4, 10, 15, 18, 19, 19, 18, 15,
376 12, 9, 5, 2, -1, -3, -6, -7, -8, -11, -12, -13, -14, -15, -14, -13, -10, -6, -2,
377 4, 9, 16, 21, 26, 30, 31, 32, 30, 26, 20, 14, 7, -1, -7, -14, -19, -22, -24,
378 -23, -22, -18, -14, -9, -3, 2, 7, 12, 16, 19, 21, 22, 22, 21, 20, 19, 16, 14,
379 11, 8, 5, 2, -2, -5, -8, -11, -13, -15, -15, -15, -14, -11, -8, -3, 1, 7, 13,
380 21, 30, 34, 41, 43, 42, 42, 35, 26, 15, 3, -10, -22, -32, -40, -46, -48, -47,
381 -43, -37, -29, -20, -11, 0, 9, 17, 24, 28, 32, 33, 33, 31, 26, 23, 17, 12, 7, 1,
382 -3, -7, -9, -11, -11, -11, -9, -7, -4, -1, 3, 6, 8, 11, 11, 12, 12, 10, 9, 5, 2,
383 -2, -6, -8, -10, -12, -12, -12, -10, -7, -5, -2, 1, 3, 6, 7, 8, 8, 8, 7, 7, 6,
384 6, 6, 5, 6, 6, 6, 7, 6, 6, 6, 4, 3, 1, 0, -2, -4, -5, -6, -6, -6, -4, -3, 2, 5,
385 9, 16, 18, 23, 27, 28, 29, 27, 25, 20, 15, 8, 1, -6, -12, -16, -20, -20, -20,
386 -18, -14, -11, -6, -2, 1, 3, 4, 3, 3, 0, -3, -5, -7, -9, -8, -7, -5, -1, 2, 8,
387 12, 16, 18, 19, 19, 17, 13, 8, 2, -4, -10, -14, -17, -18, -18, -16, -11, -6, 1,
388 8, 14, 20, 24, 26, 27, 26, 22, 18, 13, 8, 3, -2, -5, -7, -9, -8, -7, -6, -4, -2,
389 0, 3, 3, 4, 4, 3, 2, 1, 1, 0, 1, 1, 2, 4, 6, 9, 11, 13, 14, 14, 14, 13, 11, 8,
390 5, 2, -2, -5, -8, -4, -4, 1, 7, 9, 18, 22, 26, 29, 28, 25, 20, 14, 6, -2, -11,
391 -19, -25, -30, -31, -31, -29, -23, -17, -10, -2, 5, 12, 17, 22, 24, 24, 23, 21,
392 18, 14, 11, 8, 5, 4, 3, 3, 4, 5, 6, 7, 8, 8, 7, 6, 4, 2, 0, -1, -3, -3, -4, -3,
393 -3, -2, -1, -1, -1, 0, 0, -1, -1, -3, -2, -2, -2, -2, -2, -1, 0, 1, 3, 4, 5, 7,
394 9, 9, 11, 11, 11, 12, 11, 11, 10, 9, 8, 7, 7, 7, 6, 6, 7, 8, 9, 10, 11, 12, 13,
395 13, 13, 13, 12, 11, 9, 8, 7, 5, 4, 3, 2, 1, 1, 1, 1, 0, 0, 0, 0, -1, -1, -3, -3,
396 -5, -6, -7, -9, -9, -10, -10, -10, -10, -10, -9, -8, -6, -5, -4, -2, 1, 4, 5, 8,
397 9, 11, 13, 13, 13, 12, 11, 9, 7, 6, 4, 2, 1, 1, 0, 0, 0, 0, 1, 1, 2, 2, 2, 3, 3,
398 3, 2, 2, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10, 9, 8, 6, 5, 3, 2, 0,
399 -1, -1, -2, -2, -1, 0, 1, 3, 4, 6, 7, 8, 9, 9, 9, 9, 8, 7, 6, 4, 3, 2, 1, 0, 1,
400 2, 5, 9, 12, 17, 19, 21, 22, 20, 17, 12, 6, 0, -7, -13, -18, -22, -23, -23, -21,
401 -18, -13, -8, -2, 4, 9, 12, 14, 16, 16, 14, 12, 9, 6, 3, 1, 0, -1, 0, 1, 3, 6,
402 8, 11, 13, 13, 14, 13, 11, 8, 4, -1, -6, -11, -16, -22, -24, -26, -26, -24, -22,
403 -17, -12, -5, 2, 7, 12, 17, 20, 22, 23, 21, 20, 17, 14, 12, 8, 5, 3, 1, 1, 0, 0,
404 2, 2, 3, 4, 4, 4, 5, 4, 3, 3, 2, 2, 2, 2, 3, 4, 6, 8, 10, 12, 14, 15, 16, 15,
405 14, 13, 11, 8, 5, 2, -1, -4, -6, -8, -9, -10, -10, -10, -9, -8, -8, -7, -7, -7,
406 -6, -7, -6, -7, -8, -8, -8, -7, -6, -5, -4, -2, 0, 1, 4, 5, 6, 9, 9, 10, 10, 9,
407 10, 9, 8, 7, 5, 4, 3, 2, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4,
408 5, 6, 7, 8, 9, 9, 9, 10, 9, 8, 7, 6, 4, 2, 1, -1, -2, -3, -3, -3, -3, -2, -1, 1,
409 2, 4, 5, 6, 7, 7, 7, 7, 7, 6, 5, 5, 3, 7, 9, 10, 17, 15, 19, 22, 19, 20, 16, 10,
410 5, -3, -9, -15, -22, -25, -27, -28, -24, -21, -16, -9, -3, 4, 10, 15, 19, 21,
411 22, 22, 21, 18, 15, 12, 9, 7, 5, 4, 3, 4, 5, 6, 7, 9, 9, 9, 8, 6, 5, 0, -3, -8,
412 -13, -18, -24, -26, -28, -27, -24, -22, -16, -9, 0, 8, 16, 22, 28, 31, 33, 33,
413 30, 25, 19, 12, 5, -2, -9, -13, -17, -19, -19, -18, -15, -11, -7, -2, 3, 7, 11,
414 14, 16, 17, 18, 17, 17, 16, 14, 14, 12, 11, 10, 9, 9, 8, 7, 7, 5, 4, 2, 0, -2,
415 -4, -7, -9, -12, -14, -15, -17, -17, -17, -16, -14, -13, -9, -7, -5, 0, 2, 5, 8,
416 9, 10, 11, 10, 8, 6, 3, 0, -1, -5, -5, -6, -6, -3, -2, 0, 3, 5, 7, 8, 9, 8, 8,
417 5, 3, 2, -2, -3, -4, -5, -5, -4, -3, -1, 1, 3, 5, 6, 7, 8, 7, 7, 5, 3, 2, 0, -2,
418 -3, -4, -4, -3, -2, -1, 1, 2, 4, 6, 6, 7, 7, 6, 6, 4, 3, 1, -1, -1, -2, -2, -2,
419 1, 5, 6, 15, 17, 21, 29, 28, 31, 32, 25, 22, 16, 5, -1, -12, -22, -27, -35, -37,
420 -37, -38, -32, -27, -20, -11, -3, 5, 13, 18, 23, 25, 26, 26, 23, 20, 16, 12, 9,
421 5, 2, 1, -1, -1, 0, 0, 2, 3, 3, 4, 3, 1, -1, -5, -9, -15, -23, -29, -32, -34,
422 -35, -33, -30, -23, -12, -3, 9, 19, 27, 35, 41, 45, 44, 41, 34, 27, 18, 7, -2,
423 -12, -19, -24, -27, -27, -25, -21, -16, -9, -2, 4, 10, 14, 17, 19, 18, 17, 15,
424 13, 11, 9, 8, 7, 7, 8, 9, 10, 12, 12, 13, 12, 11, 8, 4, 0, -5, -10, -16, -20,
425 -24, -27, -28, -28, -26, -23, -17, -12, -6, 1, 6, 12, 16, 19, 21, 21, 20, 18,
426 15, 11, 7, 3, -1, -5, -10, -13, -16, -18, -17, -18, -18, -15, -13, -10, -5, -2,
427 1, 4, 6, 8, 10, 11, 11, 11, 10, 10, 9, 8, 7, 5, 5, 3, 2, 2, 0, -1, -1, -2, -3,
428 -3, -4, -4, -4, -4, -4, -4, -3, -2, -1, 0, 1, 3, 4, 5, 6, 6, 6, 6, 6, 5, 4, 2,
429 2, 1, 0, 1, 2, 3, 6, 8, 10, 13, 14, 16, 17, 16, 15, 12, 8, 4, -2, -7, -13, -18,
430 -22, -26, -28, -29, -29, -27, -23, -19, -14, -8, -2, 4, 9, 13, 17, 20, 21, 22,
431 21, 21, 19, 17, 15, 12, 10, 8, 6, 4, 3, 2, 1, -1, -2, -3, -4, -6, -8, -10, -13,
432 -16, -20, -26, -29, -28, -29, -28, -26, -23, -14, -5, 3, 13, 20, 27, 32, 37, 40,
433 38, 35, 30, 24, 17, 10, 2, -5, -11, -16, -19, -20, -20, -19, -17, -14, -10, -6,
434 -4, -1, 0, 1, 2, 2, 1, 0, 0, 1, 2, 4, 8, 10, 15, 21, 25, 29, 31, 32, 31, 28, 24,
435 18, 10, 1, -7, -16, -23, -30, -35, -38, -39, -37, -33, -29, -22, -16, -9, -1, 5,
436 10, 15, 17, 19, 20, 19, 19, 17, 16, 14, 13, 11, 10, 10, 9, 9, 8, 8, 7, 6, 4, 1,
437 -1, -5, -10, -14, -21, -28, -32, -34, -36, -37, -36, -31, -24, -15, -5, 5, 14,
438 23, 31, 38, 42, 42, 40, 36, 31, 24, 16, 7, -1, -9, -15, -20, -22, -24, -25, -23,
439 -20, -17, -13, -9, -6, -4, -1, 0, 2, 2, 1, 1, 1, 1, 2, 3, 4, 5, 8, 12, 14, 17,
440 20, 21, 24, 25, 25, 24, 20, 17, 12, 7, 1, -5, -11, -17, -21, -24, -27, -28, -27,
441 -26, -23, -19, -15, -10, -7, -3, 0, 3, 6, 8, 8, 9, 10, 11, 11, 11, 12, 12, 12,
442 13, 14, 14, 13, 12, 11, 9, 7, 5, 2, -1, -4, -7, -9, -11, -13, -15, -15, -16,
443 -18, -21, -23, -22, -21, -22, -20, -18, -13, -8, -3, 4, 8, 14, 19, 23, 27, 27,
444 26, 26, 22, 20, 15, 10, 6, -1, -5, -8, -12, -14, -16, -16, -16, -15, -12, -10,
445 -9, -7, -4, -2, 0, 1, 2, 4, 7, 8, 12, 14, 16, 20, 23, 26, 28, 27, 28, 25, 22,
446 19, 13, 7, 0, -7, -13, -20, -25, -29, -32, -33, -33, -30, -27, -23, -17, -11,
447 -5, 2, 7, 12, 15, 18, 20, 20, 20, 19, 17, 15, 13, 11, 9, 7, 6, 5, 4, 3, 2, 1,
448 -1, -3, -5, -10, -14, -18, -21, -24, -27, -28, -28, -25, -22, -16, -10, -4, 3,
449 11, 17, 23, 27, 30, 31, 31, 29, 26, 21, 16, 10, 5, 1, -4, -8, -11, -12, -13,
450 -12, -11, -9, -9, -7, -5, -4, -3, -3, -3, -3, -4, -4, -4, -4, -3, -1, 1, 4, 7,
451 9, 13, 17, 19, 22, 24, 25, 25, 25, 24, 21, 17, 13, 8, 2, -3, -8, -13, -17, -21,
452 -23, -24, -25, -24, -23, -21, -18, -15, -11, -9, -6, -2, 0, 2, 4, 5, 6, 7, 8, 9,
453 9, 10, 11, 12, 13, 13, 13, 13, 12, 12, 10, 9, 7, 4, 2, -1, -3, -5, -8, -9, -11,
454 -12, -12, -13, -14, -16, -18, -19, -19, -18, -19, -19, -18, -14, -11, -7, -3, 1,
455 6, 10, 15, 19, 21, 22, 23, 23, 22, 19, 16, 12, 7, 3, 0, -3, -7, -11, -13, -13,
456 -13, -13, -13, -11, -10, -9, -7, -4, -4, -4, -3, -2, 2, 4, 4, 8, 11, 14, 17, 20,
457 22, 19, 20, 20, 17, 15, 10, 5, 2, -5, -9, -12, -17, -20, -23, -22, -21, -21,
458 -19, -17, -14, -10, -7, -3, 0, 2, 4, 6, 8, 8, 7, 7, 7, 6, 7, 5, 5, 5, 4, 4, 4,
459 3, 2, -1, -3, -4, -6, -8, -12, -13, -14, -15, -14, -13, -12, -11, -8, -4, -1, 2,
460 5, 8, 11, 13, 14, 16, 15, 14, 12, 11, 10, 7, 4, 2, 0, -1, -3, -4, -4, -5, -5,
461 -4, -3, -3, -3, -2, -2, -2, -2, -2, -3, -3, -4, -3, -3, -3, -2, -1, 0, 2, 3, 5,
462 7, 8, 11, 14, 15, 17, 18, 20, 20, 20, 20, 17, 13, 12, 8, 4, 1, -5, -8, -11, -15,
463 -16, -18, -19, -20, -20, -18, -17, -16, -14, -13, -11, -8, -6, -4, -2, -1, 1, 3,
464 5, 7, 8, 10, 11, 13, 14, 15, 15, 16, 16, 16, 15, 14, 13, 11, 10, 8, 6, 3, 0, -3,
465 -6, -9, -12, -15, -17, -20, -23, -25, -27, -27, -26, -26, -25, -22, -18, -14,
466 -9, -3, 2, 6, 11, 16, 20, 22, 22, 23, 23, 23, 20, 17, 15, 12, 8, 5, 2, 0, -4,
467 -6, -8, -8, -10, -12, -12, -12, -13, -13, -12, -10, -8, -7, -4, 1, 5, 8, 11, 16,
468 18, 19, 20, 21, 20, 18, 15, 12, 9, 4, 0, -4, -7, -11, -13, -15, -17, -17, -17,
469 -17, -16, -15, -13, -12, -10, -9, -7, -5, -4, -4, -2, -2, -1, 0, 0, 1, 1, 1, 0,
470 -1, -2, -1, -2, -4, -5, -4, -4, -4, -3, -3, -3, -2, -1, 0, 1, 0, 0, 1, 1, 1, 0,
471 0, -1, -2, -2, -1, -1, -2, -2, -1, 0, 0, 1, 2, 2, 2, 2, 2, 2, 1, 0, 0, -1, -2,
472 -2, -3, -3, -4, -4, -3, -3, -3, -2, -1, 0, 0, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 3,
473 3, 5, 7, 9, 11, 13, 15, 16, 16, 15, 14, 13, 10, 6, 2, -2, -7, -11, -14, -19,
474 -22, -24, -25, -26, -26, -25, -24, -21, -18, -15, -12, -9, -5, -2, 1, 4, 6, 8,
475 9, 11, 12, 13, 14, 14, 14, 15, 15, 15, 14, 14, 13, 12, 11, 9, 7, 5, 2, -1, -5,
476 -9, -13, -17, -22, -26, -30, -31, -32, -34, -34, -31, -28, -24, -19, -13, -6,
477 -1, 5, 12, 18, 21, 24, 27, 29, 29, 27, 25, 23, 19, 15, 11, 8, 4, 0, -4, -5, -7,
478 -9, -11, -11, -11, -11, -11, -11, -11, -11, -11, -9, -7, -6, -5, -2, 2, 4, 7,
479 11, 13, 15, 17, 19, 20, 19, 19, 17, 15, 12, 9, 5, 1, -4, -8, -11, -15, -19, -21,
480 -23, -24, -24, -23, -22, -21, -19, -16, -13, -10, -7, -5, -2, 0, 2, 3, 3, 3, 3,
481 2, 1, 1, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 7, 7, 7, 6, 4, 4, 2, -1, -3, -4, -6,
482 -8, -9, -9, -9, -9, -9, -7, -5, -4, -2, 0, 3, 4, 6, 7, 8, 9, 8, 8, 8, 6, 5, 3,
483 2, 0, -1, -2, -2, -3, -3, -2, -2, -1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 2,
484 4, 6, 8, 10, 11, 13, 14, 15, 15, 14, 12, 10, 8, 4, 0, -4, -8, -12, -16, -20,
485 -22, -24, -26, -26, -25, -24, -22, -20, -16, -13, -9, -5, -1, 3, 6, 9, 11, 14,
486 16, 16, 17, 17, 17, 17, 16, 15, 14, 13, 12, 10, 9, 7, 4, 2, -1, -5, -9, -13,
487 -17, -20, -24, -28, -30, -31, -32, -32, -30, -27, -23, -19, -14, -7, -1, 5, 10,
488 15, 21, 24, 26, 28, 29, 28, 26, 24, 21, 18, 13, 9, 5, 2, -1, -4, -7, -8, -9,
489 -10, -11, -11, -11, -11, -11, -11, -11, -11, -11, -9, -7, -8, -5, 0, 1, 4, 10,
490 13, 14, 18, 22, 23, 23, 24, 22, 20, 19, 14, 9, 5, -2, -7, -11, -16, -21, -24,
491 -26, -29, -29, -28, -27, -26, -23, -21, -18, -14, -12, -9, -7, -6, -4, -2, -2,
492 -3, -2, 0, 0, 0, 2, 3, 5, 7, 8, 11, 13, 13, 13, 14, 15, 13, 11, 9, 7, 4, 1, -3,
493 -6, -9, -12, -15, -16, -17, -18, -18, -17, -16, -14, -12, -10, -7, -4, -2, 1, 3,
494 5, 7, 8, 8, 9, 9, 8, 7, 7, 6, 5, 3, 2, 1, 0, -1, -2, -2, -3, -4, -4, -4, -5, -5,
495 -5, -4, -4, -4, -2, -1, 0, 2, 4, 5, 6, 8, 9, 10, 10, 10, 9, 8, 7, 5, 2, -1, -4,
496 -7, -10, -14, -17, -19, -22, -24, -24, -24, -24, -23, -21, -19, -16, -13, -10,
497 -7, -3, 0, 3, 6, 8, 10, 12, 13, 14, 14, 14, 13, 13, 11, 9, 7, 4, 0, -3, -6, -9,
498 -12, -15, -17, -18, -19, -19, -20, -19, -17, -16, -13, -11, -8, -5, -3, 0, 3, 6,
499 7, 9, 11, 12, 12, 12, 12, 12, 11, 10, 9, 9, 7, 6, 4, 4, 2, 1, 0, -1, -2, -3, -4,
500 -5, -6, -7, -8, -9, -9, -10, -10, -10, -10, -9, -8, -7, -4, -1, 2, 4, 9, 13, 15,
501 19, 22, 24, 24, 25, 25, 23, 21, 17, 13, 10, 5, -1, -5, -10, -15, -19, -22, -25,
502 -27, -28, -29, -28, -26, -24, -22, -19, -15, -13, -9, -6, -4, -1, 1, 1, 3, 4, 3,
503 3, 3, 2, 3, 3, 2, 3, 4, 5, 6, 8, 10, 11, 11, 12, 13, 13, 12, 10, 9, 7, 4, 1, -2,
504 -5, -9, -11, -14, -15, -16, -17, -16, -15, -13, -11, -8, -5, -2, 1, 4, 7, 9, 11,
505 12, 12, 12, 12, 11, 9, 7, 5, 3, 1, -1, -2, -3, -5, -5, -6, -6, -6, -5, -5, -3,
506 -1, 0, 2, 4, 7, 7, 9, 11, 11, 11, 12, 12, 11, 10, 8, 6, 4, 2, -1, -4, -7, -10,
507 -12, -14, -16, -18, -19, -20, -20, -19, -19, -18, -17, -15, -13, -11, -9, -7,
508 -4, -2, 0, 3, 6, 7, 9, 11, 12, 13, 14, 14, 13, 13, 12, 10, 8, 5, 1, -2, -5, -8,
509 -12, -14, -17, -19, -19, -20, -21, -20, -19, -17, -15, -12, -10, -7, -4, -1, 2,
510 4, 6, 7, 9, 10, 11, 11, 11, 11, 10, 10, 9, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -3,
511 -4, -5, -6, -8, -8, -9, -10, -10, -9, -8, -7, -5, -3, 0, 2, 6, 9, 11, 14, 16,
512 18, 19, 19, 19, 18, 16, 14, 11, 8, 4, -1, -5, -9, -14, -18, -22, -25, -27, -29,
513 -30, -30, -30, -28, -26, -23, -20, -16, -12, -9, -5, -1, 1, 4, 6, 7, 8, 8, 9, 9,
514 8, 8, 8, 8, 7, 7, 7, 8, 8, 8, 9, 9, 9, 9, 8, 8, 7, 5, 4, 2, -1, -3, -6, -8, -10,
515 -12, -14, -14, -15, -14, -14, -12, -10, -8, -6, -3, 0, 3, 5, 8, 10, 11, 13, 13,
516 13, 13, 13, 12, 10, 9, 7, 6, 4, 2, 0, -1, -2, -2, -2, -3, -1, 1, 2, 4, 7, 9, 10,
517 12, 14, 14, 15, 14, 13, 12, 10, 6, 3, 0, -6, -10, -14, -18, -22, -25, -27, -29,
518 -29, -29, -28, -26, -23, -20, -16, -11, -7, -2, 3, 6, 10, 14, 16, 18, 20, 20,
519 19, 19, 16, 14, 11, 7, 4, 1, -2, -6, -9, -11, -12, -13, -14, -14, -13, -11, -11,
520 -9, -7, -5, -4, -3, -1, 0, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 3, 3, 4, 5, 6, 7,
521 7, 8, 9, 9, 9, 8, 8, 6, 5, 3, 1, -1, -3, -5, -7, -9, -10, -11, -13, -13, -10,
522 -9, -9, -4, 0, 2, 6, 11, 14, 18, 20, 23, 25, 25, 25, 23, 21, 19, 13, 8, 5, -2,
523 -8, -13, -19, -25, -28, -32, -35, -36, -36, -36, -35, -31, -28, -24, -20, -15,
524 -10, -5, -2, 3, 7, 10, 11, 13, 14, 14, 13, 13, 12, 10, 10, 9, 7, 7, 7, 6, 6, 7,
525 7, 8, 8, 8, 8, 8, 7, 6, 5, 3, 0, -2, -4, -7, -10, -12, -15, -16, -17, -18, -19,
526 -18, -17, -15, -13, -9, -6, -3, 1, 5, 9, 12, 15, 17, 19, 20, 20, 20, 19, 18, 16,
527 13, 10, 8, 5, 2, 1, -2, -3, -2, -2, -2, 0, 2, 3, 5, 7, 9, 10, 11, 11, 10, 9, 8,
528 4, 1, -2, -7, -11, -14, -19, -22, -24, -28, -29, -29, -29, -28, -25, -23, -19,
529 -15, -10, -5, 0, 5, 9, 13, 16, 19, 20, 21, 21, 19, 18, 15, 12, 9, 6, 2, 0, -2,
530 -4, -6, -7, -7, -6, -6, -4, -3, -1, 0, 2, 3, 5, 5, 5, 5, 4, 3, 2, 0, -2, -3, -5,
531 -7, -8, -8, -9, -9, -8, -7, -5, -2, 0, 2, 5, 8, 10, 12, 14, 15, 15, 16, 15, 14,
532 13, 10, 8, 6, 3, 0, -2, -3, -3, -6, -6, -3, -3, -1, 3, 5, 8, 10, 13, 16, 17, 17,
533 18, 15, 15, 13, 8, 5, 1, -6, -9, -14, -21, -24, -27, -31, -33, -33, -33, -32,
534 -31, -28, -25, -21, -17, -12, -8, -3, 1, 4, 8, 10, 12, 14, 16, 15, 15, 15, 14,
535 13, 13, 11, 11, 10, 9, 9, 9, 9, 8, 7, 8, 7, 7, 6, 5, 4, 3, 1, -2, -3, -5, -8,
536 -11, -13, -14, -16, -17, -18, -18, -17, -16, -15, -12, -9, -7, -4, 0, 4, 7, 10,
537 13, 16, 18, 19, 20, 21, 21, 20, 19, 17, 15, 14, 12, 10, 8, 8, 7, 5, 6, 6, 6, 6,
538 6, 7, 7, 6, 5, 3, 1, 0, -4, -7, -9, -14, -17, -20, -24, -25, -27, -29, -30, -28,
539 -28, -26, -24, -21, -16, -13, -10, -5, -1, 3, 6, 9, 12, 15, 16, 17, 18, 18, 18,
540 18, 17, 16, 15, 13, 11, 10, 9, 8, 6, 5, 4, 3, 3, 3, 2, 1, 1, 0, -1, -1, -2, -3,
541 -4, -6, -6, -7, -8, -9, -10, -10, -10, -10, -10, -8, -7, -6, -4, -2, 1, 4, 6, 9,
542 11, 13, 15, 16, 17, 18, 18, 17, 17, 16, 14, 13, 14, 12, 9, 11, 11, 9, 11, 11,
543 10, 11, 10, 10, 11, 9, 8, 6, 2, 2, -2, -7, -9, -14, -18, -20, -26, -27, -28,
544 -32, -33, -32, -32, -30, -29, -27, -23, -19, -16, -11, -6, -1, 3, 7, 11, 16, 18,
545 20, 22, 24, 25, 25, 24, 24, 23, 20, 18, 16, 15, 12, 9, 7, 6, 4, 2, 0, -1, -2,
546 -3, -5, -5, -5, -7, -8, -9, -9, -10, -11, -12, -12, -12, -12, -12, -11, -10, -9,
547 -8, -6, -3, -1, 1, 3, 6, 8, 10, 12, 13, 15, 16, 16, 16, 16, 16, 15, 16, 16, 13,
548 14, 15, 13, 14, 14, 13, 13, 13, 12, 12, 10, 9, 6, 2, 1, -1, -7, -10, -13, -18,
549 -21, -26, -29, -30, -34, -36, -37, -37, -36, -36, -35, -31, -28, -26, -20, -15,
550 -10, -5, -1, 5, 10, 15, 18, 23, 26, 28, 29, 31, 32, 31, 30, 29, 27, 25, 22, 18,
551 15, 13, 8, 5, 2, -1, -4, -7, -9, -11, -13, -15, -16, -17, -17, -18, -18, -18,
552 -17, -17, -16, -15, -14, -12, -11, -9, -7, -5, -3, 0, 2, 5, 7, 9, 12, 14, 16,
553 17, 18, 20, 21, 21, 21, 22, 23, 22, 22, 22, 22, 22, 21, 19, 18, 17, 15, 12, 10,
554 6, 3, -1, -5, -9, -14, -18, -23, -27, -31, -34, -38, -40, -41, -42, -42, -42,
555 -40, -37, -35, -31, -26, -21, -16, -10, -4, 2, 7, 12, 18, 23, 27, 30, 33, 36,
556 38, 39, 39, 40, 39, 37, 35, 33, 30, 27, 22, 19, 15, 10, 6, 1, -3, -7, -11, -14,
557 -17, -19, -22, -24, -25, -25, -26, -26, -25, -24, -23, -21, -19, -16, -14, -11,
558 -8, -4, -1, 3, 6, 10, 13, 16, 19, 22, 25, 27, 29, 31, 33, 34, 36, 36, 36, 36,
559 35, 34, 32, 29, 26, 22, 18, 13, 8, 3, -3, -9, -14, -20, -26, -30, -35, -39, -43,
560 -45, -47, -48, -49, -48, -46, -44, -41, -37, -32, -27, -22, -16, -9, -3, 2, 7,
561 14, 18, 22, 26, 30, 34, 36, 37, 39, 40, 40, 39, 38, 37, 35, 33, 30, 27, 24, 20,
562 16, 12, 9, 4, 0, -4, -7, -11, -15, -18, -21, -23, -25, -27, -28, -28, -29, -29,
563 -28, -26, -25, -23, -20, -17, -14, -11, -7, -3, 1, 4, 9, 13, 17, 21, 26, 30, 34,
564 37, 41, 44, 45, 46, 47, 46, 45, 42, 39, 34, 29, 22, 15, 8, 1, -7, -15, -22, -29,
565 -35, -41, -46, -50, -53, -55, -55, -55, -54, -51, -47, -43, -38, -32, -26, -20,
566 -14, -9, -2, 4, 9, 13, 18, 22, 25, 28, 31, 33, 35, 35, 36, 37, 38, 37, 37, 36,
567 35, 33, 31, 29, 27, 24, 20, 17, 13, 9, 5, 0, -4, -8, -12, -16, -19, -22, -25,
568 -28, -29, -30, -30, -30, -29, -28, -26, -23, -20, -17, -13, -9, -6, -2, 4, 8,
569 11, 17, 21, 24, 29, 32, 35, 37, 38, 38, 38, 37, 35, 32, 27, 25, 19, 13, 8, 2,
570 -3, -10, -16, -20, -24, -29, -33, -36, -38, -40, -41, -40, -39, -38, -36, -33,
571 -29, -26, -23, -19, -14, -11, -8, -3, 0, 3, 6, 9, 13, 16, 18, 21, 23, 26, 27,
572 29, 31, 32, 33, 33, 34, 33, 32, 31, 29, 27, 24, 20, 17, 13, 9, 4, 0, -4, -8,
573 -12, -15, -18, -21, -23, -24, -25, -25, -25, -24, -23, -21, -19, -17, -15, -10,
574 -7, -3, 2, 7, 11, 16, 20, 24, 27, 29, 30, 31, 30, 29, 27, 23, 20, 16, 10, 5, 0,
575 -5, -10, -16, -20, -23, -26, -29, -31, -31, -30, -30, -29, -26, -24, -22, -20,
576 -17, -13, -10, -8, -6, -4, -2, 0, 1, 3, 5, 6, 7, 8, 10, 12, 13, 14, 16, 18, 19,
577 20, 21, 22, 22, 21, 21, 21, 20, 18, 15, 13, 11, 9, 6, 4, 1, -1, -4, -6, -7, -8,
578 -9, -11, -11, -11, -11, -11, -10, -10, -9, -7, -6, -3, 0, 2, 5, 8, 11, 14, 15,
579 17, 18, 19, 18, 17, 16, 14, 12, 9, 5, 2, -2, -6, -10, -13, -17, -19, -22, -23,
580 -25, -26, -26, -26, -25, -24, -23, -21, -19, -18, -16, -14, -11, -10, -8, -6,
581 -4, -2, 0, 3, 5, 7, 9, 11, 14, 16, 17, 18, 21, 22, 22, 23, 23, 23, 22, 21, 20,
582 19, 17, 14, 12, 9, 7, 4, 2, 0, -2, -4, -6, -7, -8, -8, -8, -9, -8, -8, -7, -6,
583 -5, -3, 0, 1, 3, 7, 10, 12, 14, 17, 18, 19, 18, 18, 18, 17, 13, 10, 8, 5, 1, -3,
584 -7, -10, -14, -18, -20, -23, -24, -26, -28, -28, -28, -28, -27, -26, -24, -23,
585 -22, -20, -17, -15, -13, -12, -9, -6, -5, -2, 0, 3, 5, 6, 9, 11, 13, 15, 17, 18,
586 19, 20, 21, 21, 21, 21, 20, 18, 17, 16, 14, 11, 9, 7, 5, 3, 1, -1, -2, -3, -4,
587 -5, -5, -5, -5, -5, -4, -3, -2, -1, 2, 4, 5, 8, 10, 11, 13, 13, 13, 13, 12, 10,
588 9, 7, 4, 1, -2, -4, -7, -10, -13, -15, -17, -20, -22, -22, -23, -24, -24, -24,
589 -24, -23, -22, -21, -20, -19, -18, -16, -14, -12, -11, -10, -8, -7, -6, -4, -3,
590 -1, -1, 0, 2, 3, 5, 7, 8, 9, 10, 10, 12, 12, 12, 11, 11, 10, 10, 9, 9, 8, 8, 7,
591 7, 7, 7, 7, 7, 6, 6, 7, 7, 7, 8, 8, 8, 9, 10, 10, 11, 11, 11, 11, 11, 9, 8, 7,
592 5, 2, 0, -2, -5, -7, -10, -13, -15, -18, -20, -21, -22, -24, -25, -24, -25, -25,
593 -24, -24, -23, -21, -21, -19, -17, -15, -13, -12, -9, -7, -6, -4, -2, -1, 0, 0,
594 1, 1, 2, 2, 3, 4, 4, 4, 5, 5, 5, 5, 4, 4, 3, 3, 3, 3, 3, 2, 3, 3, 3, 4, 5, 6, 6,
595 7, 8, 9, 10, 11, 11, 12, 13, 14, 15, 16, 17, 18, 18, 18, 18, 16, 16, 15, 12, 10,
596 8, 5, 2, -1, -4, -7, -10, -13, -16, -18, -21, -23, -25, -26, -27, -29, -29, -29,
597 -29, -29, -29, -28, -26, -25, -24, -22, -19, -16, -14, -11, -9, -6, -4, -3, -2,
598 0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 11, 11, 11, 10, 10, 9, 9, 8, 8, 8, 7, 7, 7, 7,
599 6, 7, 7, 7, 7, 8, 8, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 16, 16, 15, 14, 12,
600 11, 9, 6, 4, 1, -1, -3, -6, -8, -11, -13, -15, -17, -19, -20, -22, -23, -24,
601 -25, -26, -27, -27, -27, -26, -26, -25, -22, -20, -18, -16, -14, -12, -10, -10,
602 -10, -9, -8, -7, -6, -4, -3, -2, -1, -1, 0, 0, 1, 1, 1, 2, 3, 4, 4, 5, 7, 8, 9,
603 10, 12, 13, 13, 14, 15, 16, 17, 17, 18, 19, 19, 19, 20, 20, 21, 20, 20, 19, 18,
604 17, 15, 13, 11, 8, 5, 2, -1, -3, -7, -10, -12, -15, -17, -20, -22, -24, -25,
605 -27, -28, -29, -29, -30, -30, -29, -28, -27, -25, -23, -20, -16, -14, -11, -9,
606 -8, -8, -7, -7, -7, -5, -4, -4, -4, -3, -3, -3, -3, -4, -4, -4, -5, -5, -4, -4,
607 -4, -3, -2, -1, 1, 2, 3, 5, 7, 8, 10, 11, 13, 14, 15, 17, 19, 20, 21, 22, 24,
608 24, 25, 25, 24, 24, 22, 21, 19, 17, 15, 13, 10, 8, 5, 2, 0, -2, -5, -8, -11,
609 -14, -16, -18, -20, -23, -25, -27, -29, -30, -30, -31, -30, -29, -28, -26, -23,
610 -21, -18, -16, -17, -16, -18, -16, -11, -11, -12, -13, -10, -6, -5, -5, -7, -6,
611 -4, -2, -2, -2, -2, 0, 2, 3, 4, 5, 7, 8, 10, 10, 11, 12, 13, 14, 15, 16, 16, 17,
612 19, 20, 20, 21, 21, 21, 21, 20, 20, 19, 17, 16, 14, 12, 11, 9, 7, 5, 3, 1, -1,
613 -3, -5, -7, -9, -11, -13, -15, -17, -19, -21, -22, -23, -24, -25, -25, -24, -23,
614 -22, -20, -19, -17, -16, -16, -16, -16, -16, -16, -15, -14, -13, -13, -13, -12,
615 -11, -10, -10, -9, -8, -7, -6, -5, -4, -2, -1, 0, 2, 4, 5, 6, 8, 10, 11, 13, 14,
616 16, 18, 20, 21, 23, 24, 25, 26, 26, 26, 26, 25, 24, 23, 22, 20, 17, 15, 13, 11,
617 8, 6, 4, 1, -1, -4, -6, -9, -11, -13, -16, -18, -20, -22, -24, -25, -26, -27,
618 -26, -26, -24, -23, -21, -20, -19, -19, -19, -19, -18, -18, -18, -17, -16, -15,
619 -14, -13, -12, -11, -10, -9, -7, -6, -5, -3, -1, 0, 2, 4, 5, 7, 8, 10, 11, 12,
620 13, 14, 15, 16, 17, 18, 19, 20, 21, 21, 22, 22, 22, 21, 20, 20, 19, 17, 16, 15,
621 13, 12, 10, 8, 6, 4, 2, 0, -2, -4, -5, -8, -10, -12, -14, -16, -18, -19, -21,
622 -22, -23, -23, -22, -21, -21, -20, -19, -18, -18, -19, -20, -21, -21, -21, -20,
623 -19, -18, -18, -17, -16, -14, -12, -11, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10,
624 12, 14, 15, 17, 19, 20, 22, 23, 25, 26, 26, 27, 28, 28, 27, 27, 26, 25, 23, 21,
625 19, 17, 15, 12, 10, 8, 5, 2, 0, -3, -5, -8, -11, -13, -16, -18, -20, -22, -24,
626 -26, -27, -27, -28, -28, -27, -25, -23, -21, -20, -19, -18, -18, -20, -19, -18,
627 -18, -17, -16, -15, -14, -13, -11, -9, -8, -6, -5, -3, -1, 0, 2, 4, 6, 8, 9, 11,
628 13, 14, 15, 16, 18, 19, 20, 21, 21, 22, 22, 23, 23, 22, 22, 22, 21, 19, 18, 17,
629 16, 14, 12, 11, 9, 7, 5, 3, 1, -2, -5, -7, -10, -13, -15, -18, -20, -23, -25,
630 -26, -27, -28, -27, -26, -25, -23, -22, -20, -20, -21, -22, -24, -24, -24, -24,
631 -23, -22, -21, -20, -18, -15, -13, -11, -9, -7, -5, -3, -1, 2, 4, 6, 8, 10, 12,
632 14, 16, 18, 19, 20, 22, 23, 25, 26, 26, 27, 27, 27, 27, 27, 25, 24, 23, 21, 19,
633 17, 14, 12, 10, 7, 4, 2, 0, -3, -5, -8, -10, -13, -16, -18, -20, -23, -25, -27,
634 -28, -30, -31, -31, -30, -29, -27, -25, -23, -21, -21, -21, -22, -22, -22, -22,
635 -21, -20, -18, -17, -15, -13, -10, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 11, 13,
636 15, 17, 18, 20, 21, 22, 24, 25, 26, 27, 27, 27, 27, 27, 26, 25, 23, 22, 20, 18,
637 16, 14, 12, 9, 6, 4, 1, -1, -4, -7, -9, -13, -15, -18, -20, -22, -26, -27, -29,
638 -30, -31, -31, -30, -29, -27, -25, -23, -20, -19, -19, -18, -18, -18, -19, -20,
639 -19, -19, -18, -17, -15, -13, -11, -9, -7, -5, -3, -1, 1, 4, 5, 7, 9, 11, 13,
640 16, 17, 19, 21, 23, 25, 26, 28, 29, 30, 30, 30, 30, 30, 28, 27, 26, 23, 22, 19,
641 16, 15, 12, 8, 5, 3, 0, -3, -6, -9, -12, -15, -19, -22, -24, -27, -30, -32, -33,
642 -34, -35, -35, -34, -33, -31, -29, -26, -23, -21, -20, -20, -19, -19, -19, -18,
643 -17, -17, -16, -15, -12, -10, -7, -5, -3, 0, 2, 4, 7, 9, 10, 12, 14, 15, 17, 19,
644 21, 22, 24, 25, 26, 28, 28, 29, 29, 28, 28, 27, 26, 25, 22, 20, 18, 16, 13, 10,
645 8, 5, 3, -1, -3, -5, -7, -10, -12, -15, -17, -20, -22, -24, -26, -29, -31, -33,
646 -34, -35, -35, -34, -33, -32, -30, -27, -23, -21, -20, -20, -19, -19, -19, -19,
647 -18, -17, -16, -15, -13, -10, -8, -5, -4, -1, 1, 3, 5, 7, 9, 11, 12, 14, 16, 18,
648 20, 21, 23, 24, 26, 28, 29, 30, 30, 30, 30, 29, 29, 27, 26, 23, 21, 18, 15, 12,
649 9, 5, 2, -1, -4, -7, -10, -13, -16, -19, -22, -25, -26, -28, -31, -33, -35, -36,
650 -37, -38, -37, -37, -36, -34, -32, -28, -25, -23, -21, -20, -19, -18, -17, -17,
651 -16, -16, -15, -14, -11, -9, -6, -4, -2, 1, 3, 5, 8, 10, 12, 14, 15, 17, 19, 21,
652 23, 25, 26, 27, 29, 30, 31, 32, 32, 32, 31, 30, 29, 28, 25, 22, 19, 16, 13, 10,
653 7, 4, 0, -3, -6, -8, -11, -14, -16, -19, -21, -23, -26, -27, -29, -31, -34, -35,
654 -35, -36, -36, -36, -36, -34, -32, -29, -26, -23, -22, -20, -19, -18, -17, -17,
655 -16, -16, -15, -14, -13, -11, -8, -6, -3, -1, 1, 4, 6, 9, 11, 12, 14, 15, 17,
656 19, 21, 23, 24, 26, 27, 29, 31, 32, 33, 33, 34, 32, 32, 30, 28, 27, 24, 20, 18,
657 15, 11, 9, 4, 1, -2, -6, -9, -11, -15, -18, -20, -23, -26, -28, -31, -33, -35,
658 -38, -39, -39, -40, -40, -40, -40, -37, -34, -32, -28, -25, -23, -21, -21, -19,
659 -18, -17, -17, -16, -14, -14, -12, -9, -7, -4, -2, 1, 4, 6, 9, 11, 12, 14, 15,
660 17, 19, 20, 22, 23, 24, 26, 27, 29, 30, 31, 32, 32, 32, 31, 30, 29, 27, 24, 21,
661 18, 15, 12, 9, 6, 2, -1, -4, -6, -9, -12, -13, -16, -19, -21, -23, -25, -28,
662 -30, -33, -35, -36, -38, -39, -39, -38, -38, -37, -35, -32, -29, -27, -24, -23,
663 -21, -20, -20, -19, -18, -18, -17, -16, -15, -12, -10, -8, -5, -2, 1, 3, 6, 8,
664 10, 12, 14, 15, 17, 19, 21, 22, 24, 26, 27, 29, 31, 32, 32, 33, 33, 32, 32, 30,
665 28, 27, 23, 20, 17, 13, 10, 7, 3, 0, -4, -6, -8, -11, -13, -15, -17, -19, -22,
666 -24, -27, -29, -32, -34, -36, -37, -38, -39, -39, -39, -38, -37, -34, -32, -29,
667 -26, -25, -22, -21, -20, -19, -19, -18, -17, -16, -14, -12, -9, -7, -4, -1, 2,
668 4, 7, 9, 11, 13, 14, 16, 18, 20, 22, 24, 25, 27, 28, 29, 31, 32, 33, 33, 34, 32,
669 31, 30, 28, 25, 23, 20, 16, 14, 10, 6, 4, 0, -3, -5, -8, -10, -12, -14, -16,
670 -19, -21, -23, -25, -27, -30, -32, -34, -35, -36, -37, -37, -37, -36, -35, -34,
671 -31, -28, -27, -25, -23, -22, -20, -20, -19, -18, -17, -16, -15, -12, -9, -6,
672 -3, 0, 3, 6, 7, 10, 12, 14, 16, 17, 19, 21, 23, 24, 26, 28, 29, 31, 32, 32, 33,
673 33, 32, 32, 30, 29, 26, 23, 22, 17, 14, 12, 8, 6, 3, -1, -2, -6, -9, -10, -13,
674 -15, -17, -20, -22, -24, -26, -28, -30, -32, -33, -34, -35, -36, -36, -36, -35,
675 -34, -32, -30, -28, -27, -25, -24, -23, -22, -22, -22, -20, -19, -17, -15, -12,
676 -9, -7, -4, -1, 2, 5, 7, 9, 12, 14, 16, 18, 21, 23, 25, 27, 29, 31, 32, 34, 35,
677 36, 36, 35, 34, 33, 32, 30, 26, 24, 20, 16, 14, 11, 7, 6, 3, -1, -2, -5, -8, -9,
678 -12, -15, -16, -20, -22, -23, -26, -28, -28, -31, -32, -33, -35, -34, -34, -35,
679 -34, -33, -32, -30, -28, -27, -25, -23, -22, -21, -20, -20, -19, -18, -17, -15,
680 -12, -10, -6, -4, -1, 2, 4, 7, 9, 11, 14, 15, 17, 19, 22, 23, 26, 28, 30, 31,
681 33, 34, 35, 35, 35, 35, 34, 32, 31, 28, 25, 23, 19, 17, 15, 12, 9, 8, 5, 3, 1,
682 -2, -5, -7, -11, -14, -15, -19, -21, -22, -25, -27, -28, -31, -31, -32, -34,
683 -34, -34, -35, -34, -33, -32, -30, -29, -28, -27, -25, -25, -24, -23, -23, -21,
684 -20, -18, -15, -13, -11, -7, -5, -2, 1, 3, 6, 8, 10, 13, 15, 17, 20, 23, 24, 27,
685 30, 32, 34, 35, 36, 38, 38, 37, 37, 35, 35, 32, 29, 27, 24, 20, 19, 16, 13, 13,
686 10, 7, 6, 2, -1, -3, -7, -10, -12, -16, -18, -19, -22, -24, -25, -28, -29, -30,
687 -31, -32, -33, -34, -34, -34, -34, -33, -32, -31, -29, -28, -28, -26, -26, -26,
688 -24, -24, -22, -20, -18, -16, -13, -11, -8, -5, -3, 0, 2, 4, 6, 9, 10, 13, 15,
689 18, 21, 23, 26, 29, 31, 33, 35, 36, 37, 37, 37, 37, 35, 33, 31, 28, 25, 23, 19,
690 18, 17, 14, 13, 12, 8, 7, 4, 0, -3, -6, -9, -11, -14, -17, -19, -21, -24, -25,
691 -27, -29, -30, -31, -33, -34, -35, -36, -36, -36, -36, -35, -34, -34, -33, -32,
692 -31, -30, -29, -29, -27, -25, -23, -20, -18, -15, -12, -10, -7, -4, -2, 0, 3, 4,
693 7, 9, 11, 14, 17, 19, 22, 25, 26, 31, 32, 35, 36, 36, 37, 37, 36, 35, 34, 32,
694 29, 26, 23, 22, 20, 18, 17, 16, 14, 12, 10, 7, 4, 1, -3, -5, -8, -11, -14, -16,
695 -18, -20, -22, -23, -25, -26, -27, -28, -30, -31, -32, -33, -34, -34, -34, -34,
696 -34, -33, -32, -31, -30, -29, -28, -27, -25, -23, -21, -18, -16, -13, -10, -8,
697 -6, -3, -1, 1, 3, 5, 8, 10, 12, 15, 17, 20, 23, 26, 29, 31, 33, 35, 37, 37, 38,
698 38, 37, 36, 35, 33, 30, 28, 26, 23, 22, 21, 20, 19, 17, 15, 14, 10, 7, 4, 0, -3,
699 -6, -9, -12, -14, -17, -19, -20, -22, -24, -25, -26, -27, -28, -30, -31, -32,
700 -34, -35, -35, -35, -35, -34, -34, -32, -30, -29, -27, -25, -24, -22, -20, -18,
701 -16, -13, -11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 10, 12, 14, 17, 20, 23, 25, 28,
702 31, 33, 35, 36, 37, 38, 37, 37, 35, 34, 32, 30, 27, 25, 24, 22, 21, 20, 20, 17,
703 16, 14, 10, 7, 3, -2, -5, -7, -11, -13, -15, -18, -20, -22, -24, -24, -26, -27,
704 -28, -29, -30, -31, -33, -34, -35, -36, -36, -36, -36, -35, -34, -32, -30, -28,
705 -26, -23, -21, -20, -18, -16, -14, -12, -11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 10,
706 12, 15, 18, 21, 23, 26, 29, 31, 34, 35, 36, 37, 38, 36, 36, 35, 32, 30, 29, 26,
707 23, 22, 20, 20, 19, 18, 16, 14, 11, 8, 4, 0, -5, -8, -12, -16, -17, -20, -22,
708 -23, -25, -26, -27, -27, -28, -29, -29, -31, -31, -33, -34, -35, -37, -37, -38,
709 -38, -37, -35, -34, -31, -28, -25, -22, -19, -17, -15, -14, -13, -12, -10, -9,
710 -7, -6, -4, -1, 0, 3, 5, 7, 10, 12, 15, 18, 22, 25, 27, 31, 33, 34, 36, 37, 38,
711 38, 37, 36, 36, 33, 30, 29, 26, 23, 22, 21, 19, 19, 18, 16, 14, 11, 8, 3, -1,
712 -6, -10, -13, -16, -19, -20, -21, -23, -23, -24, -24, -24, -25, -26, -26, -27,
713 -29, -30, -32, -34, -35, -37, -37, -37, -37, -36, -34, -32, -29, -25, -21, -17,
714 -14, -13, -11, -10, -10, -10, -9, -8, -7, -5, -3, 0, 3, 6, 8, 11, 14, 17, 19,
715 23, 26, 28, 31, 34, 35, 37, 38, 38, 39, 39, 38, 37, 36, 34, 31, 29, 26, 24, 21,
716 19, 17, 16, 14, 12, 10, 7, 3, -1, -5, -9, -12, -16, -18, -19, -20, -20, -21,
717 -21, -21, -22, -22, -23, -24, -25, -26, -28, -29, -30, -33, -34, -35, -36, -36,
718 -36, -35, -34, -32, -30, -27, -24, -20, -17, -15, -12, -10, -10, -9, -8, -8, -7,
719 -6, -5, -2, 1, 4, 8, 12, 15, 18, 20, 23, 26, 28, 30, 32, 34, 36, 37, 38, 39, 40,
720 40, 39, 38, 37, 35, 33, 30, 28, 24, 20, 17, 14, 12, 10, 8, 7, 5, 2, -1, -5, -9,
721 -12, -16, -19, -19, -21, -21, -21, -22, -21, -23, -24, -24, -26, -26, -28, -29,
722 -31, -32, -34, -35, -36, -38, -38, -37, -37, -35, -32, -30, -28, -25, -23, -19,
723 -17, -14, -11, -10, -7, -6, -5, -3, -2, -1, 1, 4, 7, 11, 14, 18, 21, 23, 26, 28,
724 30, 32, 34, 36, 37, 38, 39, 41, 40, 41, 40, 39, 39, 37, 36, 33, 30, 27, 22, 17,
725 14, 9, 6, 4, 3, 2, 1, -2, -5, -7, -11, -16, -19, -22, -23, -25, -25, -25, -25,
726 -26, -27, -27, -28, -29, -31, -32, -32, -34, -35, -35, -37, -38, -39, -40, -39,
727 -37, -35, -33, -29, -27, -24, -21, -18, -16, -13, -11, -8, -5, -3, 0, 2, 4, 6,
728 8, 10, 14, 17, 20, 24, 27, 29, 32, 34, 36, 38, 39, 40, 42, 43, 44, 45, 45, 45,
729 44, 43, 42, 38, 39, 36, 28, 29, 21, 16, 14, 5, 0, -2, -6, -9, -7, -10, -12, -11,
730 -15, -19, -21, -26, -30, -30, -32, -33, -30, -30, -30, -29, -30, -32, -32, -34,
731 -35, -35, -36, -36, -35, -37, -38, -37, -38, -37, -35, -33, -29, -25, -22, -18,
732 -15, -13, -10, -8, -6, -3, -1, 2, 6, 8, 10, 13, 15, 18, 22, 24, 27, 31, 33, 37,
733 40, 41, 43, 45, 45, 46, 48, 49, 49, 50, 50, 49, 48, 46, 43, 40, 36, 32, 27, 22,
734 17, 11, 5, -1, -7, -11, -16, -19, -19, -21, -21, -22, -24, -27, -28, -32, -36,
735 -36, -38, -38, -36, -35, -34, -33, -34, -35, -35, -36, -38, -38, -38, -37, -37,
736 -37, -36, -36, -34, -34, -33, -29, -25, -22, -18, -14, -11, -7, -5, -3, 0, 2, 4,
737 7, 10, 13, 17, 21, 24, 27, 30, 32, 35, 38, 40, 43, 45, 47, 49, 50, 50, 51, 52,
738 52, 52, 52, 51, 50, 48, 44, 40, 37, 31, 26, 21, 14, 8, 2, -5, -11, -15, -23,
739 -25, -26, -28, -29, -29, -30, -31, -32, -38, -39, -41, -46, -45, -44, -43, -40,
740 -38, -39, -37, -37, -40, -38, -40, -40, -37, -38, -36, -34, -33, -33, -30, -29,
741 -27, -22, -20, -15, -10, -5, -1, 2, 4, 7, 9, 11, 14, 17, 20, 24, 27, 30, 34, 36,
742 38, 41, 43, 45, 48, 50, 51, 54, 55, 55, 55, 55, 54, 53, 52, 50, 49, 47, 43, 39,
743 36, 30, 24, 21, 14, 7, 3, -4, -11, -14, -21, -28, -29, -35, -41, -41, -44, -47,
744 -45, -48, -48, -46, -48, -48, -47, -47, -47, -46, -46, -44, -43, -43, -41, -39,
745 -39, -37, -36, -34, -32, -30, -28, -25, -23, -19, -15, -12, -7, -4, 0, 4, 8, 10,
746 14, 17, 19, 22, 25, 27, 31, 34, 35, 38, 41, 42, 45, 47, 48, 50, 51, 52, 52, 53,
747 54, 52, 52, 52, 50, 49, 48, 44, 42, 40, 34, 31, 27, 20, 15, 10, 4, -3, -8, -16,
748 -21, -27, -35, -39, -44, -48, -51, -54, -56, -56, -58, -59, -58, -57, -56, -54,
749 -54, -54, -51, -50, -48, -44, -42, -39, -36, -35, -32, -30, -29, -27, -24, -22,
750 -17, -14, -11, -4, 0, 2, 7, 9, 12, 16, 18, 20, 25, 27, 29, 33, 35, 36, 38, 40,
751 41, 43, 45, 47, 49, 50, 51, 52, 51, 51, 51, 50, 48, 47, 47, 45, 44, 42, 39, 37,
752 33, 27, 23, 19, 12, 7, 3, -5, -11, -15, -24, -28, -33, -43, -46, -49, -56, -58,
753 -59, -64, -62, -62, -66, -63, -61, -62, -59, -55, -55, -51, -47, -47, -41, -39,
754 -38, -33, -30, -29, -25, -21, -19, -14, -11, -8, -3, 1, 5, 8, 13, 17, 19, 23,
755 26, 28, 32, 33, 35, 38, 40, 41, 44, 46, 47, 49, 51, 51, 53, 53, 52, 53, 53, 51,
756 51, 50, 48, 46, 45, 43, 41, 39, 36, 33, 29, 25, 20, 15, 11, 4, -2, -7, -13, -22,
757 -26, -32, -40, -44, -50, -55, -56, -60, -65, -64, -66, -70, -68, -67, -68, -65,
758 -63, -61, -57, -53, -51, -47, -42, -40, -35, -32, -27, -23, -20, -16, -12, -8,
759 -4, 1, 6, 12, 17, 21, 26, 29, 32, 35, 37, 40, 42, 43, 46, 49, 49, 52, 54, 54,
760 55, 56, 55, 56, 56, 54, 54, 54, 51, 50, 49, 45, 43, 42, 38, 35, 34, 30, 26, 25,
761 19, 14, 10, 4, -2, -7, -14, -20, -24, -31, -37, -41, -47, -52, -58, -60, -64,
762 -68, -69, -71, -71, -73, -72, -72, -71, -69, -68, -64, -61, -57, -53, -48, -43,
763 -38, -33, -29, -23, -18, -15, -9, -4, 2, 6, 13, 19, 24, 29, 33, 38, 41, 44, 47,
764 49, 51, 53, 55, 56, 58, 59, 60, 60, 60, 60, 59, 59, 58, 56, 55, 53, 51, 49, 46,
765 43, 40, 37, 33, 30, 26, 22, 18, 14, 9, 4, -2, -8, -12, -19, -25, -30, -36, -43,
766 -46, -53, -57, -59, -66, -70, -70, -74, -78, -76, -77, -77, -75, -74, -73, -68,
767 -66, -65, -59, -54, -51, -46, -40, -36, -30, -25, -20, -13, -8, -2, 4, 10, 17,
768 23, 28, 34, 40, 43, 46, 51, 53, 54, 57, 59, 59, 62, 63, 63, 66, 65, 64, 65, 65,
769 62, 61, 60, 57, 54, 52, 49, 46, 43, 39, 35, 32, 28, 23, 19, 16, 10, 4, 0, -7,
770 -14, -19, -26, -33, -37, -44, -50, -54, -58, -63, -68, -70, -74, -77, -79, -80,
771 -81, -81, -80, -80, -78, -75, -72, -69, -64, -59, -56, -50, -44, -39, -34, -29,
772 -21, -15, -9, -2, 4, 11, 19, 25, 30, 37, 43, 47, 52, 56, 59, 62, 64, 65, 67, 68,
773 69, 70, 71, 71, 70, 71, 70, 68, 66, 64, 61, 58, 55, 51, 48, 45, 40, 36, 33, 28,
774 23, 18, 13, 9, 2, -3, -9, -16, -21, -29, -37, -41, -45, -55, -60, -62, -67, -73,
775 -76, -77, -80, -81, -84, -85, -83, -82, -84, -82, -76, -75, -73, -67, -62, -58,
776 -52, -47, -42, -34, -29, -23, -15, -8, 0, 6, 14, 23, 29, 35, 44, 49, 52, 59, 62,
777 65, 69, 71, 72, 75, 78, 77, 78, 81, 79, 78, 78, 77, 74, 72, 69, 64, 62, 57, 52,
778 49, 44, 38, 34, 30, 24, 19, 14, 9, 3, -4, -10, -17, -24, -30, -37, -46, -50,
779 -55, -66, -66, -72, -78, -80, -84, -88, -89, -89, -91, -91, -90, -88, -88, -86,
780 -78, -78, -73, -66, -64, -55, -50, -44, -38, -29, -23, -17, -9, -2, 7, 15, 22,
781 31, 37, 44, 52, 57, 61, 68, 70, 73, 77, 77, 79, 82, 82, 82, 82, 83, 82, 80, 79,
782 77, 73, 70, 67, 61, 58, 53, 47, 44, 38, 32, 28, 23, 17, 11, 5, -1, -8, -15, -21,
783 -27, -35, -39, -48, -54, -56, -65, -69, -72, -77, -81, -85, -88, -89, -90, -91,
784 -91, -93, -87, -87, -87, -79, -76, -73, -66, -62, -55, -48, -42, -36, -29, -21,
785 -15, -9, 1, 9, 16, 25, 32, 41, 47, 54, 61, 65, 70, 72, 74, 78, 79, 80, 82, 82,
786 82, 83, 82, 82, 80, 78, 76, 72, 69, 65, 59, 56, 51, 45, 41, 36, 32, 26, 22, 18,
787 12, 6, 0, -5, -11, -19, -24, -31, -38, -42, -49, -56, -58, -62, -70, -72, -73,
788 -80, -81, -83, -87, -86, -86, -88, -87, -84, -82, -80, -78, -69, -67, -65, -54,
789 -51, -46, -35, -33, -27, -18, -13, -6, 1, 10, 18, 24, 34, 41, 47, 56, 61, 65,
790 69, 72, 74, 75, 78, 78, 77, 80, 78, 77, 79, 77, 76, 74, 71, 68, 65, 61, 57, 52,
791 48, 42, 37, 34, 29, 24, 21, 17, 13, 7, 2, -2, -9, -15, -21, -28, -34, -39, -47,
792 -52, -54, -61, -66, -68, -72, -75, -79, -80, -82, -85, -83, -86, -87, -83, -82,
793 -82, -76, -72, -68, -63, -57, -51, -46, -38, -32, -29, -20, -15, -10, -1, 4, 12,
794 19, 27, 35, 41, 51, 57, 60, 67, 70, 72, 75, 76, 76, 76, 76, 76, 74, 75, 75, 72,
795 72, 70, 66, 65, 60, 56, 53, 47, 42, 37, 33, 30, 25, 21, 18, 14, 10, 5, 1, -3,
796 -9, -15, -21, -26, -32, -38, -43, -50, -53, -56, -64, -65, -69, -72, -74, -79,
797 -81, -79, -83, -85, -81, -83, -79, -79, -76, -70, -68, -62, -58, -51, -44, -40,
798 -33, -28, -20, -17, -11, -2, 3, 8, 17, 24, 30, 40, 45, 52, 59, 62, 66, 68, 72,
799 73, 71, 73, 73, 72, 71, 71, 70, 69, 67, 65, 62, 61, 58, 53, 51, 46, 41, 38, 33,
800 30, 27, 23, 21, 18, 15, 12, 8, 4, -2, -7, -12, -18, -24, -29, -33, -39, -44,
801 -48, -52, -56, -60, -65, -66, -72, -75, -77, -80, -80, -83, -83, -80, -79, -78,
802 -72, -69, -63, -58, -56, -47, -43, -38, -32, -27, -20, -16, -11, -4, 3, 10, 16,
803 24, 33, 39, 46, 53, 58, 65, 66, 68, 71, 70, 71, 70, 69, 70, 68, 67, 67, 66, 65,
804 64, 61, 58, 55, 51, 46, 42, 38, 32, 30, 26, 24, 21, 20, 19, 17, 16, 13, 10, 7,
805 1, -5, -9, -15, -21, -26, -30, -33, -39, -42, -42, -51, -53, -53, -62, -65, -67,
806 -72, -76, -78, -78, -80, -79, -77, -74, -71, -66, -61, -58, -51, -45, -43, -39,
807 -30, -27, -24, -17, -14, -8, 0, 3, 11, 20, 27, 35, 41, 49, 55, 58, 62, 64, 64,
808 64, 65, 64, 62, 63, 62, 61, 63, 61, 60, 61, 59, 55, 52, 48, 45, 39, 33, 30, 25,
809 22, 20, 18, 18, 19, 18, 16, 15, 13, 9, 5, -1, -8, -11, -18, -24, -27, -31, -35,
810 -38, -41, -43, -45, -51, -54, -56, -64, -68, -72, -77, -77, -82, -81, -79, -77,
811 -73, -70, -64, -58, -53, -49, -44, -38, -34, -30, -26, -21, -18, -12, -9, -2, 5,
812 11, 20, 25, 34, 42, 47, 53, 57, 59, 61, 61, 59, 59, 59, 58, 56, 56, 56, 56, 57,
813 56, 56, 55, 52, 49, 44, 40, 35, 29, 24, 20, 18, 17, 17, 17, 18, 19, 19, 18, 16,
814 14, 9, 3, -4, -8, -15, -21, -24, -28, -31, -33, -36, -38, -40, -41, -47, -53,
815 -55, -63, -70, -71, -77, -81, -79, -79, -79, -75, -67, -64, -59, -50, -48, -43,
816 -37, -35, -32, -28, -24, -22, -18, -13, -7, 0, 8, 15, 24, 33, 40, 47, 52, 57,
817 58, 58, 58, 56, 57, 56, 54, 54, 55, 55, 56, 57, 57, 57, 56, 53, 48, 44, 38, 31,
818 26, 20, 16, 14, 13, 14, 16, 17, 19, 21, 20, 19, 16, 13, 7, 0, -7, -12, -17, -22,
819 -24, -27, -28, -28, -29, -33, -33, -36, -44, -49, -57, -62, -68, -74, -77, -80,
820 -78, -76, -74, -69, -61, -56, -52, -47, -42, -38, -36, -33, -32, -29, -25, -22,
821 -19, -12, -4, 2, 10, 19, 27, 34, 41, 46, 49, 52, 53, 52, 50, 51, 50, 49, 50, 50,
822 51, 53, 55, 55, 55, 55, 52, 49, 44, 39, 33, 28, 24, 19, 17, 19, 20, 21, 24, 26,
823 28, 28, 28, 25, 20, 16, 9, 0, -5, -10, -15, -17, -19, -21, -22, -22, -26, -31,
824 -30, -38, -46, -53, -62, -66, -75, -81, -80, -81, -81, -76, -74, -67, -59, -58,
825 -52, -47, -44, -42, -41, -37, -34, -31, -29, -23, -15, -10, -2, 6, 15, 24, 29,
826 35, 42, 46, 48, 49, 50, 51, 50, 50, 49, 52, 54, 53, 55, 56, 57, 56, 54, 52, 49,
827 44, 39, 33, 28, 24, 20, 19, 18, 19, 21, 22, 25, 26, 26, 27, 24, 21, 16, 11, 6,
828 -1, -6, -9, -12, -15, -16, -16, -18, -20, -25, -28, -31, -40, -47, -54, -62,
829 -68, -74, -79, -78, -79, -78, -74, -70, -65, -61, -56, -53, -49, -46, -45, -41,
830 -38, -35, -31, -27, -20, -13, -8, 0, 9, 16, 22, 28, 34, 38, 42, 44, 45, 48, 48,
831 48, 49, 50, 52, 52, 53, 54, 54, 54, 53, 50, 48, 44, 41, 36, 32, 29, 23, 21, 20,
832 19, 19, 20, 22, 23, 24, 25, 24, 23, 21, 18, 14, 10, 6, 0, -4, -5, -9, -10, -11,
833 -13, -15, -19, -24, -27, -33, -41, -48, -56, -60, -67, -73, -73, -74, -75, -72,
834 -70, -67, -61, -59, -56, -52, -48, -46, -44, -40, -37, -33, -28, -23, -15, -10,
835 -3, 3, 9, 17, 20, 25, 32, 34, 37, 40, 42, 45, 46, 48, 50, 51, 52, 52, 53, 53,
836 52, 51, 49, 47, 44, 40, 38, 34, 31, 29, 25, 24, 22, 21, 21, 21, 23, 23, 23, 25,
837 23, 22, 21, 18, 15, 11, 8, 3, 0, -2, -6, -8, -10, -14, -17, -20, -25, -31, -36,
838 -42, -49, -56, -62, -65, -70, -74, -73, -74, -72, -70, -68, -63, -60, -56, -53,
839 -50, -45, -43, -39, -35, -30, -24, -20, -13, -7, -2, 5, 9, 15, 20, 25, 30, 32,
840 37, 40, 41, 46, 46, 48, 50, 49, 51, 50, 50, 50, 48, 48, 45, 42, 40, 37, 36, 33,
841 30, 28, 25, 24, 22, 20, 21, 20, 22, 22, 23, 23, 23, 23, 23, 21, 19, 16, 13, 8,
842 5, 2, -2, -4, -7, -10, -13, -16, -21, -28, -30, -36, -45, -48, -56, -62, -64,
843 -71, -71, -72, -73, -70, -70, -66, -61, -59, -55, -51, -47, -44, -39, -35, -32,
844 -25, -21, -17, -8, -5, 2, 8, 12, 18, 22, 28, 31, 34, 39, 40, 44, 46, 46, 49, 48,
845 49, 50, 47, 49, 47, 45, 44, 42, 40, 37, 35, 33, 30, 29, 26, 23, 21, 19, 19, 18,
846 18, 19, 19, 21, 22, 23, 24, 23, 23, 21, 19, 17, 13, 10, 6, 4, 0, -3, -4, -8,
847 -12, -15, -21, -25, -30, -38, -44, -50, -56, -60, -65, -68, -69, -70, -70, -67,
848 -65, -62, -59, -57, -53, -49, -46, -42, -38, -33, -28, -22, -17, -12, -6, -1, 4,
849 8, 13, 18, 21, 26, 29, 32, 36, 39, 42, 45, 46, 48, 48, 49, 48, 46, 46, 45, 43,
850 41, 39, 37, 35, 34, 32, 29, 28, 26, 23, 21, 20, 19, 18, 18, 19, 20, 21, 22, 23,
851 24, 25, 25, 24, 23, 20, 17, 14, 10, 7, 3, 0, -3, -8, -10, -14, -21, -24, -29,
852 -36, -42, -47, -55, -60, -63, -69, -71, -72, -72, -72, -69, -66, -63, -60, -54,
853 -52, -48, -43, -39, -35, -30, -24, -20, -15, -9, -4, 1, 6, 11, 15, 19, 25, 28,
854 32, 36, 38, 41, 44, 46, 47, 47, 47, 47, 45, 45, 44, 43, 40, 40, 37, 34, 33, 31,
855 28, 27, 24, 22, 20, 18, 17, 16, 17, 17, 19, 21, 22, 24, 25, 26, 27, 26, 25, 24,
856 21, 18, 14, 11, 9, 5, 2, -1, -5, -8, -14, -18, -24, -30, -35, -45, -50, -55,
857 -64, -68, -72, -75, -75, -76, -74, -72, -69, -65, -63, -57, -54, -49, -45, -42,
858 -36, -33, -27, -21, -17, -8, -3, 2, 10, 13, 19, 24, 28, 33, 35, 39, 42, 43, 48,
859 48, 50, 51, 52, 52, 50, 49, 48, 45, 44, 40, 38, 35, 31, 29, 25, 24, 21, 18, 18,
860 15, 14, 13, 13, 14, 14, 17, 19, 20, 23, 24, 25, 26, 26, 27, 25, 25, 22, 18, 17,
861 13, 11, 7, 4, 1, -5, -9, -14, -21, -28, -34, -43, -50, -55, -61, -68, -71, -73,
862 -76, -76, -74, -74, -71, -68, -65, -63, -59, -54, -52, -46, -40, -34, -28, -20,
863 -13, -7, 0, 7, 11, 17, 23, 26, 29, 34, 36, 38, 41, 45, 48, 50, 53, 53, 54, 53,
864 51, 48, 46, 43, 39, 35, 32, 29, 25, 23, 21, 20, 19, 18, 16, 14, 14, 11, 10, 11,
865 11, 12, 14, 17, 19, 21, 25, 27, 29, 31, 32, 31, 29, 27, 23, 19, 17, 13, 11, 7,
866 3, -1, -6, -11, -19, -25, -30, -41, -48, -56, -64, -70, -77, -78, -80, -82, -79,
867 -79, -77, -73, -69, -66, -62, -55, -51, -47, -40, -36, -28, -21, -14, -5, 1, 9,
868 14, 20, 27, 29, 34, 37, 39, 41, 41, 43, 44, 46, 48, 48, 49, 48, 47, 45, 42, 40,
869 36, 31, 28, 23, 20, 15, 12, 10, 8, 8, 6, 6, 5, 4, 3, 3, 3, 6, 8, 11, 14, 17, 20,
870 24, 28, 31, 34, 37, 38, 38, 36, 34, 32, 28, 26, 23, 19, 15, 9, 5, -3, -10, -16,
871 -25, -33, -41, -51, -59, -66, -74, -79, -81, -83, -84, -82, -81, -79, -75, -73,
872 -68, -64, -58, -53, -50, -42, -35, -30, -22, -13, -4, 4, 11, 17, 22, 27, 29, 32,
873 35, 35, 36, 37, 37, 40, 41, 44, 47, 48, 49, 47, 45, 41, 38, 33, 27, 23, 17, 12,
874 9, 5, 4, 3, 4, 4, 4, 5, 3, 2, 1, 0, 2, 4, 7, 11, 15, 20, 25, 31, 38, 44, 48, 51,
875 53, 52, 49, 47, 43, 39, 36, 32, 29, 24, 20, 14, 6, 2, -5, -16, -22, -34, -46,
876 -55, -66, -74, -80, -85, -88, -89, -88, -89, -86, -82, -79, -74, -70, -65, -61,
877 -58, -52, -47, -41, -32, -25, -15, -6, 2, 10, 15, 22, 28, 31, 36, 37, 37, 36,
878 36, 37, 38, 42, 45, 47, 50, 49, 48, 46, 43, 40, 35, 30, 24, 17, 12, 6, 2, 2, 1,
879 2, 4, 4, 5, 4, 3, 2, 2, 5, 8, 10, 14, 19, 23, 28, 35, 42, 48, 54, 57, 59, 59,
880 57, 54, 51, 50, 47, 42, 38, 33, 28, 21, 15, 7, -1, -9, -20, -32, -43, -54, -65,
881 -75, -82, -87, -91, -95, -97, -97, -97, -96, -93, -89, -85, -81, -76, -72, -66,
882 -60, -53, -44, -35, -25, -15, -6, 3, 11, 19, 24, 30, 36, 38, 41, 42, 41, 42, 41,
883 41, 44, 47, 50, 51, 52, 51, 49, 46, 41, 38, 32, 25, 18, 11, 6, 1, -3, -4, -3,
884 -3, -3, -3, -5, -7, -8, -8, -8, -6, -2, 4, 9, 16, 25, 31, 38, 46, 53, 59, 62,
885 61, 62, 63, 61, 59, 58, 59, 58, 54, 52, 48, 42, 35, 26, 15, 5, -8, -24, -38,
886 -49, -62, -73, -80, -87, -91, -96, -99, -100, -102, -102, -103, -102, -98, -99,
887 -96, -91, -86, -78, -71, -59, -49, -37, -24, -16, -4, 6, 14, 22, 28, 35, 39, 41,
888 44, 46, 48, 49, 51, 52, 52, 57, 56, 56, 58, 54, 52, 48, 43, 37, 30, 24, 16, 11,
889 6, 2, -1, -4, -4, -4, -5, -4, -6, -6, -6, -8, -9, -9, -9, -8, -5, 1, 7, 14, 22,
890 29, 36, 42, 47, 50, 52, 54, 54, 54, 54, 52, 52, 52, 51, 51, 48, 43, 37, 30, 19,
891 10, 1, -14, -23, -33, -47, -52, -60, -69, -72, -77, -81, -84, -88, -92, -94,
892 -95, -97, -97, -93, -89, -83, -78, -70, -60, -53, -43, -33, -24, -14, -7, 0, 7,
893 13, 20, 24, 30, 35, 38, 42, 45, 47, 48, 49, 50, 48, 48, 48, 46, 45, 43, 40, 38,
894 34, 30, 25, 21, 18, 12, 8, 5, 1, -2, -4, -6, -7, -8, -9, -11, -10, -10, -12,
895 -12, -11, -9, -7, -1, 4, 9, 16, 20, 24, 30, 33, 37, 39, 41, 43, 45, 46, 47, 49,
896 52, 53, 54, 53, 51, 46, 38, 31, 22, 14, 6, -4, -12, -20, -30, -37, -42, -50,
897 -56, -57, -65, -72, -75, -83, -89, -90, -92, -92, -88, -87, -84, -75, -70, -64,
898 -55, -49, -40, -34, -28, -21, -18, -12, -8, -2, 4, 11, 17, 20, 26, 30, 32, 35,
899 35, 35, 32, 28, 27, 24, 25, 25, 25, 27, 27, 25, 24, 22, 20, 16, 13, 9, 4, 1, -5,
900 -7, -8, -9, -6, -5, -1, 3, 5, 8, 10, 12, 14, 16, 17, 21, 24, 27, 31, 37, 41, 46,
901 52, 57, 61, 64, 66, 67, 68, 68, 66, 64, 62, 58, 54, 48, 40, 31, 24, 14, 4, -4,
902 -14, -26, -36, -45, -54, -62, -68, -75, -80, -83, -90, -95, -96, -100, -100,
903 -100, -99, -94, -91, -86, -80, -72, -63, -58, -49, -40, -33, -26, -20, -14, -8,
904 -2, 4, 8, 16, 19, 20, 23, 24, 26, 25, 24, 24, 29, 35, 36, 41, 44, 43, 43, 39,
905 38, 35, 30, 26, 21, 17, 12, 7, 5, 5, 7, 6, 6, 6, 1, -1, -5, -10, -14, -18, -22,
906 -24, -23, -20, -16, -5, 6, 17, 29, 39, 45, 48, 51, 53, 54, 57, 57, 60, 66, 69,
907 72, 78, 87, 93, 96, 98, 94, 86, 73, 54, 37, 22, 6, -9, -20, -27, -37, -44, -51,
908 -57, -61, -65, -72, -80, -89, -100, -110, -121, -125, -127, -128, -121, -115,
909 -106, -94, -87, -75, -64, -56, -46, -40, -36, -33, -31, -28, -22, -15, -8, 4,
910 15, 23, 33, 37, 41, 45, 41, 42, 48, 47, 48, 49, 47, 46, 46, 44, 46, 49, 48, 46,
911 43, 38, 32, 24, 17, 14, 9, 4, 0, -7, -11, -14, -20, -22, -23, -24, -27, -28,
912 -30, -33, -33, -32, -28, -21, -11, -2, 6, 16, 24, 31, 40, 47, 53, 61, 67, 70,
913 73, 77, 81, 85, 91, 96, 100, 101, 99, 92, 84, 73, 59, 46, 35, 21, 8, -6, -19,
914 -31, -42, -51, -58, -65, -73, -81, -90, -100, -107, -116, -122, -122, -124,
915 -123, -119, -116, -108, -101, -98, -84, -74, -69, -58, -50, -45, -38, -34, -31,
916 -22, -14, -9, 0, 7, 12, 18, 20, 24, 28, 28, 34, 39, 43, 48, 49, 49, 49, 49, 47,
917 45, 45, 41, 38, 34, 28, 25, 19, 17, 16, 13, 12, 7, 4, 1, -6, -9, -13, -13, -13,
918 -13, -9, -6, -2, 2, 7, 14, 20, 27, 30, 35, 40, 41, 45, 49, 52, 59, 64, 70, 75,
919 79, 82, 83, 84, 82, 79, 75, 67, 58, 47, 36, 24, 12, 2, -7, -14, -23, -32, -40,
920 -49, -57, -65, -74, -81, -88, -96, -103, -107, -112, -114, -112, -110, -103,
921 -97, -91, -83, -77, -69, -61, -53, -43, -37, -30, -23, -18, -12, -7, 0, 8, 15,
922 22, 23, 28, 31, 29, 29, 27, 25, 20, 13, 10, 10, 13, 15, 17, 23, 26, 26, 25, 23,
923 23, 19, 14, 11, 8, 4, 0, -2, 0, 3, 7, 9, 14, 16, 16, 15, 9, 5, 2, -4, -7, -8,
924 -8, -8, -5, 1, 9, 18, 27, 35, 41, 44, 46, 46, 44, 44, 43, 45, 49, 51, 55, 60,
925 65, 70, 73, 76, 76, 72, 64, 54, 42, 28, 14, 3, -5, -12, -20, -25, -30, -35, -41,
926 -47, -53, -60, -68, -75, -84, -92, -100, -105, -106, -104, -102, -96, -86, -80,
927 -73, -67, -61, -53, -50, -44, -37, -35, -31, -29, -27, -20, -15, -10, -1, 7, 11,
928 15, 16, 15, 16, 12, 6, 3, -2, -3, 0, 3, 8, 14, 19, 24, 28, 29, 31, 30, 26, 23,
929 19, 14, 13, 11, 12, 16, 20, 25, 30, 34, 37, 38, 35, 31, 27, 22, 17, 12, 9, 8, 7,
930 8, 12, 17, 23, 28, 30, 33, 34, 33, 31, 28, 27, 27, 27, 28, 32, 36, 41, 46, 50,
931 54, 55, 53, 48, 41, 33, 23, 13, 5, -1, -5, -8, -12, -15, -16, -20, -24, -28,
932 -35, -42, -50, -59, -68, -74, -80, -85, -83, -82, -79, -72, -68, -64, -58, -56,
933 -53, -51, -47, -47, -45, -41, -41, -37, -33, -29, -21, -17, -11, -7, -2, 2, -1,
934 0, -2, -5, -9, -17, -19, -19, -17, -7, 0, 10, 20, 24, 27, 29, 30, 27, 25, 22,
935 17, 16, 11, 8, 11, 15, 22, 29, 35, 41, 43, 41, 38, 31, 23, 16, 11, 7, 6, 7, 8,
936 14, 20, 28, 39, 46, 51, 52, 51, 49, 45, 40, 37, 37, 41, 43, 47, 54, 60, 65, 68,
937 71, 71, 67, 58, 45, 33, 19, 5, -7, -15, -18, -21, -23, -26, -29, -32, -38, -44,
938 -52, -60, -69, -79, -86, -94, -99, -101, -100, -93, -89, -82, -73, -70, -64,
939 -58, -56, -50, -47, -45, -39, -36, -35, -31, -25, -23, -16, -8, -4, 3, 6, 8, 9,
940 6, 5, 1, -3, -6, -14, -17, -15, -14, -6, 3, 11, 19, 23, 25, 24, 24, 20, 16, 12,
941 8, 7, 3, 3, 9, 13, 21, 30, 36, 44, 47, 46, 43, 38, 32, 26, 23, 21, 22, 24, 27,
942 34, 40, 48, 57, 61, 64, 64, 60, 56, 50, 44, 40, 40, 41, 42, 45, 49, 53, 55, 56,
943 54, 50, 43, 31, 18, 5, -9, -21, -30, -35, -37, -38, -39, -40, -42, -45, -49,
944 -55, -63, -69, -77, -85, -90, -96, -98, -96, -93, -88, -79, -70, -63, -55, -50,
945 -48, -42, -39, -37, -33, -31, -28, -23, -20, -13, -6, 1, 7, 14, 17, 19, 21, 16,
946 15, 13, 6, 2, -3, -10, -13, -14, -9, 0, 8, 18, 26, 28, 28, 25, 20, 19, 16, 9, 7,
947 8, 4, 4, 8, 14, 23, 32, 38, 43, 44, 41, 34, 25, 20, 14, 10, 11, 14, 17, 23, 30,
948 37, 47, 56, 60, 62, 60, 54, 47, 41, 36, 33, 36, 41, 46, 53, 59, 64, 67, 68, 66,
949 61, 52, 39, 23, 8, -6, -20, -29, -32, -33, -33, -33, -35, -40, -43, -48, -57,
950 -62, -70, -80, -86, -93, -97, -97, -95, -89, -81, -70, -64, -58, -50, -47, -42,
951 -39, -34, -29, -29, -25, -23, -19, -13, -8, 0, 9, 18, 19, 21, 24, 18, 16, 13, 7,
952 5, -2, -10, -18, -22, -21, -18, -8, 4, 13, 19, 20, 20, 16, 12, 10, 6, 4, 2, -1,
953 -2, 0, 5, 13, 24, 36, 44, 50, 51, 47, 41, 33, 26, 22, 19, 19, 19, 22, 27, 32,
954 41, 51, 60, 65, 65, 61, 53, 46, 38, 32, 31, 32, 36, 40, 46, 51, 56, 61, 63, 63,
955 60, 51, 39, 23, 9, -5, -17, -22, -26, -26, -25, -26, -28, -31, -34, -39, -47,
956 -55, -64, -75, -84, -90, -95, -95, -91, -86, -78, -71, -65, -58, -54, -50, -46,
957 -43, -40, -39, -37, -34, -31, -23, -16, -7, 4, 11, 15, 18, 18, 17, 14, 11, 7, 3,
958 -1, -5, -9, -13, -15, -18, -23, -22, -18, -17, -11, -4, -3, 0, 2, 0, 2, 6, 6, 8,
959 11, 14, 16, 20, 26, 35, 42, 48, 55, 56, 58, 58, 53, 49, 47, 42, 39, 40, 40, 40,
960 43, 44, 46, 50, 51, 51, 47, 42, 35, 28, 24, 20, 18, 20, 24, 27, 30, 35, 39, 41,
961 44, 42, 40, 36, 27, 17, 7, -2, -12, -18, -21, -24, -24, -26, -28, -31, -35, -39,
962 -44, -51, -57, -65, -74, -78, -84, -88, -85, -84, -81, -75, -69, -64, -58, -52,
963 -48, -40, -34, -31, -24, -21, -14, -11, -9, -1, 4, 7, 14, 18, 21, 25, 26, 25,
964 28, 27, 21, 20, 15, 12, 9, 3, -2, -7, -11, -16, -16, -11, -10, -8, -4, -4, -3,
965 -1, 3, 12, 19, 22, 24, 21, 19, 18, 17, 24, 34, 37, 40, 46, 47, 49, 51, 50, 56,
966 60, 57, 54, 49, 45, 40, 36, 37, 41, 41, 40, 36, 32, 28, 24, 20, 21, 23, 22, 19,
967 16, 14, 15, 17, 20, 23, 25, 21, 14, 5, -4, -13, -20, -24, -25, -27, -30, -31,
968 -34, -35, -34, -32, -31, -32, -39, -46, -54, -65, -71, -73, -73, -68, -64, -60,
969 -54, -50, -43, -32, -25, -19, -10, -8, -10, -9, -8, -9, -7, -4, 0, 6, 8, 11, 13,
970 13, 17, 15, 9, 8, 2, -12, -20, -30, -43, -46, -47, -46, -35, -26, -16, -4, 4,
971 12, 17, 18, 20, 19, 13, 13, 13, 11, 17, 28, 37, 51, 63, 70, 76, 78, 75, 69, 62,
972 54, 45, 36, 29, 25, 23, 24, 29, 34, 40, 43, 40, 37, 32, 23, 15, 10, 5, 3, 5, 7,
973 13, 21, 29, 35, 42, 45, 42, 35, 28, 15, 3, -6, -16, -22, -22, -22, -20, -13, -9,
974 -3, 1, 0, -5, -16, -30, -43, -56, -64, -65, -68, -66, -59, -53, -40, -35, -33,
975 -22, -22, -30, -36, -30, -25, -39, -40, -29, -26, -26, -21, -7, 1, 2, -5, -3, 3,
976 -5, -8, -15, -14, -12, -32, -35, -30, -36, -37, -42, -43, -31, -25, -20, -2, 15,
977 21, 28, 32, 41, 51, 44, 45, 52, 50, 51, 52, 56, 63, 66, 69, 72, 74, 69, 58, 49,
978 39, 27, 13, 1, -2, -4, -5, -3, 3, 11, 18, 22, 26, 29, 28, 23, 22, 23, 25, 29,
979 32, 41, 55, 67, 78, 87, 95, 98, 95, 90, 80, 66, 50, 35, 21, 9, -1, -11, -17,
980 -20, -25, -29, -33, -38, -43, -49, -57, -63, -68, -71, -71, -70, -68, -63, -58,
981 -52, -42, -35, -33, -28, -27, -23, -16, -9, -1, 5, 1, 8, 15, 4, 0, 2, -2, -8,
982 -13, -12, -17, -28, -31, -33, -34, -35, -41, -46, -45, -51, -65, -66, -72, -76,
983 -65, -58, -39, -13, 5, 27, 47, 60, 73, 78, 79, 84, 82, 70, 65, 60, 54, 61, 67,
984 70, 76, 72, 61, 55, 43, 25, 6, -14, -35, -52, -67, -75, -73, -67, -55, -38, -24,
985 -7, 3, 9, 18, 22, 23, 26, 29, 35, 43, 53, 65, 82, 98, 112, 120, 121, 115, 102,
986 84, 67, 47, 25, 3, -17, -32, -43, -51, -55, -57, -59, -63, -67, -73, -81, -88,
987 -93, -94, -94, -90, -82, -73, -60, -46, -33, -24, -16, -10, -12, -12, -13, -13,
988 -14, -16, -13, -16, -20, -16, -15, -12, -8, -15, -26, -34, -48, -61, -65, -68,
989 -69, -71, -73, -67, -64, -60, -49, -44, -43, -41, -50, -61, -59, -54, -41, -16,
990 11, 36, 54, 69, 83, 91, 99, 102, 95, 82, 66, 44, 27, 23, 24, 27, 32, 32, 27, 18,
991 9, -1, -14, -28, -47, -68, -85, -95, -96, -84, -62, -38, -12, 13, 31, 42, 54,
992 62, 66, 67, 65, 61, 58, 59, 65, 77, 93, 106, 113, 114, 107, 93, 74, 54, 30, 3,
993 -23, -49, -68, -80, -84, -81, -76, -70, -67, -68, -69, -73, -76, -77, -79, -78,
994 -73, -70, -64, -50, -34, -15, 6, 19, 22, 19, 8, 1, -4, -10, -12, -17, -26, -35,
995 -37, -37, -36, -30, -30, -33, -43, -56, -64, -70, -71, -72, -73, -71, -68, -67,
996 -60, -44, -27, -17, -16, -16, -29, -39, -37, -38, -22, 7, 23, 38, 56, 67, 75,
997 88, 95, 93, 82, 57, 33, 11, 1, 3, 0, 5, 10, 4, 3, 4, -1, -5, -13, -26, -47, -66,
998 -78, -86, -82, -67, -43, -16, 9, 37, 60, 77, 91, 97, 97, 94, 84, 71, 66, 65, 66,
999 78, 90, 99, 103, 100, 95, 85, 71, 52, 26, -1, -28, -52, -67, -71, -71, -68, -61,
1000 -55, -50, -45, -43, -43, -45, -48, -52, -56, -54, -47, -35, -21, -8, 3, 9, 11,
1001 8, 3, -3, -15, -24, -36, -48, -52, -56, -59, -55, -50, -49, -46, -46, -53, -55,
1002 -56, -59, -62, -61, -58, -57, -51, -40, -32, -24, -15, -12, -10, -8, -12, -18,
1003 -21, -27, -36, -37, -27, -12, 11, 35, 47, 56, 62, 61, 60, 59, 52, 40, 25, 11, 6,
1004 6, 12, 23, 30, 35, 36, 28, 22, 17, 5, -10, -25, -41, -52, -53, -39, -16, 1, 19,
1005 34, 42, 49, 54, 54, 54, 49, 39, 36, 41, 45, 55, 72, 89, 101, 106, 106, 102, 93,
1006 80, 63, 44, 26, 7, -9, -14, -14, -14, -11, -8, -9, -12, -18, -27, -35, -41, -47,
1007 -52, -52, -49, -41, -29, -15, -1, 5, 7, 6, 1, -8, -16, -25, -38, -44, -44, -42,
1008 -36, -26, -19, -14, -11, -14, -21, -29, -40, -53, -63, -68, -71, -70, -59, -44,
1009 -32, -21, -8, -1, 1, 1, -8, -19, -26, -37, -44, -44, -43, -43, -40, -30, -16, 3,
1010 23, 42, 54, 53, 52, 46, 39, 40, 35, 27, 22, 18, 17, 26, 41, 50, 57, 56, 47, 38,
1011 26, 15, 4, -10, -21, -31, -37, -31, -21, -6, 11, 25, 34, 41, 47, 49, 50, 49, 46,
1012 46, 47, 52, 59, 68, 80, 89, 94, 97, 93, 85, 74, 62, 47, 34, 21, 9, -1, -7, -10,
1013 -9, -9, -10, -15, -20, -27, -34, -38, -40, -42, -41, -38, -31, -22, -11, 1, 9,
1014 14, 16, 10, 4, -4, -16, -26, -36, -46, -48, -46, -43, -35, -28, -26, -27, -32,
1015 -37, -40, -48, -56, -65, -72, -76, -74, -63, -48, -33, -23, -13, -9, -7, -7,
1016 -12, -17, -26, -37, -46, -52, -50, -47, -45, -43, -43, -34, -19, -3, 17, 29, 30,
1017 28, 28, 29, 33, 37, 36, 32, 30, 29, 35, 43, 51, 55, 49, 41, 30, 18, 10, 1, -10,
1018 -23, -36, -44, -46, -40, -30, -11, 4, 14, 27, 36, 41, 47, 49, 51, 53, 50, 48,
1019 54, 61, 69, 79, 86, 91, 89, 81, 76, 68, 56, 43, 25, 7, -9, -22, -29, -31, -33,
1020 -37, -40, -43, -45, -46, -47, -47, -49, -48, -45, -40, -31, -21, -11, -3, 0, 1,
1021 0, -5, -13, -21, -33, -42, -48, -52, -47, -41, -36, -33, -35, -35, -38, -47,
1022 -53, -62, -72, -78, -81, -79, -67, -55, -45, -27, -9, 1, 9, 16, 16, 9, 2, -6,
1023 -16, -17, -16, -22, -16, -7, -11, -12, -13, -7, 2, 6, 11, 8, 1, -2, 1, 4, 12,
1024 21, 14, 13, 18, 17, 25, 32, 34, 34, 30, 23, 15, 17, 19, 16, 12, 3, -2, -5, -1,
1025 9, 11, 16, 19, 17, 23, 33, 38, 39, 42, 43, 43, 47, 51, 54, 59, 62, 64, 64, 67,
1026 68, 65, 65, 63, 56, 49, 43, 34, 27, 22, 13, 5, 0, -6, -11, -15, -18, -20, -22,
1027 -22, -25, -26, -25, -26, -24, -21, -21, -24, -25, -25, -27, -27, -27, -31, -33,
1028 -34, -36, -40, -42, -44, -47, -46, -44, -43, -41, -36, -34, -31, -27, -28, -33,
1029 -35, -34, -35, -36, -35, -37, -33, -30, -27, -21, -16, -14, -17, -18, -18, -22,
1030 -30, -36, -41, -49, -55, -61, -58, -36, -14, 7, 24, 33, 40, 43, 47, 52, 50, 42,
1031 30, 22, 21, 25, 34, 42, 52, 55, 52, 47, 39, 33, 20, 3, -15, -37, -51, -55, -52,
1032 -42, -29, -14, -1, 14, 29, 38, 44, 44, 39, 36, 35, 35, 40, 48, 60, 72, 83, 91,
1033 97, 97, 94, 87, 74, 59, 41, 23, 9, 0, -7, -11, -13, -15, -16, -17, -20, -23,
1034 -29, -37, -46, -52, -53, -51, -45, -35, -24, -16, -9, -2, 2, 3, -1, -9, -17,
1035 -25, -35, -41, -41, -41, -39, -35, -29, -24, -24, -24, -30, -37, -44, -57, -65,
1036 -64, -65, -62, -52, -41, -29, -16, -7, 0, 6, 0, -6, -11, -21, -25, -30, -32,
1037 -28, -26, -22, -17, -15, -13, -18, -21, -13, -7, 0, 4, 7, 12, 20, 31, 41, 49,
1038 51, 48, 46, 44, 46, 46, 42, 41, 37, 33, 29, 24, 23, 19, 11, 1, -12, -19, -24,
1039 -27, -25, -19, -13, -7, 3, 14, 24, 31, 35, 40, 45, 47, 50, 56, 62, 68, 76, 83,
1040 88, 90, 89, 88, 84, 75, 63, 47, 31, 17, 4, -5, -12, -19, -25, -28, -30, -33,
1041 -34, -36, -40, -44, -47, -49, -47, -40, -33, -25, -17, -9, -4, 3, 7, 7, 4, -4,
1042 -10, -18, -25, -29, -32, -36, -40, -40, -36, -34, -32, -30, -33, -40, -48, -52,
1043 -54, -53, -54, -54, -48, -45, -39, -27, -15, -6, -4, -3, -2, -7, -9, -11, -12,
1044 -16, -19, -22, -27, -24, -24, -30, -24, -18, -10, 5, 12, 14, 21, 24, 26, 31, 35,
1045 34, 31, 27, 28, 33, 36, 41, 46, 43, 42, 37, 29, 27, 21, 8, -2, -14, -24, -26,
1046 -25, -22, -13, -4, 3, 11, 20, 26, 29, 31, 33, 35, 36, 39, 45, 53, 63, 71, 77,
1047 82, 85, 81, 78, 72, 61, 50, 36, 23, 12, 3, -2, -7, -9, -13, -16, -19, -22, -25,
1048 -29, -33, -38, -42, -41, -38, -31, -21, -14, -6, 0, 3, 7, 7, 4, -1, -9, -17,
1049 -23, -30, -34, -37, -40, -40, -41, -43, -41, -41, -41, -40, -40, -43, -46, -45,
1050 -46, -42, -37, -35, -31, -25, -22, -18, -9, -2, -1, 2, 1, -3, -7, -9, -10, -13,
1051 -14, -19, -28, -31, -34, -41, -42, -31, -23, -13, 3, 8, 13, 25, 28, 34, 41, 39,
1052 32, 29, 28, 30, 36, 40, 44, 45, 43, 43, 39, 34, 31, 19, 4, -7, -20, -27, -26,
1053 -23, -15, -7, -1, 7, 16, 24, 29, 32, 32, 31, 30, 32, 39, 46, 54, 63, 69, 74, 77,
1054 76, 74, 70, 60, 48, 36, 22, 12, 5, 0, -2, -5, -8, -10, -12, -14, -16, -19, -24,
1055 -29, -32, -34, -31, -27, -22, -15, -10, -6, -2, -1, -1, -2, -9, -15, -19, -25,
1056 -28, -29, -31, -32, -34, -33, -31, -31, -33, -36, -37, -37, -41, -42, -42, -41,
1057 -42, -35, -30, -29, -22, -16, -14, -8, -7, -8, -11, -13, -15, -17, -18, -19,
1058 -19, -20, -20, -23, -26, -27, -32, -39, -42, -38, -32, -20, -1, 9, 17, 26, 32,
1059 40, 48, 49, 44, 37, 30, 26, 28, 32, 36, 36, 35, 35, 32, 28, 26, 17, 4, -9, -23,
1060 -33, -35, -31, -23, -15, -8, -1, 7, 16, 24, 29, 29, 27, 25, 26, 32, 40, 47, 57,
1061 65, 70, 74, 76, 75, 72, 65, 54, 42, 29, 19, 12, 8, 6, 2, -2, -4, -8, -11, -14,
1062 -18, -25, -31, -35, -37, -35, -29, -25, -18, -11, -6, -1, 3, 3, 0, -5, -12, -21,
1063 -26, -29, -28, -28, -26, -26, -30, -28, -26, -26, -27, -29, -36, -45, -50, -52,
1064 -50, -48, -48, -42, -36, -31, -25, -17, -8, -5, -8, -7, -8, -12, -15, -13, -12,
1065 -13, -16, -18, -18, -19, -22, -24, -29, -39, -44, -40, -32, -18, -4, 2, 11, 19,
1066 25, 33, 39, 39, 33, 28, 22, 20, 24, 27, 33, 37, 35, 35, 31, 30, 28, 18, 8, -5,
1067 -19, -25, -23, -16, -10, -3, 3, 8, 16, 22, 28, 31, 30, 27, 26, 30, 35, 43, 53,
1068 64, 70, 73, 77, 78, 76, 72, 62, 50, 37, 24, 15, 9, 6, 2, -3, -7, -10, -14, -17,
1069 -19, -24, -30, -35, -38, -38, -33, -27, -22, -17, -11, -6, -3, 0, 0, -4, -10,
1070 -17, -21, -24, -26, -27, -28, -28, -29, -30, -31, -30, -29, -33, -37, -40, -44,
1071 -46, -46, -43, -41, -38, -33, -29, -22, -16, -12, -7, -4, -3, -5, -7, -10, -11,
1072 -12, -15, -15, -18, -21, -24, -27, -29, -34, -44, -47, -41, -35, -24, -7, 0, 7,
1073 16, 22, 31, 38, 37, 34, 31, 26, 24, 28, 32, 36, 38, 35, 34, 31, 26, 24, 15, 2,
1074 -12, -26, -32, -32, -27, -19, -12, -5, 2, 11, 19, 27, 31, 30, 30, 29, 32, 41,
1075 49, 60, 70, 77, 81, 85, 86, 84, 79, 69, 55, 41, 27, 18, 10, 6, 3, -2, -5, -7,
1076 -9, -11, -13, -18, -25, -30, -34, -35, -31, -27, -20, -13, -8, -3, 2, 5, 5, 3,
1077 -2, -9, -16, -23, -27, -31, -33, -34, -36, -36, -36, -38, -41, -41, -43, -48,
1078 -50, -51, -50, -48, -44, -35, -30, -27, -21, -15, -10, -8, -4, -3, -4, -4, -6,
1079 -7, -7, -8, -8, -10, -13, -17, -24, -29, -34, -40, -51, -61, -56, -46, -35, -16,
1080 0, 7, 16, 26, 34, 42, 42, 34, 30, 25, 21, 26, 33, 41, 47, 48, 49, 49, 45, 40,
1081 32, 17, 1, -16, -29, -32, -27, -23, -16, -7, 0, 8, 16, 23, 27, 26, 23, 21, 22,
1082 27, 35, 45, 57, 68, 73, 79, 84, 82, 79, 72, 59, 45, 32, 21, 15, 12, 10, 8, 6, 4,
1083 1, -3, -6, -12, -22, -30, -37, -41, -40, -36, -30, -23, -17, -12, -7, -3, -2,
1084 -3, -7, -12, -20, -28, -29, -29, -29, -28, -28, -28, -27, -23, -20, -19, -22,
1085 -30, -35, -39, -40, -40, -39, -38, -37, -34, -30, -23, -18, -13, -10, -13, -15,
1086 -15, -16, -16, -16, -17, -19, -22, -22, -22, -21, -20, -25, -29, -33, -42, -50,
1087 -47, -34, -23, -6, 9, 16, 28, 38, 47, 57, 57, 51, 42, 34, 31, 30, 33, 38, 41,
1088 39, 37, 38, 36, 35, 28, 13, -1, -16, -27, -29, -26, -24, -22, -17, -11, -4, 6,
1089 13, 17, 17, 16, 17, 18, 26, 34, 43, 53, 61, 68, 73, 79, 80, 77, 71, 60, 48, 37,
1090 28, 22, 16, 13, 9, 5, 3, 1, -1, -4, -9, -17, -24, -30, -34, -34, -32, -29, -26,
1091 -22, -16, -11, -7, -5, -7, -11, -15, -19, -21, -22, -24, -25, -24, -23, -21,
1092 -19, -22, -25, -28, -32, -33, -38, -41, -40, -42, -41, -38, -32, -27, -22, -18,
1093 -15, -11, -14, -14, -11, -12, -12, -13, -12, -11, -14, -14, -12, -13, -16, -21,
1094 -25, -31, -37, -48, -56, -58, -52, -42, -27, -4, 12, 22, 37, 47, 54, 57, 56, 51,
1095 44, 38, 34, 38, 45, 49, 54, 56, 57, 56, 51, 45, 34, 19, 4, -11, -21, -25, -25,
1096 -23, -17, -11, -7, 0, 5, 8, 9, 9, 9, 9, 13, 20, 31, 44, 56, 67, 74, 80, 82, 79,
1097 76, 68, 56, 45, 33, 24, 17, 13, 9, 5, 1, -4, -8, -12, -18, -25, -32, -38, -43,
1098 -45, -44, -39, -34, -28, -22, -18, -14, -10, -8, -7, -7, -8, -10, -11, -10, -9,
1099 -8, -9, -10, -12, -16, -19, -23, -27, -32, -35, -36, -36, -35, -33, -30, -25,
1100 -20, -16, -17, -19, -21, -20, -20, -20, -18, -17, -15, -12, -7, -3, -1, 1, -1,
1101 -5, -8, -14, -23, -28, -30, -37, -43, -45, -47, -46, -37, -23, -9, 9, 18, 24,
1102 33, 38, 40, 44, 43, 39, 34, 32, 34, 40, 46, 50, 53, 50, 47, 43, 36, 32, 21, 7,
1103 -5, -15, -21, -21, -18, -15, -11, -7, -4, 2, 6, 10, 12, 13, 14, 17, 22, 31, 41,
1104 52, 60, 67, 70, 72, 71, 67, 63, 54, 43, 33, 22, 16, 11, 7, 4, -2, -6, -10, -15,
1105 -19, -23, -29, -36, -40, -42, -43, -38, -34, -29, -23, -19, -15, -12, -9, -9,
1106 -12, -15, -16, -15, -14, -10, -8, -8, -9, -12, -13, -16, -22, -25, -30, -38,
1107 -42, -41, -41, -42, -38, -35, -33, -30, -25, -19, -16, -13, -12, -12, -11, -10,
1108 -9, -7, -8, -8, -8, -7, -5, -3, -2, -5, -8, -11, -18, -23, -27, -32, -41, -48,
1109 -48, -43, -35, -25, -7, 7, 15, 24, 31, 35, 37, 36, 34, 31, 28, 26, 31, 40, 45,
1110 50, 54, 54, 52, 47, 42, 36, 24, 13, 2, -4, -6, -6, -2, 3, 8, 9, 11, 14, 14, 14,
1111 14, 13, 13, 15, 21, 30, 41, 50, 58, 62, 63, 63, 59, 54, 47, 37, 28, 20, 13, 10,
1112 7, 5, 2, -2, -7, -14, -19, -25, -32, -38, -44, -46, -48, -46, -41, -35, -29,
1113 -21, -17, -13, -10, -9, -11, -13, -15, -15, -11, -9, -7, -3, -2, -5, -4, -2, -5,
1114 -10, -14, -19, -21, -22, -24, -25, -25, -27, -29, -24, -19, -19, -18, -17, -19,
1115 -18, -16, -13, -9, -7, -8, -8, -4, -1, 1, -1, -2, -7, -15, -18, -17, -19, -23,
1116 -25, -25, -29, -30, -27, -24, -23, -25, -23, -22, -22, -13, 0, 10, 17, 23, 29,
1117 34, 40, 45, 49, 48, 42, 40, 37, 35, 38, 40, 39, 38, 36, 33, 32, 31, 26, 21, 14,
1118 6, 1, -3, -2, 1, 2, 5, 8, 11, 15, 21, 26, 31, 35, 35, 36, 39, 41, 45, 47, 47,
1119 45, 42, 39, 36, 32, 26, 18, 10, 2, -6, -12, -16, -21, -26, -31, -35, -38, -39,
1120 -40, -41, -41, -41, -42, -37, -32, -29, -24, -17, -14, -11, -6, 0, 1, 0, 1, 0,
1121 -3, -6, -6, -5, -7, -11, -12, -11, -12, -14, -13, -14, -17, -22, -27, -29, -30,
1122 -33, -33, -29, -29, -29, -24, -20, -17, -14, -12, -12, -12, -12, -16, -15, -11,
1123 -15, -17, -17, -17, -20, -22, -23, -26, -27, -31, -34, -31, -30, -27, -25, -20,
1124 -15, -12, -1, 12, 20, 26, 33, 38, 38, 42, 46, 45, 46, 42, 39, 40, 39, 39, 40,
1125 40, 36, 31, 29, 25, 22, 17, 13, 7, 1, -1, -3, -2, 1, 3, 5, 9, 13, 17, 22, 28,
1126 32, 35, 37, 39, 43, 46, 48, 49, 48, 47, 43, 39, 35, 29, 22, 15, 6, -2, -8, -14,
1127 -19, -23, -27, -32, -35, -37, -39, -40, -40, -40, -39, -38, -34, -29, -24, -18,
1128 -13, -9, -6, -4, -3, -3, -4, -2, -3, -4, -5, -5, -3, -2, -3, -4, -6, -11, -17,
1129 -19, -23, -28, -31, -34, -33, -32, -31, -24, -21, -19, -18, -16, -16, -14, -13,
1130 -15, -12, -10, -12, -6, -1, 1, 2, 2, -2, -7, -10, -14, -18, -20, -22, -25, -26,
1131 -25, -22, -21, -20, -21, -27, -30, -32, -30, -25, -17, -9, -4, 6, 14, 21, 31,
1132 34, 33, 31, 28, 24, 21, 27, 31, 30, 37, 41, 44, 47, 50, 52, 47, 40, 30, 21, 18,
1133 13, 13, 17, 19, 21, 26, 33, 35, 38, 38, 34, 29, 25, 24, 22, 25, 28, 28, 32, 34,
1134 35, 35, 33, 28, 18, 9, 0, -10, -15, -20, -23, -24, -24, -22, -21, -19, -18, -19,
1135 -22, -29, -34, -38, -39, -41, -40, -34, -30, -24, -17, -11, -7, -8, -11, -14,
1136 -17, -19, -20, -20, -22, -22, -18, -16, -11, -10, -12, -13, -17, -21, -24, -24,
1137 -26, -29, -27, -26, -22, -17, -13, -9, -9, -11, -11, -13, -14, -15, -14, -14,
1138 -15, -14, -15, -12, -13, -15, -13, -17, -22, -23, -25, -26, -25, -22, -21, -22,
1139 -22, -21, -16, -13, -7, 0, 4, 7, 10, 15, 20, 23, 25, 26, 27, 26, 26, 27, 28, 31,
1140 31, 32, 34, 34, 36, 37, 37, 36, 31, 28, 25, 23, 21, 21, 23, 23, 25, 27, 30, 33,
1141 35, 36, 34, 32, 32, 30, 29, 29, 29, 29, 28, 27, 26, 25, 23, 18, 14, 7, 0, -5,
1142 -10, -14, -17, -20, -21, -21, -21, -22, -21, -22, -24, -27, -29, -31, -32, -32,
1143 -32, -33, -31, -29, -27, -23, -20, -18, -20, -21, -21, -20, -19, -20, -17, -16,
1144 -16, -15, -14, -11, -12, -13, -13, -14, -16, -17, -16, -15, -16, -15, -15, -15,
1145 -16, -17, -15, -13, -15, -16, -16, -15, -15, -13, -12, -13, -14, -16, -16, -17,
1146 -18, -17, -18, -19, -21, -20, -19, -19, -18, -18, -17, -18, -19, -16, -14, -12,
1147 -8, -4, 2, 5, 10, 16, 20, 22, 23, 25, 25, 24, 25, 28, 32, 33, 36, 40, 41, 42,
1148 44, 44, 43, 39, 36, 33, 30, 28, 27, 27, 26, 28, 27, 26, 27, 25, 24, 22, 19, 17,
1149 16, 15, 16, 18, 19, 19, 21, 21, 19, 18, 15, 11, 6, 1, -3, -7, -10, -12, -13,
1150 -14, -15, -16, -17, -18, -23, -27, -28, -31, -35, -37, -38, -37, -38, -37, -35,
1151 -31, -30, -30, -27, -24, -23, -22, -20, -18, -15, -15, -15, -10, -8, -9, -8, -4,
1152 -3, -6, -8, -7, -10, -13, -13, -14, -16, -19, -18, -16, -15, -15, -14, -13, -17,
1153 -18, -18, -21, -21, -21, -22, -22, -24, -22, -22, -24, -22, -22, -22, -23, -23,
1154 -20, -20, -20, -18, -20, -20, -15, -12, -11, -4, 1, 6, 10, 12, 18, 22, 23, 26,
1155 27, 27, 28, 30, 32, 33, 37, 39, 40, 42, 42, 43, 43, 41, 40, 36, 32, 30, 28, 26,
1156 26, 26, 26, 26, 25, 26, 26, 24, 24, 22, 21, 22, 20, 22, 23, 23, 24, 24, 24, 23,
1157 20, 18, 15, 10, 6, 3, -1, -5, -7, -8, -9, -11, -13, -16, -17, -20, -23, -26,
1158 -29, -32, -34, -37, -37, -36, -37, -36, -34, -32, -30, -27, -25, -22, -21, -20,
1159 -18, -17, -15, -15, -15, -12, -12, -13, -10, -9, -10, -8, -5, -5, -5, -5, -5,
1160 -7, -12, -11, -10, -14, -14, -13, -16, -17, -16, -18, -19, -19, -21, -22, -23,
1161 -25, -25, -26, -25, -24, -27, -27, -26, -29, -30, -29, -27, -24, -24, -19, -12,
1162 -8, -3, 7, 14, 15, 19, 26, 27, 26, 29, 35, 37, 39, 43, 46, 48, 49, 50, 52, 51,
1163 48, 45, 42, 38, 34, 32, 30, 28, 25, 23, 22, 21, 19, 18, 17, 15, 11, 9, 9, 9, 10,
1164 12, 15, 16, 18, 20, 22, 24, 25, 25, 24, 22, 20, 17, 15, 13, 10, 7, 4, 1, -3, -5,
1165 -8, -10, -14, -19, -23, -28, -33, -36, -39, -41, -44, -46, -46, -46, -44, -43,
1166 -41, -40, -38, -37, -36, -31, -26, -23, -20, -17, -13, -12, -12, -8, -4, -4, -3,
1167 -1, 0, -2, -2, 0, 3, 0, -2, -2, -3, -7, -11, -12, -13, -19, -24, -24, -28, -33,
1168 -33, -33, -36, -38, -39, -41, -44, -46, -46, -46, -45, -44, -44, -39, -33, -28,
1169 -20, -11, -2, 4, 10, 17, 22, 25, 31, 35, 37, 39, 42, 46, 50, 54, 57, 61, 63, 62,
1170 61, 60, 58, 53, 48, 44, 39, 34, 29, 27, 24, 22, 20, 17, 14, 10, 7, 6, 5, 3, 2,
1171 2, 2, 3, 5, 8, 10, 12, 13, 15, 15, 15, 15, 15, 14, 13, 12, 11, 9, 9, 8, 6, 4, 1,
1172 -3, -6, -10, -13, -16, -19, -22, -26, -28, -29, -31, -32, -32, -32, -33, -34,
1173 -34, -34, -33, -33, -31, -30, -28, -27, -24, -21, -20, -17, -15, -13, -11, -9,
1174 -10, -9, -6, -7, -7, -5, -4, -6, -6, -4, -4, -7, -7, -7, -10, -12, -14, -15,
1175 -18, -20, -22, -23, -25, -27, -28, -29, -31, -34, -33, -31, -33, -34, -30, -27,
1176 -25, -21, -17, -13, -9, -6, -3, 0, 2, 4, 7, 11, 13, 15, 20, 23, 25, 29, 34, 35,
1177 37, 40, 41, 41, 43, 44, 42, 42, 43, 42, 41, 41, 40, 38, 37, 35, 32, 30, 29, 27,
1178 25, 25, 23, 23, 22, 22, 21, 22, 21, 19, 19, 18, 17, 16, 15, 13, 12, 11, 10, 8,
1179 7, 5, 3, 2, 0, -3, -4, -5, -8, -11, -12, -14, -17, -20, -22, -25, -29, -32, -33,
1180 -35, -37, -38, -38, -38, -39, -40, -38, -37, -38, -37, -36, -36, -36, -35, -33,
1181 -31, -31, -28, -25, -23, -22, -20, -16, -14, -13, -11, -8, -9, -10, -8, -7, -7,
1182 -8, -7, -6, -7, -8, -7, -7, -9, -10, -11, -12, -15, -17, -16, -15, -17, -16,
1183 -10, -7, -8, -5, 1, 2, 2, 3, 6, 6, 6, 8, 11, 14, 17, 21, 25, 29, 31, 34, 37, 39,
1184 38, 40, 41, 41, 40, 40, 41, 42, 42, 42, 42, 40, 38, 35, 32, 31, 27, 24, 23, 22,
1185 22, 23, 23, 24, 24, 24, 23, 21, 19, 18, 16, 16, 14, 13, 13, 13, 12, 13, 13, 12,
1186 10, 7, 4, 1, -2, -5, -8, -11, -13, -15, -17, -19, -20, -22, -26, -30, -33, -36,
1187 -40, -43, -44, -44, -45, -43, -40, -38, -37, -34, -30, -29, -28, -27, -26, -25,
1188 -23, -20, -18, -15, -13, -12, -9, -7, -7, -4, -3, -3, -4, -4, -5, -7, -7, -8,
1189 -9, -12, -16, -19, -24, -27, -31, -36, -39, -41, -41, -39, -35, -30, -24, -13,
1190 -4, 1, 8, 14, 19, 25, 29, 33, 36, 40, 45, 49, 55, 60, 64, 67, 67, 66, 63, 60,
1191 55, 47, 42, 35, 27, 20, 15, 12, 8, 5, 2, -2, -5, -8, -10, -12, -11, -9, -6, -1,
1192 5, 12, 21, 29, 38, 44, 49, 52, 53, 54, 54, 54, 53, 51, 48, 44, 40, 35, 28, 22,
1193 13, 5, -5, -16, -25, -33, -40, -47, -51, -54, -57, -59, -58, -55, -52, -49, -48,
1194 -47, -44, -42, -37, -30, -24, -19, -13, -9, -5, 1, 4, 8, 12, 10, 9, 6, 1, -4,
1195 -9, -14, -18, -25, -31, -36, -39, -41, -41, -42, -42, -42, -44, -44, -44, -42,
1196 -37, -37, -35, -34, -34, -31, -28, -24, -19, -19, -22, -22, -14, -7, 1, 15, 31,
1197 39, 42, 52, 54, 50, 53, 49, 43, 37, 29, 27, 24, 27, 29, 28, 29, 24, 19, 14, 11,
1198 6, 0, -3, -8, -9, -7, -6, 2, 10, 16, 17, 17, 19, 17, 19, 24, 28, 35, 37, 43, 51,
1199 57, 64, 67, 67, 61, 54, 45, 37, 32, 27, 23, 20, 14, 10, 5, 1, -3, -8, -14, -20,
1200 -26, -30, -32, -29, -25, -21, -19, -17, -14, -14, -15, -14, -15, -18, -21, -22,
1201 -23, -21, -18, -16, -14, -17, -20, -23, -27, -30, -32, -34, -37, -37, -37, -36,
1202 -33, -29, -28, -30, -29, -29, -28, -26, -27, -23, -21, -24, -18, -11, -10, -6,
1203 -1, -3, -8, -13, -17, -20, -27, -27, -26, -33, -35, -35, -38, -42, -43, -35,
1204 -30, -26, -14, -1, 14, 27, 40, 54, 55, 56, 58, 55, 54, 51, 50, 50, 47, 47, 46,
1205 44, 41, 36, 32, 22, 12, 1, -8, -16, -19, -18, -21, -18, -14, -11, -4, -1, 4, 9,
1206 11, 16, 22, 28, 36, 45, 55, 62, 68, 72, 72, 70, 66, 60, 52, 43, 34, 27, 20, 14,
1207 9, 3, -4, -9, -16, -21, -25, -28, -29, -30, -29, -27, -23, -21, -16, -10, -8,
1208 -7, -7, -8, -10, -12, -11, -10, -11, -10, -11, -16, -18, -21, -26, -30, -33,
1209 -37, -40, -43, -47, -47, -47, -48, -39, -34, -36, -30, -27, -31, -27, -22, -16,
1210 -14, -11, -2, -3, -1, 6, 2, 1, 1, -8, -16, -18, -22, -26, -25, -26, -28, -36,
1211 -38, -40, -52, -49, -48, -55, -45, -36, -26, -5, 16, 28, 40, 51, 50, 51, 51, 50,
1212 48, 46, 46, 46, 47, 51, 50, 50, 46, 38, 30, 19, 8, 0 };
1213 
1214 #endif /* BLAHBLAH4B_H_ */
+
+ + + + diff --git a/extras/doc/html/char2mozzi_8py.html b/extras/doc/html/char2mozzi_8py.html new file mode 100644 index 000000000..4f88d8ada --- /dev/null +++ b/extras/doc/html/char2mozzi_8py.html @@ -0,0 +1,144 @@ + + + + + + + +Mozzi: char2mozzi.py File Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
char2mozzi.py File Reference
+
+
+ +

A script for converting raw 8 bit sound data files to wavetables for Mozzi.
+More...

+ +

Go to the source code of this file.

+ + + + +

+Functions

+def char2mozzi.char2mozzi (infile, outfile, tablename, samplerate)
 
+

Detailed Description

+
A script for converting raw 8 bit sound data files to wavetables for Mozzi.

Usage: >>>char2mozzi.py <infile outfile="" tablename="" samplerate>="">

+
Parameters
+ + + + + +
infileThe file to convert, RAW(headerless) Signed 8 bit PCM.
outfileThe file to save as output, a .h file containing a table for Mozzi.
tablenameThe name to give the table of converted data in the new file.
samplerateThe samplerate the sound was recorded at. Choose what make sense for you, if it's not a normal recorded sample.
+
+
+
Note
Using Audacity to prepare raw sound files for converting:
+

For generated waveforms like sine or sawtooth, set the project rate to the size of the wavetable you wish to create, which must be a power of two (eg. 8192), and set the selection format (beneath the editing window) to samples. Then you can generate and save 1 second of a waveform and it will fit your table length.

+

For a recorded audio sample, set the project rate to the Mozzi AUDIO_RATE (16384 in the current version). Samples can be any length, as long as they fit in your Arduino.

+

Save by exporting with the format set to "Other uncompressed formats", "Header: RAW(headerless)" and "Encoding: Signed 8 bit PCM".

+

Now use the file you just exported, as the "infile" to convert.

+
Author
Tim Barrass 2010-12
+ +

Definition in file char2mozzi.py.

+
+
+ + + + diff --git a/extras/doc/html/char2mozzi_8py.js b/extras/doc/html/char2mozzi_8py.js new file mode 100644 index 000000000..2f4fa7ea0 --- /dev/null +++ b/extras/doc/html/char2mozzi_8py.js @@ -0,0 +1,4 @@ +var char2mozzi_8py = +[ + [ "char2mozzi", "char2mozzi_8py.html#aabd66d57c9b80e218d455346db80d587", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/char2mozzi_8py_source.html b/extras/doc/html/char2mozzi_8py_source.html new file mode 100644 index 000000000..02be1d1f5 --- /dev/null +++ b/extras/doc/html/char2mozzi_8py_source.html @@ -0,0 +1,112 @@ + + + + + + + +Mozzi: char2mozzi.py Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
char2mozzi.py
+
+
+Go to the documentation of this file.
1 #!/usr/bin/env python
2 
3 
35 
36 import sys, array, os, textwrap, random
37 
38 if len(sys.argv) != 5:
39  print ('Usage: char2mozzi.py <infile outfile tablename samplerate>')
40  sys.exit(1)
41 
42 [infile, outfile, tablename, samplerate] = sys.argv[1:]
43 
44 def char2mozzi(infile, outfile, tablename, samplerate):
45  fin = open(os.path.expanduser(infile), "rb")
46  print ("opened " + infile)
47  uint8_tstoread = os.path.getsize(os.path.expanduser(infile))
48 
49  valuesfromfile = array.array('b') # array of signed int8_t ints
50  try:
51  valuesfromfile.fromfile(fin, uint8_tstoread)
52  finally:
53  fin.close()
54 
55  values=valuesfromfile.tolist()
56  fout = open(os.path.expanduser(outfile), "w")
57  fout.write('#ifndef ' + tablename + '_H_' + '\n')
58  fout.write('#define ' + tablename + '_H_' + '\n \n')
59  fout.write('#if ARDUINO >= 100'+'\n')
60  fout.write('#include "Arduino.h"'+'\n')
61  fout.write('#else'+'\n')
62  fout.write('#include "WProgram.h"'+'\n')
63  fout.write('#endif'+'\n')
64  fout.write('#include <avr/pgmspace.h>'+'\n \n')
65  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(len(values))+'\n')
66  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
67  outstring = 'const int8_t __attribute__((section(".progmem.data"))) ' + tablename + '_DATA [] = {'
68  try:
69  for i in range(len(values)):
70 
71  if (values[i] == 33) and (values[i+1] == 33) and (values[i+2] == 33):
72  values[i+2] = random.choice([32, 34])
73  outstring += str(values[i]) + ", "
74  finally:
75  outstring += "};"
76  outstring = textwrap.fill(outstring, 80)
77  fout.write(outstring)
78  fout.write('\n\n#endif /* ' + tablename + '_H_ */\n')
79  fout.close()
80  print ("wrote " + outfile)
81 
82 char2mozzi(infile, outfile, tablename, samplerate)
+
+
+ + + + diff --git a/extras/doc/html/chebyshev__int8_8py_source.html b/extras/doc/html/chebyshev__int8_8py_source.html new file mode 100644 index 000000000..11e22e784 --- /dev/null +++ b/extras/doc/html/chebyshev__int8_8py_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: chebyshev_int8.py Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
chebyshev_int8.py
+
+
+
1 
2 
3 import array,os,textwrap,math
4 
5 
6 def chebyTable(outfile, tablename, tablelength, curvenum):
7 
8  """
9  Generates chebyshev polynomial curve tables for WaveShaper.
10 
11  Args:
12  outfile: The file to save as output.
13  tablename: The name to give the table of converted data in the new file.
14  tablelength: Use a power of two.
15  curvenum: The chebyshev polynomial curve number to chebyTable.
16 
17  Examples:
18  chebyTable("~/Desktop/waveshaper_chebyshev_3rd_256_int8.h", "CHEBYSHEV_3RD_256", 256, 3)
19  chebyTable("~/Desktop/waveshaper_chebyshev_4th_256_int8.h", "CHEBYSHEV_4TH_256", 256, 4)
20  chebyTable("~/Desktop/waveshaper_chebyshev_5th_256_int8.h", "CHEBYSHEV_5TH_256", 256, 5)
21  chebyTable("~/Desktop/waveshaper_chebyshev_6th_256_int8.h", "CHEBYSHEV_6TH_256", 256, 6)
22 
23  Resources:
24  http://www.obiwannabe.co.uk/html/music/6SS/six-waveshaper.html
25  http://mathworld.wolfram.com/ChebyshevPolynomialoftheFirstKind.html
26  The first few Chebyshev polynomials of the first kind are
27  T_0(x) = 1
28  T_1(x) = x
29  T_2(x) = 2x^2-1
30  T_3(x) = 4x^3-3x
31  T_4(x) = 8x^4-8x^2+1
32  T_5(x) = 16x^5-20x^3+5x
33  T_6(x) = 32x^6-48x^4+18x^2-1
34 
35  """
36 
37  fout = open(os.path.expanduser(outfile), "w")
38  fout.write('#ifndef ' + tablename + '_H_' + '\n')
39  fout.write('#define ' + tablename + '_H_' + '\n \n')
40  fout.write('#if ARDUINO >= 100'+'\n')
41  fout.write('#include "Arduino.h"'+'\n')
42  fout.write('#else'+'\n')
43  fout.write('#include "WProgram.h"'+'\n')
44  fout.write('#endif'+'\n')
45  fout.write('#include <avr/pgmspace.h>'+'\n \n')
46  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength) +'\n')
47  outstring = 'const int8_t __attribute__((section(".progmem.data"))) ' + tablename + '_DATA [] = {'
48  try:
49  for num in range(tablelength):
50 
51  x = 2*(float(num-(tablelength/2)))/tablelength
52 
53  if curvenum == 3:
54  t_x = 4*pow(x,3)-3*x
55  elif curvenum == 4:
56  t_x = 8*pow(x,4)-8*pow(x,2)+1
57  elif curvenum == 5:
58  t_x = 16*pow(x,5)-20*pow(x,3)+5*x
59  elif curvenum == 6:
60  t_x = 32*pow(x,6)-48*pow(x,4)+18*pow(x,2)-1
61 
62  scaled = int16_t(math.floor(t_x*127.999))
63 
64  outstring += str(scaled) + ", "
65  finally:
66  outstring += "};"
67  outstring = textwrap.fill(outstring, 80)
68  fout.write(outstring)
69  fout.write('\n \n #endif /* ' + tablename + '_H_ */\n')
70  fout.close()
71  print "wrote " + outfile
72 
+
+ + + + diff --git a/extras/doc/html/class_a_d_s_r-members.html b/extras/doc/html/class_a_d_s_r-members.html new file mode 100644 index 000000000..eb201c1e2 --- /dev/null +++ b/extras/doc/html/class_a_d_s_r-members.html @@ -0,0 +1,139 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ADSR< CONTROL_UPDATE_RATE, LERP_RATE > Member List
+
+
+ +

This is the complete list of members for ADSR< CONTROL_UPDATE_RATE, LERP_RATE >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
ADSR()ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
adsr_playing (defined in ADSR< CONTROL_UPDATE_RATE, LERP_RATE >)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >
next()ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
noteOff()ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
noteOn()ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
playing()ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setADLevels(byte attack, byte decay)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setAllUpdateSteps(unsigned int attack_steps, unsigned int decay_steps, unsigned int sustain_steps, unsigned int release_steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setAttackLevel(byte value)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setAttackTime(unsigned int msec)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setAttackUpdateSteps(unsigned int steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setDecayLevel(byte value)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setDecayTime(unsigned int msec)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setDecayUpdateSteps(unsigned int steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setIdleLevel(byte value) (defined in ADSR< CONTROL_UPDATE_RATE, LERP_RATE >)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setIdleTime(unsigned int msec) (defined in ADSR< CONTROL_UPDATE_RATE, LERP_RATE >)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setIdleUpdateSteps(unsigned int steps) (defined in ADSR< CONTROL_UPDATE_RATE, LERP_RATE >)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setLevels(byte attack, byte decay, byte sustain, byte release)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setReleaseLevel(byte value)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setReleaseTime(unsigned int msec)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setReleaseUpdateSteps(unsigned int steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setSustainLevel(byte value)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setSustainTime(unsigned int msec)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setSustainUpdateSteps(unsigned int steps)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTimes(unsigned int attack_ms, unsigned int decay_ms, unsigned int sustain_ms, unsigned int release_ms)ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
update()ADSR< CONTROL_UPDATE_RATE, LERP_RATE >inline
+
+ + + + diff --git a/extras/doc/html/class_a_d_s_r.html b/extras/doc/html/class_a_d_s_r.html new file mode 100644 index 000000000..5a7dd417b --- /dev/null +++ b/extras/doc/html/class_a_d_s_r.html @@ -0,0 +1,1080 @@ + + + + + + + +Mozzi: ADSR< CONTROL_UPDATE_RATE, LERP_RATE > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
ADSR< CONTROL_UPDATE_RATE, LERP_RATE > Class Template Reference
+
+
+ +

A simple ADSR envelope generator. + More...

+ +

#include <ADSR.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

ADSR ()
 Constructor.
 
void update ()
 Updates the internal controls of the ADSR. More...
 
unsigned char next ()
 Advances one audio step along the ADSR and returns the level. More...
 
void noteOn ()
 Start the attack phase of the ADSR. More...
 
void noteOff ()
 Start the release phase of the ADSR. More...
 
void setAttackLevel (byte value)
 Set the attack level of the ADSR. More...
 
void setDecayLevel (byte value)
 Set the decay level of the ADSR. More...
 
void setSustainLevel (byte value)
 Set the sustain level of the ADSR. More...
 
void setReleaseLevel (byte value)
 Set the release level of the ADSR. More...
 
+void setIdleLevel (byte value)
 
void setADLevels (byte attack, byte decay)
 Set the attack and decay levels of the ADSR. More...
 
void setLevels (byte attack, byte decay, byte sustain, byte release)
 Set the attack, decay, sustain and release levels. More...
 
void setAttackTime (unsigned int msec)
 Set the attack time of the ADSR in milliseconds. More...
 
void setDecayTime (unsigned int msec)
 Set the decay time of the ADSR in milliseconds. More...
 
void setSustainTime (unsigned int msec)
 Set the sustain time of the ADSR in milliseconds. More...
 
void setReleaseTime (unsigned int msec)
 Set the release time of the ADSR in milliseconds. More...
 
+void setIdleTime (unsigned int msec)
 
void setTimes (unsigned int attack_ms, unsigned int decay_ms, unsigned int sustain_ms, unsigned int release_ms)
 Set the attack, decay and release times of the ADSR in milliseconds. More...
 
void setAttackUpdateSteps (unsigned int steps)
 Set the attack time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the attack phase. More...
 
void setDecayUpdateSteps (unsigned int steps)
 Set the decay time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the decay phase. More...
 
void setSustainUpdateSteps (unsigned int steps)
 Set the sustain time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the sustain phase. More...
 
void setReleaseUpdateSteps (unsigned int steps)
 Set the release time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the release phase. More...
 
+void setIdleUpdateSteps (unsigned int steps)
 
void setAllUpdateSteps (unsigned int attack_steps, unsigned int decay_steps, unsigned int sustain_steps, unsigned int release_steps)
 Set the attack, decay and release times of the ADSR, expressed in update steps (not ADSR::next() interpolation steps). More...
 
bool playing ()
 Tells if the envelope is currently playing. More...
 
+ + + +

+Public Attributes

+bool adsr_playing
 
+

Detailed Description

+

template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+class ADSR< CONTROL_UPDATE_RATE, LERP_RATE >

+ +

A simple ADSR envelope generator.

+

This implementation has separate update() and next() methods, where next() interpolates values between each update(). The "normal" way to use this would be with update() in updateControl(), where it calculates a new internal state each control step, and then next() is in updateAudio(), called much more often, where it interpolates between the control values. This also allows the ADSR updates to be made even more sparsely if desired, eg. every 3rd control update.

Template Parameters
+ + + +
CONTROL_UPDATE_RATEThe frequency of control updates. Ordinarily this will be CONTROL_RATE, but an alternative (amongst others) is to set this as well as the LERP_RATE parameter to AUDIO_RATE, and call both update() and next() in updateAudio(). Such a use would allow accurate envelopes with finer resolution of the control points than CONTROL_RATE.
LERP_RATESets how often next() will be called, to interpolate between updates set by CONTROL_UPDATE_RATE. This will produce the smoothest results if it's set to AUDIO_RATE, but if you need to save processor time and your envelope changes slowly or controls something like a filter where there may not be problems with glitchy or clicking transitions, LERP_RATE could be set to CONTROL_RATE (for instance). Then update() and next() could both be called in updateControl(), greatly reducing the amount of processing required compared to calling next() in updateAudio().
+
+
+ +

Definition at line 46 of file ADSR.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
unsigned char ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::next ()
+
+inline
+
+ +

Advances one audio step along the ADSR and returns the level.

+

Call this in updateAudio().

Returns
the next value, as an unsigned char.
+ +

Definition at line 164 of file ADSR.h.

+ +
+
+ +

§ noteOff()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::noteOff ()
+
+inline
+
+ +

Start the release phase of the ADSR.

+ +

Definition at line 187 of file ADSR.h.

+ +
+
+ +

§ noteOn()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::noteOn ()
+
+inline
+
+ +

Start the attack phase of the ADSR.

+

THis will restart the ADSR no matter what phase it is up to.

+ +

Definition at line 176 of file ADSR.h.

+ +
+
+ +

§ playing()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
bool ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::playing ()
+
+inline
+
+ +

Tells if the envelope is currently playing.

+
Returns
true if playing, false if in IDLE state
+ +

Definition at line 426 of file ADSR.h.

+ +
+
+ +

§ setADLevels()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setADLevels (byte attack,
byte decay 
)
+
+inline
+
+ +

Set the attack and decay levels of the ADSR.

+

This assumes a conventional ADSR where the sustain continues at the same level as the decay, till the release ramps to 0.

Parameters
+ + + +
attackthe new attack level.
decaythe new decay level.
+
+
+ +

Definition at line 248 of file ADSR.h.

+ +
+
+ +

§ setAllUpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setAllUpdateSteps (unsigned int attack_steps,
unsigned int decay_steps,
unsigned int sustain_steps,
unsigned int release_steps 
)
+
+inline
+
+ +

Set the attack, decay and release times of the ADSR, expressed in update steps (not ADSR::next() interpolation steps).

+
Parameters
+ + + + + +
attack_stepsthe number of update steps in the attack phase
decay_stepsthe number of update steps in the decay phase
sustain_stepsthe number of update steps in the sustain phase
release_stepsthe number of update steps in the release phase
+
+
+ +

Definition at line 410 of file ADSR.h.

+ +
+
+ +

§ setAttackLevel()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setAttackLevel (byte value)
+
+inline
+
+ +

Set the attack level of the ADSR.

+
Parameters
+ + +
valuethe attack level.
+
+
+ +

Definition at line 197 of file ADSR.h.

+ +
+
+ +

§ setAttackTime()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setAttackTime (unsigned int msec)
+
+inline
+
+ +

Set the attack time of the ADSR in milliseconds.

+

The actual time taken will be resolved within the resolution of CONTROL_RATE.

Parameters
+ + +
msecthe unsigned int attack time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 282 of file ADSR.h.

+ +
+
+ +

§ setAttackUpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setAttackUpdateSteps (unsigned int steps)
+
+inline
+
+ +

Set the attack time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the attack phase.

+
Parameters
+ + +
stepsthe number of times ADSR::update() will be called in the attack phase.
+
+
+ +

Definition at line 361 of file ADSR.h.

+ +
+
+ +

§ setDecayLevel()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setDecayLevel (byte value)
+
+inline
+
+ +

Set the decay level of the ADSR.

+
Parameters
+ + +
valuethe decay level.
+
+
+ +

Definition at line 208 of file ADSR.h.

+ +
+
+ +

§ setDecayTime()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setDecayTime (unsigned int msec)
+
+inline
+
+ +

Set the decay time of the ADSR in milliseconds.

+

The actual time taken will be resolved within the resolution of CONTROL_RATE.

Parameters
+ + +
msecthe unsigned int decay time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 295 of file ADSR.h.

+ +
+
+ +

§ setDecayUpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setDecayUpdateSteps (unsigned int steps)
+
+inline
+
+ +

Set the decay time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the decay phase.

+
Parameters
+ + +
stepsthe number of times ADSR::update() will be called in the decay phase.
+
+
+ +

Definition at line 371 of file ADSR.h.

+ +
+
+ +

§ setLevels()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setLevels (byte attack,
byte decay,
byte sustain,
byte release 
)
+
+inline
+
+ +

Set the attack, decay, sustain and release levels.

+
Parameters
+ + + + + +
attackthe new attack level.
decaythe new sustain level.
attackthe new sustain level.
decaythe new release level.
+
+
+ +

Definition at line 265 of file ADSR.h.

+ +
+
+ +

§ setReleaseLevel()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setReleaseLevel (byte value)
+
+inline
+
+ +

Set the release level of the ADSR.

+

Normally you'd make this 0, but you have the option of some other value.

Parameters
+ + +
valuethe release level (usually 0).
+
+
+ +

Definition at line 229 of file ADSR.h.

+ +
+
+ +

§ setReleaseTime()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setReleaseTime (unsigned int msec)
+
+inline
+
+ +

Set the release time of the ADSR in milliseconds.

+

The actual time taken will be resolved within the resolution of CONTROL_RATE.

Parameters
+ + +
msecthe unsigned int release time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 323 of file ADSR.h.

+ +
+
+ +

§ setReleaseUpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setReleaseUpdateSteps (unsigned int steps)
+
+inline
+
+ +

Set the release time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the release phase.

+
Parameters
+ + +
stepsthe number of times ADSR::update() will be called in the release phase.
+
+
+ +

Definition at line 391 of file ADSR.h.

+ +
+
+ +

§ setSustainLevel()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setSustainLevel (byte value)
+
+inline
+
+ +

Set the sustain level of the ADSR.

+
Parameters
+ + +
valuethe sustain level. Usually the same as the decay level, for a steady sustained note.
+
+
+ +

Definition at line 219 of file ADSR.h.

+ +
+
+ +

§ setSustainTime()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setSustainTime (unsigned int msec)
+
+inline
+
+ +

Set the sustain time of the ADSR in milliseconds.

+

The actual time taken will be resolved within the resolution of CONTROL_RATE. The sustain phase will finish if the ADSR recieves a noteOff().

Parameters
+ + +
msecthe unsigned int sustain time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 309 of file ADSR.h.

+ +
+
+ +

§ setSustainUpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setSustainUpdateSteps (unsigned int steps)
+
+inline
+
+ +

Set the sustain time of the ADSR, expressed as the number of update steps (not ADSR::next() interpolation steps) in the sustain phase.

+
Parameters
+ + +
stepsthe number of times ADSR::update() will be called in the sustain phase.
+
+
+ +

Definition at line 381 of file ADSR.h.

+ +
+
+ +

§ setTimes()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::setTimes (unsigned int attack_ms,
unsigned int decay_ms,
unsigned int sustain_ms,
unsigned int release_ms 
)
+
+inline
+
+ +

Set the attack, decay and release times of the ADSR in milliseconds.

+

The actual times will be resolved within the resolution of CONTROL_RATE.

Parameters
+ + + + + +
attack_msthe new attack time in milliseconds.
decay_msthe new decay time in milliseconds.
sustain_msthe new sustain time in milliseconds.
release_msthe new release time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 346 of file ADSR.h.

+ +
+
+ +

§ update()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
void ADSR< CONTROL_UPDATE_RATE, LERP_RATE >::update ()
+
+inline
+
+ +

Updates the internal controls of the ADSR.

+

Call this in updateControl().

+ +

Definition at line 131 of file ADSR.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_a_d_s_r.js b/extras/doc/html/class_a_d_s_r.js new file mode 100644 index 000000000..d137a6cf1 --- /dev/null +++ b/extras/doc/html/class_a_d_s_r.js @@ -0,0 +1,29 @@ +var class_a_d_s_r = +[ + [ "ADSR", "class_a_d_s_r.html#a3c0d554daae3502cfecee7f3e6a28dd0", null ], + [ "next", "class_a_d_s_r.html#ab5cc9ada01565729187d65fce113899d", null ], + [ "noteOff", "class_a_d_s_r.html#ab5ec578b60c4eb157312ed9c718eb44b", null ], + [ "noteOn", "class_a_d_s_r.html#a1dd8b667b09fd695eb7957c7b2be666c", null ], + [ "playing", "class_a_d_s_r.html#a7e85542579496e15fca189f33d31f149", null ], + [ "setADLevels", "class_a_d_s_r.html#a5739379144932ae38f408b228d05b7cb", null ], + [ "setAllUpdateSteps", "class_a_d_s_r.html#ab70af348346b644239a36d6a163369cc", null ], + [ "setAttackLevel", "class_a_d_s_r.html#a6e1741d76154cca16b2c8354b5d6db1d", null ], + [ "setAttackTime", "class_a_d_s_r.html#ad5160133723ed85ec89f20bde128f604", null ], + [ "setAttackUpdateSteps", "class_a_d_s_r.html#a12a942278a6a621794b7d34a8edbc7c5", null ], + [ "setDecayLevel", "class_a_d_s_r.html#a6542f4a76a37696245447855d647b41f", null ], + [ "setDecayTime", "class_a_d_s_r.html#a3b8c6492ad9a379dc0c6749677ba4d29", null ], + [ "setDecayUpdateSteps", "class_a_d_s_r.html#a7fdc36f6648a058e0197ccaf2f5acdbd", null ], + [ "setIdleLevel", "class_a_d_s_r.html#a7269a6fe1f974b08a9eccc3131a86d91", null ], + [ "setIdleTime", "class_a_d_s_r.html#a0392ff30325a93ca0772b7ece6aef18a", null ], + [ "setIdleUpdateSteps", "class_a_d_s_r.html#a75f1b593d9825049c96b21cca1e75173", null ], + [ "setLevels", "class_a_d_s_r.html#ae6a213e9c236eb3b47e941384693e75d", null ], + [ "setReleaseLevel", "class_a_d_s_r.html#a2651482b2f666e224cf8ce82f4146213", null ], + [ "setReleaseTime", "class_a_d_s_r.html#a2333aa55547ec8c690e632265cd4f1c4", null ], + [ "setReleaseUpdateSteps", "class_a_d_s_r.html#a21eda3f27fbfc71d12ca89f54f89adaf", null ], + [ "setSustainLevel", "class_a_d_s_r.html#a4e54b94f8adf1555996c0aa254d3245b", null ], + [ "setSustainTime", "class_a_d_s_r.html#abd93d77bf049b8151eeb735685b0e8d7", null ], + [ "setSustainUpdateSteps", "class_a_d_s_r.html#aac492e771fd8e653d4ce70f519fb9382", null ], + [ "setTimes", "class_a_d_s_r.html#a68df2fe03f1582d79e7b55e3407d474b", null ], + [ "update", "class_a_d_s_r.html#a764566274a3982b43cb1f9fb47ca06ae", null ], + [ "adsr_playing", "class_a_d_s_r.html#ad7d5a1d98b7caf2cec77adb6e1ffed3a", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_audio_delay-members.html b/extras/doc/html/class_audio_delay-members.html new file mode 100644 index 000000000..14956094c --- /dev/null +++ b/extras/doc/html/class_audio_delay-members.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AudioDelay< NUM_BUFFER_SAMPLES, T > Member List
+
+
+ +

This is the complete list of members for AudioDelay< NUM_BUFFER_SAMPLES, T >, including all inherited members.

+ + + + + + + +
AudioDelay()AudioDelay< NUM_BUFFER_SAMPLES, T >inline
AudioDelay(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
next(T in_value, unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
next(T in_value)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
read(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
set(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
+
+ + + + diff --git a/extras/doc/html/class_audio_delay.html b/extras/doc/html/class_audio_delay.html new file mode 100644 index 000000000..ffa878683 --- /dev/null +++ b/extras/doc/html/class_audio_delay.html @@ -0,0 +1,370 @@ + + + + + + + +Mozzi: AudioDelay< NUM_BUFFER_SAMPLES, T > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
AudioDelay< NUM_BUFFER_SAMPLES, T > Class Template Reference
+
+
+ +

Audio delay line for comb filter, flange, chorus and short echo effects. + More...

+ +

#include <AudioDelay.h>

+
+ + Inheritance diagram for AudioDelay< NUM_BUFFER_SAMPLES, T >:
+
+
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

AudioDelay ()
 Constructor.
 
 AudioDelay (unsigned int delaytime_cells)
 Constructor. More...
 
next (T in_value, unsigned int delaytime_cells)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
next (T in_value)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
void set (unsigned int delaytime_cells)
 Set the delay time, measured in cells. More...
 
read (unsigned int delaytime_cells)
 Retrieve the signal in the delay line at the position delaytime_cells. More...
 
+

Detailed Description

+

template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+class AudioDelay< NUM_BUFFER_SAMPLES, T >

+ +

Audio delay line for comb filter, flange, chorus and short echo effects.

+
Template Parameters
+ + + +
NUM_BUFFER_SAMPLESis the length of the delay buffer in samples. This should be a power of two. The largest delay you'll fit in an atmega328 will be 512 cells, which at 16384 Hz sample rate is 31 milliseconds. More of a flanger or a doubler than an echo. The amount of memory available for delays on other chips will vary. AudioDelay() doesn't have feedback. If you want feedback, use AudioDelayFeedback().
thetype of numbers to use for the signal in the delay. The default is int8_t, but int could be useful when adding manual feedback. When using int, the input should be limited to 15 bits width, ie. -16384 to 16383.
+
+
+ +

Definition at line 27 of file AudioDelay.h.

+

Constructor & Destructor Documentation

+ +

§ AudioDelay()

+ +
+
+
+template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+ + + + + +
+ + + + + + + + +
AudioDelay< NUM_BUFFER_SAMPLES, T >::AudioDelay (unsigned int delaytime_cells)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + +
delaytime_cellsdelay time expressed in cells. For example, 128 cells delay at AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * AUDIO_RATE.
+
+
+ +

Definition at line 49 of file AudioDelay.h.

+ +
+
+

Member Function Documentation

+ +

§ next() [1/2]

+ +
+
+
+template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T AudioDelay< NUM_BUFFER_SAMPLES, T >::next (in_value,
unsigned int delaytime_cells 
)
+
+inline
+
+ +

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

+
Parameters
+ + + +
in_valuethe signal input.
delaytime_cellssets the delay time in terms of cells in the delay buffer.
+
+
+ +

Definition at line 59 of file AudioDelay.h.

+ +
+
+ +

§ next() [2/2]

+ +
+
+
+template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+ + + + + +
+ + + + + + + + +
T AudioDelay< NUM_BUFFER_SAMPLES, T >::next (in_value)
+
+inline
+
+ +

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

+
Parameters
+ + +
in_valuethe signal input.
+
+
+ +

Definition at line 77 of file AudioDelay.h.

+ +
+
+ +

§ read()

+ +
+
+
+template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+ + + + + +
+ + + + + + + + +
T AudioDelay< NUM_BUFFER_SAMPLES, T >::read (unsigned int delaytime_cells)
+
+inline
+
+ +

Retrieve the signal in the delay line at the position delaytime_cells.

+

It doesn't change the stored internal value of _delaytime_cells.

Parameters
+ + +
delaytime_cellsindicates the delay time in terms of cells in the delay buffer.
+
+
+ +

Definition at line 104 of file AudioDelay.h.

+ +
+
+ +

§ set()

+ +
+
+
+template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+ + + + + +
+ + + + + + + + +
void AudioDelay< NUM_BUFFER_SAMPLES, T >::set (unsigned int delaytime_cells)
+
+inline
+
+ +

Set the delay time, measured in cells.

+
Parameters
+ + +
delaytime_cellshow many cells to delay the input signal by.
+
+
+ +

Definition at line 94 of file AudioDelay.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_audio_delay.js b/extras/doc/html/class_audio_delay.js new file mode 100644 index 000000000..2b6961974 --- /dev/null +++ b/extras/doc/html/class_audio_delay.js @@ -0,0 +1,9 @@ +var class_audio_delay = +[ + [ "AudioDelay", "class_audio_delay.html#a688f69088f96bf3976a8555d3026365f", null ], + [ "AudioDelay", "class_audio_delay.html#a79be253fcb5709624c8fb708e54f069f", null ], + [ "next", "class_audio_delay.html#a19258636609d83a2bab11849e17b5294", null ], + [ "next", "class_audio_delay.html#a41c09b5cc9e817d8eaf111b0f74c9a0b", null ], + [ "read", "class_audio_delay.html#a26b409fbfc322ae527ba23680c56e3a9", null ], + [ "set", "class_audio_delay.html#a7bd0a07f7803afda1a71b50e3f66827b", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_audio_delay.png b/extras/doc/html/class_audio_delay.png new file mode 100644 index 0000000000000000000000000000000000000000..bfa73443e63d1c05d82db421902ada8843dbe25e GIT binary patch literal 1042 zcmeAS@N?(olHy`uVBq!ia0y~yU=#+j12~vLB4-l+04a$8pAgso|NjG-@87*!Fk|`z zAPbBS95|4n@;VsE-Wr~8Yv72DQo z$?v(ldsjbyT~+Lg>xoAJS@nH)j4TJ8dYO{82b>!|eT% zrq$mLd+j+`{5b2;LxUfNldWI8U3Jg!_PQ%|KUiC~{j8D}?*4A6=8)lU)VcchpLds! zT&=YKb6IC+`X=ePw4i4zHcorbIeCY0vj|&O^^qm$-D6F=)O6cw6Dj}iG z$wn*HZAJC9xlEl zBXIhSxxq}{Y#aX>HY+xME>0@;dF>foFsJkCWXGGIW%p0;oP2Ki44JEwE7tbBpF3gB z$9s}IFO7z+K*labPYs8hlPn8Dg^;yCby9(<6_{Kad%gd{^;yLW_63VJx%N9E*H zBrG~ZXM4ZOOsUgrfB%iz@-2Cn{eJhO%X@eI*3N&^_Rx5j-d!V4=|_M6UwUubb1i1( zo#aU(w;DW??b4ET>JIUi%`SI4JMZs?_v_yV+M2IZlUsIBTy0z7Z6E26wU?asz4N-; z^T9hPBYIDMve2`NX`M?h%u6YXKk}?Nx^S!6OM$p9pHq{n)pkEjRZH#LCH=JekjlFw z3a#@K9=*0ndDQkypd~OFGYN{cMX?mD*`?EtQ&+ zgFUw0wf6lu{qVV#O4Z5sMP4c|1Fk>oQ~6t~D(qQ=jPK4^^Lp2^N6+P_q+1%!ydb(B Qn1LBQUHx3vIVCg!00|7rvH$=8 literal 0 HcmV?d00001 diff --git a/extras/doc/html/class_audio_delay_feedback-members.html b/extras/doc/html/class_audio_delay_feedback-members.html new file mode 100644 index 000000000..7792d8dbd --- /dev/null +++ b/extras/doc/html/class_audio_delay_feedback-members.html @@ -0,0 +1,128 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE > Member List
+
+
+ +

This is the complete list of members for AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >, including all inherited members.

+ + + + + + + + + + + + + + + + +
AudioDelayFeedback()AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
AudioDelayFeedback(uint16_t delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
AudioDelayFeedback(uint16_t delaytime_cells, int8_t feedback_level)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
next(int8_t input)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
next(int8_t input, uint16_t delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
next(int8_t input, Q16n16 delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
read(Q16n16 delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
read()AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
setDelayTimeCells(uint16_t delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
setDelayTimeCells(Q16n16 delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
setDelayTimeCells(float delaytime_cells)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
setFeedbackLevel(int8_t feedback_level)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
write(int8_t input)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
write(int8_t input, uint16_t offset)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
writeFeedback(int8_t input)AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >inline
+
+ + + + diff --git a/extras/doc/html/class_audio_delay_feedback.html b/extras/doc/html/class_audio_delay_feedback.html new file mode 100644 index 000000000..93f40958e --- /dev/null +++ b/extras/doc/html/class_audio_delay_feedback.html @@ -0,0 +1,757 @@ + + + + + + + +Mozzi: AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE > Class Template Reference
+
+
+ +

Audio delay line with feedback for comb filter, flange, chorus and short echo effects. + More...

+ +

#include <AudioDelayFeedback.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

AudioDelayFeedback ()
 Constructor.
 
 AudioDelayFeedback (uint16_t delaytime_cells)
 Constructor. More...
 
 AudioDelayFeedback (uint16_t delaytime_cells, int8_t feedback_level)
 Constructor. More...
 
int16_t next (int8_t input)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
int16_t next (int8_t input, uint16_t delaytime_cells)
 Input a value to the delay, retrieve the signal in the delay line at the position delaytime_cells, and add feedback from the output to the input. More...
 
int16_t next (int8_t input, Q16n16 delaytime_cells)
 Input a value to the delay, retrieve the signal in the delay line at the interpolated fractional position delaytime_cells, and add feedback from the output to the input. More...
 
void write (int8_t input)
 Input a value to the delay but don't change the delay time or retrieve the output signal. More...
 
void writeFeedback (int8_t input)
 Input a value to the delay but don't advance the write position, change the delay time or retrieve the output signal. More...
 
void write (int8_t input, uint16_t offset)
 Input a value to the delay at an offset from the current write position. More...
 
int16_t read (Q16n16 delaytime_cells)
 Retrieve the signal in the delay line at the interpolated fractional position delaytime_cells. More...
 
int16_t read ()
 Retrieve the signal in the delay line at the current stored delaytime_cells. More...
 
void setDelayTimeCells (uint16_t delaytime_cells)
 Set delay time expressed in samples. More...
 
void setDelayTimeCells (Q16n16 delaytime_cells)
 Set delay time expressed in samples, fractional Q16n16 for an interpolating delay. More...
 
void setDelayTimeCells (float delaytime_cells)
 Set delay time expressed in samples, fractional float for an interpolating delay. More...
 
void setFeedbackLevel (int8_t feedback_level)
 Set the feedback gain. More...
 
+

Detailed Description

+

template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+class AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >

+ +

Audio delay line with feedback for comb filter, flange, chorus and short echo effects.

+
Template Parameters
+ + + +
NUM_BUFFER_SAMPLESis the length of the delay buffer in samples, and should be a power of two. The maximum delay length which will fit in an atmega328 is half that of a plain AudioDelay object, in this case 256 cells, or about 15 milliseconds. AudioDelayFeedback uses int16_t sized cells to accomodate the higher amplitude of direct input to the delay as well as the feedback, without losing precision. Output is only the delay line signal. If you want to mix the delay with the input, do it in your sketch. AudioDelayFeedback uses more processing and memory than a plain AudioDelay, but allows for more dramatic effects with feedback.
INTERP_TYPEa choice of LINEAR (default) or ALLPASS interpolation. LINEAR is better for sweeping delay times, ALLPASS may be better for reverb-like effects.
+
+
+ +

Definition at line 40 of file AudioDelayFeedback.h.

+

Constructor & Destructor Documentation

+ +

§ AudioDelayFeedback() [1/2]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + +
AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::AudioDelayFeedback (uint16_t delaytime_cells)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + +
delaytime_cellsdelay time expressed in cells. For example, 128 cells delay at AUDIO_RATE 16384 would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * AUDIO_RATE.
+
+
+ +

Definition at line 55 of file AudioDelayFeedback.h.

+ +
+
+ +

§ AudioDelayFeedback() [2/2]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::AudioDelayFeedback (uint16_t delaytime_cells,
int8_t feedback_level 
)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + + +
delaytime_cellsdelay time expressed in cells. For example, 128 cells delay at AUDIO_RATE 16384 would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * AUDIO_RATE.
feedback_levelis the feedback level from -128 to 127 (representing -1 to 1).
+
+
+ +

Definition at line 65 of file AudioDelayFeedback.h.

+ +
+
+

Member Function Documentation

+ +

§ next() [1/3]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + +
int16_t AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::next (int8_t input)
+
+inline
+
+ +

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

+
Parameters
+ + +
inputthe signal input.
+
+
+
Note
slower than next(int8_t input, uint16_t delaytime_cells)
+ +

Definition at line 75 of file AudioDelayFeedback.h.

+ +
+
+ +

§ next() [2/3]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int16_t AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::next (int8_t input,
uint16_t delaytime_cells 
)
+
+inline
+
+ +

Input a value to the delay, retrieve the signal in the delay line at the position delaytime_cells, and add feedback from the output to the input.

+
Parameters
+ + + +
inputthe signal input.
delaytime_cellsindicates the delay time in terms of cells in the delay buffer. It doesn't change the stored internal value of _delaytime_cells.
+
+
+
Note
Timing: 4us
+ +

Definition at line 92 of file AudioDelayFeedback.h.

+ +
+
+ +

§ next() [3/3]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
int16_t AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::next (int8_t input,
Q16n16 delaytime_cells 
)
+
+inline
+
+ +

Input a value to the delay, retrieve the signal in the delay line at the interpolated fractional position delaytime_cells, and add feedback from the output to the input.

+
Parameters
+ + + +
inputthe signal input.
delaytime_cellsis a fractional number to set the delay time in terms of cells or partial cells in the delay buffer. It doesn't change the stored internal value of _delaytime_cells.
+
+
+ +

Definition at line 117 of file AudioDelayFeedback.h.

+ +
+
+ +

§ read() [1/2]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + +
int16_t AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::read (Q16n16 delaytime_cells)
+
+inline
+
+ +

Retrieve the signal in the delay line at the interpolated fractional position delaytime_cells.

+

It doesn't change the stored internal value of _delaytime_cells or feedback the output to the input.

Parameters
+ + +
delaytime_cellsindicates the delay time in terms of cells in the delay buffer.
+
+
+ +

Definition at line 186 of file AudioDelayFeedback.h.

+ +
+
+ +

§ read() [2/2]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + +
int16_t AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::read ()
+
+inline
+
+ +

Retrieve the signal in the delay line at the current stored delaytime_cells.

+

It doesn't change the stored internal value of _delaytime_cells or feedback the output to the input.

+ +

Definition at line 196 of file AudioDelayFeedback.h.

+ +
+
+ +

§ setDelayTimeCells() [1/3]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + +
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::setDelayTimeCells (uint16_t delaytime_cells)
+
+inline
+
+ +

Set delay time expressed in samples.

+
Parameters
+ + +
delaytime_cellsdelay time expressed in cells, with each cell played per tick of AUDIO_RATE. For example, 128 cells delay at AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * AUDIO_RATE.
+
+
+ +

Definition at line 208 of file AudioDelayFeedback.h.

+ +
+
+ +

§ setDelayTimeCells() [2/3]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + +
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::setDelayTimeCells (Q16n16 delaytime_cells)
+
+inline
+
+ +

Set delay time expressed in samples, fractional Q16n16 for an interpolating delay.

+
Parameters
+ + +
delaytime_cellsdelay time expressed in cells, with each cell played per tick of AUDIO_RATE. For example, 128 cells delay at AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * AUDIO_RATE.
+
+
+ +

Definition at line 220 of file AudioDelayFeedback.h.

+ +
+
+ +

§ setDelayTimeCells() [3/3]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + +
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::setDelayTimeCells (float delaytime_cells)
+
+inline
+
+ +

Set delay time expressed in samples, fractional float for an interpolating delay.

+
Parameters
+ + +
delaytime_cellsdelay time expressed in cells, with each cell played per tick of AUDIO_RATE. For example, 128 cells delay at AUDIO_RATE would produce a time delay of 128/16384 = 0.0078125 s = 7.8 ms Put another way, num_cells = delay_seconds * AUDIO_RATE.
+
+
+ +

Definition at line 232 of file AudioDelayFeedback.h.

+ +
+
+ +

§ setFeedbackLevel()

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + +
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::setFeedbackLevel (int8_t feedback_level)
+
+inline
+
+ +

Set the feedback gain.

+
Parameters
+ + +
feedback_levelis the feedback level from -128 to 127 (representing -1 to 1).
+
+
+ +

Definition at line 242 of file AudioDelayFeedback.h.

+ +
+
+ +

§ write() [1/2]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + +
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::write (int8_t input)
+
+inline
+
+ +

Input a value to the delay but don't change the delay time or retrieve the output signal.

+
Parameters
+ + +
inputthe signal input.
+
+
+ +

Definition at line 150 of file AudioDelayFeedback.h.

+ +
+
+ +

§ write() [2/2]

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::write (int8_t input,
uint16_t offset 
)
+
+inline
+
+ +

Input a value to the delay at an offset from the current write position.

+

Don't advance the main write position or change the stored delay time or retrieve the output signal.

Parameters
+ + + +
inputthe signal input.
offsetthe number of cells behind the ordinary write position where the input will be written.
+
+
+ +

Definition at line 174 of file AudioDelayFeedback.h.

+ +
+
+ +

§ writeFeedback()

+ +
+
+
+template<uint16_t NUM_BUFFER_SAMPLES, int8_t INTERP_TYPE = LINEAR>
+ + + + + +
+ + + + + + + + +
void AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >::writeFeedback (int8_t input)
+
+inline
+
+ +

Input a value to the delay but don't advance the write position, change the delay time or retrieve the output signal.

+

This can be useful for manually adding feedback to the delay line, "behind" the advancing write head.

Parameters
+ + +
inputthe signal input.
+
+
+ +

Definition at line 162 of file AudioDelayFeedback.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_audio_delay_feedback.js b/extras/doc/html/class_audio_delay_feedback.js new file mode 100644 index 000000000..9e1fc1e7a --- /dev/null +++ b/extras/doc/html/class_audio_delay_feedback.js @@ -0,0 +1,18 @@ +var class_audio_delay_feedback = +[ + [ "AudioDelayFeedback", "class_audio_delay_feedback.html#a6e6352413ac4ee9b2bc03684b072fdc7", null ], + [ "AudioDelayFeedback", "class_audio_delay_feedback.html#a7d038aff13126acbca484b74b1ee5620", null ], + [ "AudioDelayFeedback", "class_audio_delay_feedback.html#a54d7f001d6a99bd3955fb7dab94fbfe8", null ], + [ "next", "class_audio_delay_feedback.html#a5a702d1a0a9b104beb0b18c80422500e", null ], + [ "next", "class_audio_delay_feedback.html#a7c7745dd84f01dbdc9b6552a4c427f0b", null ], + [ "next", "class_audio_delay_feedback.html#af9cc2cf135fa0f1a1f0d50ca7d9f89ea", null ], + [ "read", "class_audio_delay_feedback.html#a77508ec1d8da719edbc7c34173c9d7cb", null ], + [ "read", "class_audio_delay_feedback.html#a8b6cefa45ecaa174320effe25b9ce6c5", null ], + [ "setDelayTimeCells", "class_audio_delay_feedback.html#abcf71a86083db5a48ef71c1397247886", null ], + [ "setDelayTimeCells", "class_audio_delay_feedback.html#a8e8344af6962ea061da8f70ed119b2bd", null ], + [ "setDelayTimeCells", "class_audio_delay_feedback.html#a7c54b49ae9f25baaf8714528295c53e2", null ], + [ "setFeedbackLevel", "class_audio_delay_feedback.html#a2cd87a7dc91187ed439a8ec1d7e00d29", null ], + [ "write", "class_audio_delay_feedback.html#aa3232fec9e7f90169e8d8eab85f39394", null ], + [ "write", "class_audio_delay_feedback.html#aeeec669071403fc0a294724e775e3812", null ], + [ "writeFeedback", "class_audio_delay_feedback.html#a27e773a0ae0c2cee895fbcf18c1351e1", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_auto_map-members.html b/extras/doc/html/class_auto_map-members.html new file mode 100644 index 000000000..3668f9466 --- /dev/null +++ b/extras/doc/html/class_auto_map-members.html @@ -0,0 +1,120 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AutoMap Member List
+
+
+ +

This is the complete list of members for AutoMap, including all inherited members.

+ + + + + + + + +
AutoMap(int min_expected, int max_expected, int map_to_min, int map_to_max)AutoMapinline
AutoRange(int min_expected, int max_expected)AutoRange< int >inline
getMax()AutoRange< int >inline
getMin()AutoRange< int >inline
getRange()AutoRange< int >inline
next(int n)AutoMapinline
operator()(int n)AutoMapinline
+
+ + + + diff --git a/extras/doc/html/class_auto_map.html b/extras/doc/html/class_auto_map.html new file mode 100644 index 000000000..52738f0cc --- /dev/null +++ b/extras/doc/html/class_auto_map.html @@ -0,0 +1,381 @@ + + + + + + + +Mozzi: AutoMap Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
AutoMap Class Reference
+
+
+ +

Automatically map an input value to an output range without knowing the precise range of inputs beforehand. + More...

+ +

#include <AutoMap.h>

+
+ + Inheritance diagram for AutoMap:
+
+
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 AutoMap (int min_expected, int max_expected, int map_to_min, int map_to_max)
 Constructor. More...
 
int next (int n)
 Process the next value and return it mapped to the range which was set in the constructor. More...
 
int operator() (int n)
 Process the next value and return it mapped to the range which was set in the constructor. More...
 
int getMin ()
 Returns the current minimum. More...
 
int getMax ()
 Returns the current maximum. More...
 
int getRange ()
 Returns the current range. More...
 
+

Detailed Description

+

Automatically map an input value to an output range without knowing the precise range of inputs beforehand.

+ +

Definition at line 28 of file AutoMap.h.

+

Constructor & Destructor Documentation

+ +

§ AutoMap()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
AutoMap::AutoMap (int min_expected,
int max_expected,
int map_to_min,
int map_to_max 
)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + + +
min_expectedthe minimum possible input value.
max_expectedthe maximum possible input value.
+
+
+ +

Definition at line 35 of file AutoMap.h.

+ +
+
+

Member Function Documentation

+ +

§ getMax()

+ +
+
+ + + + + +
+ + + + + + + +
int AutoRange< int >::getMax ()
+
+inlineinherited
+
+ +

Returns the current maximum.

+
Returns
maximum
+ +

Definition at line 57 of file AutoRange.h.

+ +
+
+ +

§ getMin()

+ +
+
+ + + + + +
+ + + + + + + +
int AutoRange< int >::getMin ()
+
+inlineinherited
+
+ +

Returns the current minimum.

+
Returns
minimum
+ +

Definition at line 49 of file AutoRange.h.

+ +
+
+ +

§ getRange()

+ +
+
+ + + + + +
+ + + + + + + +
int AutoRange< int >::getRange ()
+
+inlineinherited
+
+ +

Returns the current range.

+
Returns
range
+ +

Definition at line 65 of file AutoRange.h.

+ +
+
+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + + +
int AutoMap::next (int n)
+
+inline
+
+ +

Process the next value and return it mapped to the range which was set in the constructor.

+

Can use the operator instead if you prefer, eg. myMap(n) instead of myMap.next(n).

Parameters
+ + +
nthe next value to process.
+
+
+
Returns
the input value mapped to the range which was set in the constructor.
+ +

Definition at line 47 of file AutoMap.h.

+ +
+
+ +

§ operator()()

+ +
+
+ + + + + +
+ + + + + + + + +
int AutoMap::operator() (int n)
+
+inline
+
+ +

Process the next value and return it mapped to the range which was set in the constructor.

+

This is an alternative to next() if you prefer, eg. myMap(n) instead of myMap.next(n).

Parameters
+ + +
nthe next value to process.
+
+
+
Returns
the input value mapped to the range which was set in the constructor.
+ +

Definition at line 58 of file AutoMap.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_auto_map.js b/extras/doc/html/class_auto_map.js new file mode 100644 index 000000000..049ba821d --- /dev/null +++ b/extras/doc/html/class_auto_map.js @@ -0,0 +1,9 @@ +var class_auto_map = +[ + [ "AutoMap", "class_auto_map.html#aec125f071bd83180ff0d0a71446725f3", null ], + [ "getMax", "class_auto_map.html#a4d27e5fe43f9b376b537def88ac74119", null ], + [ "getMin", "class_auto_map.html#acd1dae6e6ffb288efc1618e2453ad5ef", null ], + [ "getRange", "class_auto_map.html#a75c842b27ad3917be6d29e3d35b485f3", null ], + [ "next", "class_auto_map.html#a34bc821f4f662e54383dd9d61db782df", null ], + [ "operator()", "class_auto_map.html#afd49885d3f05ca0a2f417199a9e7cf10", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_auto_map.png b/extras/doc/html/class_auto_map.png new file mode 100644 index 0000000000000000000000000000000000000000..6b3c3880e552e8c31e240b14183ce1e1591ed66c GIT binary patch literal 507 zcmVrfbN~Oz)gwZ%dWSZ{b=q`X1;i|goP8zdoF_sS5t&B#L`3}fq%YYU zt&`S25s^X6lOiHL#+SPLyQi)Quld%~(p*z2d9_jPmTZ@E8{ApSoTIWd-xgXa$9A#Z zdQ)4PMh)K0>2Hns%=_zCVSFa!Zl%4^_%!Tcep*43QMZ_`a7VsstUfKuKs^sbUe3?@ zO!;5=UcA54#eDba#yi=cx+&l8&$=KHvB!_TFE@Uaw|%XUA|k`w&+pntF8&{hi1_ml zd^zVl4}d#7046fo_jt?|PWCOjslwU5Kfgc22jEEf0Q?9afFI!l@FRQxeuNLekMIHb z5k7zeQc7teB!Fpz55SM#=<8;*&epoL-~nGh#rR57F8~9K`_|LaT*E(4oli&J%isG- zph`K)MICKKn*b;H_;lVj4d8?U-}5VU=rhTcIy?CECB62w5m%q)u#4{d{;F?{w#Bps x-s<@b<*+{i1{nwyJ^(+$2jIsCd?}?gk1u2Q7nrOhx^(~m002ovPDHLkV1jgr@Kyi- literal 0 HcmV?d00001 diff --git a/extras/doc/html/class_auto_range-members.html b/extras/doc/html/class_auto_range-members.html new file mode 100644 index 000000000..f004df19d --- /dev/null +++ b/extras/doc/html/class_auto_range-members.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
AutoRange< T > Member List
+
+
+ +

This is the complete list of members for AutoRange< T >, including all inherited members.

+ + + + + + +
AutoRange(T min_expected, T max_expected)AutoRange< T >inline
getMax()AutoRange< T >inline
getMin()AutoRange< T >inline
getRange()AutoRange< T >inline
next(T n)AutoRange< T >inline
+
+ + + + diff --git a/extras/doc/html/class_auto_range.html b/extras/doc/html/class_auto_range.html new file mode 100644 index 000000000..869c68108 --- /dev/null +++ b/extras/doc/html/class_auto_range.html @@ -0,0 +1,336 @@ + + + + + + + +Mozzi: AutoRange< T > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
AutoRange< T > Class Template Reference
+
+
+ +

Keeps a running calculation of the range of the input values it receives. + More...

+ +

#include <AutoRange.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 AutoRange (T min_expected, T max_expected)
 Constructor. More...
 
void next (T n)
 Updates the current range. More...
 
getMin ()
 Returns the current minimum. More...
 
getMax ()
 Returns the current maximum. More...
 
getRange ()
 Returns the current range. More...
 
+

Detailed Description

+

template<class T>
+class AutoRange< T >

+ +

Keeps a running calculation of the range of the input values it receives.

+ +

Definition at line 18 of file AutoRange.h.

+

Constructor & Destructor Documentation

+ +

§ AutoRange()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
AutoRange< T >::AutoRange (min_expected,
max_expected 
)
+
+inline
+
+ +

Constructor.

+
Template Parameters
+ + +
Tthe type of numbers to to use, eg. int, unsigned int, float etc.
+
+
+
Parameters
+ + + +
min_expectedthe minimum possible input value.
max_expectedthe maximum possible input value.
+
+
+ +

Definition at line 27 of file AutoRange.h.

+ +
+
+

Member Function Documentation

+ +

§ getMax()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
T AutoRange< T >::getMax ()
+
+inline
+
+ +

Returns the current maximum.

+
Returns
maximum
+ +

Definition at line 57 of file AutoRange.h.

+ +
+
+ +

§ getMin()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
T AutoRange< T >::getMin ()
+
+inline
+
+ +

Returns the current minimum.

+
Returns
minimum
+ +

Definition at line 49 of file AutoRange.h.

+ +
+
+ +

§ getRange()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
T AutoRange< T >::getRange ()
+
+inline
+
+ +

Returns the current range.

+
Returns
range
+ +

Definition at line 65 of file AutoRange.h.

+ +
+
+ +

§ next()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
void AutoRange< T >::next (n)
+
+inline
+
+ +

Updates the current range.

+
Parameters
+ + +
nthe next value to include in the range calculation.
+
+
+ +

Definition at line 34 of file AutoRange.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_auto_range.js b/extras/doc/html/class_auto_range.js new file mode 100644 index 000000000..6cd985d01 --- /dev/null +++ b/extras/doc/html/class_auto_range.js @@ -0,0 +1,8 @@ +var class_auto_range = +[ + [ "AutoRange", "class_auto_range.html#a2f0638f4d8e2937080b67fc0614c8d6d", null ], + [ "getMax", "class_auto_range.html#a4d27e5fe43f9b376b537def88ac74119", null ], + [ "getMin", "class_auto_range.html#acd1dae6e6ffb288efc1618e2453ad5ef", null ], + [ "getRange", "class_auto_range.html#a75c842b27ad3917be6d29e3d35b485f3", null ], + [ "next", "class_auto_range.html#a788fca4c9f1e6699eb1990582015c0e3", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_cap_poll-members.html b/extras/doc/html/class_cap_poll-members.html new file mode 100644 index 000000000..fb0e9d8a7 --- /dev/null +++ b/extras/doc/html/class_cap_poll-members.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
CapPoll< SENSOR_PIN, SEND_PIN > Member List
+
+
+ +

This is the complete list of members for CapPoll< SENSOR_PIN, SEND_PIN >, including all inherited members.

+ + + +
CapPoll()CapPoll< SENSOR_PIN, SEND_PIN >inline
next()CapPoll< SENSOR_PIN, SEND_PIN >inline
+
+ + + + diff --git a/extras/doc/html/class_cap_poll.html b/extras/doc/html/class_cap_poll.html new file mode 100644 index 000000000..ba5a85ce6 --- /dev/null +++ b/extras/doc/html/class_cap_poll.html @@ -0,0 +1,171 @@ + + + + + + + +Mozzi: CapPoll< SENSOR_PIN, SEND_PIN > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
CapPoll< SENSOR_PIN, SEND_PIN > Class Template Reference
+
+
+ +

A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime. + More...

+ +

#include <CapPoll.h>

+ + + + + + + + +

+Public Member Functions

CapPoll ()
 Constructor.
 
unsigned int next ()
 Checks whether the capacitor has charged, and returns how long it took for the most recent charge. More...
 
+

Detailed Description

+

template<unsigned char SENSOR_PIN, unsigned char SEND_PIN>
+class CapPoll< SENSOR_PIN, SEND_PIN >

+ +

A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime.

+

This is designed to be used in updateControl(). Each time it is called, it checks if a capacitor has charged, and returns an output reflecting how long it took for the most recent charge.

+ +

Definition at line 12 of file CapPoll.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<unsigned char SENSOR_PIN, unsigned char SEND_PIN>
+ + + + + +
+ + + + + + + +
unsigned int CapPoll< SENSOR_PIN, SEND_PIN >::next ()
+
+inline
+
+ +

Checks whether the capacitor has charged, and returns how long it took for the most recent charge.

+

This would preferably be called in updateControl(), but if the resolution isn't fine enough or the pin charges too fast for updateControl() to catch, try it in updateAudio().

Returns
the sensor value, reflected in how many checking cycles it took to charge the capacitor.
+ +

Definition at line 29 of file CapPoll.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_cap_poll.js b/extras/doc/html/class_cap_poll.js new file mode 100644 index 000000000..d99340056 --- /dev/null +++ b/extras/doc/html/class_cap_poll.js @@ -0,0 +1,5 @@ +var class_cap_poll = +[ + [ "CapPoll", "class_cap_poll.html#a4f691e78391a306d9ee89cdb1026096f", null ], + [ "next", "class_cap_poll.html#a894e8abbabff197f4d17106455fef718", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_circular_buffer-members.html b/extras/doc/html/class_circular_buffer-members.html new file mode 100644 index 000000000..e3d74fe1a --- /dev/null +++ b/extras/doc/html/class_circular_buffer-members.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
CircularBuffer< ITEM_TYPE > Member List
+
+
+ +

This is the complete list of members for CircularBuffer< ITEM_TYPE >, including all inherited members.

+ + + + + + + +
CircularBuffer()CircularBuffer< ITEM_TYPE >inline
count() (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
isEmpty() (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
isFull() (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
read() (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
write(ITEM_TYPE in) (defined in CircularBuffer< ITEM_TYPE >)CircularBuffer< ITEM_TYPE >inline
+
+ + + + diff --git a/extras/doc/html/class_circular_buffer.html b/extras/doc/html/class_circular_buffer.html new file mode 100644 index 000000000..4e5d1e867 --- /dev/null +++ b/extras/doc/html/class_circular_buffer.html @@ -0,0 +1,155 @@ + + + + + + + +Mozzi: CircularBuffer< ITEM_TYPE > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
CircularBuffer< ITEM_TYPE > Class Template Reference
+
+
+ +

Circular buffer object. + More...

+ +

#include <CircularBuffer.h>

+ + + + + + + + + + + + + + + +

+Public Member Functions

CircularBuffer ()
 Constructor.
 
+bool isFull ()
 
+bool isEmpty ()
 
+void write (ITEM_TYPE in)
 
+ITEM_TYPE read ()
 
+unsigned long count ()
 
+

Detailed Description

+

template<class ITEM_TYPE>
+class CircularBuffer< ITEM_TYPE >

+ +

Circular buffer object.

+

Has a fixed number of cells, set to 256.

Template Parameters
+ + +
ITEM_TYPEthe kind of data to store, eg. int, int8_t etc.
+
+
+ +

Definition at line 12 of file CircularBuffer.h.

+
+
+ + + + diff --git a/extras/doc/html/class_circular_buffer.js b/extras/doc/html/class_circular_buffer.js new file mode 100644 index 000000000..a32b7b4b6 --- /dev/null +++ b/extras/doc/html/class_circular_buffer.js @@ -0,0 +1,9 @@ +var class_circular_buffer = +[ + [ "CircularBuffer", "class_circular_buffer.html#a6789c0d6d73594fdd412a39445b5cd67", null ], + [ "count", "class_circular_buffer.html#a04c3ee378688439c72760034e314eed3", null ], + [ "isEmpty", "class_circular_buffer.html#ad0fa3e6277c9ab56d8bfc190b4271d41", null ], + [ "isFull", "class_circular_buffer.html#a023321c0416562f30532d5c4848c383b", null ], + [ "read", "class_circular_buffer.html#aa82ce86703d85248bfb037dc49d75dd3", null ], + [ "write", "class_circular_buffer.html#a7f033a265c893ad6d949347fa797e9ab", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_control_delay-members.html b/extras/doc/html/class_control_delay-members.html new file mode 100644 index 000000000..c3b329596 --- /dev/null +++ b/extras/doc/html/class_control_delay-members.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ControlDelay< NUM_BUFFER_SAMPLES, T > Member List
+
+
+ +

This is the complete list of members for ControlDelay< NUM_BUFFER_SAMPLES, T >, including all inherited members.

+ + + + + + + +
AudioDelay()AudioDelay< NUM_BUFFER_SAMPLES, T >inline
AudioDelay(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
next(T in_value, unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
next(T in_value)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
read(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
set(unsigned int delaytime_cells)AudioDelay< NUM_BUFFER_SAMPLES, T >inline
+
+ + + + diff --git a/extras/doc/html/class_control_delay.html b/extras/doc/html/class_control_delay.html new file mode 100644 index 000000000..23e519f47 --- /dev/null +++ b/extras/doc/html/class_control_delay.html @@ -0,0 +1,324 @@ + + + + + + + +Mozzi: ControlDelay< NUM_BUFFER_SAMPLES, T > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
ControlDelay< NUM_BUFFER_SAMPLES, T > Class Template Reference
+
+
+ +

Control-rate delay line for delaying control signals. + More...

+ +

#include <ControlDelay.h>

+
+ + Inheritance diagram for ControlDelay< NUM_BUFFER_SAMPLES, T >:
+
+
+ + + + + + + + + + + + + + + +

+Public Member Functions

next (T in_value, unsigned int delaytime_cells)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
next (T in_value)
 Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells. More...
 
void set (unsigned int delaytime_cells)
 Set the delay time, measured in cells. More...
 
read (unsigned int delaytime_cells)
 Retrieve the signal in the delay line at the position delaytime_cells. More...
 
+

Detailed Description

+

template<unsigned int NUM_BUFFER_SAMPLES, class T = int>
+class ControlDelay< NUM_BUFFER_SAMPLES, T >

+ +

Control-rate delay line for delaying control signals.

+

For example, this could be used to produce echo-like effects using multiple instances of the same voice, when AudioDelay would be too short for an actual audio echo. This is in fact just a wrapper of the AudioDelay code.

Template Parameters
+ + + +
NUM_BUFFER_SAMPLESis the length of the delay buffer in samples. This should be a power of two.
thetype of numbers to use for the signal in the delay. The default is int8_t, but int could be useful when adding manual feedback. When using int, the input should be limited to 15 bits width, ie. -16384 to 16383.
+
+
+ +

Definition at line 29 of file ControlDelay.h.

+

Member Function Documentation

+ +

§ next() [1/2]

+ +
+
+
+template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
T AudioDelay< NUM_BUFFER_SAMPLES, T >::next (in_value,
unsigned int delaytime_cells 
)
+
+inlineinherited
+
+ +

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

+
Parameters
+ + + +
in_valuethe signal input.
delaytime_cellssets the delay time in terms of cells in the delay buffer.
+
+
+ +

Definition at line 59 of file AudioDelay.h.

+ +
+
+ +

§ next() [2/2]

+ +
+
+
+template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+ + + + + +
+ + + + + + + + +
T AudioDelay< NUM_BUFFER_SAMPLES, T >::next (in_value)
+
+inlineinherited
+
+ +

Input a value to the delay and retrieve the signal in the delay line at the position delaytime_cells.

+
Parameters
+ + +
in_valuethe signal input.
+
+
+ +

Definition at line 77 of file AudioDelay.h.

+ +
+
+ +

§ read()

+ +
+
+
+template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+ + + + + +
+ + + + + + + + +
T AudioDelay< NUM_BUFFER_SAMPLES, T >::read (unsigned int delaytime_cells)
+
+inlineinherited
+
+ +

Retrieve the signal in the delay line at the position delaytime_cells.

+

It doesn't change the stored internal value of _delaytime_cells.

Parameters
+ + +
delaytime_cellsindicates the delay time in terms of cells in the delay buffer.
+
+
+ +

Definition at line 104 of file AudioDelay.h.

+ +
+
+ +

§ set()

+ +
+
+
+template<unsigned int NUM_BUFFER_SAMPLES, class T = int8_t>
+ + + + + +
+ + + + + + + + +
void AudioDelay< NUM_BUFFER_SAMPLES, T >::set (unsigned int delaytime_cells)
+
+inlineinherited
+
+ +

Set the delay time, measured in cells.

+
Parameters
+ + +
delaytime_cellshow many cells to delay the input signal by.
+
+
+ +

Definition at line 94 of file AudioDelay.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_control_delay.js b/extras/doc/html/class_control_delay.js new file mode 100644 index 000000000..e4383d3ff --- /dev/null +++ b/extras/doc/html/class_control_delay.js @@ -0,0 +1,7 @@ +var class_control_delay = +[ + [ "next", "class_control_delay.html#a19258636609d83a2bab11849e17b5294", null ], + [ "next", "class_control_delay.html#a41c09b5cc9e817d8eaf111b0f74c9a0b", null ], + [ "read", "class_control_delay.html#a26b409fbfc322ae527ba23680c56e3a9", null ], + [ "set", "class_control_delay.html#a7bd0a07f7803afda1a71b50e3f66827b", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_control_delay.png b/extras/doc/html/class_control_delay.png new file mode 100644 index 0000000000000000000000000000000000000000..b7788635c4576eda3c857c3ed7fb58b76f3ebfb6 GIT binary patch literal 1038 zcmeAS@N?(olHy`uVBq!ia0y~yU=#+j12~vLB4-l+04a$8pAgso|NjG-@87*!Fk|`z zAPbBS95|4n@;VsE-6pEzy9^t ze7b6uQC#@w*v!oH8i(_^7!}1P{W!gAU3OON^;;3Dnxb|mT_(jKW8KNFleQjrkd6LV zdoJz!vc9he{qonJxxwCc|6<9@X}+h@E~ac1nAY-f$k%1|-7&t&elIQP+lqbD_6w_hRAbZBS-CCU=hx)#e@`4~UZ6M6K=SHj3%ix- ziiXx|ldCQTfBa;WF2pm>_-3u{(baCD%s1Ar`=)>Voz3Rf-uT!3^Hdo)!a<%%$NXh-y zik6Re8+YZ_FPY_a^-0#8M0HNfSEkqI9~7J%(AmU)__}vc&e>=kPx~t++@8N|s}7#M zJtM|x)7^WiUG_0$SI_RA@n@pO#3jpj>6fd#{J$_o$#WetW}jRddp+b2!ymp{#w886 zCUG{re678Z;Tnk1sIrh@qpEO2m?z7DsXh!bC#g(*?Vh1?def3=sVjR~6+{=S%w(7W zv{rj2!wwK-@N?achOKE&F5cDpT*4-B>)Ye~p&xID$$mT4Q=9PP?w;vq)z)?&f4}s8 zw8Z?Id)}z=%rH6p+^6U0_T7nhzReAs{Udz$Z^5Rg$F7{@Y(FQiR#teMU;1OMpJIIe z(m1yt{2aN){|(hXa_Ac|I#o|RS=e#*S=l42TT7g0h|HX#{N3kUp^?IT@!oo?N!$QqB&c>=e$|=NK^a OGI+ZBxvX + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
DCfilter Member List
+
+
+ +

This is the complete list of members for DCfilter, including all inherited members.

+ + + +
DCfilter(float pole)DCfilterinline
next(int x)DCfilterinline
+
+ + + + diff --git a/extras/doc/html/class_d_cfilter.html b/extras/doc/html/class_d_cfilter.html new file mode 100644 index 000000000..c221105b2 --- /dev/null +++ b/extras/doc/html/class_d_cfilter.html @@ -0,0 +1,209 @@ + + + + + + + +Mozzi: DCfilter Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
DCfilter Class Reference
+
+
+ +

A DC-blocking filter useful for highlighting changes in control signals. + More...

+ +

#include <DCfilter.h>

+ + + + + + + + +

+Public Member Functions

 DCfilter (float pole)
 Instantiate a DC-blocking filter. More...
 
int next (int x)
 Filter the incoming value and return the result. More...
 
+

Detailed Description

+

A DC-blocking filter useful for highlighting changes in control signals.

+

The output of the filter settles to 0 if the incoming signal stays constant. If the input changes, the filter output swings to track the change and eventually settles back to 0.

+ +

Definition at line 32 of file DCfilter.h.

+

Constructor & Destructor Documentation

+ +

§ DCfilter()

+ +
+
+ + + + + +
+ + + + + + + + +
DCfilter::DCfilter (float pole)
+
+inline
+
+ +

Instantiate a DC-blocking filter.

+
Parameters
+ + +
polesets the responsiveness of the filter, how long it takes to settle to 0 if the input signal levels out at a constant value.
+
+
+ +

Definition at line 39 of file DCfilter.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + + +
int DCfilter::next (int x)
+
+inline
+
+ +

Filter the incoming value and return the result.

+
Parameters
+ + +
xthe value to filter
+
+
+
Returns
filtered signal
+ +

Definition at line 68 of file DCfilter.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_d_cfilter.js b/extras/doc/html/class_d_cfilter.js new file mode 100644 index 000000000..ad30a46ee --- /dev/null +++ b/extras/doc/html/class_d_cfilter.js @@ -0,0 +1,5 @@ +var class_d_cfilter = +[ + [ "DCfilter", "class_d_cfilter.html#ab55e871fc9d11dfb9231e44627181c2c", null ], + [ "next", "class_d_cfilter.html#ae900f943d9520fbf3a522508231d82b0", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_ead-members.html b/extras/doc/html/class_ead-members.html new file mode 100644 index 000000000..adea8615c --- /dev/null +++ b/extras/doc/html/class_ead-members.html @@ -0,0 +1,120 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Ead Member List
+
+
+ +

This is the complete list of members for Ead, including all inherited members.

+ + + + + + + + +
Ead(unsigned int update_rate)Eadinline
next()Eadinline
set(unsigned int attack_ms, unsigned int decay_ms)Eadinline
setAttack(unsigned int attack_ms)Eadinline
setDecay(unsigned int decay_ms)Eadinline
start()Eadinline
start(unsigned int attack_ms, unsigned int decay_ms)Eadinline
+
+ + + + diff --git a/extras/doc/html/class_ead.html b/extras/doc/html/class_ead.html new file mode 100644 index 000000000..6ee7e3387 --- /dev/null +++ b/extras/doc/html/class_ead.html @@ -0,0 +1,413 @@ + + + + + + + +Mozzi: Ead Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Ead Class Reference
+
+
+ +

Exponential attack decay envelope. + More...

+ +

#include <Ead.h>

+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Ead (unsigned int update_rate)
 Constructor. More...
 
void setAttack (unsigned int attack_ms)
 Set the attack time in milliseconds. More...
 
void setDecay (unsigned int decay_ms)
 Set the decay time in milliseconds. More...
 
void set (unsigned int attack_ms, unsigned int decay_ms)
 Set attack and decay times in milliseconds. More...
 
void start ()
 Start the envelope from the beginning. More...
 
void start (unsigned int attack_ms, unsigned int decay_ms)
 Set attack and decay times in milliseconds, and start the envelope from the beginning. More...
 
uint8_t next ()
 Calculate and return the next envelope value, in the range -128 to 127. More...
 
+

Detailed Description

+

Exponential attack decay envelope.

+

This produces a natural sounding envelope. It calculates a new value each time next() is called, which can be mapped to other parameters to change the amplitude or timbre of a sound.

Note
Currently doesn't work at audio rate... may need larger number types for Q8n8attack and Q8n8decay ?
+ +

Definition at line 29 of file Ead.h.

+

Constructor & Destructor Documentation

+ +

§ Ead()

+ +
+
+ + + + + +
+ + + + + + + + +
Ead::Ead (unsigned int update_rate)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + +
update_rateUsually this will be CONTROL_RATE or AUDIO_RATE, unless you design another scheme for updating. One such alternative scheme could take turns for various control changes in a rotating schedule to spread out calculations made in successive updateControl() routines.
+
+
+ +

Definition at line 41 of file Ead.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + +
uint8_t Ead::next ()
+
+inline
+
+ +

Calculate and return the next envelope value, in the range -128 to 127.

+
Note
Timing: 5us
+ +

Definition at line 114 of file Ead.h.

+ +
+
+ +

§ set()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Ead::set (unsigned int attack_ms,
unsigned int decay_ms 
)
+
+inline
+
+ +

Set attack and decay times in milliseconds.

+
Parameters
+ + + +
attack_msThe time taken for values returned by successive calls of the next() method to change from 0 to 255.
decay_msThe time taken for values returned by successive calls of the next() method to change from 255 to 0.
+
+
+ +

Definition at line 75 of file Ead.h.

+ +
+
+ +

§ setAttack()

+ +
+
+ + + + + +
+ + + + + + + + +
void Ead::setAttack (unsigned int attack_ms)
+
+inline
+
+ +

Set the attack time in milliseconds.

+
Parameters
+ + +
attack_msThe time taken for values returned by successive calls of the next() method to change from 0 to 255.
+
+
+ +

Definition at line 51 of file Ead.h.

+ +
+
+ +

§ setDecay()

+ +
+
+ + + + + +
+ + + + + + + + +
void Ead::setDecay (unsigned int decay_ms)
+
+inline
+
+ +

Set the decay time in milliseconds.

+
Parameters
+ + +
decay_msThe time taken for values returned by successive calls of the next() method to change from 255 to 0.
+
+
+ +

Definition at line 62 of file Ead.h.

+ +
+
+ +

§ start() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
void Ead::start ()
+
+inline
+
+ +

Start the envelope from the beginning.

+

This can be used at any time, even if the previous envelope is not finished.

+ +

Definition at line 86 of file Ead.h.

+ +
+
+ +

§ start() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Ead::start (unsigned int attack_ms,
unsigned int decay_ms 
)
+
+inline
+
+ +

Set attack and decay times in milliseconds, and start the envelope from the beginning.

+

This can be used at any time, even if the previous envelope is not finished.

Parameters
+ + + +
attack_msThe time taken for values returned by successive calls of the next() method to change from 0 to 255.
decay_msThe time taken for values returned by successive calls of the next() method to change from 255 to 0.
+
+
+ +

Definition at line 101 of file Ead.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_ead.js b/extras/doc/html/class_ead.js new file mode 100644 index 000000000..86a11034f --- /dev/null +++ b/extras/doc/html/class_ead.js @@ -0,0 +1,10 @@ +var class_ead = +[ + [ "Ead", "class_ead.html#a4862282805c2ac3255a34a99a31564d5", null ], + [ "next", "class_ead.html#a57e6f7b304c2bd7dd8cedf7f4fba66c9", null ], + [ "set", "class_ead.html#af203c82721ab832c653a23ff219c040e", null ], + [ "setAttack", "class_ead.html#a6bae0e92e6709c3fcd31fccd41212bac", null ], + [ "setDecay", "class_ead.html#aa99e6dc2d5448b4de0764c6208e5c2fc", null ], + [ "start", "class_ead.html#ac385679b58e2f9755029b7da7405b233", null ], + [ "start", "class_ead.html#a146b205e70f4b2293e643ea063f2b38f", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_event_delay-members.html b/extras/doc/html/class_event_delay-members.html new file mode 100644 index 000000000..d901105e9 --- /dev/null +++ b/extras/doc/html/class_event_delay-members.html @@ -0,0 +1,120 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
EventDelay Member List
+
+
+ +

This is the complete list of members for EventDelay, including all inherited members.

+ + + + + + + + +
deadline (defined in EventDelay)EventDelayprotected
EventDelay(unsigned int delay_milliseconds=0)EventDelayinline
ready()EventDelayinline
set(unsigned int delay_milliseconds)EventDelayinline
start()EventDelayinline
start(unsigned int delay_milliseconds)EventDelayinline
ticks (defined in EventDelay)EventDelayprotected
+
+ + + + diff --git a/extras/doc/html/class_event_delay.html b/extras/doc/html/class_event_delay.html new file mode 100644 index 000000000..4033651dc --- /dev/null +++ b/extras/doc/html/class_event_delay.html @@ -0,0 +1,335 @@ + + + + + + + +Mozzi: EventDelay Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
EventDelay Class Reference
+
+
+ +

A non-blocking replacement for Arduino's delay() function (which is disabled by Mozzi). + More...

+ +

#include <EventDelay.h>

+
+ + Inheritance diagram for EventDelay:
+
+
+ + + + + + + + + + + + + + + + + + +

+Public Member Functions

 EventDelay (unsigned int delay_milliseconds=0)
 Constructor. More...
 
void set (unsigned int delay_milliseconds)
 Set the delay time. More...
 
void start ()
 Start the delay. More...
 
void start (unsigned int delay_milliseconds)
 Set the delay time and start the delay. More...
 
bool ready ()
 Call this in updateControl() or updateAudio() to check if the delay time is up. More...
 
+ + + + + +

+Protected Attributes

+unsigned long deadline
 
+unsigned long ticks
 
+

Detailed Description

+

A non-blocking replacement for Arduino's delay() function (which is disabled by Mozzi).

+

EventDelay can be set() to a number of milliseconds, then after calling start(), ready() will return true when the time is up. Alternatively, start(milliseconds) will call set() and start() together.

+ +

Definition at line 20 of file EventDelay.h.

+

Constructor & Destructor Documentation

+ +

§ EventDelay()

+ +
+
+ + + + + +
+ + + + + + + + +
EventDelay::EventDelay (unsigned int delay_milliseconds = 0)
+
+inline
+
+ +

Constructor.

+

Declare an EventDelay object.

Parameters
+ + +
delay_millisecondshow long until ready() returns true, after calling start(). Defaults to 0 if no parameter is supplied.
+
+
+ +

Definition at line 29 of file EventDelay.h.

+ +
+
+

Member Function Documentation

+ +

§ ready()

+ +
+
+ + + + + +
+ + + + + + + +
bool EventDelay::ready ()
+
+inline
+
+ +

Call this in updateControl() or updateAudio() to check if the delay time is up.

+
Returns
true if the time is up.
+
Note
timing: 1us.
+ +

Definition at line 73 of file EventDelay.h.

+ +
+
+ +

§ set()

+ +
+
+ + + + + +
+ + + + + + + + +
void EventDelay::set (unsigned int delay_milliseconds)
+
+inline
+
+ +

Set the delay time.

+

This setting is persistent, until you change it by using set() again.

Parameters
+ + +
delay_millisecondsdelay time in milliseconds.
+
+
+
Note
timing: 12us
+ +

Definition at line 40 of file EventDelay.h.

+ +
+
+ +

§ start() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
void EventDelay::start ()
+
+inline
+
+ +

Start the delay.

+ +

Definition at line 51 of file EventDelay.h.

+ +
+
+ +

§ start() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void EventDelay::start (unsigned int delay_milliseconds)
+
+inline
+
+ +

Set the delay time and start the delay.

+
Parameters
+ + +
delay_millisecondsdelay time in milliseconds.
+
+
+ +

Definition at line 61 of file EventDelay.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_event_delay.js b/extras/doc/html/class_event_delay.js new file mode 100644 index 000000000..3585498cd --- /dev/null +++ b/extras/doc/html/class_event_delay.js @@ -0,0 +1,10 @@ +var class_event_delay = +[ + [ "EventDelay", "class_event_delay.html#acd7b63341732ac4c23bce04d81316017", null ], + [ "ready", "class_event_delay.html#a2267889678fb75df2f6bdcbd0be0ea8a", null ], + [ "set", "class_event_delay.html#a937c86f3b05ccb6138ff7927713820da", null ], + [ "start", "class_event_delay.html#a97a07c9371040d6388b8369352b08d83", null ], + [ "start", "class_event_delay.html#a0943cb52a1ee36fda1156f8dd762a105", null ], + [ "deadline", "class_event_delay.html#aa0b0ae903260675eded72ad071b5d564", null ], + [ "ticks", "class_event_delay.html#a6e8230d6e291a8c23ebdb1704caabb5d", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_event_delay.png b/extras/doc/html/class_event_delay.png new file mode 100644 index 0000000000000000000000000000000000000000..79b9aa16e03cb8c3b0a9db960ca4a1e5ae086ea6 GIT binary patch literal 443 zcmV;s0Yv_ZP)NkldJYWsiOC`b4cM?o6WRKhtI9CRkya8H@153ox9jf z=8Ve5Uf9}wSGCnel~Xq8>D9fyHuKPLY}bLxRoH&To?hpz?y1>`)4Skmvk&QOTlIph z|2KeH+-)I*;03?~HUKwVZQJIlbG7X)bBhRWV|;Z*Ilo0{%yY4ICd>B6(x#wTQW-={k*gPw|r le9N+lh|Ke^Y^thW`~jvJ5f7uRAh!Sj002ovPDHLkV1fk*)fxZ* literal 0 HcmV?d00001 diff --git a/extras/doc/html/class_int_map-members.html b/extras/doc/html/class_int_map-members.html new file mode 100644 index 000000000..cc2d75d24 --- /dev/null +++ b/extras/doc/html/class_int_map-members.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
IntMap Member List
+
+
+ +

This is the complete list of members for IntMap, including all inherited members.

+ + + +
IntMap(int in_min, int in_max, int out_min, int out_max)IntMapinline
operator()(int n) constIntMapinline
+
+ + + + diff --git a/extras/doc/html/class_int_map.html b/extras/doc/html/class_int_map.html new file mode 100644 index 000000000..e7cb9edd5 --- /dev/null +++ b/extras/doc/html/class_int_map.html @@ -0,0 +1,234 @@ + + + + + + + +Mozzi: IntMap Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
IntMap Class Reference
+
+
+ +

A faster version of Arduino's map() function. + More...

+ +

#include <IntMap.h>

+ + + + + + + + +

+Public Member Functions

 IntMap (int in_min, int in_max, int out_min, int out_max)
 Constructor. More...
 
int operator() (int n) const
 Process the next input value. More...
 
+

Detailed Description

+

A faster version of Arduino's map() function.

+

This uses ints instead of longs internally and does some of the maths at compile time.

+ +

Definition at line 18 of file IntMap.h.

+

Constructor & Destructor Documentation

+ +

§ IntMap()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IntMap::IntMap (int in_min,
int in_max,
int out_min,
int out_max 
)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + + + + +
in_minthe minimum of the input range.
in_maxthe maximum of the input range.
out_minthe minimum of the output range.
out_maxthe maximum of the output range.
+
+
+ +

Definition at line 27 of file IntMap.h.

+ +
+
+

Member Function Documentation

+ +

§ operator()()

+ +
+
+ + + + + +
+ + + + + + + + +
int IntMap::operator() (int n) const
+
+inline
+
+ +

Process the next input value.

+
Parameters
+ + +
nthe next integer to process.
+
+
+
Returns
the input integer mapped to the output range.
+ +

Definition at line 38 of file IntMap.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_int_map.js b/extras/doc/html/class_int_map.js new file mode 100644 index 000000000..a066e87a0 --- /dev/null +++ b/extras/doc/html/class_int_map.js @@ -0,0 +1,5 @@ +var class_int_map = +[ + [ "IntMap", "class_int_map.html#a36ab6e0137254909f44ae909dfe44a8a", null ], + [ "operator()", "class_int_map.html#ae3bf8b61f2ab79ac6626245213e7cb2a", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_line-members.html b/extras/doc/html/class_line-members.html new file mode 100644 index 000000000..ca5715425 --- /dev/null +++ b/extras/doc/html/class_line-members.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Line< T > Member List
+
+
+ +

This is the complete list of members for Line< T >, including all inherited members.

+ + + + + + +
Line()Line< T >inline
next()Line< T >inline
set(T value)Line< T >inline
set(T targetvalue, T num_steps)Line< T >inline
set(T startvalue, T targetvalue, T num_steps)Line< T >inline
+
+ + + + diff --git a/extras/doc/html/class_line.html b/extras/doc/html/class_line.html new file mode 100644 index 000000000..8b2336c19 --- /dev/null +++ b/extras/doc/html/class_line.html @@ -0,0 +1,361 @@ + + + + + + + +Mozzi: Line< T > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Line< T > Class Template Reference
+
+
+ +

For linear changes with a minimum of calculation at each step. + More...

+ +

#include <Line.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 Line ()
 Constructor. More...
 
next ()
 Increments one step along the line. More...
 
void set (T value)
 Set the current value of the line. More...
 
void set (T targetvalue, T num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
void set (T startvalue, T targetvalue, T num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
+

Detailed Description

+

template<class T>
+class Line< T >

+ +

For linear changes with a minimum of calculation at each step.

+

For instance, you can use Line to make an oscillator glide from one frequency to another, pre-calculating the required phase increments for each end and then letting your Line change the phase increment with only a simple addition at each step.

Template Parameters
+ + +
Tthe type of numbers to use. For example, Line <int> myline; makes a Line which uses ints.
+
+
+
Note
Watch out for underflows in the internal calcualtion of Line() if you're not using floats (but on the other hand try to avoid lots of floats, they're too slow!). If it seems like the Line() is not working, there's a good chance you need to scale up the numbers you're using, so internal calculations don't get truncated away. Use Mozzi's fixed-point number types in mozzi_fixmath.h, which enable you to represent fractional numbers. Google "fixed point arithmetic" if this is new to you.
+ +

Definition at line 38 of file Line.h.

+

Constructor & Destructor Documentation

+ +

§ Line()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
Line< T >::Line ()
+
+inline
+
+ +

Constructor.

+

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

+ +

Definition at line 48 of file Line.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
T Line< T >::next ()
+
+inline
+
+ +

Increments one step along the line.

+
Returns
the next value.
+ +

Definition at line 59 of file Line.h.

+ +
+
+ +

§ set() [1/3]

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
void Line< T >::set (value)
+
+inline
+
+ +

Set the current value of the line.

+

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
+ + +
valuethe number to set the Line's current_value to.
+
+
+ +

Definition at line 77 of file Line.h.

+ +
+
+ +

§ set() [2/3]

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Line< T >::set (targetvalue,
num_steps 
)
+
+inline
+
+ +

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

+
Parameters
+ + + +
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
+
+
+ +

Definition at line 92 of file Line.h.

+ +
+
+ +

§ set() [3/3]

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Line< T >::set (startvalue,
targetvalue,
num_steps 
)
+
+inline
+
+ +

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

+
Parameters
+ + + + +
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
+
+
+ +

Definition at line 118 of file Line.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_line.js b/extras/doc/html/class_line.js new file mode 100644 index 000000000..abc36c496 --- /dev/null +++ b/extras/doc/html/class_line.js @@ -0,0 +1,8 @@ +var class_line = +[ + [ "Line", "class_line.html#aa6a80df90da15782ca88889ef9c8dd51", null ], + [ "next", "class_line.html#a413f620b2824c6996b3346ee54351849", null ], + [ "set", "class_line.html#a6bad32d527e0d931c99e9b72c2a75c80", null ], + [ "set", "class_line.html#a7378d526cf07c42c0792868c749dee6e", null ], + [ "set", "class_line.html#a24ad85c17562e97b6823a010a5ba04c6", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_line_3_01unsigned_01char_01_4-members.html b/extras/doc/html/class_line_3_01unsigned_01char_01_4-members.html new file mode 100644 index 000000000..52ebb5a22 --- /dev/null +++ b/extras/doc/html/class_line_3_01unsigned_01char_01_4-members.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Line< unsigned char > Member List
+
+
+ +

This is the complete list of members for Line< unsigned char >, including all inherited members.

+ + + + + + +
Line()Line< unsigned char >inline
next()Line< unsigned char >inline
set(unsigned char value)Line< unsigned char >inline
set(unsigned char targetvalue, unsigned char num_steps)Line< unsigned char >inline
set(unsigned char startvalue, unsigned char targetvalue, unsigned char num_steps)Line< unsigned char >inline
+
+ + + + diff --git a/extras/doc/html/class_line_3_01unsigned_01char_01_4.html b/extras/doc/html/class_line_3_01unsigned_01char_01_4.html new file mode 100644 index 000000000..9fb1039ef --- /dev/null +++ b/extras/doc/html/class_line_3_01unsigned_01char_01_4.html @@ -0,0 +1,338 @@ + + + + + + + +Mozzi: Line< unsigned char > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Line< unsigned char > Class Template Reference
+
+
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 Line ()
 Constructor. More...
 
unsigned char next ()
 Increments one step along the line. More...
 
void set (unsigned char value)
 Set the current value of the line. More...
 
void set (unsigned char targetvalue, unsigned char num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
void set (unsigned char startvalue, unsigned char targetvalue, unsigned char num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
+

Detailed Description

+

template<>
+class Line< unsigned char >

+ + +

Definition at line 128 of file Line.h.

+

Constructor & Destructor Documentation

+ +

§ Line()

+ +
+
+ + + + + +
+ + + + + + + +
Line< unsigned char >::Line ()
+
+inline
+
+ +

Constructor.

+

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

+ +

Definition at line 138 of file Line.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned char Line< unsigned char >::next ()
+
+inline
+
+ +

Increments one step along the line.

+
Returns
the next value.
+ +

Definition at line 149 of file Line.h.

+ +
+
+ +

§ set() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + +
void Line< unsigned char >::set (unsigned char value)
+
+inline
+
+ +

Set the current value of the line.

+

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
+ + +
valuethe number to set the Line's current_value to.
+
+
+ +

Definition at line 166 of file Line.h.

+ +
+
+ +

§ set() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Line< unsigned char >::set (unsigned char targetvalue,
unsigned char num_steps 
)
+
+inline
+
+ +

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

+
Parameters
+ + + +
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
+
+
+ +

Definition at line 181 of file Line.h.

+ +
+
+ +

§ set() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Line< unsigned char >::set (unsigned char startvalue,
unsigned char targetvalue,
unsigned char num_steps 
)
+
+inline
+
+ +

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

+
Parameters
+ + + + +
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
+
+
+ +

Definition at line 192 of file Line.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_line_3_01unsigned_01char_01_4.js b/extras/doc/html/class_line_3_01unsigned_01char_01_4.js new file mode 100644 index 000000000..82d0645f8 --- /dev/null +++ b/extras/doc/html/class_line_3_01unsigned_01char_01_4.js @@ -0,0 +1,8 @@ +var class_line_3_01unsigned_01char_01_4 = +[ + [ "Line", "class_line_3_01unsigned_01char_01_4.html#a151189139ee6ed39bacec86ea2364124", null ], + [ "next", "class_line_3_01unsigned_01char_01_4.html#ad33f421ca975cb6b175a1c1f3ba0b68a", null ], + [ "set", "class_line_3_01unsigned_01char_01_4.html#a6129febcfd57d32a5c771c8f730b6b7a", null ], + [ "set", "class_line_3_01unsigned_01char_01_4.html#a2b90896c1357a45daca74498f17b4909", null ], + [ "set", "class_line_3_01unsigned_01char_01_4.html#ad14e98651035d75c89270c6f0d5e5c46", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_line_3_01unsigned_01int_01_4-members.html b/extras/doc/html/class_line_3_01unsigned_01int_01_4-members.html new file mode 100644 index 000000000..5e6c7e7f3 --- /dev/null +++ b/extras/doc/html/class_line_3_01unsigned_01int_01_4-members.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Line< unsigned int > Member List
+
+
+ +

This is the complete list of members for Line< unsigned int >, including all inherited members.

+ + + + + + +
Line()Line< unsigned int >inline
next()Line< unsigned int >inline
set(unsigned int value)Line< unsigned int >inline
set(unsigned int targetvalue, unsigned int num_steps)Line< unsigned int >inline
set(unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)Line< unsigned int >inline
+
+ + + + diff --git a/extras/doc/html/class_line_3_01unsigned_01int_01_4.html b/extras/doc/html/class_line_3_01unsigned_01int_01_4.html new file mode 100644 index 000000000..d34b4e763 --- /dev/null +++ b/extras/doc/html/class_line_3_01unsigned_01int_01_4.html @@ -0,0 +1,338 @@ + + + + + + + +Mozzi: Line< unsigned int > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Line< unsigned int > Class Template Reference
+
+
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 Line ()
 Constructor. More...
 
unsigned int next ()
 Increments one step along the line. More...
 
void set (unsigned int value)
 Set the current value of the line. More...
 
void set (unsigned int targetvalue, unsigned int num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
void set (unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
+

Detailed Description

+

template<>
+class Line< unsigned int >

+ + +

Definition at line 203 of file Line.h.

+

Constructor & Destructor Documentation

+ +

§ Line()

+ +
+
+ + + + + +
+ + + + + + + +
Line< unsigned int >::Line ()
+
+inline
+
+ +

Constructor.

+

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

+ +

Definition at line 213 of file Line.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned int Line< unsigned int >::next ()
+
+inline
+
+ +

Increments one step along the line.

+
Returns
the next value.
+ +

Definition at line 224 of file Line.h.

+ +
+
+ +

§ set() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + +
void Line< unsigned int >::set (unsigned int value)
+
+inline
+
+ +

Set the current value of the line.

+

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
+ + +
valuethe number to set the Line's current_value to.
+
+
+ +

Definition at line 241 of file Line.h.

+ +
+
+ +

§ set() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Line< unsigned int >::set (unsigned int targetvalue,
unsigned int num_steps 
)
+
+inline
+
+ +

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

+
Parameters
+ + + +
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
+
+
+ +

Definition at line 256 of file Line.h.

+ +
+
+ +

§ set() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Line< unsigned int >::set (unsigned int startvalue,
unsigned int targetvalue,
unsigned int num_steps 
)
+
+inline
+
+ +

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

+
Parameters
+ + + + +
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
+
+
+ +

Definition at line 268 of file Line.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_line_3_01unsigned_01int_01_4.js b/extras/doc/html/class_line_3_01unsigned_01int_01_4.js new file mode 100644 index 000000000..711e102a2 --- /dev/null +++ b/extras/doc/html/class_line_3_01unsigned_01int_01_4.js @@ -0,0 +1,8 @@ +var class_line_3_01unsigned_01int_01_4 = +[ + [ "Line", "class_line_3_01unsigned_01int_01_4.html#a32c77e9442a640df179ec4573e8fea6d", null ], + [ "next", "class_line_3_01unsigned_01int_01_4.html#a4bf1b56d036097ecc3e28d52ef129ade", null ], + [ "set", "class_line_3_01unsigned_01int_01_4.html#a157b1887464b81ed8388a8f73173338d", null ], + [ "set", "class_line_3_01unsigned_01int_01_4.html#a002bf2ae8e48467fd2d45072b8328e65", null ], + [ "set", "class_line_3_01unsigned_01int_01_4.html#a1677277eb5f3eb56e47a6e7dde0c1558", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_line_3_01unsigned_01long_01_4-members.html b/extras/doc/html/class_line_3_01unsigned_01long_01_4-members.html new file mode 100644 index 000000000..147f0810e --- /dev/null +++ b/extras/doc/html/class_line_3_01unsigned_01long_01_4-members.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Line< unsigned long > Member List
+
+
+ +

This is the complete list of members for Line< unsigned long >, including all inherited members.

+ + + + + + +
Line()Line< unsigned long >inline
next()Line< unsigned long >inline
set(unsigned long value)Line< unsigned long >inline
set(unsigned long targetvalue, unsigned long num_steps)Line< unsigned long >inline
set(unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)Line< unsigned long >inline
+
+ + + + diff --git a/extras/doc/html/class_line_3_01unsigned_01long_01_4.html b/extras/doc/html/class_line_3_01unsigned_01long_01_4.html new file mode 100644 index 000000000..151e60923 --- /dev/null +++ b/extras/doc/html/class_line_3_01unsigned_01long_01_4.html @@ -0,0 +1,338 @@ + + + + + + + +Mozzi: Line< unsigned long > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Line< unsigned long > Class Template Reference
+
+
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 Line ()
 Constructor. More...
 
unsigned long next ()
 Increments one step along the line. More...
 
void set (unsigned long value)
 Set the current value of the line. More...
 
void set (unsigned long targetvalue, unsigned long num_steps)
 Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value. More...
 
void set (unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)
 Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there. More...
 
+

Detailed Description

+

template<>
+class Line< unsigned long >

+ + +

Definition at line 281 of file Line.h.

+

Constructor & Destructor Documentation

+ +

§ Line()

+ +
+
+ + + + + +
+ + + + + + + +
Line< unsigned long >::Line ()
+
+inline
+
+ +

Constructor.

+

Use the template parameter to set the type of numbers you want to use. For example, Line <int> myline; makes a Line which uses ints.

+ +

Definition at line 291 of file Line.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + +
unsigned long Line< unsigned long >::next ()
+
+inline
+
+ +

Increments one step along the line.

+
Returns
the next value.
+ +

Definition at line 302 of file Line.h.

+ +
+
+ +

§ set() [1/3]

+ +
+
+ + + + + +
+ + + + + + + + +
void Line< unsigned long >::set (unsigned long value)
+
+inline
+
+ +

Set the current value of the line.

+

The Line will continue incrementing from this value using any previously calculated step size.

Parameters
+ + +
valuethe number to set the Line's current_value to.
+
+
+ +

Definition at line 319 of file Line.h.

+ +
+
+ +

§ set() [2/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Line< unsigned long >::set (unsigned long targetvalue,
unsigned long num_steps 
)
+
+inline
+
+ +

Given a target value and the number of steps to take on the way, this calculates the step size needed to get there from the current value.

+
Parameters
+ + + +
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
+
+
+ +

Definition at line 334 of file Line.h.

+ +
+
+ +

§ set() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Line< unsigned long >::set (unsigned long startvalue,
unsigned long targetvalue,
unsigned long num_steps 
)
+
+inline
+
+ +

Given a new starting value, target value and the number of steps to take on the way, this sets the step size needed to get there.

+
Parameters
+ + + + +
startvaluethe number to set the Line's current_value to.
targetvaluethe value to move towards.
num_stepshow many steps to take to reach the target.
+
+
+ +

Definition at line 345 of file Line.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_line_3_01unsigned_01long_01_4.js b/extras/doc/html/class_line_3_01unsigned_01long_01_4.js new file mode 100644 index 000000000..c5bb35617 --- /dev/null +++ b/extras/doc/html/class_line_3_01unsigned_01long_01_4.js @@ -0,0 +1,8 @@ +var class_line_3_01unsigned_01long_01_4 = +[ + [ "Line", "class_line_3_01unsigned_01long_01_4.html#a797b2ebfe450971b6e75c26b1e6c88da", null ], + [ "next", "class_line_3_01unsigned_01long_01_4.html#a69f39cf62a30d001d50daf82f45f191b", null ], + [ "set", "class_line_3_01unsigned_01long_01_4.html#abb246fabacbefbd6d88ddce719f74b0e", null ], + [ "set", "class_line_3_01unsigned_01long_01_4.html#abb89855ea745a453262cd2aeb31e2ec7", null ], + [ "set", "class_line_3_01unsigned_01long_01_4.html#a199dd187d87c9941515b21aea0c52a0f", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_low_pass_filter-members.html b/extras/doc/html/class_low_pass_filter-members.html new file mode 100644 index 000000000..33f783d3b --- /dev/null +++ b/extras/doc/html/class_low_pass_filter-members.html @@ -0,0 +1,117 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
LowPassFilter Member List
+
+
+ +

This is the complete list of members for LowPassFilter, including all inherited members.

+ + + + + +
LowPassFilter()LowPassFilterinline
next(int in)LowPassFilterinline
setCutoffFreq(uint8_t cutoff)LowPassFilterinline
setResonance(uint8_t resonance)LowPassFilterinline
+
+ + + + diff --git a/extras/doc/html/class_low_pass_filter.html b/extras/doc/html/class_low_pass_filter.html new file mode 100644 index 000000000..4994ed47b --- /dev/null +++ b/extras/doc/html/class_low_pass_filter.html @@ -0,0 +1,251 @@ + + + + + + + +Mozzi: LowPassFilter Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
LowPassFilter Class Reference
+
+
+ +

A resonant low pass filter for audio signals. + More...

+ +

#include <LowPassFilter.h>

+ + + + + + + + + + + + + + +

+Public Member Functions

LowPassFilter ()
 Constructor.
 
void setCutoffFreq (uint8_t cutoff)
 Set the cut off frequency,. More...
 
void setResonance (uint8_t resonance)
 Set the resonance. More...
 
int next (int in)
 Calculate the next sample, given an input signal. More...
 
+

Detailed Description

+

A resonant low pass filter for audio signals.

+ +

Definition at line 37 of file LowPassFilter.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + + +
int LowPassFilter::next (int in)
+
+inline
+
+ +

Calculate the next sample, given an input signal.

+
Parameters
+ + +
inthe signal input.
+
+
+
Returns
the signal output.
+
Note
Timing: about 11us.
+ +

Definition at line 75 of file LowPassFilter.h.

+ +
+
+ +

§ setCutoffFreq()

+ +
+
+ + + + + +
+ + + + + + + + +
void LowPassFilter::setCutoffFreq (uint8_t cutoff)
+
+inline
+
+ +

Set the cut off frequency,.

+
Parameters
+ + +
cutoffuse the range 0-255 to represent 0-8192 Hz (AUDIO_RATE/2). Be careful of distortion at the lower end, especially with high resonance.
+
+
+ +

Definition at line 53 of file LowPassFilter.h.

+ +
+
+ +

§ setResonance()

+ +
+
+ + + + + +
+ + + + + + + + +
void LowPassFilter::setResonance (uint8_t resonance)
+
+inline
+
+ +

Set the resonance.

+

If you hear unwanted distortion, back off the resonance.

Parameters
+ + +
resonancein the range 0-255, with 255 being most resonant.
+
+
+ +

Definition at line 63 of file LowPassFilter.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_low_pass_filter.js b/extras/doc/html/class_low_pass_filter.js new file mode 100644 index 000000000..4c95401b1 --- /dev/null +++ b/extras/doc/html/class_low_pass_filter.js @@ -0,0 +1,7 @@ +var class_low_pass_filter = +[ + [ "LowPassFilter", "class_low_pass_filter.html#a6d6538d3dfe603cce18711c990b85a03", null ], + [ "next", "class_low_pass_filter.html#a393f154ec729419747c5dd630327b852", null ], + [ "setCutoffFreq", "class_low_pass_filter.html#ac8a9f6a04009d37885f47cdf5a45023d", null ], + [ "setResonance", "class_low_pass_filter.html#ad655253ff702ba5bda1bdbb0199019f0", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_metronome-members.html b/extras/doc/html/class_metronome-members.html new file mode 100644 index 000000000..57a8ff668 --- /dev/null +++ b/extras/doc/html/class_metronome-members.html @@ -0,0 +1,123 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Metronome Member List
+
+
+ +

This is the complete list of members for Metronome, including all inherited members.

+ + + + + + + + + + + +
deadline (defined in EventDelay)EventDelayprotected
EventDelay(unsigned int delay_milliseconds=0)EventDelayinline
Metronome(unsigned int delay_milliseconds=0)Metronomeinline
ready()Metronomeinline
set(unsigned int delay_milliseconds)EventDelayinline
setBPM(float bpm)Metronomeinline
start()Metronomeinline
start(unsigned int delay_milliseconds)Metronomeinline
stop() (defined in Metronome)Metronomeinline
ticks (defined in EventDelay)EventDelayprotected
+
+ + + + diff --git a/extras/doc/html/class_metronome.html b/extras/doc/html/class_metronome.html new file mode 100644 index 000000000..02922c71e --- /dev/null +++ b/extras/doc/html/class_metronome.html @@ -0,0 +1,376 @@ + + + + + + + +Mozzi: Metronome Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Metronome Class Reference
+
+
+ +

A metronome class which is like an EventDelay which retriggers itself when the delay time is up, to produce a repeating beat. + More...

+ +

#include <Metronome.h>

+
+ + Inheritance diagram for Metronome:
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Metronome (unsigned int delay_milliseconds=0)
 Constructor. More...
 
void start ()
 Start the metronome. More...
 
void start (unsigned int delay_milliseconds)
 Set the time between beats and start the metronome. More...
 
void setBPM (float bpm)
 Set the beats per minute. More...
 
bool ready ()
 Call this in updateControl() or updateAudio() to check if it is time for a beat. More...
 
+void stop ()
 
void set (unsigned int delay_milliseconds)
 Set the delay time. More...
 
+ + + + + +

+Protected Attributes

+unsigned long deadline
 
+unsigned long ticks
 
+

Detailed Description

+

A metronome class which is like an EventDelay which retriggers itself when the delay time is up, to produce a repeating beat.

+

Metronome can be set() to a number of milliseconds, then after calling start(), ready() will return true when the time is up. Alternatively, start(milliseconds) will call set() and start() together. This is called Metronome to avoid conflict with the Arduino Metro library.

+ +

Definition at line 22 of file Metronome.h.

+

Constructor & Destructor Documentation

+ +

§ Metronome()

+ +
+
+ + + + + +
+ + + + + + + + +
Metronome::Metronome (unsigned int delay_milliseconds = 0)
+
+inline
+
+ +

Constructor.

+

Declare a Metronome object.

Parameters
+ + +
delay_millisecondshow long between each occasion when ready() returns true.
+
+
+ +

Definition at line 31 of file Metronome.h.

+ +
+
+

Member Function Documentation

+ +

§ ready()

+ +
+
+ + + + + +
+ + + + + + + +
bool Metronome::ready ()
+
+inline
+
+ +

Call this in updateControl() or updateAudio() to check if it is time for a beat.

+
Returns
true if the time for one is up.
+ +

Definition at line 75 of file Metronome.h.

+ +
+
+ +

§ set()

+ +
+
+ + + + + +
+ + + + + + + + +
void EventDelay::set (unsigned int delay_milliseconds)
+
+inlineinherited
+
+ +

Set the delay time.

+

This setting is persistent, until you change it by using set() again.

Parameters
+ + +
delay_millisecondsdelay time in milliseconds.
+
+
+
Note
timing: 12us
+ +

Definition at line 40 of file EventDelay.h.

+ +
+
+ +

§ setBPM()

+ +
+
+ + + + + +
+ + + + + + + + +
void Metronome::setBPM (float bpm)
+
+inline
+
+ +

Set the beats per minute.

+
Parameters
+ + +
bpmbeats per minute
+
+
+ +

Definition at line 63 of file Metronome.h.

+ +
+
+ +

§ start() [1/2]

+ +
+
+ + + + + +
+ + + + + + + +
void Metronome::start ()
+
+inline
+
+ +

Start the metronome.

+ +

Definition at line 40 of file Metronome.h.

+ +
+
+ +

§ start() [2/2]

+ +
+
+ + + + + +
+ + + + + + + + +
void Metronome::start (unsigned int delay_milliseconds)
+
+inline
+
+ +

Set the time between beats and start the metronome.

+
Parameters
+ + +
delay_millisecondsdelay time in milliseconds.
+
+
+ +

Definition at line 51 of file Metronome.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_metronome.js b/extras/doc/html/class_metronome.js new file mode 100644 index 000000000..44049dbad --- /dev/null +++ b/extras/doc/html/class_metronome.js @@ -0,0 +1,12 @@ +var class_metronome = +[ + [ "Metronome", "class_metronome.html#a37e8b0aa5a9aa8fa0f33212360cc0928", null ], + [ "ready", "class_metronome.html#adc67bd96eac9f9b9260f8b070b7db75f", null ], + [ "set", "class_metronome.html#a937c86f3b05ccb6138ff7927713820da", null ], + [ "setBPM", "class_metronome.html#aab384673719ebd552dd72d474ed58556", null ], + [ "start", "class_metronome.html#ab85d2f5bdc5cb00d5056b0c2c6eed987", null ], + [ "start", "class_metronome.html#ad5670c748042846b02cb33c613c50422", null ], + [ "stop", "class_metronome.html#a6d77db8aafda48abf3f2a91b9d898ad7", null ], + [ "deadline", "class_metronome.html#aa0b0ae903260675eded72ad071b5d564", null ], + [ "ticks", "class_metronome.html#a6e8230d6e291a8c23ebdb1704caabb5d", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_metronome.png b/extras/doc/html/class_metronome.png new file mode 100644 index 0000000000000000000000000000000000000000..d6c44cd4a8dc268c69a647e227c8f1e31e80f75a GIT binary patch literal 438 zcmV;n0ZIOeP)D0Z>^_hBTmnPE3F=q z1I;`Y`~OWW8vp + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
MultiLine< CONTROL_UPDATE_RATE, LERP_RATE > Member List
+
+
+ +

This is the complete list of members for MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
MultiLine()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
MultiLine()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
next()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
next()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
playing()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
playing()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setAllUpdateSteps(unsigned int target1_steps, unsigned int target2_steps, unsigned int target3_steps, unsigned int target4_steps)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setIdleLevel(Q15n16 value) (defined in MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setIdleTime(unsigned int msec) (defined in MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setIdleUpdateSteps(unsigned int steps) (defined in MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setLevels(Q15n16 target1, Q15n16 target2, Q15n16 target3, Q15n16 target4)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget1Level(Q15n16 value)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget1Time(unsigned int msec)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget1UpdateSteps(unsigned int steps)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget2Level(Q15n16 value)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget2Time(unsigned int msec)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget2UpdateSteps(unsigned int steps)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget3Level(Q15n16 value)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget3Time(unsigned int msec)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget3UpdateSteps(unsigned int steps)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget4Level(Q15n16 value)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget4Time(unsigned int msec)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTarget4UpdateSteps(unsigned int steps)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTargetLevel(uint8_t phase_num, Q15n16 value)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTargetTime(uint8_t phase_num, unsigned int msec)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTargetUpdateSteps(uint8_t phase_num, unsigned int steps)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
setTimes(unsigned int target1_ms, unsigned int target2_ms, unsigned int target3_ms, unsigned int target4_ms)MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
start()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
start()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
stop()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
stop()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
update()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
update()MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >inline
+
+ + + + diff --git a/extras/doc/html/class_multi_line.html b/extras/doc/html/class_multi_line.html new file mode 100644 index 000000000..dc970ba0a --- /dev/null +++ b/extras/doc/html/class_multi_line.html @@ -0,0 +1,1383 @@ + + + + + + + +Mozzi: MultiLine< CONTROL_UPDATE_RATE, LERP_RATE > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
MultiLine< CONTROL_UPDATE_RATE, LERP_RATE > Class Template Reference
+
+
+ +

A simple MultiLine envelope generator. + More...

+ +

#include <MultiLine.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

MultiLine ()
 Constructor.
 
void update ()
 Updates the internal controls of the MultiLine. More...
 
Q15n16 next ()
 Advances one step along the MultiLine and returns the level. More...
 
void start ()
 Start the target1 phase of the MultiLine. More...
 
void stop ()
 Start the target4 phase of the MultiLine. More...
 
void setTarget1Level (Q15n16 value)
 Set the target1 level of the MultiLine. More...
 
void setTarget2Level (Q15n16 value)
 Set the target2 level of the MultiLine. More...
 
void setTarget3Level (Q15n16 value)
 Set the target3 level of the MultiLine. More...
 
void setTarget4Level (Q15n16 value)
 Set the target4 level of the MultiLine. More...
 
+void setIdleLevel (Q15n16 value)
 
void setLevels (Q15n16 target1, Q15n16 target2, Q15n16 target3, Q15n16 target4)
 Set the target1, target2, target3 and target4 levels. More...
 
void setTarget1Time (unsigned int msec)
 Set the target1 time of the MultiLine in milliseconds. More...
 
void setTarget2Time (unsigned int msec)
 Set the target2 time of the MultiLine in milliseconds. More...
 
void setTarget3Time (unsigned int msec)
 Set the target3 time of the MultiLine in milliseconds. More...
 
void setTarget4Time (unsigned int msec)
 Set the target4 time of the MultiLine in milliseconds. More...
 
+void setIdleTime (unsigned int msec)
 
void setTimes (unsigned int target1_ms, unsigned int target2_ms, unsigned int target3_ms, unsigned int target4_ms)
 Set the target1, target2 and target4 times of the MultiLine in milliseconds. More...
 
void setTarget1UpdateSteps (unsigned int steps)
 Set the target1 time of the MultiLine, expressed as the number of update steps (not MultiLine::next() interpolation steps) in the target1 phase. More...
 
void setTarget2UpdateSteps (unsigned int steps)
 Set the target2 time of the MultiLine, expressed as the number of update steps (not MultiLine::next() interpolation steps) in the target2 phase. More...
 
void setTarget3UpdateSteps (unsigned int steps)
 Set the target3 time of the MultiLine, expressed as the number of update steps (not MultiLine::next() interpolation steps) in the target3 phase. More...
 
void setTarget4UpdateSteps (unsigned int steps)
 Set the target4 time of the MultiLine, expressed as the number of update steps (not MultiLine::next() interpolation steps) in the target4 phase. More...
 
+void setIdleUpdateSteps (unsigned int steps)
 
void setAllUpdateSteps (unsigned int target1_steps, unsigned int target2_steps, unsigned int target3_steps, unsigned int target4_steps)
 Set the target1, target2 and target4 times of the MultiLine, expressed in update steps (not MultiLine::next() interpolation steps). More...
 
bool playing ()
 Tells if the envelope is currently playing. More...
 
MultiLine ()
 Constructor.
 
void update ()
 Updates the internal controls of the MultiLine. More...
 
Q15n16 next ()
 Advances one step along the MultiLine and returns the level. More...
 
void start ()
 Start the target1 phase of the MultiLine. More...
 
void stop ()
 Start the target4 phase of the MultiLine. More...
 
void setTargetLevel (uint8_t phase_num, Q15n16 value)
 Set the target1 level of the MultiLine. More...
 
void setTargetTime (uint8_t phase_num, unsigned int msec)
 Set the target levels. More...
 
void setTargetUpdateSteps (uint8_t phase_num, unsigned int steps)
 Set the target1, target2 and target4 times of the MultiLine in milliseconds. More...
 
bool playing ()
 Set the target1, target2 and target4 times of the MultiLine, expressed in update steps (not MultiLine::next() interpolation steps). More...
 
+

Detailed Description

+

template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+class MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >

+ +

A simple MultiLine envelope generator.

+

This implementation has separate update() and next() methods, where next() interpolates values between each update(). The "normal" way to use this would be with update() in updateControl(), where it calculates a new internal state each control step, and then next() is in updateAudio(), called much more often, where it interpolates between the control values. This also allows the MultiLine updates to be made even more sparsely if desired, eg. every 3rd control update.

Template Parameters
+ + + +
CONTROL_UPDATE_RATEThe frequency of control updates. Ordinarily this will be CONTROL_RATE, but an alternative (amongst others) is to set this as well as the LERP_RATE parameter to AUDIO_RATE, and call both update() and next() in updateAudio(). Such a use would allow accurate envelopes with finer resolution of the control points than CONTROL_RATE.
LERP_RATESets how often next() will be called, to interpolate between updates set by CONTROL_UPDATE_RATE. This will produce the smoothest results if it's set to AUDIO_RATE, but if you need to save processor time and your envelope changes slowly or controls something like a filter where there may not be problems with glitchy or clicking transitions, LERP_RATE could be set to CONTROL_RATE (for instance). Then update() and next() could both be called in updateControl(), greatly reducing the amount of processing required compared to calling next() in updateAudio().
+
+
+

This implementation has separate update() and next() methods, where next() interpolates values between each update(). The "normal" way to use this would be with update() in updateControl(), where it calculates a new internal state each control step, and then next() is in updateAudio(), called much more often, where it interpolates between the control values. This also allows the MultiLine updates to be made even more sparsely if desired, eg. every 3rd control update.

Template Parameters
+ + + +
CONTROL_UPDATE_RATEThe frequency of control updates. Ordinarily this will be CONTROL_RATE, but an alternative (amongst others) is to set this as well as the LERP_RATE parameter to AUDIO_RATE, and call both update() and next() in updateAudio(). Such a use would allow accurate envelopes with finer resolution of the control points than CONTROL_RATE.
LERP_RATESets how often next() will be called, to interpolate between updates set by CONTROL_UPDATE_RATE. This will produce the smoothest results if it's set to AUDIO_RATE, but if you need to save processor time and your envelope changes slowly or controls something like a filter where there may not be problems with glitchy or clicking transitions, LERP_RATE could be set to CONTROL_RATE (for instance). Then update() and next() could both be called in updateControl(), greatly reducing the amount of processing required compared to calling next() in updateAudio().
+
+
+ +

Definition at line 45 of file MultiLine.h.

+

Member Function Documentation

+ +

§ next() [1/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
Q15n16 MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::next ()
+
+inline
+
+ +

Advances one step along the MultiLine and returns the level.

+

Call this in updateAudio().

Returns
the next value, as a Q15n16 fixed-point number.
+ +

Definition at line 161 of file MultiLine.h.

+ +
+
+ +

§ next() [2/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
Q15n16 MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::next ()
+
+inline
+
+ +

Advances one step along the MultiLine and returns the level.

+

Call this in updateAudio().

Returns
the next value, as a Q15n16 fixed-point number.
+ +

Definition at line 172 of file MultiLine2.h.

+ +
+
+ +

§ playing() [1/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
bool MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::playing ()
+
+inline
+
+ +

Set the target1, target2 and target4 times of the MultiLine, expressed in update steps (not MultiLine::next() interpolation steps).

+
Parameters
+ + + + + +
target1_stepsthe number of update steps in the target1 phase
target2_stepsthe number of update steps in the target2 phase
target3_stepsthe number of update steps in the target3 phase
target4_stepsthe number of update steps in the target4 phase Tells if the envelope is currently playing.
+
+
+
Returns
true if playing, false if in IDLE state
+ +

Definition at line 292 of file MultiLine2.h.

+ +
+
+ +

§ playing() [2/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
bool MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::playing ()
+
+inline
+
+ +

Tells if the envelope is currently playing.

+
Returns
true if playing, false if in IDLE state
+ +

Definition at line 403 of file MultiLine.h.

+ +
+
+ +

§ setAllUpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setAllUpdateSteps (unsigned int target1_steps,
unsigned int target2_steps,
unsigned int target3_steps,
unsigned int target4_steps 
)
+
+inline
+
+ +

Set the target1, target2 and target4 times of the MultiLine, expressed in update steps (not MultiLine::next() interpolation steps).

+
Parameters
+ + + + + +
target1_stepsthe number of update steps in the target1 phase
target2_stepsthe number of update steps in the target2 phase
target3_stepsthe number of update steps in the target3 phase
target4_stepsthe number of update steps in the target4 phase
+
+
+ +

Definition at line 388 of file MultiLine.h.

+ +
+
+ +

§ setLevels()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setLevels (Q15n16 target1,
Q15n16 target2,
Q15n16 target3,
Q15n16 target4 
)
+
+inline
+
+ +

Set the target1, target2, target3 and target4 levels.

+
Parameters
+ + + + + +
target1the new target1 level.
target2the new target3 level.
target1the new target3 level.
target2the new target4 level.
+
+
+ +

Definition at line 243 of file MultiLine.h.

+ +
+
+ +

§ setTarget1Level()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget1Level (Q15n16 value)
+
+inline
+
+ +

Set the target1 level of the MultiLine.

+
Parameters
+ + +
valuethe target1 level.
+
+
+ +

Definition at line 191 of file MultiLine.h.

+ +
+
+ +

§ setTarget1Time()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget1Time (unsigned int msec)
+
+inline
+
+ +

Set the target1 time of the MultiLine in milliseconds.

+

The actual time taken will be resolved within the resolution of CONTROL_RATE.

Parameters
+ + +
msecthe unsigned int target1 time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 260 of file MultiLine.h.

+ +
+
+ +

§ setTarget1UpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget1UpdateSteps (unsigned int steps)
+
+inline
+
+ +

Set the target1 time of the MultiLine, expressed as the number of update steps (not MultiLine::next() interpolation steps) in the target1 phase.

+
Parameters
+ + +
stepsthe number of times MultiLine::update() will be called in the target1 phase.
+
+
+ +

Definition at line 339 of file MultiLine.h.

+ +
+
+ +

§ setTarget2Level()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget2Level (Q15n16 value)
+
+inline
+
+ +

Set the target2 level of the MultiLine.

+
Parameters
+ + +
valuethe target2 level.
+
+
+ +

Definition at line 202 of file MultiLine.h.

+ +
+
+ +

§ setTarget2Time()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget2Time (unsigned int msec)
+
+inline
+
+ +

Set the target2 time of the MultiLine in milliseconds.

+

The actual time taken will be resolved within the resolution of CONTROL_RATE.

Parameters
+ + +
msecthe unsigned int target2 time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 273 of file MultiLine.h.

+ +
+
+ +

§ setTarget2UpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget2UpdateSteps (unsigned int steps)
+
+inline
+
+ +

Set the target2 time of the MultiLine, expressed as the number of update steps (not MultiLine::next() interpolation steps) in the target2 phase.

+
Parameters
+ + +
stepsthe number of times MultiLine::update() will be called in the target2 phase.
+
+
+ +

Definition at line 349 of file MultiLine.h.

+ +
+
+ +

§ setTarget3Level()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget3Level (Q15n16 value)
+
+inline
+
+ +

Set the target3 level of the MultiLine.

+
Parameters
+ + +
valuethe target3 level. Usually the same as the target2 level, for a steady target3ed note.
+
+
+ +

Definition at line 213 of file MultiLine.h.

+ +
+
+ +

§ setTarget3Time()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget3Time (unsigned int msec)
+
+inline
+
+ +

Set the target3 time of the MultiLine in milliseconds.

+

The actual time taken will be resolved within the resolution of CONTROL_RATE. The target3 phase will finish if the MultiLine recieves a stop().

Parameters
+ + +
msecthe unsigned int target3 time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 287 of file MultiLine.h.

+ +
+
+ +

§ setTarget3UpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget3UpdateSteps (unsigned int steps)
+
+inline
+
+ +

Set the target3 time of the MultiLine, expressed as the number of update steps (not MultiLine::next() interpolation steps) in the target3 phase.

+
Parameters
+ + +
stepsthe number of times MultiLine::update() will be called in the target3 phase.
+
+
+ +

Definition at line 359 of file MultiLine.h.

+ +
+
+ +

§ setTarget4Level()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget4Level (Q15n16 value)
+
+inline
+
+ +

Set the target4 level of the MultiLine.

+

Normally you'd make this 0, but you have the option of some other value.

Parameters
+ + +
valuethe target4 level (usually 0).
+
+
+ +

Definition at line 223 of file MultiLine.h.

+ +
+
+ +

§ setTarget4Time()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget4Time (unsigned int msec)
+
+inline
+
+ +

Set the target4 time of the MultiLine in milliseconds.

+

The actual time taken will be resolved within the resolution of CONTROL_RATE.

Parameters
+ + +
msecthe unsigned int target4 time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 301 of file MultiLine.h.

+ +
+
+ +

§ setTarget4UpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTarget4UpdateSteps (unsigned int steps)
+
+inline
+
+ +

Set the target4 time of the MultiLine, expressed as the number of update steps (not MultiLine::next() interpolation steps) in the target4 phase.

+
Parameters
+ + +
stepsthe number of times MultiLine::update() will be called in the target4 phase.
+
+
+ +

Definition at line 369 of file MultiLine.h.

+ +
+
+ +

§ setTargetLevel()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTargetLevel (uint8_t phase_num,
Q15n16 value 
)
+
+inline
+
+ +

Set the target1 level of the MultiLine.

+
Parameters
+ + +
valuethe target1 level.
+
+
+ +

Definition at line 203 of file MultiLine2.h.

+ +
+
+ +

§ setTargetTime()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTargetTime (uint8_t phase_num,
unsigned int msec 
)
+
+inline
+
+ +

Set the target levels.

+
Parameters
+ + + + + + +
target1the new target1 level.
target2the new target3 level.
target1the new target3 level.
target2the new target4 level. Set the target1 time of the MultiLine in milliseconds. The actual time taken will be resolved within the resolution of CONTROL_RATE.
msecthe unsigned int target1 time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 233 of file MultiLine2.h.

+ +
+
+ +

§ setTargetUpdateSteps()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTargetUpdateSteps (uint8_t phase_num,
unsigned int steps 
)
+
+inline
+
+ +

Set the target1, target2 and target4 times of the MultiLine in milliseconds.

+

The actual times will be resolved within the resolution of CONTROL_RATE.

Parameters
+ + + + + +
target1_msthe new target1 time in milliseconds.
target2_msthe new target2 time in milliseconds.
target3_msthe new target3 time in milliseconds.
target4_msthe new target4 time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens. Set the target1 time of the MultiLine, expressed as the number of update steps (not MultiLine::next() interpolation steps) in the target1 phase.
+
Parameters
+ + +
stepsthe number of times MultiLine::update() will be called in the target1 phase.
+
+
+ +

Definition at line 264 of file MultiLine2.h.

+ +
+
+ +

§ setTimes()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::setTimes (unsigned int target1_ms,
unsigned int target2_ms,
unsigned int target3_ms,
unsigned int target4_ms 
)
+
+inline
+
+ +

Set the target1, target2 and target4 times of the MultiLine in milliseconds.

+

The actual times will be resolved within the resolution of CONTROL_RATE.

Parameters
+ + + + + +
target1_msthe new target1 time in milliseconds.
target2_msthe new target2 time in milliseconds.
target3_msthe new target3 time in milliseconds.
target4_msthe new target4 time in milliseconds.
+
+
+
Note
Beware of low values (less than 20 or so, depending on how many steps are being taken), in case internal step size gets calculated as 0, which would mean nothing happens.
+ +

Definition at line 324 of file MultiLine.h.

+ +
+
+ +

§ start() [1/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::start ()
+
+inline
+
+ +

Start the target1 phase of the MultiLine.

+

THis will restart the MultiLine no matter what phase it is up to.

+ +

Definition at line 171 of file MultiLine.h.

+ +
+
+ +

§ start() [2/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::start ()
+
+inline
+
+ +

Start the target1 phase of the MultiLine.

+

THis will restart the MultiLine no matter what phase it is up to.

+ +

Definition at line 182 of file MultiLine2.h.

+ +
+
+ +

§ stop() [1/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::stop ()
+
+inline
+
+ +

Start the target4 phase of the MultiLine.

+ +

Definition at line 181 of file MultiLine.h.

+ +
+
+ +

§ stop() [2/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::stop ()
+
+inline
+
+ +

Start the target4 phase of the MultiLine.

+ +

Definition at line 193 of file MultiLine2.h.

+ +
+
+ +

§ update() [1/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::update ()
+
+inline
+
+ +

Updates the internal controls of the MultiLine.

+

Call this in updateControl().

+ +

Definition at line 128 of file MultiLine.h.

+ +
+
+ +

§ update() [2/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE, unsigned int LERP_RATE>
+ + + + + +
+ + + + + + + +
void MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >::update ()
+
+inline
+
+ +

Updates the internal controls of the MultiLine.

+

Call this in updateControl().

+ +

Definition at line 136 of file MultiLine2.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_multi_line.js b/extras/doc/html/class_multi_line.js new file mode 100644 index 000000000..75141f3e4 --- /dev/null +++ b/extras/doc/html/class_multi_line.js @@ -0,0 +1,36 @@ +var class_multi_line = +[ + [ "MultiLine", "class_multi_line.html#ad5aed7c3561c71a13398015e2f396fdc", null ], + [ "MultiLine", "class_multi_line.html#ad5aed7c3561c71a13398015e2f396fdc", null ], + [ "next", "class_multi_line.html#ab165b0a67b57bd590b95abc42b8bf6c2", null ], + [ "next", "class_multi_line.html#ab165b0a67b57bd590b95abc42b8bf6c2", null ], + [ "playing", "class_multi_line.html#a16a4fc1f4378a3c47a279fe0b0459448", null ], + [ "playing", "class_multi_line.html#a16a4fc1f4378a3c47a279fe0b0459448", null ], + [ "setAllUpdateSteps", "class_multi_line.html#a7e8ebd732f18ed056bc9754c372307a6", null ], + [ "setIdleLevel", "class_multi_line.html#a435d6c636d11f855eafe741412c6af01", null ], + [ "setIdleTime", "class_multi_line.html#a51dd61192163adb47ae88ba92eb69aa6", null ], + [ "setIdleUpdateSteps", "class_multi_line.html#a3437a6014233c63188ca790727089460", null ], + [ "setLevels", "class_multi_line.html#a2e3788c36c4a6f59c62770cfef2036e5", null ], + [ "setTarget1Level", "class_multi_line.html#aa79a31cd77050e22f975ada45635ac58", null ], + [ "setTarget1Time", "class_multi_line.html#abb797c4d04a052ae56130e2554b07b8d", null ], + [ "setTarget1UpdateSteps", "class_multi_line.html#af65dde0a6731c711fe65b4dd24293c43", null ], + [ "setTarget2Level", "class_multi_line.html#ae5d8c361d54349c81d2fa99cdb8ad579", null ], + [ "setTarget2Time", "class_multi_line.html#abc2ed9d5db8dd064228ffe7bb68b7044", null ], + [ "setTarget2UpdateSteps", "class_multi_line.html#ad0a22fc5f50162d1933689e18ab99b9c", null ], + [ "setTarget3Level", "class_multi_line.html#a7d7e332ca89c42eaf652e724c06cfd92", null ], + [ "setTarget3Time", "class_multi_line.html#a9edf92a819ee55e98d7d5360dcefe582", null ], + [ "setTarget3UpdateSteps", "class_multi_line.html#a65056b607b842c4b6a3bf3c66ab2e1db", null ], + [ "setTarget4Level", "class_multi_line.html#a0f505af65246d7faa0917543be6aacfe", null ], + [ "setTarget4Time", "class_multi_line.html#a7c750cf3cfefee3c345765cdfad8c3cf", null ], + [ "setTarget4UpdateSteps", "class_multi_line.html#a0bebb4cc76e0991a6ced481cd4e2cafa", null ], + [ "setTargetLevel", "class_multi_line.html#a95bb8b96b4160e0cde1c66e6e1f9473c", null ], + [ "setTargetTime", "class_multi_line.html#a499325d5ce2a3534780ea228c3228684", null ], + [ "setTargetUpdateSteps", "class_multi_line.html#a7c063cfd9a9e08b74eadcdb85be1a5a6", null ], + [ "setTimes", "class_multi_line.html#a0ad417817ec47553a1e8ebe1e1dc5f46", null ], + [ "start", "class_multi_line.html#aa33607aeff7aef37a1ed9151cac35ea2", null ], + [ "start", "class_multi_line.html#aa33607aeff7aef37a1ed9151cac35ea2", null ], + [ "stop", "class_multi_line.html#abae6da4598432fdce5fb568f5d330d9d", null ], + [ "stop", "class_multi_line.html#abae6da4598432fdce5fb568f5d330d9d", null ], + [ "update", "class_multi_line.html#a0f459efd016e16e8ba81612c7458cdeb", null ], + [ "update", "class_multi_line.html#a0f459efd016e16e8ba81612c7458cdeb", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_oscil-members.html b/extras/doc/html/class_oscil-members.html new file mode 100644 index 000000000..919ff2620 --- /dev/null +++ b/extras/doc/html/class_oscil-members.html @@ -0,0 +1,128 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Oscil< NUM_TABLE_CELLS, UPDATE_RATE > Member List
+
+ +
+ + + + diff --git a/extras/doc/html/class_oscil.html b/extras/doc/html/class_oscil.html new file mode 100644 index 000000000..877311ebc --- /dev/null +++ b/extras/doc/html/class_oscil.html @@ -0,0 +1,746 @@ + + + + + + + +Mozzi: Oscil< NUM_TABLE_CELLS, UPDATE_RATE > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Oscil< NUM_TABLE_CELLS, UPDATE_RATE > Class Template Reference
+
+
+ +

Oscil plays a wavetable, cycling through the table to generate an audio or control signal. + More...

+ +

#include <Oscil.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Oscil (const int8_t *TABLE_NAME)
 Constructor. More...
 
 Oscil ()
 Constructor. More...
 
int8_t next ()
 Updates the phase according to the current frequency and returns the sample at the new phase position. More...
 
void setTable (const int8_t *TABLE_NAME)
 Change the sound table which will be played by the Oscil. More...
 
void setPhase (unsigned int phase)
 Set the phase of the Oscil. More...
 
void setPhaseFractional (unsigned long phase)
 Set the phase of the Oscil. More...
 
unsigned long getPhaseFractional ()
 Get the phase of the Oscil in fractional format. More...
 
int8_t phMod (Q15n16 phmod_proportion)
 Returns the next sample given a phase modulation value. More...
 
void setFreq (int frequency)
 Set the oscillator frequency with an unsigned int. More...
 
void setFreq (float frequency)
 Set the oscillator frequency with a float. More...
 
void setFreq_Q24n8 (Q24n8 frequency)
 Set the frequency using Q24n8 fixed-point number format. More...
 
void setFreq_Q16n16 (Q16n16 frequency)
 Set the frequency using Q16n16 fixed-point number format. More...
 
int8_t atIndex (unsigned int index)
 Returns the sample at the given table index. More...
 
const unsigned long phaseIncFromFreq (int frequency)
 phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies. More...
 
void setPhaseInc (unsigned long phaseinc_fractional)
 Set a specific phase increment. More...
 
+

Detailed Description

+

template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+class Oscil< NUM_TABLE_CELLS, UPDATE_RATE >

+ +

Oscil plays a wavetable, cycling through the table to generate an audio or control signal.

+

The frequency of the signal can be set or changed with setFreq(), and the output of an Oscil can be produced with next() for a simple cycling oscillator, or atIndex() for a particular sample in the table.

Template Parameters
+ + + +
NUM_TABLE_CELLSThis is defined in the table ".h" file the Oscil will be using. It's important that it's a power of 2, and either a literal number (eg. "8192") or a defined macro, rather than a const or int, for the Oscil to run fast enough.
UPDATE_RATEThis will be AUDIO_RATE if the Oscil is updated in updateAudio(), or CONTROL_RATE if it's updated each time updateControl() is called. It could also be a fraction of CONTROL_RATE if you are doing some kind of cyclic updating in updateControl(), for example, to spread out the processor load.
+
+
+
Note
If you #define OSCIL_DITHER_PHASE before you #include <Oscil.h>, the phase increments will be dithered, which reduces spurious frequency spurs in the audio output, at the cost of some extra processing and memory.
+

+int8_t2mozzi

+

Converting soundfiles for Mozzi There is a python script called char2mozzi.py in the Mozzi/python folder. The usage is: char2mozzi.py infilename outfilename tablename samplerate

+ +

Definition at line 65 of file Oscil.h.

+

Constructor & Destructor Documentation

+ +

§ Oscil() [1/2]

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::Oscil (const int8_t * TABLE_NAME)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + +
TABLE_NAMEthe name of the array the Oscil will be using. This can be found in the table ".h" file if you are using a table made for Mozzi by the int8_t2mozzi.py python script in Mozzi's python folder.
+
+
+ +

Definition at line 75 of file Oscil.h.

+ +
+
+ +

§ Oscil() [2/2]

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + +
Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::Oscil ()
+
+inline
+
+ +

Constructor.

+

Declare an Oscil with template TABLE_NUM_CELLS and UPDATE_RATE parameters, without specifying a particular wave table for it to play. The table can be set or changed on the fly with setTable(). Any tables used by the Oscil must be the same size.

+ +

Definition at line 85 of file Oscil.h.

+ +
+
+

Member Function Documentation

+ +

§ atIndex()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
int8_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::atIndex (unsigned int index)
+
+inline
+
+ +

Returns the sample at the given table index.

+
Parameters
+ + +
indexbetween 0 and the table size.The index rolls back around to 0 if it's larger than the table size.
+
+
+
Returns
the sample at the given table index.
+ +

Definition at line 275 of file Oscil.h.

+ +
+
+ +

§ getPhaseFractional()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + +
unsigned long Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::getPhaseFractional ()
+
+inline
+
+ +

Get the phase of the Oscil in fractional format.

+
Returns
position in the wavetable, shifted left by OSCIL_F_BITS (which is 16 when this was written).
+ +

Definition at line 143 of file Oscil.h.

+ +
+
+ +

§ next()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + +
int8_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::next ()
+
+inline
+
+ +

Updates the phase according to the current frequency and returns the sample at the new phase position.

+
Returns
the next sample.
+ +

Definition at line 93 of file Oscil.h.

+ +
+
+ +

§ phaseIncFromFreq()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
const unsigned long Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::phaseIncFromFreq (int frequency)
+
+inline
+
+ +

phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.

+

Instead of recalculating the phase increment for each frequency in between, you can just calculate the phase increment for each end frequency with phaseIncFromFreq(), then use a Line to interpolate on the fly and use setPhaseInc() to set the phase increment at each step. (Note: I should really profile this with the oscilloscope to see if it's worth the extra confusion!)

Parameters
+ + +
frequencyfor which you want to calculate a phase increment value.
+
+
+
Returns
the phase increment value which will produce a given frequency.
+ +

Definition at line 293 of file Oscil.h.

+ +
+
+ +

§ phMod()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
int8_t Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::phMod (Q15n16 phmod_proportion)
+
+inline
+
+ +

Returns the next sample given a phase modulation value.

+
Parameters
+ + +
phmod_proportiona phase modulation value given as a proportion of the wave. The phmod_proportion parameter is a Q15n16 fixed-point number where the fractional n16 part represents almost -1 to almost 1, modulating the phase by one whole table length in each direction.
+
+
+
Returns
a sample from the table.
+ +

Definition at line 164 of file Oscil.h.

+ +
+
+ +

§ setFreq() [1/2]

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq (int frequency)
+
+inline
+
+ +

Set the oscillator frequency with an unsigned int.

+

This is faster than using a float, so it's useful when processor time is tight, but it can be tricky with low and high frequencies, depending on the size of the wavetable being used. If you're not getting the results you expect, try explicitly using a float, or try setFreq_Q24n8() or or setFreq_Q16n16().

Parameters
+ + +
frequencyto play the wave table.
+
+
+ +

Definition at line 179 of file Oscil.h.

+ +
+
+ +

§ setFreq() [2/2]

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq (float frequency)
+
+inline
+
+ +

Set the oscillator frequency with a float.

+

Using a float is the most reliable way to set frequencies, -Might- be slower than using an int but you need either this, setFreq_Q24n8() or setFreq_Q16n16() for fractional frequencies.

Parameters
+ + +
frequencyto play the wave table.
+
+
+ +

Definition at line 197 of file Oscil.h.

+ +
+
+ +

§ setFreq_Q16n16()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq_Q16n16 (Q16n16 frequency)
+
+inline
+
+ +

Set the frequency using Q16n16 fixed-point number format.

+

This is useful in combination with Q16n16_mtof(), a fast alternative to mtof(), using Q16n16 fixed-point format instead of floats.

Note
This should work OK with tables 2048 cells or smaller and frequencies up to 4096 Hz. Can't be used with UPDATE_RATE less than 64 Hz.
+
+This didn't run faster than float last time it was tested, after 2014 code changes. Need to see if 2014 changes improved or worsened performance.
+
Parameters
+ + +
frequencyin Q16n16 fixed-point number format.
+
+
+ +

Definition at line 246 of file Oscil.h.

+ +
+
+ +

§ setFreq_Q24n8()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setFreq_Q24n8 (Q24n8 frequency)
+
+inline
+
+ +

Set the frequency using Q24n8 fixed-point number format.

+

This might be faster than the float version for setting low frequencies such as 1.5 Hz, or other values which may not work well with your table size. A Q24n8 representation of 1.5 is 384 (ie. 1.5 * 256). Can't be used with UPDATE_RATE less than 64 Hz.

Parameters
+ + +
frequencyin Q24n8 fixed-point number format.
+
+
+ +

Definition at line 214 of file Oscil.h.

+ +
+
+ +

§ setPhase()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setPhase (unsigned int phase)
+
+inline
+
+ +

Set the phase of the Oscil.

+

This does the same thing as Sample::start(offset). Just different ways of thinking about oscillators and samples.

Parameters
+ + +
phasea position in the wavetable.
+
+
+ +

Definition at line 116 of file Oscil.h.

+ +
+
+ +

§ setPhaseFractional()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setPhaseFractional (unsigned long phase)
+
+inline
+
+ +

Set the phase of the Oscil.

+

Might be useful with getPhaseFractional().

Parameters
+ + +
phasea position in the wavetable.
+
+
+ +

Definition at line 131 of file Oscil.h.

+ +
+
+ +

§ setPhaseInc()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setPhaseInc (unsigned long phaseinc_fractional)
+
+inline
+
+ +

Set a specific phase increment.

+

See phaseIncFromFreq().

Parameters
+ + +
phaseinc_fractionala phase increment value as calculated by phaseIncFromFreq().
+
+
+ +

Definition at line 306 of file Oscil.h.

+ +
+
+ +

§ setTable()

+ +
+
+
+template<uint16_t NUM_TABLE_CELLS, uint16_t UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Oscil< NUM_TABLE_CELLS, UPDATE_RATE >::setTable (const int8_t * TABLE_NAME)
+
+inline
+
+ +

Change the sound table which will be played by the Oscil.

+
Parameters
+ + +
TABLE_NAMEis the name of the array in the table ".h" file you're using.
+
+
+ +

Definition at line 103 of file Oscil.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_oscil.js b/extras/doc/html/class_oscil.js new file mode 100644 index 000000000..c312de1b5 --- /dev/null +++ b/extras/doc/html/class_oscil.js @@ -0,0 +1,18 @@ +var class_oscil = +[ + [ "Oscil", "class_oscil.html#afe6a75646d2dd822a654bcd85242e800", null ], + [ "Oscil", "class_oscil.html#ab7dc5f97742d841fff6a4dca6d7242f3", null ], + [ "atIndex", "class_oscil.html#a97f2c0f28751641417202fee2a0776d3", null ], + [ "getPhaseFractional", "class_oscil.html#aa774ef68b06f9652e6ac23d4e9332554", null ], + [ "next", "class_oscil.html#a655de04690650b27182e3b4d07768d46", null ], + [ "phaseIncFromFreq", "class_oscil.html#a1cb5d694d59b7ae0df2e63fa5ce5cded", null ], + [ "phMod", "class_oscil.html#a4c6de90bc2d4183a5146eb2ae5e3dd2c", null ], + [ "setFreq", "class_oscil.html#a23121f22ea447918088a79c7f9748b3d", null ], + [ "setFreq", "class_oscil.html#aa342e74f8e73edda0b0f042770e3fba4", null ], + [ "setFreq_Q16n16", "class_oscil.html#a73b52741178ed490463d9ff471cebef3", null ], + [ "setFreq_Q24n8", "class_oscil.html#abc8a4ee236f7fd45dda9dece7292b6e7", null ], + [ "setPhase", "class_oscil.html#ab7b740eec56740426a47508562ed4dd5", null ], + [ "setPhaseFractional", "class_oscil.html#afc77bfc5a1ad5926ad8df37725d480d7", null ], + [ "setPhaseInc", "class_oscil.html#a2ff9bfcc57e07bf0df2ed7db186ecff7", null ], + [ "setTable", "class_oscil.html#a0b22d79fb2d6c7fb50b19c00f249ed84", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_over_sample-members.html b/extras/doc/html/class_over_sample-members.html new file mode 100644 index 000000000..3eb1884b1 --- /dev/null +++ b/extras/doc/html/class_over_sample-members.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
OverSample< T, RESOLUTION_INCREASE_BITS > Member List
+
+ +
+ + + + diff --git a/extras/doc/html/class_over_sample.html b/extras/doc/html/class_over_sample.html new file mode 100644 index 000000000..ed3d77483 --- /dev/null +++ b/extras/doc/html/class_over_sample.html @@ -0,0 +1,199 @@ + + + + + + + +Mozzi: OverSample< T, RESOLUTION_INCREASE_BITS > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
OverSample< T, RESOLUTION_INCREASE_BITS > Class Template Reference
+
+
+ +

Enables the resolution of analog inputs to be increased by oversampling and decimation. + More...

+ +

#include <OverSample.h>

+
+ + Inheritance diagram for OverSample< T, RESOLUTION_INCREASE_BITS >:
+
+
+ + + + + + +

+Public Member Functions

next (T input)
 Oversample and decimate the input to increase resolution by RESOLUTION_INCREASE_BITS;. More...
 
+ + + +

+Protected Member Functions

+T add (T input)
 
+

Detailed Description

+

template<class T, const uint8_t RESOLUTION_INCREASE_BITS>
+class OverSample< T, RESOLUTION_INCREASE_BITS >

+ +

Enables the resolution of analog inputs to be increased by oversampling and decimation.

+

Noise should be added to the input before it's digitised, then a succession of input readings are summed and finally divided to give a number with greater resolution than the ADC. Often, noise in the Arduino system will be enough, but there are other practical methods described in Enhancing ADC Resolution by Oversampling, as well as an explanation of the overall approach.

Template Parameters
+ + +
RESOLUTION_INCREASE_BITShow many extra bits of resolution to produce. The window length and the memory it needs increases quickly as the oversampling resolution increases. 1 bit = 4 unsigned ints (analog input between 0-1023) = 8 uint8_ts, 2 bits = 16 unsigned ints = 32 uint8_ts, 3 bits = 64 unsigned ints = 128 uint8_ts, More than 3 bits increase in resolution would require either using longs to store the readings, which would need 1024 uint8_ts for a 4 bit increase and 4096 uint8_ts for 5 bits (do any avr's have that much room?), or the average reading would have to be no more than 128 (for 4 bits increase), because 256 readings would be needed, and the sum of all 256 readings would have to fit into an int. (32767 / 256 = 128). Changing OverSample to use unsigned ints could enable an average reading of 256, but isn't tested properly yet.
+
+
+
Note
The higher the resolution, the more lag there will be. It's almost a RollingAverage filter, with the difference that OverSample doesn't divide by as much as you would for an average.
+ +

Definition at line 42 of file OverSample.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<class T , const uint8_t RESOLUTION_INCREASE_BITS>
+ + + + + +
+ + + + + + + + +
T OverSample< T, RESOLUTION_INCREASE_BITS >::next (input)
+
+inline
+
+ +

Oversample and decimate the input to increase resolution by RESOLUTION_INCREASE_BITS;.

+
Parameters
+ + +
inputan analog input to oversample.
+
+
+
Returns
the higher resolution result.
+
Note
timing 5.7us
+ +

Definition at line 53 of file OverSample.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_over_sample.js b/extras/doc/html/class_over_sample.js new file mode 100644 index 000000000..0f1026db1 --- /dev/null +++ b/extras/doc/html/class_over_sample.js @@ -0,0 +1,5 @@ +var class_over_sample = +[ + [ "add", "class_over_sample.html#a9c9f4083b726ed046c97a91535486317", null ], + [ "next", "class_over_sample.html#a413ca7de0dbf3d2afafd84aa75857442", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_over_sample.png b/extras/doc/html/class_over_sample.png new file mode 100644 index 0000000000000000000000000000000000000000..d675c7f1d8a24792d3e6aa0d22c98b61f508fffe GIT binary patch literal 1272 zcmcJP{ZrBh9LK-RvPaLZYi8lYyu(VD+R~A+KuyWMfIw=e*_DMgAp|p%rlwM@$hEXV zKBV&z(0rbWppsA9GE32h0>u}#=9v%irCf=gij4I`*FUh&-RtvyeeOO#e(sY=B?sHA z-@YCI02}adP$&Q(SQe+QwX*aH(y+!7_Eb_h-fT8o^sT{AnxA*aVjt=1>Y}6GgjvS5 z7emQmfMw~wQaugd3jnKlU{FB#4+yyE)rI%FHsWnH-f8CGQFLR#7kZ^gEgP%ftIM^& zDvEJ2orRO&|l`uie-y#-yfJZ(_wWLo|i8cR<V)HPy^?T3T`3y;VN?84uOFp4GAEX$uPp;|IF2O5Es4N4Y>{JDI2u-H0FCe{K4z zUpppDn>Fjkl0OP&I;$!*l3-g3of4Yx3x~JZ-KN-nHlw^11MizVd0S$_HYCyb$sAL< zR&hBxlT3%EvUCPR!HaK(;VT^8+>ge01UR*&f)%M*+8Z7g?UzfR2W!gFZKd+5!Y55_ z*w=)-O@au`gmFErzV48(J~o3)^Qm8{u#q@2t9qHr!?_H(Q;f4s)q$6O(k+0jF|%`%yH>zAF!WjxJ!vbunkGeq9Q zfYc~^6k}LBV7`1|@PT1xP7pto|Dl>MMd95T#L&B+1jmSnq+%%xGHmUNzHiIj;?L!y z{qNv#oA>$u{LxPDWOFyUvbeskOztjA{;!zoBt$pYqXaiZIUoYq5lZWup`W3|z`?}T z`BUfMK5PF)|HhdeP1iYR#kMQ@BYgm$UTURbu7O%E@4B<8Q13r8O~2=C+KH~#7$+U zIJzK?Gj^Fqrg}c(xV#7sbhlmjE^uq>h`h6RDM|Z>hyFrxFWgL zIUNUIL%9>CeLKvGeRRS&OWC)LURdCBWpM|LoG~78jT7#>^x#v%Dz)#FK;S51zXEFVIVK Axc~qF literal 0 HcmV?d00001 diff --git a/extras/doc/html/class_p_d_resonant-members.html b/extras/doc/html/class_p_d_resonant-members.html new file mode 100644 index 000000000..0e4ab8a3d --- /dev/null +++ b/extras/doc/html/class_p_d_resonant-members.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
PDResonant Member List
+
+
+ +

This is the complete list of members for PDResonant, including all inherited members.

+ + + + + + + +
next()PDResonantinline
noteOff(byte channel, byte pitch, byte velocity)PDResonantinline
noteOn(byte channel, byte pitch, byte velocity)PDResonantinline
PDResonant()PDResonantinline
setPDEnv(int attack, int decay)PDResonantinline
update()PDResonantinline
+
+ + + + diff --git a/extras/doc/html/class_p_d_resonant.html b/extras/doc/html/class_p_d_resonant.html new file mode 100644 index 000000000..326d2349e --- /dev/null +++ b/extras/doc/html/class_p_d_resonant.html @@ -0,0 +1,363 @@ + + + + + + + +Mozzi: PDResonant Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
PDResonant Class Reference
+
+
+ +

PDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter, based on https://en.wikipedia.org/wiki/Phase_distortion_synthesis. + More...

+ +

#include <PDResonant.h>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

PDResonant ()
 Constructor.
 
void noteOn (byte channel, byte pitch, byte velocity)
 Play a note in response to midi input. More...
 
void noteOff (byte channel, byte pitch, byte velocity)
 Stop a note in response to midi input. More...
 
void setPDEnv (int attack, int decay)
 Set the resonant filter sweep parameters. More...
 
void update ()
 Update the filter sweep. More...
 
int next ()
 Produce the audio output. More...
 
+

Detailed Description

+

PDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter, based on https://en.wikipedia.org/wiki/Phase_distortion_synthesis.

+

The class shows how the Mozzi Phasor class can be used to generate an index into a wavetable, and an ADSR is used to modulate the effect by modifying the Phasor frequency and sync. More complex phase distortion effects could be developed by using precalculated tables, or calcuating tables on the fly using a double buffer, or a line-breakpoint model, a sort of hybridPhasor-Line object.

+ +

Definition at line 33 of file PDResonant.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + +
int PDResonant::next ()
+
+inline
+
+ +

Produce the audio output.

+

This goes in updateAudio().

+ +

Definition at line 104 of file PDResonant.h.

+ +
+
+ +

§ noteOff()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void PDResonant::noteOff (byte channel,
byte pitch,
byte velocity 
)
+
+inline
+
+ +

Stop a note in response to midi input.

+

Params copied from MIDI library HandleNoteOff()

Parameters
+ + + + +
channelis the midi channel
pitchis the frequency in Hz
velocityyou know what it is
+
+
+ +

Definition at line 69 of file PDResonant.h.

+ +
+
+ +

§ noteOn()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void PDResonant::noteOn (byte channel,
byte pitch,
byte velocity 
)
+
+inline
+
+ +

Play a note in response to midi input.

+

Params copied from MIDI library HandleNoteOn().

Parameters
+ + + + +
channelis the midi channel
pitchis the frequency in Hz
velocityyou know what it is
+
+
+ +

Definition at line 54 of file PDResonant.h.

+ +
+
+ +

§ setPDEnv()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void PDResonant::setPDEnv (int attack,
int decay 
)
+
+inline
+
+ +

Set the resonant filter sweep parameters.

+
Parameters
+ + + +
attackADSR attack
decayADSR decay
+
+
+ +

Definition at line 80 of file PDResonant.h.

+ +
+
+ +

§ update()

+ +
+
+ + + + + +
+ + + + + + + +
void PDResonant::update ()
+
+inline
+
+ +

Update the filter sweep.

+

Use this in updateControl().

+ +

Definition at line 93 of file PDResonant.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_p_d_resonant.js b/extras/doc/html/class_p_d_resonant.js new file mode 100644 index 000000000..bd8eb1f7d --- /dev/null +++ b/extras/doc/html/class_p_d_resonant.js @@ -0,0 +1,9 @@ +var class_p_d_resonant = +[ + [ "PDResonant", "class_p_d_resonant.html#a2bd77e08be68fc6ce89f1f71a7e1e069", null ], + [ "next", "class_p_d_resonant.html#a80bd42c7ea92a64c3b8a42779a1e0d26", null ], + [ "noteOff", "class_p_d_resonant.html#a2b548734ea968d99d7939d68c95411cb", null ], + [ "noteOn", "class_p_d_resonant.html#a7d4497f3b5944f73dd2fb82d68fc099b", null ], + [ "setPDEnv", "class_p_d_resonant.html#a7c921c18d37b0625beab9e4f06c69ca4", null ], + [ "update", "class_p_d_resonant.html#ae604c6401c636ab32757913f21c6dbe6", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_phasor-members.html b/extras/doc/html/class_phasor-members.html new file mode 100644 index 000000000..4f0bba373 --- /dev/null +++ b/extras/doc/html/class_phasor-members.html @@ -0,0 +1,120 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Phasor< UPDATE_RATE > Member List
+
+
+ +

This is the complete list of members for Phasor< UPDATE_RATE >, including all inherited members.

+ + + + + + + + +
next()Phasor< UPDATE_RATE >inline
phaseIncFromFreq(int frequency)Phasor< UPDATE_RATE >inline
Phasor()Phasor< UPDATE_RATE >inline
set(unsigned long value)Phasor< UPDATE_RATE >inline
setFreq(int frequency)Phasor< UPDATE_RATE >inline
setFreq(float frequency)Phasor< UPDATE_RATE >inline
setPhaseInc(unsigned long stepsize)Phasor< UPDATE_RATE >inline
+
+ + + + diff --git a/extras/doc/html/class_phasor.html b/extras/doc/html/class_phasor.html new file mode 100644 index 000000000..59d645d78 --- /dev/null +++ b/extras/doc/html/class_phasor.html @@ -0,0 +1,410 @@ + + + + + + + +Mozzi: Phasor< UPDATE_RATE > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Phasor< UPDATE_RATE > Class Template Reference
+
+
+ +

Phasor repeatedly generates a high resolution ramp at a variable frequency. + More...

+ +

#include <Phasor.h>

+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Phasor ()
 Constructor. More...
 
unsigned long next ()
 Increments one step along the phase. More...
 
void set (unsigned long value)
 Set the current value of the phasor. More...
 
void setFreq (int frequency)
 Set the Phasor frequency with an unsigned int. More...
 
void setFreq (float frequency)
 Set the Phasor frequency with a float. More...
 
unsigned long phaseIncFromFreq (int frequency)
 phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies. More...
 
void setPhaseInc (unsigned long stepsize)
 Set a specific phase increment. More...
 
+

Detailed Description

+

template<unsigned int UPDATE_RATE>
+class Phasor< UPDATE_RATE >

+ +

Phasor repeatedly generates a high resolution ramp at a variable frequency.

+

The output of Phasor.next() is an unsigned number between 0 and 4294967295, the maximum that can be expressed by an unsigned long.

Template Parameters
+ + +
UPDATE_RATEthe rate at which the Phasor will be updated, usually CONTROL_RATE or AUDIO_RATE.
+
+
+ +

Definition at line 33 of file Phasor.h.

+

Constructor & Destructor Documentation

+ +

§ Phasor()

+ +
+
+
+template<unsigned int UPDATE_RATE>
+ + + + + +
+ + + + + + + +
Phasor< UPDATE_RATE >::Phasor ()
+
+inline
+
+ +

Constructor.

+

"Phasor <AUDIO_RATE> myphasor;" makes a Phasor which updates at AUDIO_RATE.

+ +

Definition at line 43 of file Phasor.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<unsigned int UPDATE_RATE>
+ + + + + +
+ + + + + + + +
unsigned long Phasor< UPDATE_RATE >::next ()
+
+inline
+
+ +

Increments one step along the phase.

+
Returns
the next value.
+ +

Definition at line 51 of file Phasor.h.

+ +
+
+ +

§ phaseIncFromFreq()

+ +
+
+
+template<unsigned int UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
unsigned long Phasor< UPDATE_RATE >::phaseIncFromFreq (int frequency)
+
+inline
+
+ +

phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.

+

Instead of recalculating the phase increment for each frequency in between, you can just calculate the phase increment for each end frequency with phaseIncFromFreq(), then use a Line to interpolate on the fly and use setPhaseInc() to set the phase increment at each step. (Note: I should really profile this with the oscilloscope to see if it's worth the extra confusion!)

Parameters
+ + +
frequencyfor which you want to calculate a phase increment value.
+
+
+
Returns
the phase increment value which will produce a given frequency.
+ +

Definition at line 106 of file Phasor.h.

+ +
+
+ +

§ set()

+ +
+
+
+template<unsigned int UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Phasor< UPDATE_RATE >::set (unsigned long value)
+
+inline
+
+ +

Set the current value of the phasor.

+

The Phasor will continue incrementing from this value using any previously calculated step size.

+ +

Definition at line 64 of file Phasor.h.

+ +
+
+ +

§ setFreq() [1/2]

+ +
+
+
+template<unsigned int UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Phasor< UPDATE_RATE >::setFreq (int frequency)
+
+inline
+
+ +

Set the Phasor frequency with an unsigned int.

+
Parameters
+ + +
frequencyis how many times per second to count from 0 to the maximum unsigned long value 4294967295.
+
+
+
Note
Timing 8us
+ +

Definition at line 76 of file Phasor.h.

+ +
+
+ +

§ setFreq() [2/2]

+ +
+
+
+template<unsigned int UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Phasor< UPDATE_RATE >::setFreq (float frequency)
+
+inline
+
+ +

Set the Phasor frequency with a float.

+
Parameters
+ + +
frequencyis how many times per second to count from 0 to the maximum unsigned long value 4294967295.
+
+
+ +

Definition at line 87 of file Phasor.h.

+ +
+
+ +

§ setPhaseInc()

+ +
+
+
+template<unsigned int UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Phasor< UPDATE_RATE >::setPhaseInc (unsigned long stepsize)
+
+inline
+
+ +

Set a specific phase increment.

+

See phaseIncFromFreq().

Parameters
+ + +
stepsizea phase increment value as calculated by phaseIncFromFreq().
+
+
+ +

Definition at line 116 of file Phasor.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_phasor.js b/extras/doc/html/class_phasor.js new file mode 100644 index 000000000..65f719c57 --- /dev/null +++ b/extras/doc/html/class_phasor.js @@ -0,0 +1,10 @@ +var class_phasor = +[ + [ "Phasor", "class_phasor.html#a147c4c3aa7506c3da800e6cc77deb4ac", null ], + [ "next", "class_phasor.html#a08ab94aeb466450173bd486fbf8eb823", null ], + [ "phaseIncFromFreq", "class_phasor.html#a9b5992b53fa7e449fec950df00c46230", null ], + [ "set", "class_phasor.html#a509e4a782a36cb9e913da170d6707421", null ], + [ "setFreq", "class_phasor.html#afc6106c648bddb5f2f084b8f34216b0f", null ], + [ "setFreq", "class_phasor.html#a81f1976ebb4a91f66f26674efca52072", null ], + [ "setPhaseInc", "class_phasor.html#aa3d62bdf762247b2523c0a625caeedd7", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_portamento-members.html b/extras/doc/html/class_portamento-members.html new file mode 100644 index 000000000..d92a3d1c7 --- /dev/null +++ b/extras/doc/html/class_portamento-members.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Portamento< CONTROL_UPDATE_RATE > Member List
+
+
+ +

This is the complete list of members for Portamento< CONTROL_UPDATE_RATE >, including all inherited members.

+ + + + + + +
next()Portamento< CONTROL_UPDATE_RATE >inline
Portamento()Portamento< CONTROL_UPDATE_RATE >inline
setTime(unsigned int milliseconds)Portamento< CONTROL_UPDATE_RATE >inline
start(uint8_t note)Portamento< CONTROL_UPDATE_RATE >inline
start(Q16n16 note)Portamento< CONTROL_UPDATE_RATE >inline
+
+ + + + diff --git a/extras/doc/html/class_portamento.html b/extras/doc/html/class_portamento.html new file mode 100644 index 000000000..66f3e4a6e --- /dev/null +++ b/extras/doc/html/class_portamento.html @@ -0,0 +1,293 @@ + + + + + + + +Mozzi: Portamento< CONTROL_UPDATE_RATE > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Portamento< CONTROL_UPDATE_RATE > Class Template Reference
+
+
+ +

A simple portamento (pitch slide from one note to the next) effect, useful for note-based applications. + More...

+ +

#include <Portamento.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

Portamento ()
 Constructor.
 
void setTime (unsigned int milliseconds)
 Set how long it will take to slide from note to note, in milliseconds. More...
 
void start (uint8_t note)
 Call this at note-on, it initialises the portamento. More...
 
void start (Q16n16 note)
 Call this at note-on, it initialises the portamento. More...
 
Q16n16 next ()
 Use this in updateControl() to provide a frequency to the oscillator it's controlling. More...
 
+

Detailed Description

+

template<unsigned int CONTROL_UPDATE_RATE>
+class Portamento< CONTROL_UPDATE_RATE >

+ +

A simple portamento (pitch slide from one note to the next) effect, useful for note-based applications.

+ +

Definition at line 22 of file Portamento.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE>
+ + + + + +
+ + + + + + + +
Q16n16 Portamento< CONTROL_UPDATE_RATE >::next ()
+
+inline
+
+ +

Use this in updateControl() to provide a frequency to the oscillator it's controlling.

+

For example: myOscil.setFreq_Q16n16(myPortamento.next());

Returns
a Q16n16 fractional frequency value, progressing smoothly between successive notes.
+ +

Definition at line 72 of file Portamento.h.

+ +
+
+ +

§ setTime()

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Portamento< CONTROL_UPDATE_RATE >::setTime (unsigned int milliseconds)
+
+inline
+
+ +

Set how long it will take to slide from note to note, in milliseconds.

+
Parameters
+ + +
milliseconds
+
+
+ +

Definition at line 38 of file Portamento.h.

+ +
+
+ +

§ start() [1/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Portamento< CONTROL_UPDATE_RATE >::start (uint8_t note)
+
+inline
+
+ +

Call this at note-on, it initialises the portamento.

+
Parameters
+ + +
notea midi note number, a whole number.
+
+
+ +

Definition at line 47 of file Portamento.h.

+ +
+
+ +

§ start() [2/2]

+ +
+
+
+template<unsigned int CONTROL_UPDATE_RATE>
+ + + + + +
+ + + + + + + + +
void Portamento< CONTROL_UPDATE_RATE >::start (Q16n16 note)
+
+inline
+
+ +

Call this at note-on, it initialises the portamento.

+
Parameters
+ + +
notea midi note number in Q16n16 fractional format. This is useful for non-whole note or detuned values.
+
+
+ +

Definition at line 58 of file Portamento.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_portamento.js b/extras/doc/html/class_portamento.js new file mode 100644 index 000000000..72b64161f --- /dev/null +++ b/extras/doc/html/class_portamento.js @@ -0,0 +1,8 @@ +var class_portamento = +[ + [ "Portamento", "class_portamento.html#adc910a47d3fe8eff848d6de42d7280df", null ], + [ "next", "class_portamento.html#ad39101f5275c433713df7699214638bc", null ], + [ "setTime", "class_portamento.html#af19c3b3c189e111079f54211ff5a4ebe", null ], + [ "start", "class_portamento.html#aae67a74be47cb2e8a6ffbb90786221af", null ], + [ "start", "class_portamento.html#af70701abfdd9f3d788f3b313e38017d0", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_r_cpoll-members.html b/extras/doc/html/class_r_cpoll-members.html new file mode 100644 index 000000000..4b6bf5d08 --- /dev/null +++ b/extras/doc/html/class_r_cpoll-members.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
RCpoll< SENSOR_PIN > Member List
+
+
+ +

This is the complete list of members for RCpoll< SENSOR_PIN >, including all inherited members.

+ + + +
next()RCpoll< SENSOR_PIN >inline
RCpoll()RCpoll< SENSOR_PIN >inline
+
+ + + + diff --git a/extras/doc/html/class_r_cpoll.html b/extras/doc/html/class_r_cpoll.html new file mode 100644 index 000000000..4e2891037 --- /dev/null +++ b/extras/doc/html/class_r_cpoll.html @@ -0,0 +1,171 @@ + + + + + + + +Mozzi: RCpoll< SENSOR_PIN > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
RCpoll< SENSOR_PIN > Class Template Reference
+
+
+ +

A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime. + More...

+ +

#include <RCpoll.h>

+ + + + + + + + +

+Public Member Functions

RCpoll ()
 Constructor.
 
unsigned int next ()
 Checks whether the capacitor has charged, and returns how long it took for the most recent charge. More...
 
+

Detailed Description

+

template<unsigned char SENSOR_PIN>
+class RCpoll< SENSOR_PIN >

+ +

A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime.

+

This is designed to be used in updateControl(). Each time it is called, it checks if a capacitor has charged, and returns an output reflecting how long it took for the most recent charge.

+ +

Definition at line 12 of file RCpoll.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<unsigned char SENSOR_PIN>
+ + + + + +
+ + + + + + + +
unsigned int RCpoll< SENSOR_PIN >::next ()
+
+inline
+
+ +

Checks whether the capacitor has charged, and returns how long it took for the most recent charge.

+

This would preferably be called in updateControl(), but if the resolution isn't fine enough or the pin charges too fast for updateControl() to catch, try it in updateAudio().

Returns
the sensor value, reflected in how many checking cycles it took to charge the capacitor.
+ +

Definition at line 29 of file RCpoll.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_r_cpoll.js b/extras/doc/html/class_r_cpoll.js new file mode 100644 index 000000000..49676e94b --- /dev/null +++ b/extras/doc/html/class_r_cpoll.js @@ -0,0 +1,5 @@ +var class_r_cpoll = +[ + [ "RCpoll", "class_r_cpoll.html#a44673505bbfbac288ec994dd48017e83", null ], + [ "next", "class_r_cpoll.html#ab61697b3922ed289c8d501ccd11cbd6f", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_reverb_tank-members.html b/extras/doc/html/class_reverb_tank-members.html new file mode 100644 index 000000000..96d9493ea --- /dev/null +++ b/extras/doc/html/class_reverb_tank-members.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
ReverbTank Member List
+
+
+ +

This is the complete list of members for ReverbTank, including all inherited members.

+ + + + + + +
next(int input)ReverbTankinline
ReverbTank(int8_t early_reflection1=37, int8_t early_reflection2=77, int8_t early_reflection3=127, int8_t loop1_delay=117, uint8_t loop2_delay=255, int8_t feedback_level=85)ReverbTankinline
setEarlyReflections(int8_t early_reflection1, int8_t early_reflection2, int8_t early_reflection3)ReverbTankinline
setFeebackLevel(int8_t feedback_level)ReverbTankinline
setLoopDelays(int8_t loop1_delay, uint8_t loop2_delay)ReverbTankinline
+
+ + + + diff --git a/extras/doc/html/class_reverb_tank.html b/extras/doc/html/class_reverb_tank.html new file mode 100644 index 000000000..0e73bfbe0 --- /dev/null +++ b/extras/doc/html/class_reverb_tank.html @@ -0,0 +1,396 @@ + + + + + + + +Mozzi: ReverbTank Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
ReverbTank Class Reference
+
+
+ +

A reverb which sounds like the inside of a tin can. + More...

+ +

#include <ReverbTank.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 ReverbTank (int8_t early_reflection1=37, int8_t early_reflection2=77, int8_t early_reflection3=127, int8_t loop1_delay=117, uint8_t loop2_delay=255, int8_t feedback_level=85)
 Constructor. More...
 
int next (int input)
 Process the next audio sample and return the reverbed signal. More...
 
void setEarlyReflections (int8_t early_reflection1, int8_t early_reflection2, int8_t early_reflection3)
 Set the early reflection times in terms of delay cells. More...
 
void setLoopDelays (int8_t loop1_delay, uint8_t loop2_delay)
 Set the loop delay times in terms of delay cells. More...
 
void setFeebackLevel (int8_t feedback_level)
 Set the feedback level for the recirculating delays. More...
 
+

Detailed Description

+

A reverb which sounds like the inside of a tin can.

+

ReverbTank is small enough to fit on the Arduino Nano, which for some reason wasn't able to fit a larger version which did fit on other 328 based boards. For simplicity, ReverbTank has hardcoded maximum delay sizes but also has default delay times which can be changed in the constructor or by setting during run time to allow live tweaking. This is a highly simplified design drawing on and probably misinterpreting Miller Puckette's G08.reverb recirculating reverb example for Pure Data.

+

The room size according to the maximum delay lengths corresponds to:

+

early reflections and recirculating delay 1: 128/16384 seconds * 340.29 m/s speed of sound = 3.5 metres recirculating delay 2: 7 metres It looks bigger on paper than it sounds.

+ +

Definition at line 32 of file ReverbTank.h.

+

Constructor & Destructor Documentation

+ +

§ ReverbTank()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ReverbTank::ReverbTank (int8_t early_reflection1 = 37,
int8_t early_reflection2 = 77,
int8_t early_reflection3 = 127,
int8_t loop1_delay = 117,
uint8_t loop2_delay = 255,
int8_t feedback_level = 85 
)
+
+inline
+
+ +

Constructor.

+

This has default values for the early reflection times, recirculating delay lengths and feedback level, which can be changed here in the constructor or set with other functions during run time.

Parameters
+ + + + + + + +
early_reflection1how long in delay cells till the first early reflection, from 0 to 127
early_reflection2how long in delay cells till the second early reflection, from early_reflection1 to 127
early_reflection3how long in delay cells till the third early reflection, from early_reflection2 to 127
loop1_delayhow long in delay cells for the first recirculating delay, form 0 to 127
loop2_delayhow long in delay cells for the first recirculating delay, form 0 to 255
feedback_levelhow much recirculation, from -128 to 127
+
+
+ +

Definition at line 45 of file ReverbTank.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + + +
int ReverbTank::next (int input)
+
+inline
+
+ +

Process the next audio sample and return the reverbed signal.

+

This returns only the "wet" signal, which can be combined with the dry input signal in the sketch.

Parameters
+ + +
inputthe audio signal to process
+
+
+
Returns
the processed signal
+ +

Definition at line 65 of file ReverbTank.h.

+ +
+
+ +

§ setEarlyReflections()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void ReverbTank::setEarlyReflections (int8_t early_reflection1,
int8_t early_reflection2,
int8_t early_reflection3 
)
+
+inline
+
+ +

Set the early reflection times in terms of delay cells.

+
Parameters
+ + + + +
early_reflection1how long in delay cells till the first early reflection, from 0 to 127
early_reflection2how long in delay cells till the second early reflection, from early_reflection1 to 127
early_reflection3how long in delay cells till the third early reflection, from early_reflection2 to 127
+
+
+ +

Definition at line 91 of file ReverbTank.h.

+ +
+
+ +

§ setFeebackLevel()

+ +
+
+ + + + + +
+ + + + + + + + +
void ReverbTank::setFeebackLevel (int8_t feedback_level)
+
+inline
+
+ +

Set the feedback level for the recirculating delays.

+
Parameters
+ + +
feedback_levelhow much recirculation, from -128 to 127
+
+
+ +

Definition at line 110 of file ReverbTank.h.

+ +
+
+ +

§ setLoopDelays()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void ReverbTank::setLoopDelays (int8_t loop1_delay,
uint8_t loop2_delay 
)
+
+inline
+
+ +

Set the loop delay times in terms of delay cells.

+
Parameters
+ + + +
loop1_delayhow long in delay cells for the first recirculating delay, form 0 to 127
loop2_delayhow long in delay cells for the first recirculating delay, form 0 to 255
+
+
+ +

Definition at line 102 of file ReverbTank.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_reverb_tank.js b/extras/doc/html/class_reverb_tank.js new file mode 100644 index 000000000..3119c98fc --- /dev/null +++ b/extras/doc/html/class_reverb_tank.js @@ -0,0 +1,8 @@ +var class_reverb_tank = +[ + [ "ReverbTank", "class_reverb_tank.html#a3ca18b03d045df164462338f6ed0648c", null ], + [ "next", "class_reverb_tank.html#a4930ae7a871dba610fb141d7ab83d827", null ], + [ "setEarlyReflections", "class_reverb_tank.html#a6d27d8a02ec9551a5338bb1ba4bf9af2", null ], + [ "setFeebackLevel", "class_reverb_tank.html#a91eeb601e42df576737f0d44dc73c653", null ], + [ "setLoopDelays", "class_reverb_tank.html#a0b348b630007a5cbda8b314d0c8dd604", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_rolling_average-members.html b/extras/doc/html/class_rolling_average-members.html new file mode 100644 index 000000000..a1b7f6480 --- /dev/null +++ b/extras/doc/html/class_rolling_average-members.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
RollingAverage< T, WINDOW_LENGTH > Member List
+
+
+ +

This is the complete list of members for RollingAverage< T, WINDOW_LENGTH >, including all inherited members.

+ + + + +
add(T input) (defined in RollingAverage< T, WINDOW_LENGTH >)RollingAverage< T, WINDOW_LENGTH >inlineprotected
next(T input)RollingAverage< T, WINDOW_LENGTH >inline
RollingAverage()RollingAverage< T, WINDOW_LENGTH >inline
+
+ + + + diff --git a/extras/doc/html/class_rolling_average.html b/extras/doc/html/class_rolling_average.html new file mode 100644 index 000000000..6aaaae73d --- /dev/null +++ b/extras/doc/html/class_rolling_average.html @@ -0,0 +1,230 @@ + + + + + + + +Mozzi: RollingAverage< T, WINDOW_LENGTH > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
RollingAverage< T, WINDOW_LENGTH > Class Template Reference
+
+
+ +

Calculates a running average over a specified number of the most recent readings. + More...

+ +

#include <RollingAverage.h>

+ + + + + + + + +

+Public Member Functions

 RollingAverage ()
 Constructor. More...
 
next (T input)
 Give the average of the last WINDOW_LENGTH. More...
 
+ + + +

+Protected Member Functions

+T add (T input)
 
+

Detailed Description

+

template<class T, int WINDOW_LENGTH>
+class RollingAverage< T, WINDOW_LENGTH >

+ +

Calculates a running average over a specified number of the most recent readings.

+

Like Smooth(), this is good for smoothing analog inputs in updateControl().

Template Parameters
+ + +
WINDOW_LENGTHthe number of readings to include in the rolling average. It must be a power of two (unless you're averaging floats). The higher the number, the more the readings will be smoothed, but the slower the output will respond to the input.
+
+
+ +

Definition at line 37 of file RollingAverage.h.

+

Constructor & Destructor Documentation

+ +

§ RollingAverage()

+ +
+
+
+template<class T, int WINDOW_LENGTH>
+ + + + + +
+ + + + + + + +
RollingAverage< T, WINDOW_LENGTH >::RollingAverage ()
+
+inline
+
+ +

Constructor.

+
Template Parameters
+ + + +
Tthe type of numbers to average, eg. int, unsigned int, float etc. It will be relatively slow with floating point numbers, as it will use a divide operation for the averaging. Nevertheless, there might be a time when it's useful.
WINDOW_LENGTHthe number of readings to keep track of. It must be a power of two (unless you're averaging floats). The higher the number, the more the readings will be smoothed, but the slower the output will respond to the input.
+
+
+
Note
Watch out for overflows!
+ +

Definition at line 51 of file RollingAverage.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<class T, int WINDOW_LENGTH>
+ + + + + +
+ + + + + + + + +
T RollingAverage< T, WINDOW_LENGTH >::next (input)
+
+inline
+
+ +

Give the average of the last WINDOW_LENGTH.

+
Parameters
+ + +
inputa control signal such as an analog input which needs smoothing.
+
+
+
Returns
the smoothed result.
+
Note
unsigned int timing 5.7us
+ +

Definition at line 64 of file RollingAverage.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_rolling_average.js b/extras/doc/html/class_rolling_average.js new file mode 100644 index 000000000..1b9015f38 --- /dev/null +++ b/extras/doc/html/class_rolling_average.js @@ -0,0 +1,6 @@ +var class_rolling_average = +[ + [ "RollingAverage", "class_rolling_average.html#a11cf7b9e1278648b1eb10e5534fe3e29", null ], + [ "add", "class_rolling_average.html#a9c9f4083b726ed046c97a91535486317", null ], + [ "next", "class_rolling_average.html#a23c4b93258faace0c7ee60eb395d2c4b", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_rolling_stat-members.html b/extras/doc/html/class_rolling_stat-members.html new file mode 100644 index 000000000..dec473dab --- /dev/null +++ b/extras/doc/html/class_rolling_stat-members.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
RollingStat< T, WINDOW_LENGTH > Member List
+
+ +
+ + + + diff --git a/extras/doc/html/class_rolling_stat.html b/extras/doc/html/class_rolling_stat.html new file mode 100644 index 000000000..1a00fd785 --- /dev/null +++ b/extras/doc/html/class_rolling_stat.html @@ -0,0 +1,331 @@ + + + + + + + +Mozzi: RollingStat< T, WINDOW_LENGTH > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
RollingStat< T, WINDOW_LENGTH > Class Template Reference
+
+
+ +

Calculates an approximation of the variance and standard deviation for a window of recent inputs. + More...

+ +

#include <RollingStat.h>

+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

RollingStat ()
 Constructor.
 
void update (T x)
 Update the mean and variance given a new input value. More...
 
void update (int8_t x)
 Update the mean and variance given a new input value. More...
 
getMean () const
 Return the mean of the last WINDOW_LENGTH number of inputs. More...
 
getVariance () const
 Return the approximate variance of the last WINDOW_LENGTH number of inputs. More...
 
getStandardDeviation () const
 Return the approximate standard deviation of the last WINDOW_LENGTH number of inputs. More...
 
+

Detailed Description

+

template<class T, int WINDOW_LENGTH>
+class RollingStat< T, WINDOW_LENGTH >

+ +

Calculates an approximation of the variance and standard deviation for a window of recent inputs.

+
Template Parameters
+ + + +
Tthe type of numbers to use. Choose unsigned int, int , uint8_t, int8_t, or float
WINDOW_LENGTHhow many recent input values to include in the calculations.
+
+
+ +

Definition at line 25 of file RollingStat.h.

+

Member Function Documentation

+ +

§ getMean()

+ +
+
+
+template<class T , int WINDOW_LENGTH>
+ + + + + +
+ + + + + + + +
T RollingStat< T, WINDOW_LENGTH >::getMean () const
+
+inline
+
+ +

Return the mean of the last WINDOW_LENGTH number of inputs.

+
Returns
mean
+ +

Definition at line 58 of file RollingStat.h.

+ +
+
+ +

§ getStandardDeviation()

+ +
+
+
+template<class T , int WINDOW_LENGTH>
+ + + + + +
+ + + + + + + +
T RollingStat< T, WINDOW_LENGTH >::getStandardDeviation () const
+
+inline
+
+ +

Return the approximate standard deviation of the last WINDOW_LENGTH number of inputs.

+
Returns
standard deviation.
+ +

Definition at line 75 of file RollingStat.h.

+ +
+
+ +

§ getVariance()

+ +
+
+
+template<class T , int WINDOW_LENGTH>
+ + + + + +
+ + + + + + + +
T RollingStat< T, WINDOW_LENGTH >::getVariance () const
+
+inline
+
+ +

Return the approximate variance of the last WINDOW_LENGTH number of inputs.

+
Returns
variance
+
Note
This should really be calculated using WINDOW_LENGTH-1, but sacrificing accuracy for speed we use the power of two value of WINDOW_LENGTH.
+ +

Definition at line 68 of file RollingStat.h.

+ +
+
+ +

§ update() [1/2]

+ +
+
+
+template<class T , int WINDOW_LENGTH>
+ + + + + +
+ + + + + + + + +
void RollingStat< T, WINDOW_LENGTH >::update (x)
+
+inline
+
+ +

Update the mean and variance given a new input value.

+
Parameters
+ + +
xthe next input value
+
+
+
Note
timing for unsigned int 10us, int 22us
+ +

Definition at line 38 of file RollingStat.h.

+ +
+
+ +

§ update() [2/2]

+ +
+
+
+template<class T , int WINDOW_LENGTH>
+ + + + + +
+ + + + + + + + +
void RollingStat< T, WINDOW_LENGTH >::update (int8_t x)
+
+inline
+
+ +

Update the mean and variance given a new input value.

+
Parameters
+ + +
xthe next input value
+
+
+ +

Definition at line 48 of file RollingStat.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_rolling_stat.js b/extras/doc/html/class_rolling_stat.js new file mode 100644 index 000000000..8e0bcfed3 --- /dev/null +++ b/extras/doc/html/class_rolling_stat.js @@ -0,0 +1,9 @@ +var class_rolling_stat = +[ + [ "RollingStat", "class_rolling_stat.html#a98c3f767391db80b8ad59ca53c1e6a94", null ], + [ "getMean", "class_rolling_stat.html#a8521a53cde7c5d28ac9c375aaee3a972", null ], + [ "getStandardDeviation", "class_rolling_stat.html#a234ab1d244e4b392056fcaa1fc1e4fc4", null ], + [ "getVariance", "class_rolling_stat.html#a3e7e5f706e3b5ac2496f14b7b639775d", null ], + [ "update", "class_rolling_stat.html#a85750e78ac282caec24408dce6e78201", null ], + [ "update", "class_rolling_stat.html#a6f7b384ab338da5ba10200fbce7f2eb0", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_sample-members.html b/extras/doc/html/class_sample-members.html new file mode 100644 index 000000000..78469aa44 --- /dev/null +++ b/extras/doc/html/class_sample-members.html @@ -0,0 +1,131 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP > Member List
+
+
+ +

This is the complete list of members for Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
atIndex(unsigned int index)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
isPlaying()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
next()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
phaseIncFromFreq(unsigned int frequency)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
rangeWholeSample()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
Sample(const int8_t *TABLE_NAME)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
Sample()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setEnd(unsigned int end)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setFreq(int frequency)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setFreq(float frequency)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setFreq_Q24n8(Q24n8 frequency)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setLoopingOff()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setLoopingOn()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setPhaseInc(unsigned long phaseinc_fractional)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setStart(unsigned int startpos)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
setTable(const int8_t *TABLE_NAME)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
start()Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
start(unsigned int startpos)Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >inline
+
+ + + + diff --git a/extras/doc/html/class_sample.html b/extras/doc/html/class_sample.html new file mode 100644 index 000000000..81ade82c9 --- /dev/null +++ b/extras/doc/html/class_sample.html @@ -0,0 +1,716 @@ + + + + + + + +Mozzi: Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP > Class Template Reference
+
+
+ +

Sample is like Oscil, it plays a wavetable. + More...

+ +

#include <Sample.h>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Sample (const int8_t *TABLE_NAME)
 Constructor. More...
 
 Sample ()
 Constructor. More...
 
void setTable (const int8_t *TABLE_NAME)
 Change the sound table which will be played by the Sample. More...
 
void setStart (unsigned int startpos)
 Sets the starting position in samples. More...
 
+void start ()
 Resets the phase (the playhead) to the start position, which will be 0 unless set to another value with setStart();.
 
void start (unsigned int startpos)
 Sets a new start position plays the sample from that position. More...
 
void setEnd (unsigned int end)
 Sets the end position in samples from the beginning of the sound. More...
 
+void rangeWholeSample ()
 Sets the start and end points to include the range of the whole sound table.
 
+void setLoopingOn ()
 Turns looping on.
 
+void setLoopingOff ()
 Turns looping off.
 
int8_t next ()
 Returns the sample at the current phase position, or 0 if looping is off and the phase overshoots the end of the sample. More...
 
boolean isPlaying ()
 Checks if the sample is playing by seeing if the phase is within the limits of its end position. More...
 
void setFreq (int frequency)
 Set the oscillator frequency with an unsigned int. More...
 
void setFreq (float frequency)
 Set the sample frequency with a float. More...
 
void setFreq_Q24n8 (Q24n8 frequency)
 Set the frequency using Q24n8 fixed-point number format. More...
 
int8_t atIndex (unsigned int index)
 Returns the sample at the given table index. More...
 
unsigned long phaseIncFromFreq (unsigned int frequency)
 phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies. More...
 
void setPhaseInc (unsigned long phaseinc_fractional)
 Set a specific phase increment. More...
 
+

Detailed Description

+

template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+class Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >

+ +

Sample is like Oscil, it plays a wavetable.

+

However, Sample can be set to play once through only, with variable start and end points, or can loop, also with variable start and end points. It defaults to playing once through the whole sound table, from start to finish.

Template Parameters
+ + + +
NUM_TABLE_CELLSThis is defined in the table ".h" file the Sample will be using. The sound table can be arbitrary length for Sample. It's important that NUM_TABLE_CELLS is either a literal number (eg. "8192") or a defined macro, rather than a const or int, for the Sample to run fast enough.
UPDATE_RATEThis will be AUDIO_RATE if the Sample is updated in updateAudio(), or CONTROL_RATE if it's updated each time updateControl() is called. It could also be a fraction of CONTROL_RATE if you are doing some kind of cyclic updating in updateControl(), for example, to spread out the processor load.
+
+
+

+int8_t2mozzi

+

Converting soundfiles for Mozzi. There is a python script called int8_t2mozzi.py in the Mozzi/python folder. The script converts raw sound data saved from a program like Audacity. Instructions are in the int8_t2mozzi.py file.

+ +

Definition at line 50 of file Sample.h.

+

Constructor & Destructor Documentation

+ +

§ Sample() [1/2]

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::Sample (const int8_t * TABLE_NAME)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + +
TABLE_NAMEthe name of the array the Sample will be using. This can be found in the table ".h" file if you are using a table made for Mozzi by the int8_t2mozzi.py python script in Mozzi's python folder. Sound tables can be of arbitrary lengths for Sample().
+
+
+ +

Definition at line 61 of file Sample.h.

+ +
+
+ +

§ Sample() [2/2]

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + +
Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::Sample ()
+
+inline
+
+ +

Constructor.

+

Declare a Sample with template TABLE_NUM_CELLS and UPDATE_RATE parameters, without specifying a particular wave table for it to play. The table can be set or changed on the fly with setTable().

+ +

Definition at line 73 of file Sample.h.

+ +
+
+

Member Function Documentation

+ +

§ atIndex()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
int8_t Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::atIndex (unsigned int index)
+
+inline
+
+ +

Returns the sample at the given table index.

+
Parameters
+ + +
indexbetween 0 and the table size.
+
+
+
Returns
the sample at the given table index.
+ +

Definition at line 279 of file Sample.h.

+ +
+
+ +

§ isPlaying()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + +
boolean Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::isPlaying ()
+
+inline
+
+ +

Checks if the sample is playing by seeing if the phase is within the limits of its end position.

+
Returns
true if the sample is playing
+ +

Definition at line 200 of file Sample.h.

+ +
+
+ +

§ next()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + +
int8_t Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::next ()
+
+inline
+
+ +

Returns the sample at the current phase position, or 0 if looping is off and the phase overshoots the end of the sample.

+

Updates the phase according to the current frequency.

Returns
the next sample value from the table, or 0 if it's finished playing.
+ +

Definition at line 171 of file Sample.h.

+ +
+
+ +

§ phaseIncFromFreq()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
unsigned long Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::phaseIncFromFreq (unsigned int frequency)
+
+inline
+
+ +

phaseIncFromFreq() and setPhaseInc() are for saving processor time when sliding between frequencies.

+

Instead of recalculating the phase increment for each frequency in between, you can just calculate the phase increment for each end frequency with phaseIncFromFreq(), then use a Line to interpolate on the fly and use setPhaseInc() to set the phase increment at each step. (Note: I should really profile this with the oscilloscope to see if it's worth the extra confusion!)

Parameters
+ + +
frequencyfor which you want to calculate a phase increment value.
+
+
+
Returns
the phase increment value which will produce a given frequency.
+ +

Definition at line 296 of file Sample.h.

+ +
+
+ +

§ setEnd()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setEnd (unsigned int end)
+
+inline
+
+ +

Sets the end position in samples from the beginning of the sound.

+
Parameters
+ + +
endposition in samples.
+
+
+ +

Definition at line 128 of file Sample.h.

+ +
+
+ +

§ setFreq() [1/2]

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setFreq (int frequency)
+
+inline
+
+ +

Set the oscillator frequency with an unsigned int.

+

This is faster than using a float, so it's useful when processor time is tight, but it can be tricky with low and high frequencies, depending on the size of the wavetable being used. If you're not getting the results you expect, try explicitly using a float, or try setFreq_Q24n8.

Parameters
+ + +
frequencyto play the wave table.
+
+
+ +

Definition at line 231 of file Sample.h.

+ +
+
+ +

§ setFreq() [2/2]

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setFreq (float frequency)
+
+inline
+
+ +

Set the sample frequency with a float.

+

Using a float is the most reliable way to set frequencies, -Might- be slower than using an int but you need either this or setFreq_Q24n8 for fractional frequencies.

Parameters
+ + +
frequencyto play the wave table.
+
+
+ +

Definition at line 245 of file Sample.h.

+ +
+
+ +

§ setFreq_Q24n8()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setFreq_Q24n8 (Q24n8 frequency)
+
+inline
+
+ +

Set the frequency using Q24n8 fixed-point number format.

+

This might be faster than the float version for setting low frequencies such as 1.5 Hz, or other values which may not work well with your table size. Note: use with caution because it's prone to overflow with higher frequencies and larger table sizes. An Q24n8 representation of 1.5 is 384 (ie. 1.5 * 256).

Parameters
+ + +
frequencyin Q24n8 fixed-point number format.
+
+
+ +

Definition at line 263 of file Sample.h.

+ +
+
+ +

§ setPhaseInc()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setPhaseInc (unsigned long phaseinc_fractional)
+
+inline
+
+ +

Set a specific phase increment.

+

See phaseIncFromFreq().

Parameters
+ + +
phaseinc_fractionala phase increment value as calculated by phaseIncFromFreq().
+
+
+ +

Definition at line 306 of file Sample.h.

+ +
+
+ +

§ setStart()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setStart (unsigned int startpos)
+
+inline
+
+ +

Sets the starting position in samples.

+
Parameters
+ + +
startposoffset position in samples.
+
+
+ +

Definition at line 94 of file Sample.h.

+ +
+
+ +

§ setTable()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::setTable (const int8_t * TABLE_NAME)
+
+inline
+
+ +

Change the sound table which will be played by the Sample.

+
Parameters
+ + +
TABLE_NAMEis the name of the array in the table ".h" file you're using.
+
+
+ +

Definition at line 84 of file Sample.h.

+ +
+
+ +

§ start()

+ +
+
+
+template<unsigned int NUM_TABLE_CELLS, unsigned int UPDATE_RATE, uint8_t INTERP = INTERP_NONE>
+ + + + + +
+ + + + + + + + +
void Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >::start (unsigned int startpos)
+
+inline
+
+ +

Sets a new start position plays the sample from that position.

+
Parameters
+ + +
startposposition in samples from the beginning of the sound.
+
+
+ +

Definition at line 117 of file Sample.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_sample.js b/extras/doc/html/class_sample.js new file mode 100644 index 000000000..ac6b1a98a --- /dev/null +++ b/extras/doc/html/class_sample.js @@ -0,0 +1,21 @@ +var class_sample = +[ + [ "Sample", "class_sample.html#a0a22d5d06e5665853432fe1949e9d514", null ], + [ "Sample", "class_sample.html#ac9a043d47ab143f7a4d9370cf9f2f02d", null ], + [ "atIndex", "class_sample.html#a86948f48dcdc0cb19f6e256ece70149d", null ], + [ "isPlaying", "class_sample.html#ae4fa817151691ece9d2a91a0c0c03007", null ], + [ "next", "class_sample.html#a087e0da33436c9bfce1f462df50ac2a9", null ], + [ "phaseIncFromFreq", "class_sample.html#a18e72ecdb7bac8d41038b785d6deba58", null ], + [ "rangeWholeSample", "class_sample.html#a8a012ae52ee028222118f6bba5c7fb33", null ], + [ "setEnd", "class_sample.html#a9713e2d38b94e629c06916a7543ef48f", null ], + [ "setFreq", "class_sample.html#aa0c37457f99def5c7036c6b6d9ee43fc", null ], + [ "setFreq", "class_sample.html#a4d5840157e98024537ae10cd27ff9f9e", null ], + [ "setFreq_Q24n8", "class_sample.html#a903c2d634b10ac531c3c9f6a35fcb046", null ], + [ "setLoopingOff", "class_sample.html#accfdc762cd47425824179bff4cd2a78f", null ], + [ "setLoopingOn", "class_sample.html#a40e76011d841b84d2d54bf2cec6c4d5f", null ], + [ "setPhaseInc", "class_sample.html#aaff03b2a14f8f0f79c13840948151a1d", null ], + [ "setStart", "class_sample.html#a01836f7624ea574e966e775377d5bf11", null ], + [ "setTable", "class_sample.html#ade1401f231c920576b1eea2776ac591f", null ], + [ "start", "class_sample.html#a49ab98acdfb4f81a8860ad21876bdc18", null ], + [ "start", "class_sample.html#abb7084b95a6141843ede8025cdd726ac", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_sample_huffman-members.html b/extras/doc/html/class_sample_huffman-members.html new file mode 100644 index 000000000..078d74e02 --- /dev/null +++ b/extras/doc/html/class_sample_huffman-members.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SampleHuffman Member List
+
+
+ +

This is the complete list of members for SampleHuffman, including all inherited members.

+ + + + + + +
next()SampleHuffmaninline
SampleHuffman(uint8_t const *SOUNDDATA, int16_t const *HUFFMAN_DATA, uint32_t const SOUNDDATA_BITS)SampleHuffmaninline
setLoopingOff()SampleHuffmaninline
setLoopingOn()SampleHuffmaninline
start()SampleHuffmaninline
+
+ + + + diff --git a/extras/doc/html/class_sample_huffman.html b/extras/doc/html/class_sample_huffman.html new file mode 100644 index 000000000..8031cb692 --- /dev/null +++ b/extras/doc/html/class_sample_huffman.html @@ -0,0 +1,240 @@ + + + + + + + +Mozzi: SampleHuffman Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
SampleHuffman Class Reference
+
+
+ +

A sample player for samples encoded with Huffman compression. + More...

+ +

#include <SampleHuffman.h>

+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 SampleHuffman (uint8_t const *SOUNDDATA, int16_t const *HUFFMAN_DATA, uint32_t const SOUNDDATA_BITS)
 Constructor. More...
 
int16_t next ()
 Update and return the next audio sample. More...
 
+void setLoopingOn ()
 Turns looping on, with the whole sample length as the loop range.
 
+void setLoopingOff ()
 Turns looping off.
 
+void start ()
 Sets the playhead to the beginning of the sample.
 
+

Detailed Description

+

A sample player for samples encoded with Huffman compression.

+

This class and the audio2huff.py script are adapted from "audioout", an Arduino sketch by Thomas Grill, 2011 http//grrrr.org

+

Huffman decoding is used on sample differentials, saving 50-70% of space for 8 bit data, depending on the sample rate.

+

This implementation just plays back one sample each time next() is called, with no speed or other adjustments. It's slow, so it's likely you will only be able to play one sound at a time.

+

Audio data, Huffman decoder table, sample rate and bit depth are defined in a sounddata.h header file. This file can be generated for a sound file with the accompanying Python script audio2huff.py, in Mozzi/extras/python/

+

Invoke with: python audio2huff.py –sndfile=arduinosnd.wav –hdrfile=sounddata.h –bits=8 –name=soundtablename

+

You can resample and dither your audio file with SOX, e.g. to 8 bits depth @ Mozzi's 16384 Hz sample rate: sox fullglory.wav -b 8 -r 16384 arduinosnd.wav

+

Alternatively you can export a sound from Audacity, which seems to have less noticeable or no dithering, using Project Rate 16384 Hz and these output options: Other uncompressed files, Header: WAV(Microsoft), Encoding: Unsigned 8 bit PCM

+

The header file contains two lengthy arrays: One is "SOUNDDATA" which must fit into Flash RAM (available in total: 32k for ATMega328) The other is "HUFFMAN" which must also fit into Flash RAM

+ +

Definition at line 49 of file SampleHuffman.h.

+

Constructor & Destructor Documentation

+ +

§ SampleHuffman()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
SampleHuffman::SampleHuffman (uint8_t const * SOUNDDATA,
int16_t const * HUFFMAN_DATA,
uint32_t const SOUNDDATA_BITS 
)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + + + +
SOUNDDATAthe name of the SOUNDDATA table in the huffman sample .h file
HUFFMAN_DATAthe name of the HUFFMAN table in the huffman sample .h file
SOUNDDATA_BITSfrom the huffman sample .h file
+
+
+ +

Definition at line 59 of file SampleHuffman.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + +
int16_t SampleHuffman::next ()
+
+inline
+
+ +

Update and return the next audio sample.

+

So far it just plays back one sample at a time without any variable tuning or speed.

Returns
the next audio sample
+
Note
timing: about 5 to 40 us, varies continuously depending on data
+ +

Definition at line 70 of file SampleHuffman.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_sample_huffman.js b/extras/doc/html/class_sample_huffman.js new file mode 100644 index 000000000..69e2a177b --- /dev/null +++ b/extras/doc/html/class_sample_huffman.js @@ -0,0 +1,8 @@ +var class_sample_huffman = +[ + [ "SampleHuffman", "class_sample_huffman.html#a8587f641949024cd5aad7bfc1715adff", null ], + [ "next", "class_sample_huffman.html#a8ec7bbb21f5cf0e780611a7539e86695", null ], + [ "setLoopingOff", "class_sample_huffman.html#a040bfc55c19bbaa6cc42331be3646c8a", null ], + [ "setLoopingOn", "class_sample_huffman.html#a01f9bfb513da0374fe78c12300b69760", null ], + [ "start", "class_sample_huffman.html#a15ead859261d3d916d700b75f4626f15", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_smooth-members.html b/extras/doc/html/class_smooth-members.html new file mode 100644 index 000000000..57ce64137 --- /dev/null +++ b/extras/doc/html/class_smooth-members.html @@ -0,0 +1,117 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Smooth< T > Member List
+
+
+ +

This is the complete list of members for Smooth< T >, including all inherited members.

+ + + + + +
next(T in)Smooth< T >inline
operator()(T n)Smooth< T >inline
setSmoothness(float smoothness)Smooth< T >inline
Smooth(float smoothness)Smooth< T >inline
+
+ + + + diff --git a/extras/doc/html/class_smooth.html b/extras/doc/html/class_smooth.html new file mode 100644 index 000000000..5cc92169c --- /dev/null +++ b/extras/doc/html/class_smooth.html @@ -0,0 +1,305 @@ + + + + + + + +Mozzi: Smooth< T > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Smooth< T > Class Template Reference
+
+
+ +

A simple infinite impulse response low pass filter for smoothing control or audio signals. + More...

+ +

#include <Smooth.h>

+ + + + + + + + + + + + + + +

+Public Member Functions

 Smooth (float smoothness)
 Constructor. More...
 
next (T in)
 Filters the input and returns the filtered value. More...
 
operator() (T n)
 Filters the input and returns the filtered value. More...
 
void setSmoothness (float smoothness)
 Sets how much smoothing the filter will apply to its input. More...
 
+

Detailed Description

+

template<class T>
+class Smooth< T >

+ +

A simple infinite impulse response low pass filter for smoothing control or audio signals.

+

This algorithm comes from http://en.wikipedia.org/wiki/Low-pass_filter: y[i] := y[i-1] + α * (x[i] - y[i-1]), translated as out = last_out + a * (in - last_out). It's not calibrated to any real-world update rate, so if you use it at CONTROL_RATE and you change CONTROL_RATE, you'll need to adjust the smoothness value to suit.

Template Parameters
+ + +
Tthe type of numbers being smoothed. Watch out for numbers overflowing the internal calculations. Some experimentation is recommended.
+
+
+
Note
Timing: ~5us for 16 bit types, ~1us for 8 bit types.
+ +

Definition at line 35 of file Smooth.h.

+

Constructor & Destructor Documentation

+ +

§ Smooth()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
Smooth< T >::Smooth (float smoothness)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + +
smoothnesssets how much smoothing the filter will apply to its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
+
+
+ +

Definition at line 47 of file Smooth.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T Smooth< T >::next (in)
+
+inline
+
+ +

Filters the input and returns the filtered value.

+

You can also use the operator() function, eg. something like mySmoother(input-value).

Parameters
+ + +
inthe signal to be smoothed.
+
+
+
Returns
the filtered signal.
+ +

Definition at line 57 of file Smooth.h.

+ +
+
+ +

§ operator()()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
T Smooth< T >::operator() (n)
+
+inline
+
+ +

Filters the input and returns the filtered value.

+

Same as next(input-value).

Parameters
+ + +
inthe signal to be smoothed.
+
+
+
Returns
the filtered signal.
+ +

Definition at line 70 of file Smooth.h.

+ +
+
+ +

§ setSmoothness()

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
void Smooth< T >::setSmoothness (float smoothness)
+
+inline
+
+ +

Sets how much smoothing the filter will apply to its input.

+
Parameters
+ + +
smoothnesssets how much smoothing the filter will apply to its input. Use a float in the range 0~1, where 0 is not very smooth and 0.99 is very smooth.
+
+
+ +

Definition at line 81 of file Smooth.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_smooth.js b/extras/doc/html/class_smooth.js new file mode 100644 index 000000000..5a20f7f80 --- /dev/null +++ b/extras/doc/html/class_smooth.js @@ -0,0 +1,7 @@ +var class_smooth = +[ + [ "Smooth", "class_smooth.html#ac6626aae94eb7a22024e2054c1bbbb26", null ], + [ "next", "class_smooth.html#ab7c809b6b5217771832a3e829695f8d5", null ], + [ "operator()", "class_smooth.html#a24eb02e4c4bfe9401f24ed0399b1e392", null ], + [ "setSmoothness", "class_smooth.html#aac44bbf7a9bc6b9bae80eecc1be6e188", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_stack-members.html b/extras/doc/html/class_stack-members.html new file mode 100644 index 000000000..4dd074d41 --- /dev/null +++ b/extras/doc/html/class_stack-members.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Stack< T, NUM_ITEMS > Member List
+
+
+ +

This is the complete list of members for Stack< T, NUM_ITEMS >, including all inherited members.

+ + + + +
pop()Stack< T, NUM_ITEMS >inline
push(T item)Stack< T, NUM_ITEMS >inline
Stack()Stack< T, NUM_ITEMS >inline
+
+ + + + diff --git a/extras/doc/html/class_stack.html b/extras/doc/html/class_stack.html new file mode 100644 index 000000000..840e82164 --- /dev/null +++ b/extras/doc/html/class_stack.html @@ -0,0 +1,218 @@ + + + + + + + +Mozzi: Stack< T, NUM_ITEMS > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Stack< T, NUM_ITEMS > Class Template Reference
+
+
+ +

A simple stack, used internally for keeping track of analog input channels as they are read. + More...

+ +

#include <Stack.h>

+ + + + + + + + + + + +

+Public Member Functions

Stack ()
 Constructor.
 
void push (T item)
 Put an item on the stack. More...
 
pop ()
 Get the item on top of the stack. More...
 
+

Detailed Description

+

template<class T, int NUM_ITEMS>
+class Stack< T, NUM_ITEMS >

+ +

A simple stack, used internally for keeping track of analog input channels as they are read.

+

This stack is really just an array with a pointer to the most recent item, and memory is allocated at compile time.

Template Parameters
+ + + +
Tthe kind of numbers (or other things) to store.
NUM_ITEMSthe maximum number of items the stack will need to hold.
+
+
+ +

Definition at line 18 of file Stack.h.

+

Member Function Documentation

+ +

§ pop()

+ +
+
+
+template<class T, int NUM_ITEMS>
+ + + + + +
+ + + + + + + +
T Stack< T, NUM_ITEMS >::pop ()
+
+inline
+
+ +

Get the item on top of the stack.

+
Returns
T the item
+ +

Definition at line 45 of file Stack.h.

+ +
+
+ +

§ push()

+ +
+
+
+template<class T, int NUM_ITEMS>
+ + + + + +
+ + + + + + + + +
void Stack< T, NUM_ITEMS >::push (item)
+
+inline
+
+ +

Put an item on the stack.

+
Parameters
+ + +
itemthe thing you want to put on the stack.
+
+
+ +

Definition at line 34 of file Stack.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_stack.js b/extras/doc/html/class_stack.js new file mode 100644 index 000000000..92d6a7b3f --- /dev/null +++ b/extras/doc/html/class_stack.js @@ -0,0 +1,6 @@ +var class_stack = +[ + [ "Stack", "class_stack.html#ab034b819e2382f80d952cf8527dc6e6c", null ], + [ "pop", "class_stack.html#afa9a35e13b68d9b59999227218a34d0a", null ], + [ "push", "class_stack.html#af67739d9b82966da46f7496f4c1fc801", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_state_variable-members.html b/extras/doc/html/class_state_variable-members.html new file mode 100644 index 000000000..b13134e0d --- /dev/null +++ b/extras/doc/html/class_state_variable-members.html @@ -0,0 +1,117 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
StateVariable< FILTER_TYPE > Member List
+
+
+ +

This is the complete list of members for StateVariable< FILTER_TYPE >, including all inherited members.

+ + + + + +
next(int input)StateVariable< FILTER_TYPE >inline
setCentreFreq(unsigned int centre_freq)StateVariable< FILTER_TYPE >inline
setResonance(Q0n8 resonance)StateVariable< FILTER_TYPE >inline
StateVariable()StateVariable< FILTER_TYPE >inline
+
+ + + + diff --git a/extras/doc/html/class_state_variable.html b/extras/doc/html/class_state_variable.html new file mode 100644 index 000000000..f99f36286 --- /dev/null +++ b/extras/doc/html/class_state_variable.html @@ -0,0 +1,271 @@ + + + + + + + +Mozzi: StateVariable< FILTER_TYPE > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
StateVariable< FILTER_TYPE > Class Template Reference
+
+
+ +

A State Variable filter which offers 12db resonant low, high, bandpass and notch modes. + More...

+ +

#include <StateVariable.h>

+ + + + + + + + + + + + + + +

+Public Member Functions

StateVariable ()
 Constructor.
 
void setResonance (Q0n8 resonance)
 Set how resonant the filter will be. More...
 
void setCentreFreq (unsigned int centre_freq)
 Set the centre or corner frequency of the filter. More...
 
int next (int input)
 Calculate the next sample, given an input signal. More...
 
+

Detailed Description

+

template<int8_t FILTER_TYPE>
+class StateVariable< FILTER_TYPE >

+ +

A State Variable filter which offers 12db resonant low, high, bandpass and notch modes.

+
Template Parameters
+ + +
FILTER_TYPEchoose between LOWPASS, BANDPASS, HIGHPASS and NOTCH.
+
+
+
Note
To save processing time, this version of the filter does not saturate internally, so any resonant peaks are unceremoniously truncated. It may be worth adding code to constrain the internal variables to enable resonant saturating effects.
+ +

Definition at line 65 of file StateVariable.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<int8_t FILTER_TYPE>
+ + + + + +
+ + + + + + + + +
int StateVariable< FILTER_TYPE >::next (int input)
+
+inline
+
+ +

Calculate the next sample, given an input signal.

+
Parameters
+ + +
inputthe signal input.
+
+
+
Returns
the signal output.
+
Note
Timing: 16 - 20 us
+ +

Definition at line 122 of file StateVariable.h.

+ +
+
+ +

§ setCentreFreq()

+ +
+
+
+template<int8_t FILTER_TYPE>
+ + + + + +
+ + + + + + + + +
void StateVariable< FILTER_TYPE >::setCentreFreq (unsigned int centre_freq)
+
+inline
+
+ +

Set the centre or corner frequency of the filter.

+
Parameters
+ + +
centre_freq20 - 4096 Hz (AUDIO_RATE/4). This will be the cut-off frequency for LOWPASS and HIGHPASS, and the centre frequency to pass or reduce for BANDPASS and NOTCH.
+
+
+
Note
Timing 25-30us
+
+The frequency calculation is VERY "approximate". This really needs to be fixed.
+ +

Definition at line 105 of file StateVariable.h.

+ +
+
+ +

§ setResonance()

+ +
+
+
+template<int8_t FILTER_TYPE>
+ + + + + +
+ + + + + + + + +
void StateVariable< FILTER_TYPE >::setResonance (Q0n8 resonance)
+
+inline
+
+ +

Set how resonant the filter will be.

+
Parameters
+ + +
resonancea uint8_t value between 1 and 255. The lower this value is, the more resonant the filter. At very low values, the filter can output loud peaks which can exceed Mozzi's output range, so you may need to attenuate the output in your sketch.
+
+
+
Note
Timing < 500 ns
+ +

Definition at line 86 of file StateVariable.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_state_variable.js b/extras/doc/html/class_state_variable.js new file mode 100644 index 000000000..0972d694d --- /dev/null +++ b/extras/doc/html/class_state_variable.js @@ -0,0 +1,7 @@ +var class_state_variable = +[ + [ "StateVariable", "class_state_variable.html#a9950b71a16f63654552d3e15774d6638", null ], + [ "next", "class_state_variable.html#a14cb100c22e4a33025665ef3620ca2b8", null ], + [ "setCentreFreq", "class_state_variable.html#a47e7ddad76db7009e370fa91ea5d4d3d", null ], + [ "setResonance", "class_state_variable.html#a992e23a80b611b72e3e764c14d5ee188", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_wave_packet-members.html b/extras/doc/html/class_wave_packet-members.html new file mode 100644 index 000000000..a72e921aa --- /dev/null +++ b/extras/doc/html/class_wave_packet-members.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WavePacket< ALGORITHM > Member List
+
+
+ +

This is the complete list of members for WavePacket< ALGORITHM >, including all inherited members.

+ + + + + + + +
next()WavePacket< ALGORITHM >inline
set(int fundamental, int bandwidth, int centrefreq)WavePacket< ALGORITHM >inline
setBandwidth(int bandwidth)WavePacket< ALGORITHM >inline
setCentreFreq(int centrefreq)WavePacket< ALGORITHM >inline
setFundamental(int fundamental)WavePacket< ALGORITHM >inline
WavePacket()WavePacket< ALGORITHM >inline
+
+ + + + diff --git a/extras/doc/html/class_wave_packet.html b/extras/doc/html/class_wave_packet.html new file mode 100644 index 000000000..95b1d053e --- /dev/null +++ b/extras/doc/html/class_wave_packet.html @@ -0,0 +1,370 @@ + + + + + + + +Mozzi: WavePacket< ALGORITHM > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
WavePacket< ALGORITHM > Class Template Reference
+
+
+ +

Wavepacket synthesis, with two overlapping streams of wave packets. + More...

+ +

#include <WavePacket.h>

+
+ + Inheritance diagram for WavePacket< ALGORITHM >:
+
+
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

WavePacket ()
 Constructor.
 
void set (int fundamental, int bandwidth, int centrefreq)
 Set all the parameters for the synthesis. More...
 
void setFundamental (int fundamental)
 Set the fundamental frequency. More...
 
void setBandwidth (int bandwidth)
 Set the bandwidth. More...
 
void setCentreFreq (int centrefreq)
 Set the centre frequency. More...
 
int next ()
 Calculate the next synthesised sample. More...
 
+

Detailed Description

+

template<int8_t ALGORITHM>
+class WavePacket< ALGORITHM >

+ +

Wavepacket synthesis, with two overlapping streams of wave packets.

+

Draws on Miller Puckette's Pure Data example, F14.wave.packet.pd. Each packet is an enveloped grain of a sin (or cos) wave. The frequency of the wave, the width of the envelopes and the rate of release of envelopes are the parameters which can be changed.

Template Parameters
+ + +
ALGORITHMoptions are SINGLE or DOUBLE, for a single non-overlapping stream of packets or a double, overlapping stream.
+
+
+ +

Definition at line 36 of file WavePacket.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + +
int WavePacket< ALGORITHM >::next ()
+
+inline
+
+ +

Calculate the next synthesised sample.

+
Returns
a full-scale 16 bit value, which needs to be scaled to suit your sketch. If you're using it straight as the sketch output, then that will be yourThing.next()>>2 for HIFI 14 bit output, or >>8 for STANDARD 8+ bit output.
+ +

Definition at line 113 of file WavePacket.h.

+ +
+
+ +

§ set()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void WavePacket< ALGORITHM >::set (int fundamental,
int bandwidth,
int centrefreq 
)
+
+inline
+
+ +

Set all the parameters for the synthesis.

+

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
+ + + + +
fundamentalthe rate at which packets are produced.
bandwidththe width of each packet. A lower value allows more of the centre frequency to be audible, a rounder sound. A higher value produces narrower packets, a more buzzing sound.
centrefreqthe oscillation frequency within each packet.
+
+
+ +

Definition at line 57 of file WavePacket.h.

+ +
+
+ +

§ setBandwidth()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + + +
void WavePacket< ALGORITHM >::setBandwidth (int bandwidth)
+
+inline
+
+ +

Set the bandwidth.

+

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
+ + +
bandwidththe width of each packet. A lower value allows more of the centre frequency to be audible, a rounder sound. A higher value produces narrower packets, a more buzzing sound.
+
+
+ +

Definition at line 85 of file WavePacket.h.

+ +
+
+ +

§ setCentreFreq()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + + +
void WavePacket< ALGORITHM >::setCentreFreq (int centrefreq)
+
+inline
+
+ +

Set the centre frequency.

+

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
+ + +
centrefreqthe oscillation frequency within each packet.
+
+
+ +

Definition at line 100 of file WavePacket.h.

+ +
+
+ +

§ setFundamental()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + + +
void WavePacket< ALGORITHM >::setFundamental (int fundamental)
+
+inline
+
+ +

Set the fundamental frequency.

+

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
+ + +
fundamentalthe rate at which packets are produced.
+
+
+ +

Definition at line 70 of file WavePacket.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_wave_packet.js b/extras/doc/html/class_wave_packet.js new file mode 100644 index 000000000..14e6d2c2c --- /dev/null +++ b/extras/doc/html/class_wave_packet.js @@ -0,0 +1,9 @@ +var class_wave_packet = +[ + [ "WavePacket", "class_wave_packet.html#a09afa3b26d61c97e24ccbae9cba2fd57", null ], + [ "next", "class_wave_packet.html#ab4e35082b60d3ccc29c86d09078329bd", null ], + [ "set", "class_wave_packet.html#ac693b3d676b583584a8cfc6b9cc0f37f", null ], + [ "setBandwidth", "class_wave_packet.html#abce5b3ca4c559473c199744753fb75aa", null ], + [ "setCentreFreq", "class_wave_packet.html#adbbbf8b6b9eaae18ef381ff04be3eb5b", null ], + [ "setFundamental", "class_wave_packet.html#af87c37ffd274eee91aa93c0f7d560be2", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_wave_packet.png b/extras/doc/html/class_wave_packet.png new file mode 100644 index 0000000000000000000000000000000000000000..63a03222093c92cac82417451f147b2eef33cf94 GIT binary patch literal 839 zcmeAS@N?(olHy`uVBq!ia0vp^cYrv6gBeJ=etRtdq$C1-LR|m<{|{uofA?;|jOi1A zEHFNB;6R4T>tG<4qa?^Lm;tB=1g@S6F=Aj~y5{NP7*fIbcJA$>*9ttY)3>L8`ai$s z(k%r}5%pX@V`k^sxzcA`xnuvF+Ln8JO%n5rU~awy7hQ`6!BWoeUsrJ~xEeUI;RCmA zf86zdyId+Yy6@?7tG=((ogDY|cy+-`zv~6h+YX-F)n30LkuAKB@d4{zp76fSxjUDA zy|(Y(X2EkZ5&83*tiKn8{MCJ(t5#7wE8&OY9m}n|{&GGw-tpM}&6_;E=Q^r>`c?9F zJtf5(*9H}@i#vDc^@Dj2_wuA?=6T)^Y2^ri+iCg2m)|e*oc{Ma8~4Y5Rn>Qwu1K+dh3&Qedl-jM$O{Q49)MltQxc8-utI>qF2=vtPwr@ z$w$1s%H+|fbsu(ey?*>py?`OSiizD|otVslj;I0#<*b8@Ju7ZL1cro~=mGXp<{6>J zhwtVIUp~uIo<4heUe=CKUB+WqnwTX5VS%*u0fQSsfq(tqYVX@GzrFAM@8d`GJd3jq zdR_wBH_2p?)}3c6o@=+QxA)}Yvb}$KbKuVp|6FTh!!`L+zrU^6Wq(~VHE7ef*99+` zbYtvZY2L}q-mqEfv3$;qgHw|yELkD4ZcfncBH!0*Ys==nE0rwBdH2kFQ+&&2*ImxP zRqt3{4g9)&&GxwojAc1B0`-U6dG}cQUil-iZcd!-HIa8e__=q@KCRaM<#PAF^^&3! z{=D2d+3!JL#D>STEA;gJK~b^yrR1H^b4x?_u1uO< zu<*=sOYv=A + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WavePacketSample< ALGORITHM > Member List
+
+
+ +

This is the complete list of members for WavePacketSample< ALGORITHM >, including all inherited members.

+ + + + + + + + +
next()WavePacket< ALGORITHM >inline
set(int fundamental, int bandwidth, int centrefreq)WavePacket< ALGORITHM >inline
setBandwidth(int bandwidth)WavePacket< ALGORITHM >inline
setCentreFreq(int centrefreq)WavePacket< ALGORITHM >inline
setFundamental(int fundamental)WavePacket< ALGORITHM >inline
setTable(const int8_t *TABLE_NAME)WavePacketSample< ALGORITHM >inline
WavePacket()WavePacket< ALGORITHM >inline
+
+ + + + diff --git a/extras/doc/html/class_wave_packet_sample.html b/extras/doc/html/class_wave_packet_sample.html new file mode 100644 index 000000000..8e1aa0bdb --- /dev/null +++ b/extras/doc/html/class_wave_packet_sample.html @@ -0,0 +1,406 @@ + + + + + + + +Mozzi: WavePacketSample< ALGORITHM > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
WavePacketSample< ALGORITHM > Class Template Reference
+
+
+ +

A WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains). + More...

+ +

#include <WavePacketSample.h>

+
+ + Inheritance diagram for WavePacketSample< ALGORITHM >:
+
+
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

void setTable (const int8_t *TABLE_NAME)
 Change the sound table which will be played. More...
 
void set (int fundamental, int bandwidth, int centrefreq)
 Set all the parameters for the synthesis. More...
 
void setFundamental (int fundamental)
 Set the fundamental frequency. More...
 
void setBandwidth (int bandwidth)
 Set the bandwidth. More...
 
void setCentreFreq (int centrefreq)
 Set the centre frequency. More...
 
int next ()
 Calculate the next synthesised sample. More...
 
+

Detailed Description

+

template<int8_t ALGORITHM>
+class WavePacketSample< ALGORITHM >

+ +

A WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains).

+
Template Parameters
+ + +
ALGORITHMoptions are SINGLE or DOUBLE, for a single non-overlapping stream of packets or a double, overlapping stream.
+
+
+ +

Definition at line 22 of file WavePacketSample.h.

+

Member Function Documentation

+ +

§ next()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + +
int WavePacket< ALGORITHM >::next ()
+
+inlineinherited
+
+ +

Calculate the next synthesised sample.

+
Returns
a full-scale 16 bit value, which needs to be scaled to suit your sketch. If you're using it straight as the sketch output, then that will be yourThing.next()>>2 for HIFI 14 bit output, or >>8 for STANDARD 8+ bit output.
+ +

Definition at line 113 of file WavePacket.h.

+ +
+
+ +

§ set()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void WavePacket< ALGORITHM >::set (int fundamental,
int bandwidth,
int centrefreq 
)
+
+inlineinherited
+
+ +

Set all the parameters for the synthesis.

+

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
+ + + + +
fundamentalthe rate at which packets are produced.
bandwidththe width of each packet. A lower value allows more of the centre frequency to be audible, a rounder sound. A higher value produces narrower packets, a more buzzing sound.
centrefreqthe oscillation frequency within each packet.
+
+
+ +

Definition at line 57 of file WavePacket.h.

+ +
+
+ +

§ setBandwidth()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + + +
void WavePacket< ALGORITHM >::setBandwidth (int bandwidth)
+
+inlineinherited
+
+ +

Set the bandwidth.

+

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
+ + +
bandwidththe width of each packet. A lower value allows more of the centre frequency to be audible, a rounder sound. A higher value produces narrower packets, a more buzzing sound.
+
+
+ +

Definition at line 85 of file WavePacket.h.

+ +
+
+ +

§ setCentreFreq()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + + +
void WavePacket< ALGORITHM >::setCentreFreq (int centrefreq)
+
+inlineinherited
+
+ +

Set the centre frequency.

+

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
+ + +
centrefreqthe oscillation frequency within each packet.
+
+
+ +

Definition at line 100 of file WavePacket.h.

+ +
+
+ +

§ setFundamental()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + + +
void WavePacket< ALGORITHM >::setFundamental (int fundamental)
+
+inlineinherited
+
+ +

Set the fundamental frequency.

+

The function is designed so that usable ranges for parameters can come from analog inputs, ie. 0-1023.

Parameters
+ + +
fundamentalthe rate at which packets are produced.
+
+
+ +

Definition at line 70 of file WavePacket.h.

+ +
+
+ +

§ setTable()

+ +
+
+
+template<int8_t ALGORITHM>
+ + + + + +
+ + + + + + + + +
void WavePacketSample< ALGORITHM >::setTable (const int8_t * TABLE_NAME)
+
+inline
+
+ +

Change the sound table which will be played.

+

Needs to be 8192 cells long for now.

Parameters
+ + +
TABLE_NAMEis the name of the array in the table ".h" file you're using.
+
+
+ +

Definition at line 29 of file WavePacketSample.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_wave_packet_sample.js b/extras/doc/html/class_wave_packet_sample.js new file mode 100644 index 000000000..3e22eb7be --- /dev/null +++ b/extras/doc/html/class_wave_packet_sample.js @@ -0,0 +1,9 @@ +var class_wave_packet_sample = +[ + [ "next", "class_wave_packet_sample.html#ab4e35082b60d3ccc29c86d09078329bd", null ], + [ "set", "class_wave_packet_sample.html#ac693b3d676b583584a8cfc6b9cc0f37f", null ], + [ "setBandwidth", "class_wave_packet_sample.html#abce5b3ca4c559473c199744753fb75aa", null ], + [ "setCentreFreq", "class_wave_packet_sample.html#adbbbf8b6b9eaae18ef381ff04be3eb5b", null ], + [ "setFundamental", "class_wave_packet_sample.html#af87c37ffd274eee91aa93c0f7d560be2", null ], + [ "setTable", "class_wave_packet_sample.html#af50b8ef715a86bcdf417961b585c170d", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_wave_packet_sample.png b/extras/doc/html/class_wave_packet_sample.png new file mode 100644 index 0000000000000000000000000000000000000000..5231913570249102ba9bbe85358e5f65dd0e4072 GIT binary patch literal 832 zcmeAS@N?(olHy`uVBq!ia0vp^cYrv6gBeJ=etRtdq$C1-LR|m<{|{uofA?;|jOi1A zEHFNB;6R4T>tG<4qa?^Lm;tB=1g@S6F=Aj~I`8S?7*fIbcJAxG#|k`d{C!ux*FSmd z!w_F^xomed=MkU%Dgt_TKPK&$IbOI%i%)Q(>DGrXE@@ZVgau~?PA@p>;i9tY&!5f? zi=Fe_*H_oaFS6a@dirNc{X64ZOWeP8bo{PmoBpnZH$1nr?3?YIX1?GZWjsns`Y%#< zl+D?gI_uW$-)`rtEJ_ph*K)6Wm$>3s^fhU%+qy;o`5gY@h#H`s^OVcb@mD7QV&4zXC*UVzwWDzQFXZrRtpccRP#gcRv!n zH`)K-gjZ6<3$-Gc*{}C3{Ur4+F~V(!zs>aP8$FEEl03Y(Dz1IC&?5HG&R2gU&&^zV zi`_liPA7Yp#Ffntzniz74~dZe{{BE`N6bskIUOhV+$vB~GR`{O*>PqCuey@a;;?q> zzQ++E4DnZZ6GGSWl<(H{*=}@aZf@+Zr4P%tvdjpU=1XwPwP=vs`j7z_V9YZD2?_i# z*IGIy)Ri#;uJ!7}x;$To!1S+-cg}zP<9FWe>EYwze@o+++HSe~{@E_8iv8O>Pu^O8 zcqzBbj+!gMJF;3gZ>~GR$cto8pwBY z-aN~fEbn?)V^=(n*?;AZ^n*F9oO9CFKP&Pmem`6MJ*tpIz6n4LCykqqo@6}Z+lBO4| zJG0#K`L?Zcg^HKscXdTco4zWU;<#(Yv}GT5-u!0$-6|$Zm+{~1eVaHNF1IoN@bNy( nSQ8Hm(XXFNb(c;t{mOoXPp>ZJE-xQ2xifgW`njxgN@xNAXw`>4 literal 0 HcmV?d00001 diff --git a/extras/doc/html/class_wave_shaper.html b/extras/doc/html/class_wave_shaper.html new file mode 100644 index 000000000..bf2873fe6 --- /dev/null +++ b/extras/doc/html/class_wave_shaper.html @@ -0,0 +1,129 @@ + + + + + + + +Mozzi: WaveShaper< T > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WaveShaper< T > Class Template Reference
+
+
+ +

WaveShaper maps values from its input to values in a table, which are returned as output. + More...

+ +

#include <WaveShaper.h>

+

Detailed Description

+

template<class T>
+class WaveShaper< T >

+ +

WaveShaper maps values from its input to values in a table, which are returned as output.

+
Template Parameters
+ + +
Tthe type of numbers being input to be shaped, chosen to match the table.
+
+
+ +

Definition at line 22 of file WaveShaper.h.

+
+
+ + + + diff --git a/extras/doc/html/class_wave_shaper_3_01char_01_4-members.html b/extras/doc/html/class_wave_shaper_3_01char_01_4-members.html new file mode 100644 index 000000000..a583a8ff8 --- /dev/null +++ b/extras/doc/html/class_wave_shaper_3_01char_01_4-members.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WaveShaper< char > Member List
+
+
+ +

This is the complete list of members for WaveShaper< char >, including all inherited members.

+ + + +
next(byte in)WaveShaper< char >inline
WaveShaper(const int8_t *TABLE_NAME)WaveShaper< char >inline
+
+ + + + diff --git a/extras/doc/html/class_wave_shaper_3_01char_01_4.html b/extras/doc/html/class_wave_shaper_3_01char_01_4.html new file mode 100644 index 000000000..6aebc7d12 --- /dev/null +++ b/extras/doc/html/class_wave_shaper_3_01char_01_4.html @@ -0,0 +1,217 @@ + + + + + + + +Mozzi: WaveShaper< char > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
WaveShaper< char > Class Template Reference
+
+
+ +

int8_t specialisation of WaveShaper template + More...

+ +

#include <WaveShaper.h>

+ + + + + + + + +

+Public Member Functions

 WaveShaper (const int8_t *TABLE_NAME)
 Constructor. More...
 
int8_t next (byte in)
 Maps input to output, transforming it according to the table being used. More...
 
+

Detailed Description

+

template<>
+class WaveShaper< char >

+ +

int8_t specialisation of WaveShaper template

+ +

Definition at line 29 of file WaveShaper.h.

+

Constructor & Destructor Documentation

+ +

§ WaveShaper()

+ +
+
+ + + + + +
+ + + + + + + + +
WaveShaper< char >::WaveShaper (const int8_t * TABLE_NAME)
+
+inline
+
+ +

Constructor.

+

Use the template parameter to set type of numbers being mapped. For example, WaveShaper <int> myWaveShaper; makes a WaveShaper which uses ints.

Template Parameters
+ + +
Tthe type of numbers being input to be shaped, chosen to match the table.
+
+
+
Parameters
+ + +
TABLE_NAMEthe name of the table being used, which can be found in the ".h" file containing the table.
+
+
+ +

Definition at line 38 of file WaveShaper.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + + +
int8_t WaveShaper< char >::next (byte in)
+
+inline
+
+ +

Maps input to output, transforming it according to the table being used.

+
Parameters
+ + +
inthe input signal. For flexibility, it's up to you to give the correct offset to your input signal. So if you're mapping a signed 8-bit signal (such as the output of an Oscil) into a 256 cell table centred around cell 128, add 128 to offset the input value.
+
+
+
Returns
the shaped signal.
+ +

Definition at line 52 of file WaveShaper.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_wave_shaper_3_01char_01_4.js b/extras/doc/html/class_wave_shaper_3_01char_01_4.js new file mode 100644 index 000000000..d9c3e50ed --- /dev/null +++ b/extras/doc/html/class_wave_shaper_3_01char_01_4.js @@ -0,0 +1,5 @@ +var class_wave_shaper_3_01char_01_4 = +[ + [ "WaveShaper", "class_wave_shaper_3_01char_01_4.html#a6364609248c42174f9f7e4974585e301", null ], + [ "next", "class_wave_shaper_3_01char_01_4.html#a8aa75261350b2651a2cbca264a02e944", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/class_wave_shaper_3_01int_01_4-members.html b/extras/doc/html/class_wave_shaper_3_01int_01_4-members.html new file mode 100644 index 000000000..cf2be28d4 --- /dev/null +++ b/extras/doc/html/class_wave_shaper_3_01int_01_4-members.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: Member List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
WaveShaper< int > Member List
+
+
+ +

This is the complete list of members for WaveShaper< int >, including all inherited members.

+ + + +
next(int in)WaveShaper< int >inline
WaveShaper(const int16_t *TABLE_NAME)WaveShaper< int >inline
+
+ + + + diff --git a/extras/doc/html/class_wave_shaper_3_01int_01_4.html b/extras/doc/html/class_wave_shaper_3_01int_01_4.html new file mode 100644 index 000000000..19aaba6dd --- /dev/null +++ b/extras/doc/html/class_wave_shaper_3_01int_01_4.html @@ -0,0 +1,217 @@ + + + + + + + +Mozzi: WaveShaper< int > Class Template Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
WaveShaper< int > Class Template Reference
+
+
+ +

int specialisation of WaveShaper template + More...

+ +

#include <WaveShaper.h>

+ + + + + + + + +

+Public Member Functions

 WaveShaper (const int16_t *TABLE_NAME)
 Constructor. More...
 
int next (int in)
 Maps input to output, transforming it according to the table being used. More...
 
+

Detailed Description

+

template<>
+class WaveShaper< int >

+ +

int specialisation of WaveShaper template

+ +

Definition at line 65 of file WaveShaper.h.

+

Constructor & Destructor Documentation

+ +

§ WaveShaper()

+ +
+
+ + + + + +
+ + + + + + + + +
WaveShaper< int >::WaveShaper (const int16_t * TABLE_NAME)
+
+inline
+
+ +

Constructor.

+

Use the template parameter to set type of numbers being mapped. For example, WaveShaper <int> myWaveShaper; makes a WaveShaper which uses ints.

Template Parameters
+ + +
Tthe type of numbers being input to be shaped, chosen to match the table.
+
+
+
Parameters
+ + +
TABLE_NAMEthe name of the table being used, which can be found in the ".h" file containing the table.
+
+
+ +

Definition at line 74 of file WaveShaper.h.

+ +
+
+

Member Function Documentation

+ +

§ next()

+ +
+
+ + + + + +
+ + + + + + + + +
int WaveShaper< int >::next (int in)
+
+inline
+
+ +

Maps input to output, transforming it according to the table being used.

+
Parameters
+ + +
inthe input signal. For flexibility, it's up to you to give the correct offset to your input signal. So if you're mapping a signed 9-bit signal (such as the sum of 2 8-bit Oscils) into a 512 cell table centred around cell 256, add 256 to offset the input value. With a sigmoid table, this may be useful for compressing a bigger signal into the -244 to 243 output range of Mozzi, rather than dividing the signal and returning a int8_t from updateAudio().
+
+
+
Returns
the shaped signal.
+ +

Definition at line 91 of file WaveShaper.h.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/class_wave_shaper_3_01int_01_4.js b/extras/doc/html/class_wave_shaper_3_01int_01_4.js new file mode 100644 index 000000000..e00986f6c --- /dev/null +++ b/extras/doc/html/class_wave_shaper_3_01int_01_4.js @@ -0,0 +1,5 @@ +var class_wave_shaper_3_01int_01_4 = +[ + [ "WaveShaper", "class_wave_shaper_3_01int_01_4.html#a9cc7f4f6a7493172cdc94411ac09275a", null ], + [ "next", "class_wave_shaper_3_01int_01_4.html#a2bf3bca1848a953c52ae94d5b58199ba", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/classes.html b/extras/doc/html/classes.html new file mode 100644 index 000000000..af10f6ecf --- /dev/null +++ b/extras/doc/html/classes.html @@ -0,0 +1,142 @@ + + + + + + + +Mozzi: Class Index + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class Index
+
+
+
a | c | d | e | i | l | m | o | p | r | s | w
+ + + + + + + + + + + + + + + + + +
  a  
+
  e  
+
Line< unsigned long >   Phasor   Stack   
LowPassFilter   Portamento   StateVariable   
ADSR   Ead   
  m  
+
  r  
+
  w  
+
AudioDelay   EventDelay   
AudioDelayFeedback   
  i  
+
Metronome   RCpoll   WavePacket   
AutoMap   MultiLine   ReverbTank   WavePacketSample   
AutoRange   Int2Type   
  o  
+
RollingAverage   WaveShaper   
  c  
+
IntMap   RollingStat   WaveShaper< char >   
  l  
+
Oscil   
  s  
+
WaveShaper< int >   
CapPoll   OverSample   
CircularBuffer   Line   
  p  
+
Sample   
ControlDelay   Line< unsigned char >   SampleHuffman   
  d  
+
Line< unsigned int >   PDResonant   Smooth   
DCfilter   
+
a | c | d | e | i | l | m | o | p | r | s | w
+
+
+ + + + diff --git a/extras/doc/html/closed.png b/extras/doc/html/closed.png new file mode 100644 index 0000000000000000000000000000000000000000..be1ea46f0ee06601b9fe1646ad0b7b190d1d0713 GIT binary patch literal 128 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{V?w&4=Ar*{o=N{x`P~c$pfBxlk zNX^~g#hsi2M>%JGJIW}_cwp&jz5_d%j<{@KI472&R9&}MMEsI>ruyoyMy>ni@_lI0 c* + + + + + + +Mozzi: cogl_sqrti.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
cogl_sqrti.h
+
+
+
1 
18 #include "mozzi_fixmath.h"
19 
20 
21 //http://www.codecodex.com/wiki/Calculate_an_integer_square_root
22 //see Integer Square Roots by Jack W. Crenshaw, figure 2, http://www.embedded.com/electronics-blogs/programmer-s-toolbox/4219659/Integer-Square-Roots
23  typedef uint8_t uint8_t;
24  typedef unsigned short int uint16;
25  typedef unsigned long int uint32;
26 
27 
28 
29  uint32 // OR uint16 OR uint8_t
30  isqrt32 (uint32 n) // OR isqrt16 ( uint16 n ) OR isqrt8 ( uint8_t n ) - respectively [ OR overloaded as isqrt (uint16_t?? n) in C++ ]
31  {
32  register uint32 // OR register uint16 OR register uint8_t - respectively
33  root, remainder, place;
34 
35  root = 0;
36  remainder = n;
37  place = 0x40000000; // OR place = 0x4000; OR place = 0x40; - respectively
38 
39  while (place > remainder)
40  place = place >> 2;
41  while (place)
42  {
43  if (remainder >= root + place)
44  {
45  remainder = remainder - root - place;
46  root = root + (place << 1);
47  }
48  root = root >> 1;
49  place = place >> 2;
50  }
51  return root;
52  }
53 
54  //http://www.codecodex.com/wiki/Calculate_an_integer_square_root
55  uint16 // OR uint16 OR uint8_t
56  isqrt16 (uint16 n) // OR isqrt16 ( uint16 n ) OR isqrt8 ( uint8_t n ) - respectively [ OR overloaded as isqrt (uint16_t?? n) in C++ ]
57  {
58  register uint16 // OR register uint16 OR register uint8_t - respectively
59  root, remainder, place;
60 
61  root = 0;
62  remainder = n;
63  place = 0x4000; // OR place = 0x4000; OR place = 0x40; - respectively
64 
65  while (place > remainder)
66  place = place >> 2;
67  while (place)
68  {
69  if (remainder >= root + place)
70  {
71  remainder = remainder - root - place;
72  root = root + (place << 1);
73  }
74  root = root >> 1;
75  place = place >> 2;
76  }
77  return root;
78  }
79 
80 
81 
82 
83 
84 /*-- isqrt -----------------------------------------------------------------*/
85 
86 unsigned long isqrt(unsigned long n) {
87  unsigned long s, t;
88 
89 #define sqrtBit(k) \
90  t = s+(1UL<<(k-1)); t <<= k+1; if (n >= t) { n -= t; s |= 1UL<<k; }
91 
92  s = 0UL;
93 #ifdef __alpha
94  if (n >= 1UL<<62) { n -= 1UL<<62; s = 1UL<<31; }
95  sqrtBit(30); sqrtBit(29); sqrtBit(28); sqrtBit(27); sqrtBit(26);
96  sqrtBit(25); sqrtBit(24); sqrtBit(23); sqrtBit(22); sqrtBit(21);
97  sqrtBit(20); sqrtBit(19); sqrtBit(18); sqrtBit(17); sqrtBit(16);
98  sqrtBit(15);
99 #else
100  if (n >= 1UL<<30) { n -= 1UL<<30; s = 1UL<<15; }
101 #endif
102  sqrtBit(14); sqrtBit(13); sqrtBit(12); sqrtBit(11); sqrtBit(10);
103  sqrtBit(9); sqrtBit(8); sqrtBit(7); sqrtBit(6); sqrtBit(5);
104  sqrtBit(4); sqrtBit(3); sqrtBit(2); sqrtBit(1);
105  if (n > s<<1) s |= 1UL;
106 
107 #undef sqrtBit
108 
109  return s;
110 } /* end isqrt */
111 
112 
132 uint16_t SquareRoot(uint32_t a_nInput)
133 {
134  uint32_t op = a_nInput;
135  uint32_t res = 0;
136  uint32_t one = 1uL << 30; // The second-to-top bit is set: use 1u << 14 for uint16_t type; use 1uL<<30 for uint32_t type
137 
138 
139  // "one" starts at the highest power of four <= than the argument.
140  while (one > op)
141  {
142  one >>= 2;
143  }
144 
145  while (one != 0)
146  {
147  if (op >= res + one)
148  {
149  op = op - (res + one);
150  res = res + 2 * one;
151  }
152  res >>= 1;
153  one >>= 2;
154  }
155  return res;
156 }
157 
158 
159 
160 
161 int cogl_sqrti (int number)
162 {
163 
164  /* This is a fixed point implementation of the Quake III sqrt algorithm,
165  * described, for example, at
166  * http://www.codemaestro.com/reviews/review00000105.html
167  *
168  * While the original QIII is extremely fast, the use of floating division
169  * and multiplication makes it perform very on arm processors without FPU.
170  *
171  * The key to successfully replacing the floating point operations with
172  * fixed point is in the choice of the fixed point format. The QIII
173  * algorithm does not calculate the square root, but its reciprocal ('y'
174  * below), which is only at the end turned to the inverse value. In order
175  * for the algorithm to produce satisfactory results, the reciprocal value
176  * must be represented with sufficient precission; the 16.16 we use
177  * elsewhere in clutter is not good enough, and 10.22 is used instead.
178  */
179  //CoglFixed x;
180  long x;
181  uint32_t y_1; /* 10.22 fixed point */
182  uint32_t f = 0x600000; /* '1.5' as 10.22 fixed */
183 
184  union
185  {
186  float f;
187  uint32_t i;
188  } flt, flt2;
189 
190  flt.f = number;
191 
192  x = Q15n0_to_Q15n16(number) / 2;
193 
194  /* The QIII initial estimate */
195  flt.i = 0x5f3759df - ( flt.i >> 1 );
196 
197  /* Now, we convert the float to 10.22 fixed. We exploit the mechanism
198  * described at http://www.d6.com/users/checker/pdfs/gdmfp.pdf.
199  *
200  * We want 22 bit fraction; a single precission float uses 23 bit
201  * mantisa, so we only need to add 2^(23-22) (no need for the 1.5
202  * multiplier as we are only dealing with positive numbers).
203  *
204  * Note: we have to use two separate variables here -- for some reason,
205  * if we try to use just the flt variable, gcc on ARM optimises the whole
206  * addition out, and it all goes pear shape, since without it, the bits
207  * in the float will not be correctly aligned.
208  */
209  flt2.f = flt.f + 2.0;
210  flt2.i &= 0x7FFFFF;
211 
212  /* Now we correct the estimate */
213  y_1 = (flt2.i >> 11) * (flt2.i >> 11);
214  y_1 = (y_1 >> 8) * (x >> 8);
215 
216  y_1 = f - y_1;
217  flt2.i = (flt2.i >> 11) * (y_1 >> 11);
218 
219  /* If the original argument is less than 342, we do another
220  * iteration to improve precission (for arguments >= 342, the single
221  * iteration produces generally better results).
222  */
223  if (x < 171)
224  {
225  y_1 = (flt2.i >> 11) * (flt2.i >> 11);
226  y_1 = (y_1 >> 8) * (x >> 8);
227 
228  y_1 = f - y_1;
229  flt2.i = (flt2.i >> 11) * (y_1 >> 11);
230  }
231 
232  /* Invert, round and convert from 10.22 to an integer
233  * 0x1e3c68 is a magical rounding constant that produces slightly
234  * better results than 0x200000.
235  */
236  return (number * flt2.i + 0x1e3c68) >> 22;
237 
238 }
Q15n16 Q15n0_to_Q15n16(Q15n0 a)
Convert Q15n0 int16_t to Q15n16 fix.
+
+
+ + + + diff --git a/extras/doc/html/custom_stylesheet.css b/extras/doc/html/custom_stylesheet.css new file mode 100644 index 000000000..a254ccf41 --- /dev/null +++ b/extras/doc/html/custom_stylesheet.css @@ -0,0 +1,49 @@ +/* Mozzi extra CSS for doxygen 1.8.3.1 */ + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + max-width: 50%; + margin: 10%; + border: 0px none; +} + +#projectname +{ + color: white; + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + color: white; + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + color: white; + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + background-color: #766C6B; + padding: 5px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + diff --git a/extras/doc/html/dir_0d6feda837323b0c7a50b1cca0a6cf12.html b/extras/doc/html/dir_0d6feda837323b0c7a50b1cca0a6cf12.html new file mode 100644 index 000000000..6a7ec14bd --- /dev/null +++ b/extras/doc/html/dir_0d6feda837323b0c7a50b1cca0a6cf12.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: SampleHuffman_Umpah Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
SampleHuffman_Umpah Directory Reference
+
+
+
+
+ + + + diff --git a/extras/doc/html/dir_3faa5fff9e46bf8b8f48c87f683ce0e6.html b/extras/doc/html/dir_3faa5fff9e46bf8b8f48c87f683ce0e6.html new file mode 100644 index 000000000..9c9fcd0d5 --- /dev/null +++ b/extras/doc/html/dir_3faa5fff9e46bf8b8f48c87f683ce0e6.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: python Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
python Directory Reference
+
+
+ + + + + +

+Files

file  char2mozzi.py [code]
 
A script for converting raw 8 bit sound data files to wavetables for Mozzi.

 
+
+
+ + + + diff --git a/extras/doc/html/dir_9ca29615486e86932f4b900563144736.html b/extras/doc/html/dir_9ca29615486e86932f4b900563144736.html new file mode 100644 index 000000000..ec925791a --- /dev/null +++ b/extras/doc/html/dir_9ca29615486e86932f4b900563144736.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: 08.Samples Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
08.Samples Directory Reference
+
+
+ + +

+Directories

+
+
+ + + + diff --git a/extras/doc/html/dir_9f351d46ce3cc29445a41dc3a31e6919.html b/extras/doc/html/dir_9f351d46ce3cc29445a41dc3a31e6919.html new file mode 100644 index 000000000..6499d287e --- /dev/null +++ b/extras/doc/html/dir_9f351d46ce3cc29445a41dc3a31e6919.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: config Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
config Directory Reference
+
+
+
+
+ + + + diff --git a/extras/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html b/extras/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html new file mode 100644 index 000000000..fa3ff1eee --- /dev/null +++ b/extras/doc/html/dir_d28a4824dc47e487b107a5db32ef43c4.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: examples Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
examples Directory Reference
+
+
+
+
+ + + + diff --git a/extras/doc/html/dir_da40a2d191134d083f9bacf4a8879a55.html b/extras/doc/html/dir_da40a2d191134d083f9bacf4a8879a55.html new file mode 100644 index 000000000..93f4ce719 --- /dev/null +++ b/extras/doc/html/dir_da40a2d191134d083f9bacf4a8879a55.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: 03.Sensors Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
03.Sensors Directory Reference
+
+
+ + +

+Directories

+
+
+ + + + diff --git a/extras/doc/html/dir_dd81b9de5c9027a54e49f977944ecdc1.html b/extras/doc/html/dir_dd81b9de5c9027a54e49f977944ecdc1.html new file mode 100644 index 000000000..c0581fa95 --- /dev/null +++ b/extras/doc/html/dir_dd81b9de5c9027a54e49f977944ecdc1.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: Piezo_SampleScrubber Directory Reference + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Piezo_SampleScrubber Directory Reference
+
+
+
+
+ + + + diff --git a/extras/doc/html/doc.png b/extras/doc/html/doc.png new file mode 100644 index 0000000000000000000000000000000000000000..aa21f19a1e96b8c123879076e6bee781194d0921 GIT binary patch literal 734 zcmV<40wMj0P)uIE(Fa z+3R#VwA&|Y-*G!M8b>r6$Alwcg0@2>8X=iVlO7r}0Q_JU3I%}QP%f1UiDZ&cIE)ht zVLLXCBUgvRg9Bo*IH|!wwn`;T(=5c|@#g?KXeA1mCPpAYK)^5zEGtMz6bgy%Q|Uqe z+uKv?M0S$$mlCyV)i)_xiB5~09?q{@-^8E zm%8CCpw(GQ!+l5m$#@Ve-`U4AEGO%=kE7w~O0$0s3(6BufT!i;LV@xl4ZG z2KQE1xh_~d`u8!jxg5izqiQxH(I|ix=Q5C}Rw`nkinLlSVe+9GFv+G`*;dK9|6mPl z8$b)+0+wZ|5f~aCR-XqF39^K(ZJa%ZT{y^m%Y) zW`?ft06+&{4|-RH^x*c&3c2|Otp~ld0qCIpkL*akB=axnOWk`HpNyvTMj9)Jt=CM~ z)3eY@BxCo_!!MgRZ+ literal 0 HcmV?d00001 diff --git a/extras/doc/html/dynsections.js b/extras/doc/html/dynsections.js new file mode 100644 index 000000000..1e6bf07f9 --- /dev/null +++ b/extras/doc/html/dynsections.js @@ -0,0 +1,104 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} + +function toggleLevel(level) +{ + $('table.directory tr').each(function() { + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + + +Mozzi: Examples + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ + + + + + diff --git a/extras/doc/html/examples.js b/extras/doc/html/examples.js new file mode 100644 index 000000000..3fe0611ae --- /dev/null +++ b/extras/doc/html/examples.js @@ -0,0 +1,27 @@ +var examples = +[ + [ "01.Basics/Vibrato/Vibrato.ino", "01_8_basics_2_vibrato_2_vibrato_8ino-example.html", null ], + [ "02.Control/Control_Echo_Theremin/Control_Echo_Theremin.ino", "02_8_control_2_control__echo__theremin_2_control__echo__theremin_8ino-example.html", null ], + [ "02.Control/Control_Tremelo/Control_Tremelo.ino", "02_8_control_2_control__tremelo_2_control__tremelo_8ino-example.html", null ], + [ "02.Control/EventDelay/EventDelay.ino", "02_8_control_2_event_delay_2_event_delay_8ino-example.html", null ], + [ "02.Control/Metronome_SampleHuffman/Metronome_SampleHuffman.ino", "02_8_control_2_metronome__sample_huffman_2_metronome__sample_huffman_8ino-example.html", null ], + [ "03.Sensors/Knob_LDR_x2_WavePacket/Knob_LDR_x2_WavePacket.ino", "03_8_sensors_2_knob__l_d_r_x2__wave_packet_2_knob__l_d_r_x2__wave_packet_8ino-example.html", null ], + [ "05.Control_Filters/DCFilter/DCFilter.ino", "05_8_control__filters_2_d_c_filter_2_d_c_filter_8ino-example.html", null ], + [ "05.Control_Filters/Smooth/Smooth.ino", "05_8_control__filters_2_smooth_2_smooth_8ino-example.html", null ], + [ "05.Control_Filters/Teensy_USB_MIDI_portamento/Teensy_USB_MIDI_portamento.ino", "05_8_control__filters_2_teensy__u_s_b__m_i_d_i_portamento_2_teensy__u_s_b__m_i_d_i_portamento_8ino-example.html", null ], + [ "05.Control_Filters/Thermistor_OverSample/Thermistor_OverSample.ino", "05_8_control__filters_2_thermistor__over_sample_2_thermistor__over_sample_8ino-example.html", null ], + [ "06.Synthesis/PWM_Phasing/PWM_Phasing.ino", "06_8_synthesis_2_p_w_m__phasing_2_p_w_m__phasing_8ino-example.html", null ], + [ "06.Synthesis/WavePacket/WavePacket.ino", "06_8_synthesis_2_wave_packet_2_wave_packet_8ino-example.html", null ], + [ "06.Synthesis/WavePacket_Sample/WavePacket_Sample.ino", "06_8_synthesis_2_wave_packet__sample_2_wave_packet__sample_8ino-example.html", null ], + [ "06.Synthesis/WaveShaper/WaveShaper.ino", "06_8_synthesis_2_wave_shaper_2_wave_shaper_8ino-example.html", null ], + [ "07.Envelopes/ADSR_Envelope/ADSR_Envelope.ino", "07_8_envelopes_2_a_d_s_r__envelope_2_a_d_s_r__envelope_8ino-example.html", null ], + [ "07.Envelopes/Ead_Envelope/Ead_Envelope.ino", "07_8_envelopes_2_ead__envelope_2_ead__envelope_8ino-example.html", null ], + [ "07.Envelopes/MultiLine_Envelope/MultiLine_Envelope.ino", "07_8_envelopes_2_multi_line__envelope_2_multi_line__envelope_8ino-example.html", null ], + [ "08.Samples/Sample/Sample.ino", "08_8_samples_2_sample_2_sample_8ino-example.html", null ], + [ "08.Samples/SampleHuffman_Umpah/SampleHuffman_Umpah.ino", "08_8_samples_2_sample_huffman__umpah_2_sample_huffman__umpah_8ino-example.html", null ], + [ "09.Delays/AudioDelay/AudioDelay.ino", "09_8_delays_2_audio_delay_2_audio_delay_8ino-example.html", null ], + [ "09.Delays/AudioDelayFeedback/AudioDelayFeedback.ino", "09_8_delays_2_audio_delay_feedback_2_audio_delay_feedback_8ino-example.html", null ], + [ "09.Delays/ReverbTank_STANDARD/ReverbTank_STANDARD.ino", "09_8_delays_2_reverb_tank__s_t_a_n_d_a_r_d_2_reverb_tank__s_t_a_n_d_a_r_d_8ino-example.html", null ], + [ "10.Audio_Filters/LowPassFilter/LowPassFilter.ino", "10_8_audio__filters_2_low_pass_filter_2_low_pass_filter_8ino-example.html", null ], + [ "11.Audio_Filters/StateVariableFilter/StateVariableFilter.ino", "11_8_audio__filters_2_state_variable_filter_2_state_variable_filter_8ino-example.html", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/files.html b/extras/doc/html/files.html new file mode 100644 index 000000000..b01180afc --- /dev/null +++ b/extras/doc/html/files.html @@ -0,0 +1,186 @@ + + + + + + + +Mozzi: File List + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 ADSR.h
 audio2huff.py
 AudioConfigHiSpeed14bitPwm.h
 AudioConfigStandard9bitPwm.h
 AudioConfigStandardPlus.h
 AudioConfigTeensy3_12bit.h
 AudioDelay.h
 AudioDelayFeedback.h
 AutoMap.h
 AutoRange.h
 blahblah4b_int8.h
 CapPoll.h
 char2mozzi.py
A script for converting raw 8 bit sound data files to wavetables for Mozzi.
 chebyshev_int8.py
 CircularBuffer.h
 cogl_sqrti.h
 ControlDelay.h
 DCfilter.h
 Ead.h
 EventDelay.h
 float2mozzi.py
 float2mozzi_uint8.py
 IntMap.h
 known_16bit_timers.h
 Line.h
 LowPassFilter.h
 meta.h
 Metronome.h
 mozzi_analog.cpp
 mozzi_analog.h
 mozzi_config.h
 mozzi_fixmath.cpp
 mozzi_fixmath.h
 mozzi_midi.cpp
 mozzi_midi.h
 mozzi_rand.cpp
 mozzi_rand.h
 mozzi_utils.cpp
 mozzi_utils.h
 MozziGuts.cpp
 MozziGuts.h
 mult16x16.h
 mult16x8.h
 mult32x16.h
 MultiLine.h
 MultiLine2.h
 Oscil.h
 OverSample.h
 PDResonant.h
 Phasor.h
 Portamento.h
 primes.h
 RCpoll.h
 ReverbTank.h
 RollingAverage.h
 RollingStat.h
 Sample.h
 SampleHuffman.h
 sin1024_int8.py
 sin8192_uint8.py
 sin_multi_levels_int8.py
 Smooth.h
 sounddata.h
 Stack.h
 StateVariable.h
 table_generator_template.py
 twi_nonblock.cpp
 twi_nonblock.h
 umpah_huff.h
 WavePacket.h
 WavePacketSample.h
 WaveShaper.h
+
+
+
+ + + + diff --git a/extras/doc/html/files.js b/extras/doc/html/files.js new file mode 100644 index 000000000..aa7c806d5 --- /dev/null +++ b/extras/doc/html/files.js @@ -0,0 +1,75 @@ +var files = +[ + [ "ADSR.h", "_a_d_s_r_8h_source.html", null ], + [ "audio2huff.py", "audio2huff_8py_source.html", null ], + [ "AudioConfigHiSpeed14bitPwm.h", "_audio_config_hi_speed14bit_pwm_8h_source.html", null ], + [ "AudioConfigStandard9bitPwm.h", "_audio_config_standard9bit_pwm_8h_source.html", null ], + [ "AudioConfigStandardPlus.h", "_audio_config_standard_plus_8h_source.html", null ], + [ "AudioConfigTeensy3_12bit.h", "_audio_config_teensy3__12bit_8h_source.html", null ], + [ "AudioDelay.h", "_audio_delay_8h_source.html", null ], + [ "AudioDelayFeedback.h", "_audio_delay_feedback_8h_source.html", null ], + [ "AutoMap.h", "_auto_map_8h_source.html", null ], + [ "AutoRange.h", "_auto_range_8h_source.html", null ], + [ "blahblah4b_int8.h", "blahblah4b__int8_8h_source.html", null ], + [ "CapPoll.h", "_cap_poll_8h_source.html", null ], + [ "char2mozzi.py", "char2mozzi_8py.html", "char2mozzi_8py" ], + [ "chebyshev_int8.py", "chebyshev__int8_8py_source.html", null ], + [ "CircularBuffer.h", "_circular_buffer_8h_source.html", null ], + [ "cogl_sqrti.h", "cogl__sqrti_8h_source.html", null ], + [ "ControlDelay.h", "_control_delay_8h_source.html", null ], + [ "DCfilter.h", "_d_cfilter_8h_source.html", null ], + [ "Ead.h", "_ead_8h_source.html", null ], + [ "EventDelay.h", "_event_delay_8h_source.html", null ], + [ "float2mozzi.py", "float2mozzi_8py_source.html", null ], + [ "float2mozzi_uint8.py", "float2mozzi__uint8_8py_source.html", null ], + [ "IntMap.h", "_int_map_8h_source.html", null ], + [ "known_16bit_timers.h", "known__16bit__timers_8h_source.html", null ], + [ "Line.h", "_line_8h_source.html", null ], + [ "LowPassFilter.h", "_low_pass_filter_8h_source.html", null ], + [ "meta.h", "meta_8h_source.html", null ], + [ "Metronome.h", "_metronome_8h_source.html", null ], + [ "mozzi_analog.cpp", "mozzi__analog_8cpp_source.html", null ], + [ "mozzi_analog.h", "mozzi__analog_8h_source.html", null ], + [ "mozzi_config.h", "mozzi__config_8h_source.html", null ], + [ "mozzi_fixmath.cpp", "mozzi__fixmath_8cpp_source.html", null ], + [ "mozzi_fixmath.h", "mozzi__fixmath_8h_source.html", null ], + [ "mozzi_midi.cpp", "mozzi__midi_8cpp_source.html", null ], + [ "mozzi_midi.h", "mozzi__midi_8h_source.html", null ], + [ "mozzi_rand.cpp", "mozzi__rand_8cpp_source.html", null ], + [ "mozzi_rand.h", "mozzi__rand_8h_source.html", null ], + [ "mozzi_utils.cpp", "mozzi__utils_8cpp_source.html", null ], + [ "mozzi_utils.h", "mozzi__utils_8h_source.html", null ], + [ "MozziGuts.cpp", "_mozzi_guts_8cpp_source.html", null ], + [ "MozziGuts.h", "_mozzi_guts_8h_source.html", null ], + [ "mult16x16.h", "mult16x16_8h_source.html", null ], + [ "mult16x8.h", "mult16x8_8h_source.html", null ], + [ "mult32x16.h", "mult32x16_8h_source.html", null ], + [ "MultiLine.h", "_multi_line_8h_source.html", null ], + [ "MultiLine2.h", "_multi_line2_8h_source.html", null ], + [ "Oscil.h", "_oscil_8h_source.html", null ], + [ "OverSample.h", "_over_sample_8h_source.html", null ], + [ "PDResonant.h", "_p_d_resonant_8h_source.html", null ], + [ "Phasor.h", "_phasor_8h_source.html", null ], + [ "Portamento.h", "_portamento_8h_source.html", null ], + [ "primes.h", "primes_8h_source.html", null ], + [ "RCpoll.h", "_r_cpoll_8h_source.html", null ], + [ "ReverbTank.h", "_reverb_tank_8h_source.html", null ], + [ "RollingAverage.h", "_rolling_average_8h_source.html", null ], + [ "RollingStat.h", "_rolling_stat_8h_source.html", null ], + [ "Sample.h", "_sample_8h_source.html", null ], + [ "SampleHuffman.h", "_sample_huffman_8h_source.html", null ], + [ "sin1024_int8.py", "sin1024__int8_8py_source.html", null ], + [ "sin8192_uint8.py", "sin8192__uint8_8py_source.html", null ], + [ "sin_multi_levels_int8.py", "sin__multi__levels__int8_8py_source.html", null ], + [ "Smooth.h", "_smooth_8h_source.html", null ], + [ "sounddata.h", "sounddata_8h_source.html", null ], + [ "Stack.h", "_stack_8h_source.html", null ], + [ "StateVariable.h", "_state_variable_8h_source.html", null ], + [ "table_generator_template.py", "table__generator__template_8py_source.html", null ], + [ "twi_nonblock.cpp", "twi__nonblock_8cpp_source.html", null ], + [ "twi_nonblock.h", "twi__nonblock_8h_source.html", null ], + [ "umpah_huff.h", "umpah__huff_8h_source.html", null ], + [ "WavePacket.h", "_wave_packet_8h_source.html", null ], + [ "WavePacketSample.h", "_wave_packet_sample_8h_source.html", null ], + [ "WaveShaper.h", "_wave_shaper_8h_source.html", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/float2mozzi_8py_source.html b/extras/doc/html/float2mozzi_8py_source.html new file mode 100644 index 000000000..f03bd0400 --- /dev/null +++ b/extras/doc/html/float2mozzi_8py_source.html @@ -0,0 +1,112 @@ + + + + + + + +Mozzi: float2mozzi.py Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
float2mozzi.py
+
+
+
1 
2 
3 import sys, array, os, textwrap, math
4 
5  if len(sys.argv) != 5:
6  print 'Usage: float2mozzi.py <infile outfile tablename samplerate>'
7  sys.exit(1)
8 
9 [infile, outfile, tablename, samplerate] = sys.argv[1:]
10 
11 def float2mozzi(infile, outfile, tablename,samplerate):
12  fin = open(os.path.expanduser(infile), "rb")
13  print "opened " + infile
14  valuesetad = os.path.getsize(os.path.expanduser(infile))/4
15 
16 
17  valuesfromfile = array.array('f')
18  try:
19  valuesfromfile.fromfile(fin,valuesetad)
20  finally:
21  fin.close()
22 
23  values=valuesfromfile.tolist()
24 
27  fout = open(os.path.expanduser(outfile), "w")
28  fout.write('#ifndef ' + tablename + '_H_' + '\n')
29  fout.write('#define ' + tablename + '_H_' + '\n \n')
30  fout.write('#if ARDUINO >= 100'+'\n')
31  fout.write('#include "Arduino.h"'+'\n')
32  fout.write('#else'+'\n')
33  fout.write('#include "WProgram.h"'+'\n')
34  fout.write('#endif'+'\n')
35  fout.write('#include <avr/pgmspace.h>'+'\n \n')
36  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(len(values))+'\n')
37  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
38  outstring = 'const int8_t __attribute__((section(".progmem.data"))) ' + tablename + '_DATA [] = {'
39  try:
40  for num in values:
41  outstring += str(math.trunc((num*256)+0.5)) + ", "
42 
44  finally:
45  outstring += "};"
46  outstring = textwrap.fill(outstring, 80)
47  fout.write(outstring)
48  fout.write('\n \n #endif /* ' + tablename + '_H_ */\n')
49  fout.close()
50  print "wrote " + outfile
51 
52 float2mozzi(infile, outfile, tablename, samplerate)
+
+
+ + + + diff --git a/extras/doc/html/float2mozzi__uint8_8py_source.html b/extras/doc/html/float2mozzi__uint8_8py_source.html new file mode 100644 index 000000000..48d0180e6 --- /dev/null +++ b/extras/doc/html/float2mozzi__uint8_8py_source.html @@ -0,0 +1,112 @@ + + + + + + + +Mozzi: float2mozzi_uint8.py Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
float2mozzi_uint8.py
+
+
+
1 
2 
3 import sys, array, os, textwrap, math
4 
5 def float2mozzi_uint8(infile, outfile, tablename,samplerate):
6  fin = open(os.path.expanduser(infile), "rb")
7  print "opened " + infile
8  valuesetad = os.path.getsize(os.path.expanduser(infile))/4
9 
10 
11  valuesfromfile = array.array('f')
12  try:
13  valuesfromfile.fromfile(fin,valuesetad)
14  finally:
15  fin.close()
16 
17  values=valuesfromfile.tolist()
18 
21  fout = open(os.path.expanduser(outfile), "w")
22  fout.write('#ifndef ' + tablename + '_H_' + '\n')
23  fout.write('#define ' + tablename + '_H_' + '\n \n')
24  fout.write('#if ARDUINO >= 100'+'\n')
25  fout.write('#include "Arduino.h"'+'\n')
26  fout.write('#else'+'\n')
27  fout.write('#include "WProgram.h"'+'\n')
28  fout.write('#endif'+'\n')
29  fout.write('#include <avr/pgmspace.h>'+'\n \n')
30  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(len(values))+'\n')
31  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
32  outstring = 'const int8_t __attribute__((section(".progmem.data"))) ' + tablename + '_DATA [] = {'
33  try:
34  for num in values:
35  outstring += str(math.trunc((num*256)+0.5)) + ", "
36 
38  finally:
39  outstring += "};"
40  outstring = textwrap.fill(outstring, 80)
41  fout.write(outstring)
42  fout.write('\n \n #endif /* ' + tablename + '_H_ */\n')
43  fout.close()
44  print "wrote " + outfile
45 
46 float2mozzi_uint8(infile, outfile, tablename, samplerate)
+
+
+ + + + diff --git a/extras/doc/html/folderclosed.png b/extras/doc/html/folderclosed.png new file mode 100644 index 0000000000000000000000000000000000000000..ecd89f0d4926a52e8faa4d89ffc76c55f9b7bd5e GIT binary patch literal 610 zcmV-o0-gPdP)}0Km#%0l+G;a)EUK$m8S1g_w@V z0Mh2RTG%@{U;uCzlnO|4+jaEcj4@nJCQ<+Z?gW-E^1HJ$@$>2mb=Qr_0r|?0@0VIk zej|JHC+Di0H9R>w$}Fr6heH5q`|$pJ`1tS;)mn`{*u;ZsRgIlTO(ojc-bUSVu~oP6 zu-?FyZ7bN0gURR%dV|4>TP^x^eXSyjL(^%@=ks(N(pWA>5yCLS`n^)BqJSix1%b99 z5t6+Sks3?FWKN37e*SwQ2q4o+Wh078ktIIIBswXz9t+Ed#@0d;05T{P`OT}BVt0R^ z>!WHF3Bea6${<4lnY8AOpl5L=Wmq~#DQyTm#(ILo3lTXO9bGI)J@ zDw@8pEJ{estttJ_?NGgar{f8pot!MsK<oW zl8CH6@gAkUR&FwzYUy0We#sz$}=h(fs8)Pee7pMG63rL+LsA_H~r;)+92s z$X^{Bl?ni4P`E1WhEwbI2fV$z$Ng@Pdz}uU%e{7+x7s_rNzs{a%lE=-p1g w&zqjd?^h~smu5is&T|0xSNQ+`qpe)v4<`dD!c7*t_W%F@07*qoM6N<$f;>GM`2YX_ literal 0 HcmV?d00001 diff --git a/extras/doc/html/folderopen.png b/extras/doc/html/folderopen.png new file mode 100644 index 0000000000000000000000000000000000000000..0cad567f593e659b14bc80b572002de96386a9c2 GIT binary patch literal 587 zcmV-R0<`^!P)8S%5dM6=pdkO8FXTva=Kg#*9YuPYG<10eN+@^;^A=F@4iODCH2VN4PC|-u0#0d& zauoP-yUeb46Fc5qQjh`(*`H>2wKLy*JF|A{2q6IA-p~Mm`^3Lb&;$S*PG>Xm?c@Yp zaPZ|4%O%H79HTcJIskB2+(;mUw>H{XTYCW4b=BJB=m=jY6V(-h9*3SrqXCETe1G3c z>}FX805wdHk2AN~BxmxYka8SG5yDnW!Sj81o{#m1>-cp($8bD;3jo*QTyN7)hlgT5 zKZjW_TfsSb=tODGX|C4wo=2M)e_GGn8_CZSG1n-+_lTC;hX zxl&;QYg!J_u--)QbQK~_e9Kh8p=enyT@!8o=ynOY#(nVGUoXeYA6wj=g zac#aTfmJuT9Pp;#<$&cqw-S7xP61rKCa4K$8%yg20RU7`yJ&Q=I>~Oz2FaMwhmCc6 zJr)zTyD{62yX^5!SJ}8fV7 + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+
+ + + + diff --git a/extras/doc/html/functions_c.html b/extras/doc/html/functions_c.html new file mode 100644 index 000000000..5f65200f9 --- /dev/null +++ b/extras/doc/html/functions_c.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+
+ + + + diff --git a/extras/doc/html/functions_d.html b/extras/doc/html/functions_d.html new file mode 100644 index 000000000..a341ae085 --- /dev/null +++ b/extras/doc/html/functions_d.html @@ -0,0 +1,113 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+
+ + + + diff --git a/extras/doc/html/functions_dup.js b/extras/doc/html/functions_dup.js new file mode 100644 index 000000000..7373bbeb3 --- /dev/null +++ b/extras/doc/html/functions_dup.js @@ -0,0 +1,18 @@ +var functions_dup = +[ + [ "a", "functions.html", null ], + [ "c", "functions_c.html", null ], + [ "d", "functions_d.html", null ], + [ "e", "functions_e.html", null ], + [ "g", "functions_g.html", null ], + [ "i", "functions_i.html", null ], + [ "l", "functions_l.html", null ], + [ "m", "functions_m.html", null ], + [ "n", "functions_n.html", null ], + [ "o", "functions_o.html", null ], + [ "p", "functions_p.html", null ], + [ "r", "functions_r.html", null ], + [ "s", "functions_s.html", null ], + [ "u", "functions_u.html", null ], + [ "w", "functions_w.html", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/functions_e.html b/extras/doc/html/functions_e.html new file mode 100644 index 000000000..b089c48bb --- /dev/null +++ b/extras/doc/html/functions_e.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+
+ + + + diff --git a/extras/doc/html/functions_func.html b/extras/doc/html/functions_func.html new file mode 100644 index 000000000..a97a95db8 --- /dev/null +++ b/extras/doc/html/functions_func.html @@ -0,0 +1,129 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/extras/doc/html/functions_func.js b/extras/doc/html/functions_func.js new file mode 100644 index 000000000..9c5d2a985 --- /dev/null +++ b/extras/doc/html/functions_func.js @@ -0,0 +1,18 @@ +var functions_func = +[ + [ "a", "functions_func.html", null ], + [ "c", "functions_func_c.html", null ], + [ "d", "functions_func_d.html", null ], + [ "e", "functions_func_e.html", null ], + [ "g", "functions_func_g.html", null ], + [ "i", "functions_func_i.html", null ], + [ "l", "functions_func_l.html", null ], + [ "m", "functions_func_m.html", null ], + [ "n", "functions_func_n.html", null ], + [ "o", "functions_func_o.html", null ], + [ "p", "functions_func_p.html", null ], + [ "r", "functions_func_r.html", null ], + [ "s", "functions_func_s.html", null ], + [ "u", "functions_func_u.html", null ], + [ "w", "functions_func_w.html", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/functions_func_c.html b/extras/doc/html/functions_func_c.html new file mode 100644 index 000000000..2b62ce274 --- /dev/null +++ b/extras/doc/html/functions_func_c.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- c -

+
+
+ + + + diff --git a/extras/doc/html/functions_func_d.html b/extras/doc/html/functions_func_d.html new file mode 100644 index 000000000..ff8c7d637 --- /dev/null +++ b/extras/doc/html/functions_func_d.html @@ -0,0 +1,113 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- d -

+
+
+ + + + diff --git a/extras/doc/html/functions_func_e.html b/extras/doc/html/functions_func_e.html new file mode 100644 index 000000000..0c90c9877 --- /dev/null +++ b/extras/doc/html/functions_func_e.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- e -

+
+
+ + + + diff --git a/extras/doc/html/functions_func_g.html b/extras/doc/html/functions_func_g.html new file mode 100644 index 000000000..9b6a780af --- /dev/null +++ b/extras/doc/html/functions_func_g.html @@ -0,0 +1,131 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- g -

+
+
+ + + + diff --git a/extras/doc/html/functions_func_i.html b/extras/doc/html/functions_func_i.html new file mode 100644 index 000000000..f737a6867 --- /dev/null +++ b/extras/doc/html/functions_func_i.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- i -

+
+
+ + + + diff --git a/extras/doc/html/functions_func_l.html b/extras/doc/html/functions_func_l.html new file mode 100644 index 000000000..fa2928738 --- /dev/null +++ b/extras/doc/html/functions_func_l.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- l -

+
+
+ + + + diff --git a/extras/doc/html/functions_func_m.html b/extras/doc/html/functions_func_m.html new file mode 100644 index 000000000..80d962a01 --- /dev/null +++ b/extras/doc/html/functions_func_m.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- m -

+
+
+ + + + diff --git a/extras/doc/html/functions_func_n.html b/extras/doc/html/functions_func_n.html new file mode 100644 index 000000000..a9e515b7e --- /dev/null +++ b/extras/doc/html/functions_func_n.html @@ -0,0 +1,149 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ + + + + + diff --git a/extras/doc/html/functions_func_o.html b/extras/doc/html/functions_func_o.html new file mode 100644 index 000000000..a9cf8246a --- /dev/null +++ b/extras/doc/html/functions_func_o.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- o -

+
+
+ + + + diff --git a/extras/doc/html/functions_func_p.html b/extras/doc/html/functions_func_p.html new file mode 100644 index 000000000..6da4a1ecb --- /dev/null +++ b/extras/doc/html/functions_func_p.html @@ -0,0 +1,137 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ + + + + + diff --git a/extras/doc/html/functions_func_r.html b/extras/doc/html/functions_func_r.html new file mode 100644 index 000000000..8ccc14728 --- /dev/null +++ b/extras/doc/html/functions_func_r.html @@ -0,0 +1,133 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/extras/doc/html/functions_func_s.html b/extras/doc/html/functions_func_s.html new file mode 100644 index 000000000..3e024e052 --- /dev/null +++ b/extras/doc/html/functions_func_s.html @@ -0,0 +1,336 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+  + +

- s -

+
+
+ + + + diff --git a/extras/doc/html/functions_func_u.html b/extras/doc/html/functions_func_u.html new file mode 100644 index 000000000..c8f0b9f0e --- /dev/null +++ b/extras/doc/html/functions_func_u.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ + + + + + diff --git a/extras/doc/html/functions_func_w.html b/extras/doc/html/functions_func_w.html new file mode 100644 index 000000000..7f5a21b58 --- /dev/null +++ b/extras/doc/html/functions_func_w.html @@ -0,0 +1,123 @@ + + + + + + + +Mozzi: Class Members - Functions + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ + + + diff --git a/extras/doc/html/functions_g.html b/extras/doc/html/functions_g.html new file mode 100644 index 000000000..ca2877dbe --- /dev/null +++ b/extras/doc/html/functions_g.html @@ -0,0 +1,131 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+
+ + + + diff --git a/extras/doc/html/functions_i.html b/extras/doc/html/functions_i.html new file mode 100644 index 000000000..a7f6fe0c1 --- /dev/null +++ b/extras/doc/html/functions_i.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+
+ + + + diff --git a/extras/doc/html/functions_l.html b/extras/doc/html/functions_l.html new file mode 100644 index 000000000..1b7e832fe --- /dev/null +++ b/extras/doc/html/functions_l.html @@ -0,0 +1,119 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+
+ + + + diff --git a/extras/doc/html/functions_m.html b/extras/doc/html/functions_m.html new file mode 100644 index 000000000..b9901fcf7 --- /dev/null +++ b/extras/doc/html/functions_m.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+
+ + + + diff --git a/extras/doc/html/functions_n.html b/extras/doc/html/functions_n.html new file mode 100644 index 000000000..47318a253 --- /dev/null +++ b/extras/doc/html/functions_n.html @@ -0,0 +1,149 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ + + + + + diff --git a/extras/doc/html/functions_o.html b/extras/doc/html/functions_o.html new file mode 100644 index 000000000..e71b1e61e --- /dev/null +++ b/extras/doc/html/functions_o.html @@ -0,0 +1,118 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+
+ + + + diff --git a/extras/doc/html/functions_p.html b/extras/doc/html/functions_p.html new file mode 100644 index 000000000..20460c8b2 --- /dev/null +++ b/extras/doc/html/functions_p.html @@ -0,0 +1,137 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- p -

+
+
+ + + + diff --git a/extras/doc/html/functions_r.html b/extras/doc/html/functions_r.html new file mode 100644 index 000000000..5f5b7650e --- /dev/null +++ b/extras/doc/html/functions_r.html @@ -0,0 +1,133 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+
+ + + + diff --git a/extras/doc/html/functions_s.html b/extras/doc/html/functions_s.html new file mode 100644 index 000000000..6462b5074 --- /dev/null +++ b/extras/doc/html/functions_s.html @@ -0,0 +1,336 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+
+ + + + diff --git a/extras/doc/html/functions_u.html b/extras/doc/html/functions_u.html new file mode 100644 index 000000000..130da926c --- /dev/null +++ b/extras/doc/html/functions_u.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+
+ + + + diff --git a/extras/doc/html/functions_w.html b/extras/doc/html/functions_w.html new file mode 100644 index 000000000..aa2dc1803 --- /dev/null +++ b/extras/doc/html/functions_w.html @@ -0,0 +1,123 @@ + + + + + + + +Mozzi: Class Members + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+
+ + + + diff --git a/extras/doc/html/group__analog.html b/extras/doc/html/group__analog.html new file mode 100644 index 000000000..7e83b7af4 --- /dev/null +++ b/extras/doc/html/group__analog.html @@ -0,0 +1,306 @@ + + + + + + + +Mozzi: Analog + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Analog
+
+
+ +

Efficient analog input functions for sensors and audio. +More...

+ + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void setupFastAnalogRead (int8_t speed=FAST_ADC)
 This is automatically called in startMozzi. More...
 
void disconnectDigitalIn (uint8_t channel_num)
 Prepare an analog input channel by turning off its digital input buffer. More...
 
void reconnectDigitalIn (uint8_t channel_num)
 Reconnect the digital input buffer for an analog input channel which has been set for analog input with disconnectDigitalIn(). More...
 
void adcDisconnectAllDigitalIns ()
 Prepare all analog input channels by turning off their digital input buffers. More...
 
+void adcReconnectAllDigitalIns ()
 Reconnect the digital input buffers for analog input channels which have been set for analog input with disconnectDigitalIn().
 
int mozziAnalogRead (uint8_t pin)
 Reads the analog input of a chosen channel, without blocking other operations from running. More...
 
int getAudioInput ()
 This returns audio input from the input buffer, if #define USE_AUDIO_INPUT true is in the Mozzi/mozzi_config.h file. More...
 
+

Detailed Description

+

Efficient analog input functions for sensors and audio.

+

Helps produce glitch-free audio by allowing analog input functions which normally block processing to be performed in the background.

+

Function Documentation

+ +

§ adcDisconnectAllDigitalIns()

+ +
+
+ + + + + + + +
void adcDisconnectAllDigitalIns ()
+
+ +

Prepare all analog input channels by turning off their digital input buffers.

+

This helps to reduce noise, increase analog reading speed, and save power.

+ +

Definition at line 82 of file mozzi_analog.cpp.

+ +
+
+ +

§ disconnectDigitalIn()

+ +
+
+ + + + + + + + +
void disconnectDigitalIn (uint8_t channel_num)
+
+ +

Prepare an analog input channel by turning off its digital input buffer.

+

This helps to reduce noise, increase analog reading speed, and save power.

+

Here's more detail from http://www.openmusiclabs.com/learning/digital/atmega-adc/:

+

The DIDR (Data Input Disable Register) disconnects the digital inputs from whichever ADC channels you are using. This is important for 2 reasons. First off, an analog input will be floating all over the place, and causing the digital input to constantly toggle high and low. This creates excessive noise near the ADC, and burns extra power. Secondly, the digital input and associated DIDR switch have a capacitance associated with them which will slow down your input signal if you are sampling a highly resistive load.

+

And from the ATmega328p datasheet, p266:

+

When an analog signal is applied to the ADC pin and the digital input from this pin is not needed, this bit should be written logic one to reduce power consumption in the digital input buffer. Note that ADC named_pins ADC7 and ADC6 do not have digital input buffers, and therefore do not require Digital Input Disable bits.

Parameters
+ + +
channel_numthe analog input channel you wish to use.
+
+
+ +

Definition at line 66 of file mozzi_analog.cpp.

+ +
+
+ +

§ getAudioInput()

+ +
+
+ + + + + + + +
int getAudioInput ()
+
+ +

This returns audio input from the input buffer, if #define USE_AUDIO_INPUT true is in the Mozzi/mozzi_config.h file.

+

The pin used for audio input is set in Mozzi/mozzi_config.h with #define AUDIO_INPUT_PIN 0 (or other analog input pin). The audio signal needs to be in the range 0 to 5 volts. Circuits and discussions about biasing a signal in the middle of this range can be found at http://electronics.stackexchange.com/questions/14404/dc-biasing-audio-signal and http://interface.khm.de/index.php/lab/experiments/arduino-realtime-audio-processing/ . A circuit and instructions for amplifying and biasing a microphone signal can be found at http://www.instructables.com/id/Arduino-Audio-Input/?ALLSTEPS

Returns
audio data from the input buffer
+ +

Definition at line 144 of file MozziGuts.cpp.

+ +
+
+ +

§ mozziAnalogRead()

+ +
+
+ + + + + + + + +
int mozziAnalogRead (uint8_t pin)
+
+ +

Reads the analog input of a chosen channel, without blocking other operations from running.

+

It actually returns the most recent analog reading and puts the chosen pin or channel on the stack of channels to be read in the background before the next control interrupt.

Parameters
+ + +
pin_or_channelthe analog pin or channel number.
+
+
+
Returns
the digitised value of the voltage on the chosen channel, in the range 0-1023.
+ +

Definition at line 202 of file mozzi_analog.cpp.

+ +
+
+ +

§ reconnectDigitalIn()

+ +
+
+ + + + + + + + +
void reconnectDigitalIn (uint8_t channel_num)
+
+ +

Reconnect the digital input buffer for an analog input channel which has been set for analog input with disconnectDigitalIn().

+
Parameters
+ + +
channel_numthe analog input channel you wish to reconnect.
+
+
+ +

Definition at line 74 of file mozzi_analog.cpp.

+ +
+
+ +

§ setupFastAnalogRead()

+ +
+
+ + + + + + + + +
void setupFastAnalogRead (int8_t speed = FAST_ADC)
+
+ +

This is automatically called in startMozzi.

+

It makes mozziAnalogRead() happen faster than the standard Arduino analogRead(), changing the duration from about 105 in unmodified Arduino to about 16 microseconds for a dependable read with the default speed parameter FAST_ADC. If you want to set on of the faster modes (see params) you can call this after startMozzi(). See: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1208715493/11, and http://www.marulaberry.co.za/index.php/tutorials/code/arduino-adc/

Parameters
+ + +
speedFAST_ADC, FASTER_ADC or FASTEST_ADC. If no parameter is supplied, the default is FAST_ADC, which sets the analog conversion clock predivide rate to 16, giving 1Mhz on a 16MHz board, the fastest rate for which behaviour is defined (~16us per sample). However, divisors of 8 and 4 also show usable results in the graphs in this paper: http://dam.mellis.org/Mellis%20-%20Sensor%20Library%20for%20Arduino%20-%20Paper.pdf, so you can also try FASTER_ADC or FASTEST_ADC for divide rates of 8 or 4, giving times of about 8us or 4us per sample. Beware, reliable results will depend on the sort of input signal you have. Only use FASTER_ADC or FASTEST_ADC if you know what you're doing.
+
+
+ +

Definition at line 26 of file mozzi_analog.cpp.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/group__analog.js b/extras/doc/html/group__analog.js new file mode 100644 index 000000000..cdcef9d61 --- /dev/null +++ b/extras/doc/html/group__analog.js @@ -0,0 +1,10 @@ +var group__analog = +[ + [ "adcDisconnectAllDigitalIns", "group__analog.html#ga5042e7c576dd0307be38eb70efdb69fe", null ], + [ "adcReconnectAllDigitalIns", "group__analog.html#gabad497d1f8c8026e81849be0b65bf38f", null ], + [ "disconnectDigitalIn", "group__analog.html#ga532fe99fe78e34d4e6ae0ae2c7528353", null ], + [ "getAudioInput", "group__analog.html#ga3f15eb8d6694020d170ebcbedb645de7", null ], + [ "mozziAnalogRead", "group__analog.html#gae9536bf35f6ea46a6938d5eb52b947c3", null ], + [ "reconnectDigitalIn", "group__analog.html#ga26462e443299e8d39a520d4a838e00b7", null ], + [ "setupFastAnalogRead", "group__analog.html#gae909f8857d71ed79f277ee024de52574", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/group__core.html b/extras/doc/html/group__core.html new file mode 100644 index 000000000..9d2411240 --- /dev/null +++ b/extras/doc/html/group__core.html @@ -0,0 +1,570 @@ + + + + + + + +Mozzi: Core + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Core
+
+
+ +

Core definitions and functions. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Macros

#define STANDARD_PWM_RESOLUTION   488
 This is the dynamic range of Mozzi's audio output in STANDARD mode. More...
 
#define STANDARD_PWM_RESOLUTION   488
 This is the dynamic range of Mozzi's audio output in STANDARD mode. More...
 
+#define AUDIO_BIAS   ((uint16_t) 2048)
 
#define AUDIO_MODE   STANDARD_PLUS
 AUDIO_MODE holds the audio mode setting. More...
 
#define AUDIO_RATE   16384
 Holds the audio rate setting. More...
 
#define USE_AUDIO_INPUT   false
 Whether or not to use audio input. More...
 
+#define AUDIO_INPUT_PIN   0
 This sets which analog input channel to use for audio input, if you have #define USE_AUDIO_INPUT true in mozz_config.h.
 
#define STEREO_HACK   false
 This sets an option for stereo output, a hack which requires variables audio_signal_1 and audio_signal_2 to be set in updateAudio(), instead of returning a single audio value as is usual for standard mono. More...
 
#define CONTROL_RATE   64
 Control rate setting. More...
 
#define STANDARD   0
 Used to set AUDIO_MODE to STANDARD, STANDARD_PLUS, or HIFI. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

void startMozzi (int control_rate_hz=CONTROL_RATE)
 Sets up the timers for audio and control rate processes, storing the timer registers so they can be restored when Mozzi stops. More...
 
void pauseMozzi ()
 Stops audio and control interrupts and restores the timers to the values they had before Mozzi was started. More...
 
void unPauseMozzi ()
 Restores Mozzi audio and control interrupts, if they have been temporarily disabled with pauseMozzi(). More...
 
void updateAudio ()
 This is where you put your audio code. More...
 
void updateControl ()
 This is where you put your control code. More...
 
void audioHook ()
 This is required in Arduino's loop(). More...
 
unsigned long audioTicks ()
 An alternative for Arduino time funcitions like micros() which are disabled by Mozzi when it takes over Timer 0 for control interrupts. More...
 
unsigned long mozziMicros ()
 A replacement for Arduino micros() which is disabled by Mozzi which takes over Timer 0 for control interrupts. More...
 
+

Detailed Description

+

Core definitions and functions.

+

The bones of every Mozzi sketch.

+

Macro Definition Documentation

+ +

§ AUDIO_MODE

+ +
+
+ + + + +
#define AUDIO_MODE   STANDARD_PLUS
+
+ +

AUDIO_MODE holds the audio mode setting.

+

Select STANDARD (depreciated), STANDARD_PLUS or HIFI audio output mode in the Mozzi/mozzi_config.h file with #define AUDIO_MODE STANDARD_PLUS or #define AUDIO_MODE HIFI. In Mozzi/config.h, comment one of these options in and the others out to set the audio mode.

+

In STANDARD_PLUS mode the sample resolution is 488, which provides some headroom above the 8 bit table resolution currently used by the oscillators. You can look at utility/TimerOne library for more info about how interrupt rate and pwm resolution relate.

+

HIFI audio mode enables much higher quality output by combining signals from pins 9 and 10. For HIFI mode, edit Mozzi/mozzi_config.h to contain #define AUDIO_MODE HIFI, and comment out #define AUDIO_MODE STANDARD and #define AUDIO_MODE STANDARD_PLUS.

+
Note
Teensy 3.1 plays 12 bit audio in STANDARD or STANDARD_PLUS modes, and has no HIFI mode.
+ +

Definition at line 27 of file mozzi_config.h.

+ +
+
+ +

§ AUDIO_RATE

+ +
+
+ + + + +
#define AUDIO_RATE   16384
+
+ +

Holds the audio rate setting.

+

AUDIO_RATE can be #defined as 16384 or 32768 Hertz in Mozzi/mozzi_config.h.

+

Mozzi's original audio mode, now called STANDARD, uses 16384 Hz, chosen as a compromise between the sample rate (interrupt rate) and sample bitdepth (pwm width), which are interdependent due to the way pulse wave modulation is used to generate the sound output. An AUDIO_RATE of 32768 Hz works in STANDARD_PLUS and HIFI modes. Of course, doubling the sample rate halves the amount of time available to calculate the each sample, so it may only be useful for relatively simple sketches. The increased frequency response can also make unwanted artefacts of low resolution synthesis calculations more apparent, so it's not always a bonus.

+

Another factor which is important for Mozzi's operation is that with AUDIO_RATE being a power of two, some internal calculations can be highly optimised for speed.

+

In STANDARD and STANDARD_PLUS modes, the sample resolution is 488, which provides some headroom above the 8 bit table resolution currently used by the oscillators. You can look at the TimerOne library for more info about how interrupt rate and pwm resolution relate.

+

HIFI audio mode enables much higher quality output by combining signals from pins 9 and 10. For HIFI mode, edit Mozzi/mozzi_config.h to contain #define AUDIO_MODE HIFI, and comment out #define AUDIO_MODE STANDARD and #define AUDIO_MODE STANDARD_PLUS.

+ +

Definition at line 61 of file mozzi_config.h.

+ +
+
+ +

§ CONTROL_RATE

+ +
+
+ + + + +
#define CONTROL_RATE   64
+
+ +

Control rate setting.

+

Mozzi's CONTROL_RATE sets how many times per second updateControl() is called. It can be any power of 2 greater than 64, and the largest value where it starts to become impractical is around 1024. 64, 128, 256 and sometimes 512 are all usable values. Try to keep it as low as you can, for efficiency, though higher rates can sometimes give smoother results, avoiding the need to interpolate sensitive variables at audio rate in updateAudio(). CONTROL_RATE has a default of 64 Hz, but it can be changed at the top of your sketch, after the #includes, for example: #define CONTROL_RATE 256

+ +

Definition at line 38 of file MozziGuts.h.

+ +
+
+ +

§ STANDARD

+ +
+
+ + + + +
#define STANDARD   0
+
+ +

Used to set AUDIO_MODE to STANDARD, STANDARD_PLUS, or HIFI.

+

STANDARD / STANDARD_PLUS

+

Use #define AUDIO_MODE STANDARD_PLUS in Mozzi/config.h to select this output configuration, which is nearly 9 bit sound (-244 to 243) at 16384 Hz sample rate (AUDIO_RATE) and 32768 Hz PWM rate. It uses Timer 1 to for PWM and the sample updating routine (as an interrupt).

+

STANDARD is obsolete now, replaced by STANDARD_PLUS which is the default audio mode. STANDARD mode uses 16384 Hz PWM rate with an output interrupt at the same frequency. Some people can hear the PWM carrier frequency as an annoying whine.

+

STANDARD_PLUS mode uses 32768 Hz PWM rate, so the PWM carrier is out of hearing range. In this mode every alternate interrupt is used for the sample update (unless you /#define AUDIO_RATE 32768 in mozzi_config.h), which makes it slightly less efficient than STANDARD, but almost always better.

+

Advantages: Only uses one timer for audio, and one output pin. Disadvantages: low dynamic range.

+

Below is a list of the Digital Pins used by Mozzi for STANDARD and STANDARD_PLUS audio out on different boards. Those which have been tested and reported to work have an x. Feedback about others is welcome.

+

x....9........Arduino Uno
+x....9........Arduino Duemilanove
+ x....9........Arduino Nano
+x....9........Arduino Leonardo
+x....9........Ardweeny
+x....9........Boarduino
+ x...11.......Freetronics EtherMega *broken since Jan 2015
+x...11.......Arduino Mega *broken since Jan 2015
+....14........Teensy
+x..B5........Teensy2
+x..B5(25)..Teensy2++
+x..A14.....Teensy3.1
+....13 .......Sanguino
+ On Teensy 3.1 STANDARD and STANDARD_PLUS are the same, providing 16384Hz sample rate and 12 bit resolution on pin A14/ADC. The Teensy 3.1 DAC output does not rely on PWM.

+

HIFI (not for Teensy 3.1)

+

Use #define AUDIO_MODE HIFI in Mozzi/config.h to set the audio mode to HIFI for output 14 bit sound at 16384 Hz sample rate and 125kHz PWM rate. The high PWM rate of HIFI mode places the carrier frequency beyond audible range.

+

Also, 14 bits of dynamic range in HIFI mode provides more definition than the nearly 9 bits in STANDARD_PLUS mode. HIFI mode takes about the same amount of processing time as STANDARD_PLUS mode, and should sound clearer and brighter. However, it requires an extra timer to be used on the Arduino, which could increase the chances of conflicts with other libraries or processes if they rely on Timer 2.

+

Timer 1 is used to provide the PWM output at 125kHz. Timer 2 generates an interrupt at AUDIO_RATE 16384 Hz, which sets the Timer1 PWM levels. HIFI mode uses 2 output pins, and sums their outputs with resistors, so is slightly less convenient for rapid prototyping where you could listen to STANDARD_PLUS mode by connecting the single output pin directly to a speaker or audio input (though a resistor of about 100 ohms is recommended).

+

The resistors needed for HIFI output are 3.9k and 499k, with 0.5% or better tolerance. If you can only get 1% resistors, use a multimeter to find the most accurate. Use two 1M resistors in parallel if you can't find 499k.

+

On 328 based Arduino boards, output is on Timer1, with the high byte on Pin 9 and low byte on Pin 10. Add the signals through a 3.9k resistor on high byte pin (9) and 499k resistor on low byte pin (10). Also, a 4.7nF capacitor is recommended between the summing junction of the resistors and ground.

+

This dual PWM technique is discussed on http://www.openmusiclabs.com/learning/digital/pwm-dac/dual-pwm-circuits/ Also, there are higher quality output circuits are on the site.

+

Advantages: should be higher quality sound than STANDARD_PLUS mode. Doesn't need a notch filter on the audio signal (like STANDARD which is now obsolete) because the carrier frequency is out of hearing range.

+

Disadvantages: requires 2 pins, 2 resistors and a capacitor, so it's not so quick to set up compared to a rough, direct single-pin output in STANDARD_PLUS mode.

+

Pins and where to put the resistors on various boards for HIFI mode. Boards tested in HIFI mode have an x, though most of these have been tested in STANDARD_PLUS mode and there's no reason for them not to work in HIFI (unless the pin number is wrong or something). Any reports are welcome.
+ resistor.....3.9k......499k
+x................9..........10...............Arduino Uno
+x................9..........10...............Arduino Duemilanove
+ x................9..........10...............Arduino Nano
+x................9..........10...............Arduino Leonardo
+x................9..........10...............Ardweeny
+x................9..........10...............Boarduino
+ x...............11.........12...............Freetronics EtherMega
+.................11.........12...............Arduino Mega
+.................14.........15...............Teensy
+.............B5(14)...B6(15)...........Teensy2
+x...........B5(25)...B6(26)...........Teensy2++
+.................13.........12...............Sanguino
+ HIFI is not available/not required on Teensy 3.1.

+ +

Definition at line 140 of file MozziGuts.h.

+ +
+
+ +

§ STANDARD_PWM_RESOLUTION [1/2]

+ +
+
+ + + + +
#define STANDARD_PWM_RESOLUTION   488
+
+ +

This is the dynamic range of Mozzi's audio output in STANDARD mode.

+

It is equal to Timer1.pwmPeriod calculated for interrupt rate 16384. It's included in the documentation because it's a slightly unusual number and useful to know about when you're writing sketches.

+ +

Definition at line 11 of file AudioConfigStandardPlus.h.

+ +
+
+ +

§ STANDARD_PWM_RESOLUTION [2/2]

+ +
+
+ + + + +
#define STANDARD_PWM_RESOLUTION   488
+
+ +

This is the dynamic range of Mozzi's audio output in STANDARD mode.

+

It is equal to Timer1.pwmPeriod calculated for interrupt rate 16384. It's included in the documentation because it's a slightly unusual number and useful to know about when you're writing sketches.

+ +

Definition at line 11 of file AudioConfigStandard9bitPwm.h.

+ +
+
+ +

§ STEREO_HACK

+ +
+
+ + + + +
#define STEREO_HACK   false
+
+ +

This sets an option for stereo output, a hack which requires variables audio_signal_1 and audio_signal_2 to be set in updateAudio(), instead of returning a single audio value as is usual for standard mono.

+

You need to have #define STEREO_HACK true in mozzi_config.h

+ +

Definition at line 94 of file mozzi_config.h.

+ +
+
+ +

§ USE_AUDIO_INPUT

+ +
+
+ + + + +
#define USE_AUDIO_INPUT   false
+
+ +

Whether or not to use audio input.

+

Put #define USE_AUDIO_INPUT false in Mozzi/mozzi_config.h to enable audio input on analog pin AUDIO_INPUT_PIN, otherwise make it false, to save resources.

+ +

Definition at line 71 of file mozzi_config.h.

+ +
+
+

Function Documentation

+ +

§ audioHook()

+ +
+
+ + + + + + + +
void audioHook ()
+
+ +

This is required in Arduino's loop().

+

If there is room in Mozzi's output buffer, audioHook() calls updateAudio() once and puts the result into the output buffer. Also, if #define USE_AUDIO_INPUT true is in Mozzi/mozzi_config.h, audioHook() takes care of moving audio input from the input buffer so it can be accessed with getAudioInput() in your updateAudio() routine. If other functions are called in loop() along with audioHook(), see if they can be called less often by moving them into updateControl(), to save processing power. Otherwise it may be most efficient to calculate a block of samples at a time by putting audioHook() in a loop of its own, rather than calculating only 1 sample for each time your other functions are called.

+ +

Definition at line 228 of file MozziGuts.cpp.

+ +
+
+ +

§ audioTicks()

+ +
+
+ + + + + + + +
unsigned long audioTicks ()
+
+ +

An alternative for Arduino time funcitions like micros() which are disabled by Mozzi when it takes over Timer 0 for control interrupts.

+

audioTicks() is updated each time an audio sample is output, so the resolution is 1/AUDIO_RATE microseconds (61 microseconds when AUDIO_RATE is 16384 Hz).

Returns
the number of audio ticks since the program began.
+ +

Definition at line 627 of file MozziGuts.cpp.

+ +
+
+ +

§ mozziMicros()

+ +
+
+ + + + + + + +
unsigned long mozziMicros ()
+
+ +

A replacement for Arduino micros() which is disabled by Mozzi which takes over Timer 0 for control interrupts.

+

mozziMicros is updated each time an audio sample is output, so the resolution is 1/AUDIO_RATE (61 microseconds when AUDIO_RATE is 16384 Hz).

Returns
the approximate number of microseconds since the program began.
+ +

Definition at line 633 of file MozziGuts.cpp.

+ +
+
+ +

§ pauseMozzi()

+ +
+
+ + + + + + + +
void pauseMozzi ()
+
+ +

Stops audio and control interrupts and restores the timers to the values they had before Mozzi was started.

+

This will enable the standard Arduino time functions millis(), micros(), delay(), and delayMicroseconds(). This could be useful when using sensor libraries which depend on the same timers as Mozzi.

+

A potentially better option for resolving timer conflicts involves using non-blocking methods, such as demonstrated by the twowire_nonblock code in the forked version of Mozzi on github, so sound production can continue while reading sensors.

+

As it is, pauseMozzi restores all the Timers used by Mozzi to their previous settings. Another scenario which could be easily hacked in MozziGuts.cpp could involve individually saving and restoring particular Timer registers depending on which one(s) are required for other tasks, so for example the control interrupt (Timer 0) could be suspended while audio continues.

+ +

Definition at line 548 of file MozziGuts.cpp.

+ +
+
+ +

§ startMozzi()

+ +
+
+ + + + + + + + +
void startMozzi (int control_rate_hz = CONTROL_RATE)
+
+ +

Sets up the timers for audio and control rate processes, storing the timer registers so they can be restored when Mozzi stops.

+

startMozzi() goes in your sketch's setup() routine.

+

In STANDARD_PLUS and HIFI modes, Mozzi uses Timer 0 for control interrupts, disabling Arduino delay(), millis(), micros() and delayMicroseconds(). For delaying events, you can use Mozzi's EventDelay() unit instead (not to be confused with AudioDelay()).

+

In STANDARD mode, startMozzi() starts Timer 1 for PWM output and audio output interrupts, and in STANDARD_PLUS and HIFI modes, Mozzi uses Timer 1 for PWM and Timer2 for audio interrupts.

+

The audio rate defaults to 16384 Hz, but you can experiment with 32768 Hz by changing AUDIO_RATE in mozzi_config.h.

+
Parameters
+ + +
control_rate_hzSets how often updateControl() is called. It must be a power of 2. If no parameter is provided, control_rate_hz is set to CONTROL_RATE, which has a default value of 64 (you can re-#define it in your sketch). The practical upper limit for control rate depends on how busy the processor is, and you might need to do some tests to find the best setting.
+
+
+
Note
startMozzi calls setupMozziADC(), which calls setupFastAnalogRead() and adcDisconnectAllDigitalIns(), which disables digital inputs on all analog input pins. All in mozzi_analog.h and easy to change if you need to (hack). They are all called automatically and hidden away because it keeps things simple for a STANDARD_PLUS set up, but if it turns out to be confusing, they might need to become visible again.
+ +

Definition at line 535 of file MozziGuts.cpp.

+ +
+
+ +

§ unPauseMozzi()

+ +
+
+ + + + + + + +
void unPauseMozzi ()
+
+ +

Restores Mozzi audio and control interrupts, if they have been temporarily disabled with pauseMozzi().

+

This once more takes over Timer 0, and stops the Arduino time functions millis(), micros(), delay(), and delayMicroseconds() from working.

+ +

Definition at line 587 of file MozziGuts.cpp.

+ +
+
+ +

§ updateAudio()

+ +
+
+ + + + + + + +
void updateAudio ()
+
+ +

This is where you put your audio code.

+

updateAudio() has to keep up with the AUDIO_RATE of 16384 Hz, so to keep things running smoothly, avoid doing any calculations here which could be done in setup() or updateControl().

Returns
an audio sample. In STANDARD modes this is between -244 and 243 inclusive. In HIFI mode, it's a 14 bit number between -16384 and 16383 inclusive.
+ +
+
+ +

§ updateControl()

+ +
+
+ + + + + + + +
void updateControl ()
+
+ +

This is where you put your control code.

+

You need updateControl() somewhere in your sketch, even if it's empty. updateControl() is called at the control rate you set in startMozzi(). To save processor load, avoid any calculations here which could be done in setup().

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/group__core.js b/extras/doc/html/group__core.js new file mode 100644 index 000000000..2a0fb8605 --- /dev/null +++ b/extras/doc/html/group__core.js @@ -0,0 +1,20 @@ +var group__core = +[ + [ "AUDIO_INPUT_PIN", "group__core.html#gad6f503b77ed0c93394363460509f5cbd", null ], + [ "AUDIO_MODE", "group__core.html#ga9c4a39187db1d0a1ad0fa6981920f383", null ], + [ "AUDIO_RATE", "group__core.html#ga5b972bafb3267e820993812beca1b298", null ], + [ "CONTROL_RATE", "group__core.html#gae5d737db8bc97ecf08d2ea3121782d26", null ], + [ "STANDARD", "group__core.html#ga0b8ca8ad62b88c01b639bad62eafcbf1", null ], + [ "STANDARD_PWM_RESOLUTION", "group__core.html#ga800c094e0a14fc31d87a360b3807a1b8", null ], + [ "STANDARD_PWM_RESOLUTION", "group__core.html#ga800c094e0a14fc31d87a360b3807a1b8", null ], + [ "STEREO_HACK", "group__core.html#ga41e77c76435031bd6088de496aa2a9e0", null ], + [ "USE_AUDIO_INPUT", "group__core.html#ga3417fc0b453af798a70340c912a4b657", null ], + [ "audioHook", "group__core.html#ga2fca37b988ab369e2f3c3108c683e59d", null ], + [ "audioTicks", "group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0", null ], + [ "mozziMicros", "group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe", null ], + [ "pauseMozzi", "group__core.html#ga0dc2dc3b2c20b081df4d55ad039f64e5", null ], + [ "startMozzi", "group__core.html#ga75aa9f4a501f4b167343b8caac8c6837", null ], + [ "unPauseMozzi", "group__core.html#ga1718c5f0bbb56cc4b2db55702750f43f", null ], + [ "updateAudio", "group__core.html#ga5503f580eb9f9c25000ea6d1bd925f6f", null ], + [ "updateControl", "group__core.html#ga59d187b915b2e366c88489e52801951a", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/group__fixmath.html b/extras/doc/html/group__fixmath.html new file mode 100644 index 000000000..db8266e84 --- /dev/null +++ b/extras/doc/html/group__fixmath.html @@ -0,0 +1,3153 @@ + + + + + + + +Mozzi: Fixmath + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Fixmath
+
+
+ +

Fixed point fractional number types and conversion routines. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

Q7n8 Q7n8_mult (Q7n8 a, Q7n8 b)
 Fast fixed point multiply for Q7n8 fractional numbers. More...
 
uint8_t uint8_tMod (uint8_t n, uint8_t d)
 fast uint8_t modulus More...
 
uint8_t uint8_tDiv (uint8_t n, uint8_t d)
 Fast uint8_t division. More...
 
+uint8_t uint8_tRnd (uint8_t min, uint8_t max)
 
+int ipow (int base, int exp)
 
Q16n16 Q16n16_pow2 (Q8n8 exponent)
 fast replacement for pow(2,x), where x is a Q8n8 fractional fixed-point exponent. More...
 
+uint32_t isqrt32 (uint32_t n)
 
+uint16_t isqrt16 (uint16_t n)
 
+typedef int8_t Q0n7
 signed fractional number using 7 fractional bits, represents -0.5 to 0.496
 
+typedef int8_t Q7n0
 ordinary old signed Q7n0 int8_t with 0 fractional bits, represents -128 to 127
 
+typedef uint8_t Q0n8
 unsigned fractional number using 8 fractional bits, represents 0.0 to 0.996
 
+typedef uint8_t Q8n0
 normal uint8_t with 0 fractional bits, represents 0.0 to 255.0
 
+typedef uint16_t Q0n16
 unsigned fractional number using 16 fractional bits, represents 0.0 to 0.999
 
+typedef uint32_t Q0n31
 signed number using 0 integer bits and 31 fractional bits, represents -0.2147483648 to 0.2147483647
 
+typedef int16_t Q7n8
 signed fractional number using 7 integer bits and 8 fractional bits, represents -127.996 to 127.996
 
+typedef uint16_t Q3n13
 unsigned fractional number using 3 integer bits and 13 fractional bits, represents 0 to 7.999
 
+typedef int16_t Q1n14
 signed fractional number using 1 integer bit and 14 fractional bits, represents -1.999 to 1.999
 
+typedef int16_t Q15n0
 signed number using 15 integer bits and 0 fractional bits, represents -2147483648 to 2147483647
 
+typedef uint16_t Q8n8
 unsigned fractional number using 8 integer bits and 8 fractional bits, represents 0 to 255.996
 
+typedef int16_t Q0n15
 signed fractional number using 0 integer bits and 15 fractional bits, represents -0.32768 to 0.32767
 
+typedef uint16_t Q1n15
 unsigned fractional number using 1 integer bit and 15 fractional bits, represents 0 to 1.999
 
+typedef uint16_t Q16n0
 unsigned number using 16 integer bits and 0 fractional bits, represents 0 to 65536.0
 
+typedef int32_t Q23n8
 signed fractional number using 23 integer bits and 8 fractional bits, represents -8388607.996 to 8388607.996
 
+typedef int32_t Q15n16
 signed fractional number using 15 integer bits and 16 fractional bits, represents -32767.999 to 32767.999
 
+typedef int32_t Q31n0
 signed (normal int32_t int16_t) number using 31 integer bits and 0 fractional bits, represents -2147483648 to 2147483647
 
+typedef uint32_t Q32n0
 unsigned (normal uint32_t int16_t) number using 32 integer bits and 0 fractional bits, represents 0 to 4294967295
 
+typedef uint32_t Q0n32
 unsigned fractional number using 0 integer bits and 32 fractional bits, represents 0 to 0.999999999767169
 
+typedef uint32_t Q8n24
 signed fractional number using 8 integer bits and 24 fractional bits, represents 0 to 255.999
 
+typedef uint32_t Q24n8
 unsigned fractional number using 24 integer bits and 8 fractional bits, represents 0 to 16777215
 
+typedef uint32_t Q16n16
 unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535.999
 
+#define Q0n7_FIX1   ((Q0n7) 127)
 0.992 in Q0n7 format
 
+#define Q7n8_FIX1   ((Q7n8) 256)
 1 in Q7n8 format
 
+#define Q8n8_FIX1   ((Q8n8) 256)
 1 in Q8n8 format
 
+#define Q23n8_FIX1   ((Q23n8) 256)
 1 in Q23n8 format
 
+#define Q1n14_FIX1   ((Q1n14) 16384)
 1 in Q1n14 format
 
+#define Q1n15_FIX1   ((Q1n15) 32768)
 1 in Q1n15 format
 
+#define Q16n16_FIX1   ((Q16n16) 65536)
 1 in Q16n16 format
 
+#define Q0n15_FIX1   ((Q0n15) 32767)
 0.999 in Q0n15 format
 
+#define Q0n16_FIX1   ((Q0n16) 65535)
 0.999 in Q0n16 format
 
+#define Q15n0_FIX1   ((Q15n0) 16384)
 1 in Q15n0 format
 
+#define Q15n16_FIX1   ((Q15n16) 65536)
 1 in Q15n16 format
 
+#define Q8n24_FIX1   ((Q8n24) 16777216)
 1 in Q8n24 format
 
+#define Q0n32_FIX1   ((Q0n32) 4294967295)
 0.999999999767169 in Q0n32 format
 
+#define Q16n16_PI   ((Q16n16) 205887)
 PI in Q16n16 format.
 
+#define Q3n13_2PI   ((Q3n13) 411775)
 2*PI in Q3n13 format
 
+#define Q16n16_2PI   ((Q16n16) 411775)
 2*PI in Q16n16 format
 
+#define low15bits   ((Q1n15) 32767)
 Useful for keeping the lower 15 bits of a Q1n15 number, using &.
 
Q0n7 float_to_Q0n7 (float a)
 Convert float to Q0n7 fix. More...
 
Q0n8 float_to_Q0n8 (float a)
 Convert float to Q0n8 fix. More...
 
Q7n8 float_to_Q7n8 (float a)
 Convert float to Q7n8 fix. More...
 
Q8n8 float_to_Q8n8 (float a)
 Convert float to Q8n8 fix. More...
 
Q1n14 float_to_Q1n14 (float a)
 Convert float to Q1n14 fix. More...
 
Q1n15 float_to_Q1n15 (float a)
 Convert float to Q1n15 fix. More...
 
Q8n24 float_to_Q8n24 (float a)
 Convert float to Q8n24 fix. More...
 
Q23n8 float_to_Q23n8 (float a)
 Convert float to Q23n8 fix. More...
 
Q24n8 float_to_Q24n8 (float a)
 Convert float to Q24n8 fix. More...
 
Q16n16 float_to_Q16n16 (float a)
 Convert float to Q16n16 fix. More...
 
Q0n16 float_to_Q0n16 (float a)
 Convert float to Q0n16 fix. More...
 
Q15n16 float_to_Q15n16 (float a)
 Convert float to Q15n16 fix. More...
 
Q1n14 Q0n7_to_Q1n14 (Q0n7 a)
 Convert Q0n7 int8_t to Q1n14 fix. More...
 
Q15n16 Q0n7_to_Q15n16 (Q0n7 a)
 Convert Q0n7 signed int8_t to Q15n16 fix. More...
 
float Q0n7_to_float (Q0n7 a)
 Convert Q0n7 fix to float. More...
 
Q1n15 Q0n8_to_Q1n15 (Q0n8 a)
 Convert Q0n8 uint8_t to Q1n15 fix. More...
 
Q8n8 Q0n8_to_Q8n8 (Q0n8 a)
 Convert Q0n8 uint8_t to Q8n8 fix. More...
 
Q8n24 Q0n8_to_Q8n24 (Q0n8 a)
 Convert Q0n8 uint8_t to Q8n24 fix. More...
 
Q24n8 Q0n8_to_Q24n8 (Q0n8 a)
 Convert Q0n8 uint8_t to Q24n8 fix. More...
 
Q15n16 Q0n8_to_Q15n16 (Q0n8 a)
 Convert Q0n8 uint8_t to Q15n16 fix. More...
 
Q16n16 Q0n8_to_Q16n16 (Q0n8 a)
 Convert Q0n8 uint8_t to Q16n16 fix. More...
 
float Q0n8_to_float (Q0n8 a)
 Convert Q0n8 fix to float. More...
 
Q7n8 Q7n0_to_Q7n8 (Q7n0 a)
 Convert Q7n0 int8_t to Q7n8 fix. More...
 
Q15n16 Q7n0_to_Q15n16 (Q7n0 a)
 Convert Q7n0 int8_t to Q15n16 fix. More...
 
Q7n8 Q8n0_to_Q7n8 (Q8n0 a)
 Convert Q8n0 uint8_t to Q7n8 fix. More...
 
Q8n8 Q8n0_to_Q8n8 (Q8n0 a)
 Convert uint8_t to Q8n8 fix. More...
 
Q15n16 Q8n0_to_Q15n16 (Q8n0 a)
 Convert Q8n0 uint8_t to Q15n16 fix. More...
 
Q16n16 Q8n0_to_Q16n16 (Q8n0 a)
 Convert Q8n0 uint8_t to Q16n16 fix. More...
 
Q7n0 Q7n8_to_Q7n0 (Q7n8 a)
 Convert Q7n8 fix to Q7n0. More...
 
Q15n16 Q7n8_to_Q15n16 (Q7n8 a)
 Convert Q7n8 fix to Q15n16. More...
 
float Q7n8_to_float (Q7n8 a)
 Convert Q7n8 fix to float. More...
 
Q8n0 Q8n8_to_Q8n0 (Q8n8 a)
 Convert Q8n8 fix to Q8n0 uint8_t. More...
 
Q16n16 Q8n8_to_Q16n16 (Q8n8 a)
 Convert Q8n8 fix to Q16n16 uint32_t. More...
 
float Q8n8_to_float (Q8n8 a)
 Convert Q8n8 fix to float. More...
 
Q0n7 Q1n14_to_Q0n7 (Q1n14 a)
 Convert Q1n14 fixed to Q0n7 int8_t. More...
 
float Q1n14_to_float (Q1n14 a)
 Convert fix to float. More...
 
Q0n8 Q1n15_to_Q0n8 (Q1n15 a)
 Convert Q1n15 fixed to Q0n8 uint8_t. More...
 
float Q1n15_to_float (Q1n15 a)
 Convert fix to float. More...
 
float Q0n16_to_float (Q0n16 a)
 Convert fix to float. More...
 
Q15n16 Q15n0_to_Q15n16 (Q15n0 a)
 Convert Q15n0 int16_t to Q15n16 fix. More...
 
Q15n16 Q16n0_to_Q15n16 (Q16n0 a)
 Convert Q16n0 uint16_t to Q15n16 fix. More...
 
Q23n8 Q16n0_to_Q23n8 (Q16n0 a)
 Convert Q16n0 uint16_t to Q23n8 fixed point signed int32_t. More...
 
Q24n8 Q16n0_to_Q24n8 (Q16n0 a)
 Convert Q16n0 uint16_t to Q24n8 fixed point uint32_t. More...
 
Q16n16 Q16n0_to_Q16n16 (Q16n0 a)
 Convert Q16n0 uint16_t to Q16n16 fixed point uint32_t. More...
 
float Q16n0_to_float (Q16n0 a)
 Convert Q16n0 uint16_t to float. More...
 
Q0n8 Q8n24_to_Q0n8 (Q8n24 a)
 Convert Q8n24 fixed to Q0n8 uint8_t. More...
 
float Q8n24_to_float (Q8n24 a)
 Convert fix to float. More...
 
Q31n0 Q23n8_to_Q31n0 (Q23n8 a)
 Convert Q23n8 fixed to Q31n0 int32_t. More...
 
Q16n0 Q23n8_to_Q16n0 (Q23n8 a)
 Convert Q23n8 fixed to Q16n0 uint16_t. More...
 
Q15n0 Q23n8_to_Q15n0 (Q23n8 a)
 Convert Q23n8 fixed to Q15n0 signed int16_t. More...
 
Q7n8 Q23n8_to_Q7n8 (Q23n8 a)
 Convert Q23n8 fixed to Q7n8 signed int16_t, losing most significant bits. More...
 
float Q23n8_to_float (Q23n8 a)
 Convert fix to float. More...
 
Q0n8 Q24n8_to_Q0n8 (Q24n8 a)
 Convert Q24n8 fixed to Q0n8 uint8_t. More...
 
Q16n16 Q24n8_to_Q16n0 (Q24n8 a)
 Convert Q24n8 fixed to Q16n0 uint16_t. More...
 
Q32n0 Q24n8_to_Q32n0 (Q24n8 a)
 Convert Q24n8 fixed to Q32n0 uint32_t. More...
 
Q16n16 Q24n8_to_Q16n16 (Q24n8 a)
 Convert Q24n8 fixed to Q16n16 uint32_t. More...
 
float Q24n8_to_float (Q24n8 a)
 Convert fix to float. More...
 
Q0n8 Q15n16_to_Q0n8 (Q15n16 a)
 Convert Q15n16 fixed to Q0n8 uint8_t. More...
 
Q8n0 Q15n16_to_Q8n0 (Q15n16 a)
 Convert Q15n16 fixed to Q8n0 uint8_t. More...
 
Q15n0 Q15n16_to_Q15n0 (Q15n16 a)
 Convert Q15n16 fixed to Q15n0 signed int16_t. More...
 
Q7n8 Q15n16_to_Q7n8 (Q15n16 a)
 Convert Q15n16 fixed to Q7n8 signed int16_t, keeping middle bits only. More...
 
Q8n8 Q15n16_to_Q8n8 (Q15n16 a)
 Convert Q15n16 fixed to Q8n8 signed int16_t, keeping middle bits only. More...
 
Q23n8 Q15n16_to_Q23n8 (Q15n16 a)
 Convert Q15n16 fixed to Q23n8 signed int32_t. More...
 
float Q15n16_to_float (Q15n16 a)
 Convert fix to float. More...
 
Q0n8 Q16n16_to_Q0n8 (Q16n16 a)
 Convert Q16n16 fixed to Q0n8 uint8_t. More...
 
Q8n8 Q16n16_to_Q8n8 (Q8n8 a)
 Convert Q16n16 fixed to Q8n8 uint16_t. More...
 
Q16n0 Q16n16_to_Q16n0 (Q16n16 a)
 Convert Q16n16 fixed to Q16n0 uint16_t. More...
 
Q24n8 Q16n16_to_Q24n8 (Q16n16 a)
 Convert Q16n16 fixed to Q24n8 uint32_t. More...
 
float Q16n16_to_float (Q16n16 a)
 Convert fix to float. More...
 
+

Detailed Description

+

Fixed point fractional number types and conversion routines.

+

Fixed point is often best for fast audio code for Arduino, and these can ease some of the pain.

Note
Take care when converting that the important bits of your numbers will fit in the types you choose!
+
+Timing: converting between fixed and float 10-12us, converting between fixed types about 1us.
+

Function Documentation

+ +

§ float_to_Q0n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q0n16 float_to_Q0n16 (float a)
+
+inline
+
+ +

Convert float to Q0n16 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 124 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q0n7()

+ +
+
+ + + + + +
+ + + + + + + + +
Q0n7 float_to_Q0n7 (float a)
+
+inline
+
+ +

Convert float to Q0n7 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 94 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q0n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q0n8 float_to_Q0n8 (float a)
+
+inline
+
+ +

Convert float to Q0n8 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 97 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q15n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n16 float_to_Q15n16 (float a)
+
+inline
+
+ +

Convert float to Q15n16 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 127 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q16n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q16n16 float_to_Q16n16 (float a)
+
+inline
+
+ +

Convert float to Q16n16 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 121 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q1n14()

+ +
+
+ + + + + +
+ + + + + + + + +
Q1n14 float_to_Q1n14 (float a)
+
+inline
+
+ +

Convert float to Q1n14 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 106 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q1n15()

+ +
+
+ + + + + +
+ + + + + + + + +
Q1n15 float_to_Q1n15 (float a)
+
+inline
+
+ +

Convert float to Q1n15 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 109 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q23n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q23n8 float_to_Q23n8 (float a)
+
+inline
+
+ +

Convert float to Q23n8 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 115 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q24n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q24n8 float_to_Q24n8 (float a)
+
+inline
+
+ +

Convert float to Q24n8 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 118 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q7n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q7n8 float_to_Q7n8 (float a)
+
+inline
+
+ +

Convert float to Q7n8 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 100 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q8n24()

+ +
+
+ + + + + +
+ + + + + + + + +
Q8n24 float_to_Q8n24 (float a)
+
+inline
+
+ +

Convert float to Q8n24 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 112 of file mozzi_fixmath.h.

+ +
+
+ +

§ float_to_Q8n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q8n8 float_to_Q8n8 (float a)
+
+inline
+
+ +

Convert float to Q8n8 fix.

+
Parameters
+ + +
ais a float
+
+
+ +

Definition at line 103 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n16_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q0n16_to_float (Q0n16 a)
+
+inline
+
+ +

Convert fix to float.

+
Parameters
+ + +
ais a Q0n16 uint16_t
+
+
+ +

Definition at line 208 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n7_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q0n7_to_float (Q0n7 a)
+
+inline
+
+ +

Convert Q0n7 fix to float.

+
Parameters
+ + +
ais a Q0n7 int8_t
+
+
+ +

Definition at line 136 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n7_to_Q15n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n16 Q0n7_to_Q15n16 (Q0n7 a)
+
+inline
+
+ +

Convert Q0n7 signed int8_t to Q15n16 fix.

+
Parameters
+ + +
ais a Q0n7 signed int8_t
+
+
+ +

Definition at line 133 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n7_to_Q1n14()

+ +
+
+ + + + + +
+ + + + + + + + +
Q1n14 Q0n7_to_Q1n14 (Q0n7 a)
+
+inline
+
+ +

Convert Q0n7 int8_t to Q1n14 fix.

+
Parameters
+ + +
ais a Q0n7 int8_t
+
+
+ +

Definition at line 130 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n8_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q0n8_to_float (Q0n8 a)
+
+inline
+
+ +

Convert Q0n8 fix to float.

+
Parameters
+ + +
ais a Q0n8 uint8_t
+
+
+ +

Definition at line 157 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n8_to_Q15n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n16 Q0n8_to_Q15n16 (Q0n8 a)
+
+inline
+
+ +

Convert Q0n8 uint8_t to Q15n16 fix.

+
Parameters
+ + +
ais a Q0n8 uint8_t
+
+
+ +

Definition at line 151 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n8_to_Q16n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q16n16 Q0n8_to_Q16n16 (Q0n8 a)
+
+inline
+
+ +

Convert Q0n8 uint8_t to Q16n16 fix.

+
Parameters
+ + +
ais a Q0n8 uint8_t
+
+
+ +

Definition at line 154 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n8_to_Q1n15()

+ +
+
+ + + + + +
+ + + + + + + + +
Q1n15 Q0n8_to_Q1n15 (Q0n8 a)
+
+inline
+
+ +

Convert Q0n8 uint8_t to Q1n15 fix.

+
Parameters
+ + +
ais a Q0n8 uint8_t
+
+
+ +

Definition at line 139 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n8_to_Q24n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q24n8 Q0n8_to_Q24n8 (Q0n8 a)
+
+inline
+
+ +

Convert Q0n8 uint8_t to Q24n8 fix.

+
Parameters
+ + +
ais a Q0n8 uint8_t
+
+
+ +

Definition at line 148 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n8_to_Q8n24()

+ +
+
+ + + + + +
+ + + + + + + + +
Q8n24 Q0n8_to_Q8n24 (Q0n8 a)
+
+inline
+
+ +

Convert Q0n8 uint8_t to Q8n24 fix.

+
Parameters
+ + +
ais a Q0n8 uint8_t
+
+
+ +

Definition at line 145 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q0n8_to_Q8n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q8n8 Q0n8_to_Q8n8 (Q0n8 a)
+
+inline
+
+ +

Convert Q0n8 uint8_t to Q8n8 fix.

+
Parameters
+ + +
ais a Q0n8 uint8_t
+
+
+ +

Definition at line 142 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q15n0_to_Q15n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n16 Q15n0_to_Q15n16 (Q15n0 a)
+
+inline
+
+ +

Convert Q15n0 int16_t to Q15n16 fix.

+
Parameters
+ + +
ais a Q15n0 int16_t
+
+
+ +

Definition at line 211 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q15n16_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q15n16_to_float (Q15n16 a)
+
+inline
+
+ +

Convert fix to float.

+
Parameters
+ + +
ais a Q15n16 signed int32_t
+
+
+ +

Definition at line 285 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q15n16_to_Q0n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q0n8 Q15n16_to_Q0n8 (Q15n16 a)
+
+inline
+
+ +

Convert Q15n16 fixed to Q0n8 uint8_t.

+

Only for positive values!

Parameters
+ + +
ais a Q15n16 signed int32_t
+
+
+ +

Definition at line 267 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q15n16_to_Q15n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n0 Q15n16_to_Q15n0 (Q15n16 a)
+
+inline
+
+ +

Convert Q15n16 fixed to Q15n0 signed int16_t.

+
Parameters
+ + +
ais a Q15n16 signed int32_t
+
+
+ +

Definition at line 273 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q15n16_to_Q23n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q23n8 Q15n16_to_Q23n8 (Q15n16 a)
+
+inline
+
+ +

Convert Q15n16 fixed to Q23n8 signed int32_t.

+
Parameters
+ + +
ais a Q15n16 signed int32_t.
+
+
+ +

Definition at line 282 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q15n16_to_Q7n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q7n8 Q15n16_to_Q7n8 (Q15n16 a)
+
+inline
+
+ +

Convert Q15n16 fixed to Q7n8 signed int16_t, keeping middle bits only.

+
Parameters
+ + +
ais a Q15n16 signed int32_t.
+
+
+ +

Definition at line 276 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q15n16_to_Q8n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q8n0 Q15n16_to_Q8n0 (Q15n16 a)
+
+inline
+
+ +

Convert Q15n16 fixed to Q8n0 uint8_t.

+

Only for positive values!

Parameters
+ + +
ais a Q15n16 signed int32_t
+
+
+ +

Definition at line 270 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q15n16_to_Q8n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q8n8 Q15n16_to_Q8n8 (Q15n16 a)
+
+inline
+
+ +

Convert Q15n16 fixed to Q8n8 signed int16_t, keeping middle bits only.

+
Parameters
+ + +
ais a Q15n16 signed int32_t.
+
+
+ +

Definition at line 279 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n0_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q16n0_to_float (Q16n0 a)
+
+inline
+
+ +

Convert Q16n0 uint16_t to float.

+
Parameters
+ + +
ais a Q16n0 uint16_t
+
+
+ +

Definition at line 226 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n0_to_Q15n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n16 Q16n0_to_Q15n16 (Q16n0 a)
+
+inline
+
+ +

Convert Q16n0 uint16_t to Q15n16 fix.

+
Parameters
+ + +
ais a Q16n0 uint16_t
+
+
+ +

Definition at line 214 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n0_to_Q16n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q16n16 Q16n0_to_Q16n16 (Q16n0 a)
+
+inline
+
+ +

Convert Q16n0 uint16_t to Q16n16 fixed point uint32_t.

+
Parameters
+ + +
ais a Q16n0 uint16_t
+
+
+ +

Definition at line 223 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n0_to_Q23n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q23n8 Q16n0_to_Q23n8 (Q16n0 a)
+
+inline
+
+ +

Convert Q16n0 uint16_t to Q23n8 fixed point signed int32_t.

+
Parameters
+ + +
ais a Q16n0 uint16_t
+
+
+ +

Definition at line 217 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n0_to_Q24n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q24n8 Q16n0_to_Q24n8 (Q16n0 a)
+
+inline
+
+ +

Convert Q16n0 uint16_t to Q24n8 fixed point uint32_t.

+
Parameters
+ + +
ais a Q16n0 uint16_t
+
+
+ +

Definition at line 220 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n16_pow2()

+ +
+
+ + + + + + + + +
Q16n16 Q16n16_pow2 (Q8n8 exponent)
+
+ +

fast replacement for pow(2,x), where x is a Q8n8 fractional fixed-point exponent.

+

It's less accurate than pow(2,x), but useful where a tradeoff between accuracy and speed is required to keep audio from glitching.

Parameters
+ + +
exponentin Q8n8 format.
+
+
+
Returns
pow(2,x) in Q16n16 format.
+ +

Definition at line 105 of file mozzi_fixmath.cpp.

+ +
+
+ +

§ Q16n16_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q16n16_to_float (Q16n16 a)
+
+inline
+
+ +

Convert fix to float.

+
Parameters
+ + +
ais a Q16n16 uint32_t
+
+
+ +

Definition at line 300 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n16_to_Q0n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q0n8 Q16n16_to_Q0n8 (Q16n16 a)
+
+inline
+
+ +

Convert Q16n16 fixed to Q0n8 uint8_t.

+
Parameters
+ + +
ais a Q16n16 uint32_t
+
+
+ +

Definition at line 288 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n16_to_Q16n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q16n0 Q16n16_to_Q16n0 (Q16n16 a)
+
+inline
+
+ +

Convert Q16n16 fixed to Q16n0 uint16_t.

+
Parameters
+ + +
ais a Q16n16 uint32_t
+
+
+ +

Definition at line 294 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n16_to_Q24n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q24n8 Q16n16_to_Q24n8 (Q16n16 a)
+
+inline
+
+ +

Convert Q16n16 fixed to Q24n8 uint32_t.

+
Parameters
+ + +
ais a Q16n16 uint32_t
+
+
+ +

Definition at line 297 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q16n16_to_Q8n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q8n8 Q16n16_to_Q8n8 (Q8n8 a)
+
+inline
+
+ +

Convert Q16n16 fixed to Q8n8 uint16_t.

+
Parameters
+ + +
ais a Q16n16 uint32_t
+
+
+ +

Definition at line 291 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q1n14_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q1n14_to_float (Q1n14 a)
+
+inline
+
+ +

Convert fix to float.

+
Parameters
+ + +
ais an int16_t
+
+
+ +

Definition at line 199 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q1n14_to_Q0n7()

+ +
+
+ + + + + +
+ + + + + + + + +
Q0n7 Q1n14_to_Q0n7 (Q1n14 a)
+
+inline
+
+ +

Convert Q1n14 fixed to Q0n7 int8_t.

+
Parameters
+ + +
ais a Q1n14 int16_t
+
+
+ +

Definition at line 196 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q1n15_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q1n15_to_float (Q1n15 a)
+
+inline
+
+ +

Convert fix to float.

+
Parameters
+ + +
ais a Q1n15 uint16_t
+
+
+ +

Definition at line 205 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q1n15_to_Q0n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q0n8 Q1n15_to_Q0n8 (Q1n15 a)
+
+inline
+
+ +

Convert Q1n15 fixed to Q0n8 uint8_t.

+

Only for positive values!

Parameters
+ + +
ais a Q1n15 uint16_t
+
+
+ +

Definition at line 202 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q23n8_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q23n8_to_float (Q23n8 a)
+
+inline
+
+ +

Convert fix to float.

+
Parameters
+ + +
ais a Q23n8 signed int32_t
+
+
+ +

Definition at line 249 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q23n8_to_Q15n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n0 Q23n8_to_Q15n0 (Q23n8 a)
+
+inline
+
+ +

Convert Q23n8 fixed to Q15n0 signed int16_t.

+
Parameters
+ + +
ais a Q23n8 int32_t
+
+
+ +

Definition at line 242 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q23n8_to_Q16n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q16n0 Q23n8_to_Q16n0 (Q23n8 a)
+
+inline
+
+ +

Convert Q23n8 fixed to Q16n0 uint16_t.

+

Positive values only.

Parameters
+ + +
ais a Q23n8 int32_t
+
+
+ +

Definition at line 239 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q23n8_to_Q31n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q31n0 Q23n8_to_Q31n0 (Q23n8 a)
+
+inline
+
+ +

Convert Q23n8 fixed to Q31n0 int32_t.

+
Parameters
+ + +
ais a Q23n8 int32_t
+
+
+ +

Definition at line 236 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q23n8_to_Q7n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q7n8 Q23n8_to_Q7n8 (Q23n8 a)
+
+inline
+
+ +

Convert Q23n8 fixed to Q7n8 signed int16_t, losing most significant bits.

+
Parameters
+ + +
ais a Q23n8 signed int32_t.
+
+
+ +

Definition at line 245 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q24n8_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q24n8_to_float (Q24n8 a)
+
+inline
+
+ +

Convert fix to float.

+
Parameters
+ + +
ais a Q24n8 uint32_t
+
+
+ +

Definition at line 264 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q24n8_to_Q0n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q0n8 Q24n8_to_Q0n8 (Q24n8 a)
+
+inline
+
+ +

Convert Q24n8 fixed to Q0n8 uint8_t.

+
Parameters
+ + +
ais a Q24n8 uint32_t
+
+
+ +

Definition at line 252 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q24n8_to_Q16n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q16n16 Q24n8_to_Q16n0 (Q24n8 a)
+
+inline
+
+ +

Convert Q24n8 fixed to Q16n0 uint16_t.

+
Parameters
+ + +
ais a Q24n8 uint32_t
+
+
+ +

Definition at line 255 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q24n8_to_Q16n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q16n16 Q24n8_to_Q16n16 (Q24n8 a)
+
+inline
+
+ +

Convert Q24n8 fixed to Q16n16 uint32_t.

+
Parameters
+ + +
ais a Q24n8 uint32_t
+
+
+ +

Definition at line 261 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q24n8_to_Q32n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q32n0 Q24n8_to_Q32n0 (Q24n8 a)
+
+inline
+
+ +

Convert Q24n8 fixed to Q32n0 uint32_t.

+
Parameters
+ + +
ais a Q24n8 uint32_t
+
+
+ +

Definition at line 258 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q7n0_to_Q15n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n16 Q7n0_to_Q15n16 (Q7n0 a)
+
+inline
+
+ +

Convert Q7n0 int8_t to Q15n16 fix.

+
Parameters
+ + +
ais a int8_t
+
+
+ +

Definition at line 163 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q7n0_to_Q7n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q7n8 Q7n0_to_Q7n8 (Q7n0 a)
+
+inline
+
+ +

Convert Q7n0 int8_t to Q7n8 fix.

+
Parameters
+ + +
ais a int8_t
+
+
+ +

Definition at line 160 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q7n8_mult()

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Q7n8 Q7n8_mult (Q7n8 a,
Q7n8 b 
)
+
+inline
+
+ +

Fast fixed point multiply for Q7n8 fractional numbers.

+
Parameters
+ + + +
aQ7n8 format multiplicand
bQ7n8 format multiplier
+
+
+
Returns
a Q7n8 format product
+ +

Definition at line 340 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q7n8_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q7n8_to_float (Q7n8 a)
+
+inline
+
+ +

Convert Q7n8 fix to float.

+
Parameters
+ + +
ais a Q7n8 int16_t
+
+
+ +

Definition at line 184 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q7n8_to_Q15n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n16 Q7n8_to_Q15n16 (Q7n8 a)
+
+inline
+
+ +

Convert Q7n8 fix to Q15n16.

+
Parameters
+ + +
ais a Q7n8 int16_t
+
+
+ +

Definition at line 181 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q7n8_to_Q7n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q7n0 Q7n8_to_Q7n0 (Q7n8 a)
+
+inline
+
+ +

Convert Q7n8 fix to Q7n0.

+
Parameters
+ + +
ais a Q7n8 int16_t
+
+
+ +

Definition at line 178 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q8n0_to_Q15n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q15n16 Q8n0_to_Q15n16 (Q8n0 a)
+
+inline
+
+ +

Convert Q8n0 uint8_t to Q15n16 fix.

+
Parameters
+ + +
ais a Q8n0 uint8_t
+
+
+ +

Definition at line 172 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q8n0_to_Q16n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q16n16 Q8n0_to_Q16n16 (Q8n0 a)
+
+inline
+
+ +

Convert Q8n0 uint8_t to Q16n16 fix.

+
Parameters
+ + +
ais a Q8n0 uint8_t
+
+
+ +

Definition at line 175 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q8n0_to_Q7n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q7n8 Q8n0_to_Q7n8 (Q8n0 a)
+
+inline
+
+ +

Convert Q8n0 uint8_t to Q7n8 fix.

+
Parameters
+ + +
ais a Q8n0 uint8_t*. Beware of overflow.
+
+
+ +

Definition at line 166 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q8n0_to_Q8n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q8n8 Q8n0_to_Q8n8 (Q8n0 a)
+
+inline
+
+ +

Convert uint8_t to Q8n8 fix.

+
Parameters
+ + +
ais a Q8n0 uint8_t
+
+
+ +

Definition at line 169 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q8n24_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q8n24_to_float (Q8n24 a)
+
+inline
+
+ +

Convert fix to float.

+
Parameters
+ + +
ais a Q8n24 uint32_t
+
+
+ +

Definition at line 232 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q8n24_to_Q0n8()

+ +
+
+ + + + + +
+ + + + + + + + +
Q0n8 Q8n24_to_Q0n8 (Q8n24 a)
+
+inline
+
+ +

Convert Q8n24 fixed to Q0n8 uint8_t.

+
Parameters
+ + +
ais a Q8n24 uint32_t
+
+
+ +

Definition at line 229 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q8n8_to_float()

+ +
+
+ + + + + +
+ + + + + + + + +
float Q8n8_to_float (Q8n8 a)
+
+inline
+
+ +

Convert Q8n8 fix to float.

+
Parameters
+ + +
ais a Q8n8 uint16_t
+
+
+ +

Definition at line 193 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q8n8_to_Q16n16()

+ +
+
+ + + + + +
+ + + + + + + + +
Q16n16 Q8n8_to_Q16n16 (Q8n8 a)
+
+inline
+
+ +

Convert Q8n8 fix to Q16n16 uint32_t.

+
Parameters
+ + +
ais a Q8n8 uint16_t
+
+
+ +

Definition at line 190 of file mozzi_fixmath.h.

+ +
+
+ +

§ Q8n8_to_Q8n0()

+ +
+
+ + + + + +
+ + + + + + + + +
Q8n0 Q8n8_to_Q8n0 (Q8n8 a)
+
+inline
+
+ +

Convert Q8n8 fix to Q8n0 uint8_t.

+
Parameters
+ + +
ais a Q8n8 uint16_t
+
+
+ +

Definition at line 187 of file mozzi_fixmath.h.

+ +
+
+ +

§ uint8_tDiv()

+ +
+
+ + + + + + + + + + + + + + + + + + +
uint8_t uint8_tDiv (uint8_t n,
uint8_t d 
)
+
+ +

Fast uint8_t division.

+
Parameters
+ + + +
nnumerator
ddenominator
+
+
+
Returns
quotient
+ +

Definition at line 37 of file mozzi_fixmath.cpp.

+ +
+
+ +

§ uint8_tMod()

+ +
+
+ + + + + + + + + + + + + + + + + + +
uint8_t uint8_tMod (uint8_t n,
uint8_t d 
)
+
+ +

fast uint8_t modulus

+
Parameters
+ + + +
nnumerator
ddenominator
+
+
+
Returns
modulus
+ +

Definition at line 25 of file mozzi_fixmath.cpp.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/group__fixmath.js b/extras/doc/html/group__fixmath.js new file mode 100644 index 000000000..79d2cc7fd --- /dev/null +++ b/extras/doc/html/group__fixmath.js @@ -0,0 +1,115 @@ +var group__fixmath = +[ + [ "low15bits", "group__fixmath.html#gac357561cf7360f82a264d90096d0126b", null ], + [ "Q0n15_FIX1", "group__fixmath.html#ga38ec011e7e3e08f5df091b608ce621e2", null ], + [ "Q0n16_FIX1", "group__fixmath.html#gaa1e02cbcdc65171103653df03fec3b76", null ], + [ "Q0n32_FIX1", "group__fixmath.html#gacb7fad10f1c2b67504271149f8f1215f", null ], + [ "Q0n7_FIX1", "group__fixmath.html#ga42c55269acbc41ca1fbcbb7aea5e8767", null ], + [ "Q15n0_FIX1", "group__fixmath.html#gafa16db677f958c243a826695b2c14c3c", null ], + [ "Q15n16_FIX1", "group__fixmath.html#ga7933033ba3cd84a4d09c0bd652378a38", null ], + [ "Q16n16_2PI", "group__fixmath.html#ga4bf1124c7bdac767263b2037211933e3", null ], + [ "Q16n16_FIX1", "group__fixmath.html#gaa4538a17e7e75b14a5826405ad06acef", null ], + [ "Q16n16_PI", "group__fixmath.html#gafd4492673766377d6d9202e43bb3d8dd", null ], + [ "Q1n14_FIX1", "group__fixmath.html#ga6f99802ebadd6b1b3ee707892e36cab9", null ], + [ "Q1n15_FIX1", "group__fixmath.html#ga8124fb8d1bcb111532f22726dbf3e5cc", null ], + [ "Q23n8_FIX1", "group__fixmath.html#gaad55b32c6590a3e4bb07972a7acec4a9", null ], + [ "Q3n13_2PI", "group__fixmath.html#gac065d8a968cb7c4dd713458682ee1308", null ], + [ "Q7n8_FIX1", "group__fixmath.html#ga1a04e29b3420231fc54039caf460a88c", null ], + [ "Q8n24_FIX1", "group__fixmath.html#ga5083b2bbeeb968258e2da31d3af26a25", null ], + [ "Q8n8_FIX1", "group__fixmath.html#ga00d3299412f5460cae3af8f0c58b2db1", null ], + [ "Q0n15", "group__fixmath.html#ga7b0aeeb726b5790b7b181f4f1ba08ee4", null ], + [ "Q0n16", "group__fixmath.html#ga38b7537c31ebeb6a2aba2ea34d23f230", null ], + [ "Q0n31", "group__fixmath.html#ga8f4b2d87d5b697b3625c347618fa64c4", null ], + [ "Q0n32", "group__fixmath.html#gae32cb6df74dc8053c5da2a7b6378583b", null ], + [ "Q0n7", "group__fixmath.html#ga9a64ce80fa7c320187d2cf2104a96daa", null ], + [ "Q0n8", "group__fixmath.html#ga36659a8cbbf0b380fa7bb2355e32db51", null ], + [ "Q15n0", "group__fixmath.html#ga97de6e3641b7638093a53cd137c8568c", null ], + [ "Q15n16", "group__fixmath.html#ga3e1cab88474edfa08535402573125cae", null ], + [ "Q16n0", "group__fixmath.html#ga50af2aa1b7d33bba0b6e1a88c350adfa", null ], + [ "Q16n16", "group__fixmath.html#gab3127fd8ac279e1d8dda0292bc1fc8dc", null ], + [ "Q1n14", "group__fixmath.html#ga856876974bff2af13e507f42af0c4925", null ], + [ "Q1n15", "group__fixmath.html#gadefb02e4d84cdb085fbc6251b8f4e8be", null ], + [ "Q23n8", "group__fixmath.html#gaa43a54806ef427491497cc1762480d13", null ], + [ "Q24n8", "group__fixmath.html#ga940a116ff2bfbd1b013b41b1be73f70f", null ], + [ "Q31n0", "group__fixmath.html#ga5979e4e6ca93e368ee8c042a526b3b73", null ], + [ "Q32n0", "group__fixmath.html#gafc3e7e5a9ddd997abe8e815ba91f3c4e", null ], + [ "Q3n13", "group__fixmath.html#ga2ca0a65f5b9ddef56756b4a75b3b8a68", null ], + [ "Q7n0", "group__fixmath.html#gabc933ab043f14dfee980811b2a103594", null ], + [ "Q7n8", "group__fixmath.html#ga65001bd29222d896ae9256fd7a415d41", null ], + [ "Q8n0", "group__fixmath.html#gadec626a60cce3a7fec144d2505b79dda", null ], + [ "Q8n24", "group__fixmath.html#ga5ce3f8456c6ea996029b8ea0d96fb3e8", null ], + [ "Q8n8", "group__fixmath.html#ga8dcb8a23bfed3b8404f7a0d73f300c8a", null ], + [ "float_to_Q0n16", "group__fixmath.html#ga4d20591828f0189963f1190f7197ba68", null ], + [ "float_to_Q0n7", "group__fixmath.html#ga1e0eab490ffe9a47fd78bcc449e3b995", null ], + [ "float_to_Q0n8", "group__fixmath.html#ga00e21c6b9d75ed26cd3bf1b9f4f9482e", null ], + [ "float_to_Q15n16", "group__fixmath.html#ga0e76f24ef8dfe0fa7510c4eea2608d5c", null ], + [ "float_to_Q16n16", "group__fixmath.html#ga041d3ba65c131b9aa01b9f34ec439b71", null ], + [ "float_to_Q1n14", "group__fixmath.html#ga1aab8b66d6d6f370cc66d82968884d18", null ], + [ "float_to_Q1n15", "group__fixmath.html#ga447e25c2d6c9bf14d8e324df0cc02753", null ], + [ "float_to_Q23n8", "group__fixmath.html#ga2ca980a6d71eb894b07534b30d9b7a06", null ], + [ "float_to_Q24n8", "group__fixmath.html#gaf91bc6123ecaff1441660d3abb20bf2e", null ], + [ "float_to_Q7n8", "group__fixmath.html#ga2a28dc262b3e79e0f67e4089cccaab45", null ], + [ "float_to_Q8n24", "group__fixmath.html#ga33ecb8a512f7d4eff5047d4ad65f5423", null ], + [ "float_to_Q8n8", "group__fixmath.html#ga36132b5f8f95223749b410ca235eef16", null ], + [ "Q0n16_to_float", "group__fixmath.html#ga0440dbc7692a88dca7b1173f020c9b0d", null ], + [ "Q0n7_to_float", "group__fixmath.html#ga8b01eb695e8d8c197e4e83a76d391a6a", null ], + [ "Q0n7_to_Q15n16", "group__fixmath.html#gac8b6733abac81f36cf8075a4d3c04e49", null ], + [ "Q0n7_to_Q1n14", "group__fixmath.html#ga468ddaa38e178b45a77e0c103da22b7c", null ], + [ "Q0n8_to_float", "group__fixmath.html#gade631f0534cf54fadbff65911809d927", null ], + [ "Q0n8_to_Q15n16", "group__fixmath.html#gad224b917b591bfa3554a958e84f8fadf", null ], + [ "Q0n8_to_Q16n16", "group__fixmath.html#gab13c5f790423d9a0cf10445b366933fe", null ], + [ "Q0n8_to_Q1n15", "group__fixmath.html#gaa9c85bc32475856ed07c3780a237ba31", null ], + [ "Q0n8_to_Q24n8", "group__fixmath.html#ga77edd2a4cd49df42e7145da9bdb799ae", null ], + [ "Q0n8_to_Q8n24", "group__fixmath.html#gac864675855d95314dd015ea52dc80135", null ], + [ "Q0n8_to_Q8n8", "group__fixmath.html#ga07cdd6c75045759d9d11116f5caea4bf", null ], + [ "Q15n0_to_Q15n16", "group__fixmath.html#ga8ef5b17eaddb22228824829204ee71bb", null ], + [ "Q15n16_to_float", "group__fixmath.html#ga4096449c3f0598a1534255de789d2ee5", null ], + [ "Q15n16_to_Q0n8", "group__fixmath.html#gaf8dd8621335948f9048742f0a59dc795", null ], + [ "Q15n16_to_Q15n0", "group__fixmath.html#gaa2ec03187910e9c6418298ef55655c36", null ], + [ "Q15n16_to_Q23n8", "group__fixmath.html#ga67b0f3ae70755ed8891e510b02813c08", null ], + [ "Q15n16_to_Q7n8", "group__fixmath.html#ga21d72d50bd41022755514c96c2d11901", null ], + [ "Q15n16_to_Q8n0", "group__fixmath.html#ga13bc20d9c470ccac803d53f3ebf7d861", null ], + [ "Q15n16_to_Q8n8", "group__fixmath.html#gaf62905baa27fd9ec0cbf5ed054ebd08a", null ], + [ "Q16n0_to_float", "group__fixmath.html#ga990f68566b105bc35ed718ad5ef93d72", null ], + [ "Q16n0_to_Q15n16", "group__fixmath.html#ga720cdc234e4d0979753e5aef22a93e11", null ], + [ "Q16n0_to_Q16n16", "group__fixmath.html#gac193b97057ac01de898db661cb6d1c5d", null ], + [ "Q16n0_to_Q23n8", "group__fixmath.html#gaab7cd08af1c66dd48873f9a5645cc95e", null ], + [ "Q16n0_to_Q24n8", "group__fixmath.html#ga779f365fbc3378a0e8cc167d44fd7aad", null ], + [ "Q16n16_pow2", "group__fixmath.html#ga2e1d9d0fe4ba7edb9830efb7887c36bd", null ], + [ "Q16n16_to_float", "group__fixmath.html#gafcb57f2d0fdcce65b60401f47b871d14", null ], + [ "Q16n16_to_Q0n8", "group__fixmath.html#ga1315b4f68a57d26fbedc88d5b30a44d8", null ], + [ "Q16n16_to_Q16n0", "group__fixmath.html#ga89bdabdfd59a8ec3f06aedbbab087527", null ], + [ "Q16n16_to_Q24n8", "group__fixmath.html#ga17dd8cb80ef87b6573926e411618105a", null ], + [ "Q16n16_to_Q8n8", "group__fixmath.html#gaef6ce2a93fe5862ac373772e994713a9", null ], + [ "Q1n14_to_float", "group__fixmath.html#gad3fe2bc17bed17cd159a9c030145b6ca", null ], + [ "Q1n14_to_Q0n7", "group__fixmath.html#ga5f3733fb89e77693e54328375226f5e9", null ], + [ "Q1n15_to_float", "group__fixmath.html#ga9ed5a6a2041f490ffa52b5a5fa95d3e5", null ], + [ "Q1n15_to_Q0n8", "group__fixmath.html#ga67c11990c9288aa762c708d3a48ba7fc", null ], + [ "Q23n8_to_float", "group__fixmath.html#ga47738704056a272968e80b399e06e82b", null ], + [ "Q23n8_to_Q15n0", "group__fixmath.html#ga1b21d30a04f07940dc4ea206533b9dd8", null ], + [ "Q23n8_to_Q16n0", "group__fixmath.html#gaa6a3087e0119ed233a3256f8fa25e146", null ], + [ "Q23n8_to_Q31n0", "group__fixmath.html#ga8f3d1181dc6802782b9ff9aa59ca96a2", null ], + [ "Q23n8_to_Q7n8", "group__fixmath.html#gac243a1fd2154b115e4ba39a70125675e", null ], + [ "Q24n8_to_float", "group__fixmath.html#gab495892ee3db6cbce186fbb7c7246088", null ], + [ "Q24n8_to_Q0n8", "group__fixmath.html#ga94dd6fe8594b171881ade98431dfda28", null ], + [ "Q24n8_to_Q16n0", "group__fixmath.html#gaefdfa391a9fef0f17d1f9df16fd9a9f0", null ], + [ "Q24n8_to_Q16n16", "group__fixmath.html#ga2b445681d56f8693c3d98d5ff19b51d4", null ], + [ "Q24n8_to_Q32n0", "group__fixmath.html#ga9f28b2310c92ecac72960d9bd0aff80f", null ], + [ "Q7n0_to_Q15n16", "group__fixmath.html#ga64d943b21ef783f34135630a5c80be46", null ], + [ "Q7n0_to_Q7n8", "group__fixmath.html#ga81b0b1f295a6a724c100e600d6b4ce28", null ], + [ "Q7n8_mult", "group__fixmath.html#ga306932c4fb32b1352c24b7602a696fee", null ], + [ "Q7n8_to_float", "group__fixmath.html#gaad3cbbc6a772d246d26fd98b5a079382", null ], + [ "Q7n8_to_Q15n16", "group__fixmath.html#ga958d671aeefb66c2492b84bf299f8d13", null ], + [ "Q7n8_to_Q7n0", "group__fixmath.html#gaa8be90cc674fc9ac72a2faafb11d6a5e", null ], + [ "Q8n0_to_Q15n16", "group__fixmath.html#gac0b4678c510db93302efb15497911907", null ], + [ "Q8n0_to_Q16n16", "group__fixmath.html#ga589b5c022b59a72fc3fb39061048d193", null ], + [ "Q8n0_to_Q7n8", "group__fixmath.html#ga4baa8569c241630ddd25d798d0a89b3d", null ], + [ "Q8n0_to_Q8n8", "group__fixmath.html#ga90a5d59d5a529f4caaf408730230a156", null ], + [ "Q8n24_to_float", "group__fixmath.html#ga6f0e36938a7dfae4ab399f17642c2bcd", null ], + [ "Q8n24_to_Q0n8", "group__fixmath.html#ga0c5065bc7c71ac750acde1c7ce216d87", null ], + [ "Q8n8_to_float", "group__fixmath.html#gabc9c251c25fa7a239d704ea3998e7e39", null ], + [ "Q8n8_to_Q16n16", "group__fixmath.html#gab88fd86b4f226f0e2614b0ac813e4cad", null ], + [ "Q8n8_to_Q8n0", "group__fixmath.html#gad68e3b4d1bf65e997d5e709eb4153572", null ], + [ "uint8_tDiv", "group__fixmath.html#ga1717d922e241ef368b81def7fd6c2446", null ], + [ "uint8_tMod", "group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/group__midi.html b/extras/doc/html/group__midi.html new file mode 100644 index 000000000..e0c02532f --- /dev/null +++ b/extras/doc/html/group__midi.html @@ -0,0 +1,255 @@ + + + + + + + +Mozzi: Midi + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Midi
+
+
+ +

Midi note number to frequency conversions. +More...

+ + + + + + + + + + + + + + +

+Functions

float mtof (float midival)
 Converts midi note number to frequency. More...
 
Q16n16 Q16n16_mtof (Q16n16 midival_fractional)
 Converts midi note number to frequency with speed and accuracy. More...
 
int mtof (uint8_t midi_note)
 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important. More...
 
int mtof (int midi_note)
 A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important. More...
 
+

Detailed Description

+

Midi note number to frequency conversions.

+

Useful if you like playing notes in tune.

+

Function Documentation

+ +

§ mtof() [1/3]

+ +
+
+ + + + + + + + +
float mtof (float midival)
+
+ +

Converts midi note number to frequency.

+

Caution: this can take up to 400 microseconds to run. It can seriously mess up the audio output if you use it in updateControl() or updateAudio(). This is a good choice in setup(), or where you need precise midi-pitch conversion and aren't doing much other audio calculation.

Note
Beware this returns an invalid result for midi note 0.
+
+Timing: ~350 us
+
Parameters
+ + +
midivala midi note number, 1.0 or greater. Like the mtof object in Pd, midi values can have fractions.
+
+
+
Returns
the frequency represented by the input midi note number..
+ +

Definition at line 17 of file mozzi_midi.cpp.

+ +
+
+ +

§ mtof() [2/3]

+ +
+
+ + + + + + + + +
int mtof (uint8_t midi_note)
+
+ +

A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.

+
Parameters
+ + +
midi_notea midi note number.
+
+
+
Returns
an integer approximation of the midi note's frequency.
+ +

Definition at line 155 of file mozzi_midi.cpp.

+ +
+
+ +

§ mtof() [3/3]

+ +
+
+ + + + + + + + +
int mtof (int midi_note)
+
+ +

A good choice if you're using whole note values, want speed and simplicity, and accuracy isn't important.

+
Parameters
+ + +
midi_notea midi note number.
+
+
+
Returns
an integer approximation of the midi note's frequency.
+ +

Definition at line 165 of file mozzi_midi.cpp.

+ +
+
+ +

§ Q16n16_mtof()

+ +
+
+ + + + + + + + +
Q16n16 Q16n16_mtof (Q16n16 midival_fractional)
+
+ +

Converts midi note number to frequency with speed and accuracy.

+

Q16n16_mtofLookup() is a fast alternative to (float) mtof(), and more accurate than (uint8_t) mtof(), using Q16n16 fixed-point format instead of floats or uint8_t values. Q16n16_mtof() uses cheap linear interpolation between whole midi-note frequency equivalents stored in a lookup table, so is less accurate than the float version, mtof(), for non-whole midi values.

Note
Timing: ~8 us.
+
Parameters
+ + +
midival_fractionala midi note number in Q16n16 format, for fractional values.
+
+
+
Returns
the frequency represented by the input midi note number, in Q16n16 fixed point fractional integer format, where the lower word is a fractional value.
+ +

Definition at line 131 of file mozzi_midi.cpp.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/group__midi.js b/extras/doc/html/group__midi.js new file mode 100644 index 000000000..660211697 --- /dev/null +++ b/extras/doc/html/group__midi.js @@ -0,0 +1,7 @@ +var group__midi = +[ + [ "mtof", "group__midi.html#gafacb8849f96270644ea79184fde7db37", null ], + [ "mtof", "group__midi.html#ga07d1ca985403df63f75aa5d143477206", null ], + [ "mtof", "group__midi.html#ga08102facf170648591b2ca24a3c39712", null ], + [ "Q16n16_mtof", "group__midi.html#ga45bd3f3abd7ae5fa509eac3d3931a5b2", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/group__random.html b/extras/doc/html/group__random.html new file mode 100644 index 000000000..a5da783d6 --- /dev/null +++ b/extras/doc/html/group__random.html @@ -0,0 +1,642 @@ + + + + + + + +Mozzi: Random + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Random
+
+
+ +

Fast random number generator functions. +More...

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Functions

unsigned long xorshift96 ()
 Random number generator. More...
 
void randSeed (long seed)
 Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function. More...
 
void randSeed ()
 Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function. More...
 
void xorshiftSeed (long seed)
 Initialises Mozzi's (pseudo)random number generator xorshift96() with a chosen seed number. More...
 
int8_t rand (int8_t minval, int8_t maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
uint8_t rand (uint8_t minval, uint8_t maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
int rand (int minval, int maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
unsigned int rand (unsigned int minval, unsigned int maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
int8_t rand (int8_t maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
uint8_t rand (uint8_t maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
int rand (int maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
unsigned int rand (unsigned int maxval)
 Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi. More...
 
uint8_t randMidiNote ()
 Generates a random number in the range for midi notes. More...
 
unsigned int randPrime (unsigned int n)
 Generates a random prime number between 0 and the n-1th prime number. More...
 
unsigned int randPrimeUpTo (unsigned int n)
 Generates a random prime number between 0 and the given input number inclusive. More...
 
+

Detailed Description

+

Fast random number generator functions.

+

These replace Arduino random() which is so slow it will stop your audio. They can even be used to generate audio noise.

+

Function Documentation

+ +

§ rand() [1/8]

+ +
+
+ + + + + + + + + + + + + + + + + + +
int8_t rand (int8_t minval,
int8_t maxval 
)
+
+ +

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

+
Parameters
+ + + +
minvalthe minimum signed uint8_t value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
maxvalthe maximum signed uint8_t value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
+
+
+
Returns
a random int8_t between minval and maxval-1 inclusive.
+ +

Definition at line 141 of file mozzi_rand.cpp.

+ +
+
+ +

§ rand() [2/8]

+ +
+
+ + + + + + + + + + + + + + + + + + +
uint8_t rand (uint8_t minval,
uint8_t maxval 
)
+
+ +

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

+
Parameters
+ + + +
minvalthe minimum unsigned uint8_t value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
maxvalthe maximum unsigned uint8_t value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
+
+
+
Returns
a random uint8_t between minval and maxval-1 inclusive.
+ +

Definition at line 153 of file mozzi_rand.cpp.

+ +
+
+ +

§ rand() [3/8]

+ +
+
+ + + + + + + + + + + + + + + + + + +
int rand (int minval,
int maxval 
)
+
+ +

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

+
Parameters
+ + + +
minvalthe minimum signed int value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
maxvalthe maximum signed int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
+
+
+
Returns
a random int between minval and maxval-1 inclusive.
+ +

Definition at line 165 of file mozzi_rand.cpp.

+ +
+
+ +

§ rand() [4/8]

+ +
+
+ + + + + + + + + + + + + + + + + + +
unsigned int rand (unsigned int minval,
unsigned int maxval 
)
+
+ +

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

+
Parameters
+ + + +
minvalthe minimum unsigned int value of the range to be chosen from. Minval will be the minimum value possibly returned by the function.
maxvalthe maximum unsigned int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
+
+
+
Returns
a random unsigned int between minval and maxval-1 inclusive.
+ +

Definition at line 177 of file mozzi_rand.cpp.

+ +
+
+ +

§ rand() [5/8]

+ +
+
+ + + + + + + + +
int8_t rand (int8_t maxval)
+
+ +

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

+
Parameters
+ + +
maxvalthe maximum signed uint8_t value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
+
+
+
Returns
a random int8_t between 0 and maxval-1 inclusive.
+ +

Definition at line 188 of file mozzi_rand.cpp.

+ +
+
+ +

§ rand() [6/8]

+ +
+
+ + + + + + + + +
uint8_t rand (uint8_t maxval)
+
+ +

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

+
Parameters
+ + +
maxvalthe maximum unsigned uint8_t value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
+
+
+
Returns
a random uint8_t between 0 and maxval-1 inclusive.
+ +

Definition at line 199 of file mozzi_rand.cpp.

+ +
+
+ +

§ rand() [7/8]

+ +
+
+ + + + + + + + +
int rand (int maxval)
+
+ +

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

+
Parameters
+ + +
maxvalthe maximum signed int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
+
+
+
Returns
a random int between 0 and maxval-1 inclusive.
+ +

Definition at line 210 of file mozzi_rand.cpp.

+ +
+
+ +

§ rand() [8/8]

+ +
+
+ + + + + + + + +
unsigned int rand (unsigned int maxval)
+
+ +

Ranged random number generator, faster than Arduino's built-in random function, which is too slow for generating at audio rate with Mozzi.

+
Parameters
+ + +
maxvalthe maximum unsigned int value of the range to be chosen from. Maxval-1 will be the largest value possibly returned by the function.
+
+
+
Returns
a random unsigned int between 0 and maxval-1 inclusive.
+ +

Definition at line 221 of file mozzi_rand.cpp.

+ +
+
+ +

§ randMidiNote()

+ +
+
+ + + + + + + +
uint8_t randMidiNote ()
+
+ +

Generates a random number in the range for midi notes.

+
Returns
a random value between 0 and 127 inclusive
+ +

Definition at line 231 of file mozzi_rand.cpp.

+ +
+
+ +

§ randPrime()

+ +
+
+ + + + + +
+ + + + + + + + +
unsigned int randPrime (unsigned int n)
+
+inline
+
+ +

Generates a random prime number between 0 and the n-1th prime number.

+

This uses a stored array of primes, which takes about 2.5k of progmem.

Parameters
+ + +
nthe maximum index in the series of primes up to which numbers will be returned. The maximum is 1128.
+
+
+
Returns
random prime number between 0 and n-1th index in the series of primes.
+
Note
This isn't included automatically with mozzi_rand.h, because it takes up memory which might be needed for other things. You need to "#include <primes.h>" separately to mozzi_rand.h.
+ +

Definition at line 47 of file primes.h.

+ +
+
+ +

§ randPrimeUpTo()

+ +
+
+ + + + + +
+ + + + + + + + +
unsigned int randPrimeUpTo (unsigned int n)
+
+inline
+
+ +

Generates a random prime number between 0 and the given input number inclusive.

+

This uses a stored array of primes up to 10000, which takes about 2.5k of progmem.

Parameters
+ + +
nthe upper limit of the random prime number to be generated. The maximum is 10000.
+
+
+
Returns
random prime number between 0 and n.
+
Note
This isn't included automatically with mozzi_utils.h, because it takes up memory which might be needed for other things. You need to "#include <primes.h>" separately to mozzi_utils.h.
+ +

Definition at line 62 of file primes.h.

+ +
+
+ +

§ randSeed() [1/2]

+ +
+
+ + + + + + + + +
void randSeed (long seed)
+
+ +

Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function.

+

This can be useful if you want random sequences to be different on each run of a sketch, by seeding with fairly random input, such as analogRead() on an unconnected pin (as explained in the Arduino documentation for randomSeed(). randSeed is the same as xorshift96Seed(), but easier to remember.

Parameters
+ + +
seeda number to use as a seed.
+
+
+ +

Definition at line 44 of file mozzi_rand.cpp.

+ +
+
+ +

§ randSeed() [2/2]

+ +
+
+ + + + + + + +
void randSeed ()
+
+ +

Initialises Mozzi's (pseudo)random number generator xorshift96(), which is used in Mozzi's rand() function.

+

This can be useful if you want random sequences to be different on each run of a sketch, by seeding with a fairly random input. randSeed() called without a parameter uses noise from reading the Arduino's internal temperature as the seed, a technique discussed at http://arduino.cc/forum/index.php/topic,38091.0.html, borrowing code put there by Rob Tillaart.

Note
It's not perfect, as discussed in the forum thread. It might only work with some processors: (from the thread) "...ATmega328P in DIP, possibly others but the duemilanove and uno will do it at least." So far, gizduino's AVR_ATmega644P chip doesn't like it, so we use (long)analogRead(0)*analogRead(1) for that instead.
+ +

Definition at line 106 of file mozzi_rand.cpp.

+ +
+
+ +

§ xorshift96()

+ +
+
+ + + + + + + +
unsigned long xorshift96 ()
+
+ +

Random number generator.

+

A faster replacement for Arduino's random function, which is too slow to use with Mozzi. Based on Marsaglia, George. (2003). Xorshift RNGs. http://www.jstatsoft.org/v08/i14/xorshift.pdf

Returns
a random 32 bit integer.
+ +

Definition at line 17 of file mozzi_rand.cpp.

+ +
+
+ +

§ xorshiftSeed()

+ +
+
+ + + + + + + + +
void xorshiftSeed (long seed)
+
+ +

Initialises Mozzi's (pseudo)random number generator xorshift96() with a chosen seed number.

+
Parameters
+ + +
seeda number to use as a seed.
+
+
+ +

Definition at line 128 of file mozzi_rand.cpp.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/group__random.js b/extras/doc/html/group__random.js new file mode 100644 index 000000000..1d7974a8c --- /dev/null +++ b/extras/doc/html/group__random.js @@ -0,0 +1,18 @@ +var group__random = +[ + [ "rand", "group__random.html#gabe026433bdf21da516984d35730672fc", null ], + [ "rand", "group__random.html#ga13bc207ecda4f92e2be2fb585a5cce2b", null ], + [ "rand", "group__random.html#ga4c69deb53afb886b26c76b343513b340", null ], + [ "rand", "group__random.html#ga95de742b529d5965461f1d3f6f576e18", null ], + [ "rand", "group__random.html#ga99dee852111a97e20a64582de8e79ab1", null ], + [ "rand", "group__random.html#ga904cf092c2b014dc6c99f7844bd3723e", null ], + [ "rand", "group__random.html#ga1182cb74988d9c8510959149adc63762", null ], + [ "rand", "group__random.html#ga4ad4ab94c8b0e8a4d4be925490378733", null ], + [ "randMidiNote", "group__random.html#ga15ff4da0bec0272bf728ea7de2d78006", null ], + [ "randPrime", "group__random.html#gab6c2b444d462461b82997e04105d0398", null ], + [ "randPrimeUpTo", "group__random.html#gaead8db89e2403d5ef7842f894552c629", null ], + [ "randSeed", "group__random.html#ga84c58d758e238208eb82fc8ae2330b66", null ], + [ "randSeed", "group__random.html#ga83ff6b4e38c84713e0d67aa1ec06af66", null ], + [ "xorshift96", "group__random.html#gaf2deee83847f1fcee2c859d97bd072f6", null ], + [ "xorshiftSeed", "group__random.html#gaf7117eb5e1e0676c276be7094ce30ab7", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/group__soundtables.html b/extras/doc/html/group__soundtables.html new file mode 100644 index 000000000..c6a4077da --- /dev/null +++ b/extras/doc/html/group__soundtables.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: Soundtables + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Soundtables
+
+
+ +

Look-up-tables and python scripts to generate tables or convert sounds. +More...

+

Look-up-tables and python scripts to generate tables or convert sounds.

+

Includes ready-to-use wave tables and a few example samples which are in the Mozzi/tables and Mozzi/samples folders. You can convert your own sounds from a program like Audacity to tables for Mozzi with a script called char2mozzi.py, in Mozzi/python. Read the int8_t2mozzi.py file for instructions. Also check out the other scripts in the python folder for templates to use if you want to do your own thing.

+
+
+ + + + diff --git a/extras/doc/html/group__util.html b/extras/doc/html/group__util.html new file mode 100644 index 000000000..5f983f679 --- /dev/null +++ b/extras/doc/html/group__util.html @@ -0,0 +1,293 @@ + + + + + + + +Mozzi: Util + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+ +
+
Util
+
+
+ +

Utility functions. +More...

+ + + + + +

+Files

file  char2mozzi.py
 
A script for converting raw 8 bit sound data files to wavetables for Mozzi.

 
+ + + + +

+Classes

struct  Int2Type< I >
 Enables you to instantiate a template based on an integer value. More...
 
+ + + + + + + + + + + + + +

+Functions

long trailingZeros (const unsigned long v)
 Given a power of 2, work out the number to shift right by to do a divide by the number, or shift left to multiply. More...
 
void setPin13Out ()
 Set digital pin 13 to output for testing timing with an oscilloscope. More...
 
void setPin13High ()
 Set pin 13 high for testing timing with an oscilloscope. More...
 
void setPin13Low ()
 Set pin 13 low for testing timing with an oscilloscope. More...
 
+

Detailed Description

+

Utility functions.

+

Includes functions for debugging and profiling high frequency code with an oscilloscope when serial is too slow, some miscellaneous functions used internally by Mozzi, and python scripts for converting or generating sound tables.

+

Class Documentation

+ +

§ Int2Type

+ +
+
+ + + + +
struct Int2Type
+
+

template<int I>
+struct Int2Type< I >

+ +

Enables you to instantiate a template based on an integer value.

+

For example, this is used in StateVariable.h to choose a different next() function for each kind of filter, LOWPASS, BANDPASS, HIGHPASS or NOTCH, which are simple integer values 0,1,2,3 provided to the StateVariable template on instantiation. Fantastic! It's in C++11, but not yet available in avr-gcc. See "c++ enable_if"

+ +

Definition at line 20 of file meta.h.

+
+ + + +

Public Types

enum  { value = I + }
 
+ +
+
+

Function Documentation

+ +

§ setPin13High()

+ +
+
+ + + + + +
+ + + + + + + +
void setPin13High ()
+
+inline
+
+ +

Set pin 13 high for testing timing with an oscilloscope.

+ +

Definition at line 33 of file mozzi_utils.h.

+ +
+
+ +

§ setPin13Low()

+ +
+
+ + + + + +
+ + + + + + + +
void setPin13Low ()
+
+inline
+
+ +

Set pin 13 low for testing timing with an oscilloscope.

+ +

Definition at line 42 of file mozzi_utils.h.

+ +
+
+ +

§ setPin13Out()

+ +
+
+ + + + + +
+ + + + + + + +
void setPin13Out ()
+
+inline
+
+ +

Set digital pin 13 to output for testing timing with an oscilloscope.

+ +

Definition at line 24 of file mozzi_utils.h.

+ +
+
+ +

§ trailingZeros()

+ +
+
+ + + + + + + + +
long trailingZeros (const unsigned long v)
+
+ +

Given a power of 2, work out the number to shift right by to do a divide by the number, or shift left to multiply.

+
Parameters
+ + +
apower of 2, or any other number for that matter
+
+
+
Returns
the number of trailing zeros on the right hand end
+ +

Definition at line 8 of file mozzi_utils.cpp.

+ +
+
+
+
+ + + + diff --git a/extras/doc/html/group__util.js b/extras/doc/html/group__util.js new file mode 100644 index 000000000..f03108b83 --- /dev/null +++ b/extras/doc/html/group__util.js @@ -0,0 +1,11 @@ +var group__util = +[ + [ "char2mozzi.py", "char2mozzi_8py.html", null ], + [ "Int2Type", "group__util.html#struct_int2_type", [ + [ "value", "group__util.html#a21bb06a1d9872a32b8729c961ae30eb0afc88b5b34784bb728b4172d2551fbfb4", null ] + ] ], + [ "setPin13High", "group__util.html#gaea7ee11e335eb2d6b891b886c5f3f942", null ], + [ "setPin13Low", "group__util.html#ga4c87d0211135fd33a8697350235b50b4", null ], + [ "setPin13Out", "group__util.html#gad1725ef17b234c4df9cc64a9bf561435", null ], + [ "trailingZeros", "group__util.html#gaf45df8dbf0bc86752d8fc697e2381cc3", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/group__util_struct_int2_type.js b/extras/doc/html/group__util_struct_int2_type.js new file mode 100644 index 000000000..150491831 --- /dev/null +++ b/extras/doc/html/group__util_struct_int2_type.js @@ -0,0 +1,4 @@ +var group__util_struct_int2_type = +[ + [ "value", "group__util.html#a21bb06a1d9872a32b8729c961ae30eb0afc88b5b34784bb728b4172d2551fbfb4", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/hierarchy.html b/extras/doc/html/hierarchy.html new file mode 100644 index 000000000..5036694bb --- /dev/null +++ b/extras/doc/html/hierarchy.html @@ -0,0 +1,166 @@ + + + + + + + +Mozzi: Class Hierarchy + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 CADSR< CONTROL_UPDATE_RATE, LERP_RATE >A simple ADSR envelope generator
 CADSR< CONTROL_RATE, AUDIO_RATE >
 CADSR< CONTROL_RATE, CONTROL_RATE >
 CAudioDelay< NUM_BUFFER_SAMPLES, T >Audio delay line for comb filter, flange, chorus and short echo effects
 CControlDelay< NUM_BUFFER_SAMPLES, T >Control-rate delay line for delaying control signals
 CAudioDelay< 128 >
 CAudioDelay< 128, int >
 CAudioDelay< 256, int >
 CAudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >Audio delay line with feedback for comb filter, flange, chorus and short echo effects
 CAutoRange< T >Keeps a running calculation of the range of the input values it receives
 CAutoRange< int >
 CAutoMapAutomatically map an input value to an output range without knowing the precise range of inputs beforehand
 CCapPoll< SENSOR_PIN, SEND_PIN >A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime
 CCircularBuffer< ITEM_TYPE >Circular buffer object
 CDCfilterA DC-blocking filter useful for highlighting changes in control signals
 CEadExponential attack decay envelope
 CEventDelayA non-blocking replacement for Arduino's delay() function (which is disabled by Mozzi)
 CMetronomeA metronome class which is like an EventDelay which retriggers itself when the delay time is up, to produce a repeating beat
 CInt2Type< I >Enables you to instantiate a template based on an integer value
 CIntMapA faster version of Arduino's map() function
 CLine< T >For linear changes with a minimum of calculation at each step
 CLine< Q15n16 >
 CLine< Q16n16 >
 CLine< unsigned char >
 CLine< unsigned int >
 CLine< unsigned long >
 CLowPassFilterA resonant low pass filter for audio signals
 CMultiLine< CONTROL_UPDATE_RATE, LERP_RATE >A simple MultiLine envelope generator
 COscil< NUM_TABLE_CELLS, UPDATE_RATE >Oscil plays a wavetable, cycling through the table to generate an audio or control signal
 COscil< 8192, AUDIO_RATE >
 COscil< COS8192_NUM_CELLS, AUDIO_RATE >
 COscil< SIN2048_NUM_CELLS, AUDIO_RATE >
 CPDResonantPDResonant is a simple midi instrument using Phase distortion used to simulate resonant filter, based on https://en.wikipedia.org/wiki/Phase_distortion_synthesis
 CPhasor< UPDATE_RATE >Phasor repeatedly generates a high resolution ramp at a variable frequency
 CPhasor< AUDIO_RATE >
 CPortamento< CONTROL_UPDATE_RATE >A simple portamento (pitch slide from one note to the next) effect, useful for note-based applications
 CRCpoll< SENSOR_PIN >A class for reading voltage on a digital pin, derived from http://arduino.cc/en/Tutorial/RCtime
 CReverbTankA reverb which sounds like the inside of a tin can
 CRollingAverage< T, WINDOW_LENGTH >Calculates a running average over a specified number of the most recent readings
 CRollingAverage< T,(1<<(RESOLUTION_INCREASE_BITS *2))>
 COverSample< T, RESOLUTION_INCREASE_BITS >Enables the resolution of analog inputs to be increased by oversampling and decimation
 CRollingStat< T, WINDOW_LENGTH >Calculates an approximation of the variance and standard deviation for a window of recent inputs
 CSample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >Sample is like Oscil, it plays a wavetable
 CSampleHuffmanA sample player for samples encoded with Huffman compression
 CSmooth< T >A simple infinite impulse response low pass filter for smoothing control or audio signals
 CStack< T, NUM_ITEMS >A simple stack, used internally for keeping track of analog input channels as they are read
 CStateVariable< FILTER_TYPE >A State Variable filter which offers 12db resonant low, high, bandpass and notch modes
 CWavePacket< ALGORITHM >Wavepacket synthesis, with two overlapping streams of wave packets
 CWavePacketSample< ALGORITHM >A WavePacket which allows a custom table to be set as the audio source for the wavepackets (or grains)
 CWaveShaper< T >WaveShaper maps values from its input to values in a table, which are returned as output
 CWaveShaper< char >Int8_t specialisation of WaveShaper template
 CWaveShaper< int >Int specialisation of WaveShaper template
+
+
+
+ + + + diff --git a/extras/doc/html/hierarchy.js b/extras/doc/html/hierarchy.js new file mode 100644 index 000000000..00690683f --- /dev/null +++ b/extras/doc/html/hierarchy.js @@ -0,0 +1,60 @@ +var hierarchy = +[ + [ "ADSR< CONTROL_UPDATE_RATE, LERP_RATE >", "class_a_d_s_r.html", null ], + [ "ADSR< CONTROL_RATE, AUDIO_RATE >", "class_a_d_s_r.html", null ], + [ "ADSR< CONTROL_RATE, CONTROL_RATE >", "class_a_d_s_r.html", null ], + [ "AudioDelay< NUM_BUFFER_SAMPLES, T >", "class_audio_delay.html", [ + [ "ControlDelay< NUM_BUFFER_SAMPLES, T >", "class_control_delay.html", null ] + ] ], + [ "AudioDelay< 128 >", "class_audio_delay.html", null ], + [ "AudioDelay< 128, int >", "class_audio_delay.html", null ], + [ "AudioDelay< 256, int >", "class_audio_delay.html", null ], + [ "AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >", "class_audio_delay_feedback.html", null ], + [ "AutoRange< T >", "class_auto_range.html", null ], + [ "AutoRange< int >", "class_auto_range.html", [ + [ "AutoMap", "class_auto_map.html", null ] + ] ], + [ "CapPoll< SENSOR_PIN, SEND_PIN >", "class_cap_poll.html", null ], + [ "CircularBuffer< ITEM_TYPE >", "class_circular_buffer.html", null ], + [ "DCfilter", "class_d_cfilter.html", null ], + [ "Ead", "class_ead.html", null ], + [ "EventDelay", "class_event_delay.html", [ + [ "Metronome", "class_metronome.html", null ] + ] ], + [ "Int2Type< I >", "group__util.html#struct_int2_type", null ], + [ "IntMap", "class_int_map.html", null ], + [ "Line< T >", "class_line.html", null ], + [ "Line< Q15n16 >", "class_line.html", null ], + [ "Line< Q16n16 >", "class_line.html", null ], + [ "Line< unsigned char >", "class_line_3_01unsigned_01char_01_4.html", null ], + [ "Line< unsigned int >", "class_line_3_01unsigned_01int_01_4.html", null ], + [ "Line< unsigned long >", "class_line_3_01unsigned_01long_01_4.html", null ], + [ "LowPassFilter", "class_low_pass_filter.html", null ], + [ "MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >", "class_multi_line.html", null ], + [ "Oscil< NUM_TABLE_CELLS, UPDATE_RATE >", "class_oscil.html", null ], + [ "Oscil< 8192, AUDIO_RATE >", "class_oscil.html", null ], + [ "Oscil< COS8192_NUM_CELLS, AUDIO_RATE >", "class_oscil.html", null ], + [ "Oscil< SIN2048_NUM_CELLS, AUDIO_RATE >", "class_oscil.html", null ], + [ "PDResonant", "class_p_d_resonant.html", null ], + [ "Phasor< UPDATE_RATE >", "class_phasor.html", null ], + [ "Phasor< AUDIO_RATE >", "class_phasor.html", null ], + [ "Portamento< CONTROL_UPDATE_RATE >", "class_portamento.html", null ], + [ "RCpoll< SENSOR_PIN >", "class_r_cpoll.html", null ], + [ "ReverbTank", "class_reverb_tank.html", null ], + [ "RollingAverage< T, WINDOW_LENGTH >", "class_rolling_average.html", null ], + [ "RollingAverage< T,(1<<(RESOLUTION_INCREASE_BITS *2))>", "class_rolling_average.html", [ + [ "OverSample< T, RESOLUTION_INCREASE_BITS >", "class_over_sample.html", null ] + ] ], + [ "RollingStat< T, WINDOW_LENGTH >", "class_rolling_stat.html", null ], + [ "Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >", "class_sample.html", null ], + [ "SampleHuffman", "class_sample_huffman.html", null ], + [ "Smooth< T >", "class_smooth.html", null ], + [ "Stack< T, NUM_ITEMS >", "class_stack.html", null ], + [ "StateVariable< FILTER_TYPE >", "class_state_variable.html", null ], + [ "WavePacket< ALGORITHM >", "class_wave_packet.html", [ + [ "WavePacketSample< ALGORITHM >", "class_wave_packet_sample.html", null ] + ] ], + [ "WaveShaper< T >", "class_wave_shaper.html", null ], + [ "WaveShaper< char >", "class_wave_shaper_3_01char_01_4.html", null ], + [ "WaveShaper< int >", "class_wave_shaper_3_01int_01_4.html", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/index.html b/extras/doc/html/index.html new file mode 100644 index 000000000..e86d430d0 --- /dev/null +++ b/extras/doc/html/index.html @@ -0,0 +1,122 @@ + + + + + + + +Mozzi: Main Page + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Mozzi Documentation
+
+ +
+ + + + diff --git a/extras/doc/html/jquery.js b/extras/doc/html/jquery.js new file mode 100644 index 000000000..f5343eda9 --- /dev/null +++ b/extras/doc/html/jquery.js @@ -0,0 +1,87 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType;if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av);ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length;if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b})}})(window);/*! + * jQuery UI 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(a,d){a.ui=a.ui||{};if(a.ui.version){return}a.extend(a.ui,{version:"1.8.18",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(e,f){return typeof e==="number"?this.each(function(){var g=this;setTimeout(function(){a(g).focus();if(f){f.call(g)}},e)}):this._focus.apply(this,arguments)},scrollParent:function(){var e;if((a.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){e=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(a.curCSS(this,"position",1))&&(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}else{e=this.parents().filter(function(){return(/(auto|scroll)/).test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!e.length?a(document):e},zIndex:function(h){if(h!==d){return this.css("zIndex",h)}if(this.length){var f=a(this[0]),e,g;while(f.length&&f[0]!==document){e=f.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){g=parseInt(f.css("zIndex"),10);if(!isNaN(g)&&g!==0){return g}}f=f.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});a.each(["Width","Height"],function(g,e){var f=e==="Width"?["Left","Right"]:["Top","Bottom"],h=e.toLowerCase(),k={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};function j(m,l,i,n){a.each(f,function(){l-=parseFloat(a.curCSS(m,"padding"+this,true))||0;if(i){l-=parseFloat(a.curCSS(m,"border"+this+"Width",true))||0}if(n){l-=parseFloat(a.curCSS(m,"margin"+this,true))||0}});return l}a.fn["inner"+e]=function(i){if(i===d){return k["inner"+e].call(this)}return this.each(function(){a(this).css(h,j(this,i)+"px")})};a.fn["outer"+e]=function(i,l){if(typeof i!=="number"){return k["outer"+e].call(this,i)}return this.each(function(){a(this).css(h,j(this,i,true,l)+"px")})}});function c(g,e){var j=g.nodeName.toLowerCase();if("area"===j){var i=g.parentNode,h=i.name,f;if(!g.href||!h||i.nodeName.toLowerCase()!=="map"){return false}f=a("img[usemap=#"+h+"]")[0];return !!f&&b(f)}return(/input|select|textarea|button|object/.test(j)?!g.disabled:"a"==j?g.href||e:e)&&b(g)}function b(e){return !a(e).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.extend(a.expr[":"],{data:function(g,f,e){return !!a.data(g,e[3])},focusable:function(e){return c(e,!isNaN(a.attr(e,"tabindex")))},tabbable:function(g){var e=a.attr(g,"tabindex"),f=isNaN(e);return(f||e>=0)&&c(g,!f)}});a(function(){var e=document.body,f=e.appendChild(f=document.createElement("div"));f.offsetHeight;a.extend(f.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});a.support.minHeight=f.offsetHeight===100;a.support.selectstart="onselectstart" in f;e.removeChild(f).style.display="none"});a.extend(a.ui,{plugin:{add:function(f,g,j){var h=a.ui[f].prototype;for(var e in j){h.plugins[e]=h.plugins[e]||[];h.plugins[e].push([g,j[e]])}},call:function(e,g,f){var j=e.plugins[g];if(!j||!e.element[0].parentNode){return}for(var h=0;h0){return true}h[e]=1;g=(h[e]>0);h[e]=0;return g},isOverAxis:function(f,e,g){return(f>e)&&(f<(e+g))},isOver:function(j,f,i,h,e,g){return a.ui.isOverAxis(j,i,e)&&a.ui.isOverAxis(f,h,g)}})})(jQuery);/*! + * jQuery UI Widget 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,d){if(b.cleanData){var c=b.cleanData;b.cleanData=function(f){for(var g=0,h;(h=f[g])!=null;g++){try{b(h).triggerHandler("remove")}catch(j){}}c(f)}}else{var a=b.fn.remove;b.fn.remove=function(e,f){return this.each(function(){if(!f){if(!e||b.filter(e,[this]).length){b("*",this).add([this]).each(function(){try{b(this).triggerHandler("remove")}catch(g){}})}}return a.call(b(this),e,f)})}}b.widget=function(f,h,e){var g=f.split(".")[0],j;f=f.split(".")[1];j=g+"-"+f;if(!e){e=h;h=b.Widget}b.expr[":"][j]=function(k){return !!b.data(k,f)};b[g]=b[g]||{};b[g][f]=function(k,l){if(arguments.length){this._createWidget(k,l)}};var i=new h();i.options=b.extend(true,{},i.options);b[g][f].prototype=b.extend(true,i,{namespace:g,widgetName:f,widgetEventPrefix:b[g][f].prototype.widgetEventPrefix||f,widgetBaseClass:j},e);b.widget.bridge(f,b[g][f])};b.widget.bridge=function(f,e){b.fn[f]=function(i){var g=typeof i==="string",h=Array.prototype.slice.call(arguments,1),j=this;i=!g&&h.length?b.extend.apply(null,[true,i].concat(h)):i;if(g&&i.charAt(0)==="_"){return j}if(g){this.each(function(){var k=b.data(this,f),l=k&&b.isFunction(k[i])?k[i].apply(k,h):k;if(l!==k&&l!==d){j=l;return false}})}else{this.each(function(){var k=b.data(this,f);if(k){k.option(i||{})._init()}else{b.data(this,f,new e(i,this))}})}return j}};b.Widget=function(e,f){if(arguments.length){this._createWidget(e,f)}};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(f,g){b.data(g,this.widgetName,this);this.element=b(g);this.options=b.extend(true,{},this.options,this._getCreateOptions(),f);var e=this;this.element.bind("remove."+this.widgetName,function(){e.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(f,g){var e=f;if(arguments.length===0){return b.extend({},this.options)}if(typeof f==="string"){if(g===d){return this.options[f]}e={};e[f]=g}this._setOptions(e);return this},_setOptions:function(f){var e=this;b.each(f,function(g,h){e._setOption(g,h)});return this},_setOption:function(e,f){this.options[e]=f;if(e==="disabled"){this.widget()[f?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",f)}return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(e,f,g){var j,i,h=this.options[e];g=g||{};f=b.Event(f);f.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase();f.target=this.element[0];i=f.originalEvent;if(i){for(j in i){if(!(j in f)){f[j]=i[j]}}}this.element.trigger(f,g);return !(b.isFunction(h)&&h.call(this.element[0],f,g)===false||f.isDefaultPrevented())}}})(jQuery);/*! + * jQuery UI Mouse 1.8.18 + * + * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Mouse + * + * Depends: + * jquery.ui.widget.js + */ +(function(b,c){var a=false;b(document).mouseup(function(d){a=false});b.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var d=this;this.element.bind("mousedown."+this.widgetName,function(e){return d._mouseDown(e)}).bind("click."+this.widgetName,function(e){if(true===b.data(e.target,d.widgetName+".preventClickEvent")){b.removeData(e.target,d.widgetName+".preventClickEvent");e.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(f){if(a){return}(this._mouseStarted&&this._mouseUp(f));this._mouseDownEvent=f;var e=this,g=(f.which==1),d=(typeof this.options.cancel=="string"&&f.target.nodeName?b(f.target).closest(this.options.cancel).length:false);if(!g||d||!this._mouseCapture(f)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){e.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(f)&&this._mouseDelayMet(f)){this._mouseStarted=(this._mouseStart(f)!==false);if(!this._mouseStarted){f.preventDefault();return true}}if(true===b.data(f.target,this.widgetName+".preventClickEvent")){b.removeData(f.target,this.widgetName+".preventClickEvent")}this._mouseMoveDelegate=function(h){return e._mouseMove(h)};this._mouseUpDelegate=function(h){return e._mouseUp(h)};b(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);f.preventDefault();a=true;return true},_mouseMove:function(d){if(b.browser.msie&&!(document.documentMode>=9)&&!d.button){return this._mouseUp(d)}if(this._mouseStarted){this._mouseDrag(d);return d.preventDefault()}if(this._mouseDistanceMet(d)&&this._mouseDelayMet(d)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,d)!==false);(this._mouseStarted?this._mouseDrag(d):this._mouseUp(d))}return !this._mouseStarted},_mouseUp:function(d){b(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;if(d.target==this._mouseDownEvent.target){b.data(d.target,this.widgetName+".preventClickEvent",true)}this._mouseStop(d)}return false},_mouseDistanceMet:function(d){return(Math.max(Math.abs(this._mouseDownEvent.pageX-d.pageX),Math.abs(this._mouseDownEvent.pageY-d.pageY))>=this.options.distance)},_mouseDelayMet:function(d){return this.mouseDelayMet},_mouseStart:function(d){},_mouseDrag:function(d){},_mouseStop:function(d){},_mouseCapture:function(d){return true}})})(jQuery);(function(c,d){c.widget("ui.resizable",c.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000},_create:function(){var f=this,k=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(k.aspectRatio),aspectRatio:k.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:k.helper||k.ghost||k.animate?k.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){this.element.wrap(c('
').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=k.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var l=this.handles.split(",");this.handles={};for(var g=0;g
');if(/sw|se|ne|nw/.test(j)){h.css({zIndex:++k.zIndex})}if("se"==j){h.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[j]=".ui-resizable-"+j;this.element.append(h)}}this._renderAxis=function(q){q=q||this.element;for(var n in this.handles){if(this.handles[n].constructor==String){this.handles[n]=c(this.handles[n],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var o=c(this.handles[n],this.element),p=0;p=/sw|ne|nw|se|n|s/.test(n)?o.outerHeight():o.outerWidth();var m=["padding",/ne|nw|n/.test(n)?"Top":/se|sw|s/.test(n)?"Bottom":/^e$/.test(n)?"Right":"Left"].join("");q.css(m,p);this._proportionallyResize()}if(!c(this.handles[n]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!f.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}f.axis=i&&i[1]?i[1]:"se"}});if(k.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){if(k.disabled){return}c(this).removeClass("ui-resizable-autohide");f._handles.show()},function(){if(k.disabled){return}if(!f.resizing){c(this).addClass("ui-resizable-autohide");f._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var e=function(g){c(g).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){e(this.element);var f=this.element;f.after(this.originalElement.css({position:f.css("position"),width:f.outerWidth(),height:f.outerHeight(),top:f.css("top"),left:f.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);e(this.originalElement);return this},_mouseCapture:function(f){var g=false;for(var e in this.handles){if(c(this.handles[e])[0]==f.target){g=true}}return !this.options.disabled&&g},_mouseStart:function(g){var j=this.options,f=this.element.position(),e=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(e.is(".ui-draggable")||(/absolute/).test(e.css("position"))){e.css({position:"absolute",top:f.top,left:f.left})}this._renderProxy();var k=b(this.helper.css("left")),h=b(this.helper.css("top"));if(j.containment){k+=c(j.containment).scrollLeft()||0;h+=c(j.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:k,top:h};this.size=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalSize=this._helper?{width:e.outerWidth(),height:e.outerHeight()}:{width:e.width(),height:e.height()};this.originalPosition={left:k,top:h};this.sizeDiff={width:e.outerWidth()-e.width(),height:e.outerHeight()-e.height()};this.originalMousePosition={left:g.pageX,top:g.pageY};this.aspectRatio=(typeof j.aspectRatio=="number")?j.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var i=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",i=="auto"?this.axis+"-resize":i);e.addClass("ui-resizable-resizing");this._propagate("start",g);return true},_mouseDrag:function(e){var h=this.helper,g=this.options,m={},q=this,j=this.originalMousePosition,n=this.axis;var r=(e.pageX-j.left)||0,p=(e.pageY-j.top)||0;var i=this._change[n];if(!i){return false}var l=i.apply(this,[e,r,p]),k=c.browser.msie&&c.browser.version<7,f=this.sizeDiff;this._updateVirtualBoundaries(e.shiftKey);if(this._aspectRatio||e.shiftKey){l=this._updateRatio(l,e)}l=this._respectSize(l,e);this._propagate("resize",e);h.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(l);this._trigger("resize",e,this.ui());return false},_mouseStop:function(h){this.resizing=false;var i=this.options,m=this;if(this._helper){var g=this._proportionallyResizeElements,e=g.length&&(/textarea/i).test(g[0].nodeName),f=e&&c.ui.hasScroll(g[0],"left")?0:m.sizeDiff.height,k=e?0:m.sizeDiff.width;var n={width:(m.helper.width()-k),height:(m.helper.height()-f)},j=(parseInt(m.element.css("left"),10)+(m.position.left-m.originalPosition.left))||null,l=(parseInt(m.element.css("top"),10)+(m.position.top-m.originalPosition.top))||null;if(!i.animate){this.element.css(c.extend(n,{top:l,left:j}))}m.helper.height(m.size.height);m.helper.width(m.size.width);if(this._helper&&!i.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",h);if(this._helper){this.helper.remove()}return false},_updateVirtualBoundaries:function(g){var j=this.options,i,h,f,k,e;e={minWidth:a(j.minWidth)?j.minWidth:0,maxWidth:a(j.maxWidth)?j.maxWidth:Infinity,minHeight:a(j.minHeight)?j.minHeight:0,maxHeight:a(j.maxHeight)?j.maxHeight:Infinity};if(this._aspectRatio||g){i=e.minHeight*this.aspectRatio;f=e.minWidth/this.aspectRatio;h=e.maxHeight*this.aspectRatio;k=e.maxWidth/this.aspectRatio;if(i>e.minWidth){e.minWidth=i}if(f>e.minHeight){e.minHeight=f}if(hl.width),s=a(l.height)&&i.minHeight&&(i.minHeight>l.height);if(h){l.width=i.minWidth}if(s){l.height=i.minHeight}if(t){l.width=i.maxWidth}if(m){l.height=i.maxHeight}var f=this.originalPosition.left+this.originalSize.width,p=this.position.top+this.size.height;var k=/sw|nw|w/.test(q),e=/nw|ne|n/.test(q);if(h&&k){l.left=f-i.minWidth}if(t&&k){l.left=f-i.maxWidth}if(s&&e){l.top=p-i.minHeight}if(m&&e){l.top=p-i.maxHeight}var n=!l.width&&!l.height;if(n&&!l.left&&l.top){l.top=null}else{if(n&&!l.top&&l.left){l.left=null}}return l},_proportionallyResize:function(){var k=this.options;if(!this._proportionallyResizeElements.length){return}var g=this.helper||this.element;for(var f=0;f');var e=c.browser.msie&&c.browser.version<7,g=(e?1:0),h=(e?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+h,height:this.element.outerHeight()+h,position:"absolute",left:this.elementOffset.left-g+"px",top:this.elementOffset.top-g+"px",zIndex:++i.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(g,f,e){return{width:this.originalSize.width+f}},w:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{left:i.left+f,width:g.width-f}},n:function(h,f,e){var j=this.options,g=this.originalSize,i=this.originalPosition;return{top:i.top+e,height:g.height-e}},s:function(g,f,e){return{height:this.originalSize.height+e}},se:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},sw:function(g,f,e){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[g,f,e]))},ne:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[g,f,e]))},nw:function(g,f,e){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[g,f,e]))}},_propagate:function(f,e){c.ui.plugin.call(this,f,[e,this.ui()]);(f!="resize"&&this._trigger(f,e,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});c.extend(c.ui.resizable,{version:"1.8.18"});c.ui.plugin.add("resizable","alsoResize",{start:function(f,g){var e=c(this).data("resizable"),i=e.options;var h=function(j){c(j).each(function(){var k=c(this);k.data("resizable-alsoresize",{width:parseInt(k.width(),10),height:parseInt(k.height(),10),left:parseInt(k.css("left"),10),top:parseInt(k.css("top"),10)})})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.parentNode){if(i.alsoResize.length){i.alsoResize=i.alsoResize[0];h(i.alsoResize)}else{c.each(i.alsoResize,function(j){h(j)})}}else{h(i.alsoResize)}},resize:function(g,i){var f=c(this).data("resizable"),j=f.options,h=f.originalSize,l=f.originalPosition;var k={height:(f.size.height-h.height)||0,width:(f.size.width-h.width)||0,top:(f.position.top-l.top)||0,left:(f.position.left-l.left)||0},e=function(m,n){c(m).each(function(){var q=c(this),r=c(this).data("resizable-alsoresize"),p={},o=n&&n.length?n:q.parents(i.originalElement[0]).length?["width","height"]:["width","height","top","left"];c.each(o,function(s,u){var t=(r[u]||0)+(k[u]||0);if(t&&t>=0){p[u]=t||null}});q.css(p)})};if(typeof(j.alsoResize)=="object"&&!j.alsoResize.nodeType){c.each(j.alsoResize,function(m,n){e(m,n)})}else{e(j.alsoResize)}},stop:function(e,f){c(this).removeData("resizable-alsoresize")}});c.ui.plugin.add("resizable","animate",{stop:function(i,n){var p=c(this).data("resizable"),j=p.options;var h=p._proportionallyResizeElements,e=h.length&&(/textarea/i).test(h[0].nodeName),f=e&&c.ui.hasScroll(h[0],"left")?0:p.sizeDiff.height,l=e?0:p.sizeDiff.width;var g={width:(p.size.width-l),height:(p.size.height-f)},k=(parseInt(p.element.css("left"),10)+(p.position.left-p.originalPosition.left))||null,m=(parseInt(p.element.css("top"),10)+(p.position.top-p.originalPosition.top))||null;p.element.animate(c.extend(g,m&&k?{top:m,left:k}:{}),{duration:j.animateDuration,easing:j.animateEasing,step:function(){var o={width:parseInt(p.element.css("width"),10),height:parseInt(p.element.css("height"),10),top:parseInt(p.element.css("top"),10),left:parseInt(p.element.css("left"),10)};if(h&&h.length){c(h[0]).css({width:o.width,height:o.height})}p._updateCache(o);p._propagate("resize",i)}})}});c.ui.plugin.add("resizable","containment",{start:function(f,r){var t=c(this).data("resizable"),j=t.options,l=t.element;var g=j.containment,k=(g instanceof c)?g.get(0):(/parent/.test(g))?l.parent().get(0):g;if(!k){return}t.containerElement=c(k);if(/document/.test(g)||g==document){t.containerOffset={left:0,top:0};t.containerPosition={left:0,top:0};t.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var n=c(k),i=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){i[p]=b(n.css("padding"+o))});t.containerOffset=n.offset();t.containerPosition=n.position();t.containerSize={height:(n.innerHeight()-i[3]),width:(n.innerWidth()-i[1])};var q=t.containerOffset,e=t.containerSize.height,m=t.containerSize.width,h=(c.ui.hasScroll(k,"left")?k.scrollWidth:m),s=(c.ui.hasScroll(k)?k.scrollHeight:e);t.parentData={element:k,left:q.left,top:q.top,width:h,height:s}}},resize:function(g,q){var t=c(this).data("resizable"),i=t.options,f=t.containerSize,p=t.containerOffset,m=t.size,n=t.position,r=t._aspectRatio||g.shiftKey,e={top:0,left:0},h=t.containerElement;if(h[0]!=document&&(/static/).test(h.css("position"))){e=p}if(n.left<(t._helper?p.left:0)){t.size.width=t.size.width+(t._helper?(t.position.left-p.left):(t.position.left-e.left));if(r){t.size.height=t.size.width/i.aspectRatio}t.position.left=i.helper?p.left:0}if(n.top<(t._helper?p.top:0)){t.size.height=t.size.height+(t._helper?(t.position.top-p.top):t.position.top);if(r){t.size.width=t.size.height*i.aspectRatio}t.position.top=t._helper?p.top:0}t.offset.left=t.parentData.left+t.position.left;t.offset.top=t.parentData.top+t.position.top;var l=Math.abs((t._helper?t.offset.left-e.left:(t.offset.left-e.left))+t.sizeDiff.width),s=Math.abs((t._helper?t.offset.top-e.top:(t.offset.top-p.top))+t.sizeDiff.height);var k=t.containerElement.get(0)==t.element.parent().get(0),j=/relative|absolute/.test(t.containerElement.css("position"));if(k&&j){l-=t.parentData.left}if(l+t.size.width>=t.parentData.width){t.size.width=t.parentData.width-l;if(r){t.size.height=t.size.width/t.aspectRatio}}if(s+t.size.height>=t.parentData.height){t.size.height=t.parentData.height-s;if(r){t.size.width=t.size.height*t.aspectRatio}}},stop:function(f,n){var q=c(this).data("resizable"),g=q.options,l=q.position,m=q.containerOffset,e=q.containerPosition,i=q.containerElement;var j=c(q.helper),r=j.offset(),p=j.outerWidth()-q.sizeDiff.width,k=j.outerHeight()-q.sizeDiff.height;if(q._helper&&!g.animate&&(/relative/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}if(q._helper&&!g.animate&&(/static/).test(i.css("position"))){c(this).css({left:r.left-e.left-m.left,width:p,height:k})}}});c.ui.plugin.add("resizable","ghost",{start:function(g,h){var e=c(this).data("resizable"),i=e.options,f=e.size;e.ghost=e.originalElement.clone();e.ghost.css({opacity:0.25,display:"block",position:"relative",height:f.height,width:f.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof i.ghost=="string"?i.ghost:"");e.ghost.appendTo(e.helper)},resize:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost){e.ghost.css({position:"relative",height:e.size.height,width:e.size.width})}},stop:function(f,g){var e=c(this).data("resizable"),h=e.options;if(e.ghost&&e.helper){e.helper.get(0).removeChild(e.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(e,m){var p=c(this).data("resizable"),h=p.options,k=p.size,i=p.originalSize,j=p.originalPosition,n=p.axis,l=h._aspectRatio||e.shiftKey;h.grid=typeof h.grid=="number"?[h.grid,h.grid]:h.grid;var g=Math.round((k.width-i.width)/(h.grid[0]||1))*(h.grid[0]||1),f=Math.round((k.height-i.height)/(h.grid[1]||1))*(h.grid[1]||1);if(/^(se|s|e)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f}else{if(/^(ne)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f}else{if(/^(sw)$/.test(n)){p.size.width=i.width+g;p.size.height=i.height+f;p.position.left=j.left-g}else{p.size.width=i.width+g;p.size.height=i.height+f;p.position.top=j.top-f;p.position.left=j.left-g}}}}});var b=function(e){return parseInt(e,10)||0};var a=function(e){return !isNaN(parseInt(e,10))}})(jQuery);/*! + * jQuery hashchange event - v1.3 - 7/21/2010 + * http://benalman.com/projects/jquery-hashchange-plugin/ + * + * Copyright (c) 2010 "Cowboy" Ben Alman + * Dual licensed under the MIT and GPL licenses. + * http://benalman.com/about/license/ + */ +(function($,e,b){var c="hashchange",h=document,f,g=$.event.special,i=h.documentMode,d="on"+c in e&&(i===b||i>7);function a(j){j=j||location.href;return"#"+j.replace(/^[^#]*#?(.*)$/,"$1")}$.fn[c]=function(j){return j?this.bind(c,j):this.trigger(c)};$.fn[c].delay=50;g[c]=$.extend(g[c],{setup:function(){if(d){return false}$(f.start)},teardown:function(){if(d){return false}$(f.stop)}});f=(function(){var j={},p,m=a(),k=function(q){return q},l=k,o=k;j.start=function(){p||n()};j.stop=function(){p&&clearTimeout(p);p=b};function n(){var r=a(),q=o(m);if(r!==m){l(m=r,q);$(e).trigger(c)}else{if(q!==m){location.href=location.href.replace(/#.*/,"")+q}}p=setTimeout(n,$.fn[c].delay)}$.browser.msie&&!d&&(function(){var q,r;j.start=function(){if(!q){r=$.fn[c].src;r=r&&r+a();q=$(' + + +
+
+
known_16bit_timers.h
+
+
+
1 #ifndef known_16bit_timers_header_
2 #define known_16bit_timers_header_
3 /*
4 Part of TimerOne library, modified by Paul S. for Teensy boards.
5 TB2012 added Leonardo section.
6 */
7 
8 // Wiring-S
9 //
10 #if defined(__AVR_ATmega644P__) && defined(WIRING)
11  #define TIMER1_A_PIN 5
12  #define TIMER1_B_PIN 4
13  #define TIMER1_ICP_PIN 6
14 
15 
16 // Teensy 2.0
17 //
18 #elif defined(__AVR_ATmega32U4__) && defined(CORE_TEENSY)
19  #define TIMER1_A_PIN 14
20  #define TIMER1_B_PIN 15
21  #define TIMER1_C_PIN 4
22  #define TIMER1_ICP_PIN 22
23  #define TIMER1_CLK_PIN 11
24  #define TIMER3_A_PIN 9
25  #define TIMER3_ICP_PIN 10
26 
27 
28 // Leonardo - Make sure this is after the (__AVR_ATmega32U4__) && defined(CORE_TEENSY) entry
29  #elif defined(__AVR_ATmega32U4__)
30  #define TIMER1_A_PIN 9
31  #define TIMER1_B_PIN 10
32  #define TIMER1_C_PIN 11
33 
34 
35 // Teensy++ 2.0
36 #elif defined(__AVR_AT90USB1286__) && defined(CORE_TEENSY)
37  #define TIMER1_A_PIN 25
38  #define TIMER1_B_PIN 26
39  #define TIMER1_C_PIN 27
40  #define TIMER1_ICP_PIN 4
41  #define TIMER1_CLK_PIN 6
42  #define TIMER3_A_PIN 16
43  #define TIMER3_B_PIN 15
44  #define TIMER3_C_PIN 14
45  #define TIMER3_ICP_PIN 17
46  #define TIMER3_CLK_PIN 13
47 
48 
49 // Arduino Mega
50 //
51 #elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
52  #define TIMER1_A_PIN 11
53  #define TIMER1_B_PIN 12
54  #define TIMER1_C_PIN 13
55  #define TIMER3_A_PIN 5
56  #define TIMER3_B_PIN 2
57  #define TIMER3_C_PIN 3
58  #define TIMER4_A_PIN 6
59  #define TIMER4_B_PIN 7
60  #define TIMER4_C_PIN 8
61  #define TIMER4_ICP_PIN 49
62  #define TIMER5_A_PIN 46
63  #define TIMER5_B_PIN 45
64  #define TIMER5_C_PIN 44
65  #define TIMER3_ICP_PIN 48
66  #define TIMER3_CLK_PIN 47
67 
68 
69 // Arduino Uno, Duemilanove, LilyPad, etc
70 //
71 #elif defined (__AVR_ATmega168__) || defined (__AVR_ATmega328P__)
72  #define TIMER1_A_PIN 9
73  #define TIMER1_B_PIN 10
74  #define TIMER1_ICP_PIN 8
75  #define TIMER1_CLK_PIN 5
76 
77 
78 // Sanguino
79 //
80 #elif defined(__AVR_ATmega644P__) || defined(__AVR_ATmega644__)
81  #define TIMER1_A_PIN 13
82  #define TIMER1_B_PIN 12
83  #define TIMER1_ICP_PIN 14
84  #define TIMER1_CLK_PIN 1
85 
86 #endif
87 
88 #endif
+ + + + + diff --git a/extras/doc/html/meta_8h_source.html b/extras/doc/html/meta_8h_source.html new file mode 100644 index 000000000..3885afa82 --- /dev/null +++ b/extras/doc/html/meta_8h_source.html @@ -0,0 +1,112 @@ + + + + + + + +Mozzi: meta.h Source File + + + + + + + + + + + + + + + + +
+
+
+ + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+ + + + + +
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
meta.h
+
+
+
1 /*
2 http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Int-To-Type
3 Template meta-programming extras.
4 */
5 
6 #ifndef META_H_
7 #define META_H_
8 
9 
19 template <int I>
20 struct Int2Type
21 {
22  enum {
23  value = I };
24 };
25 
26 
27 /*
28 //from http://en.wikibooks.org/wiki/C%2B%2B_Programming/Templates/Template_Meta-Programming#Compile-time_programming
29 
30 //First, the general (unspecialized) template says that factorial<n>::value is given by n*factorial<n-1>::value:
31 template <unsigned n>
32 struct factorial
33 {
34  enum { value = n * factorial<n-1>::value };
35 };
36 
37 
38 //Next, the specialization for zero says that factorial<0>::value evaluates to 1:
39 template <>
40 struct factorial<0>
41 {
42  enum { value = 1 };
43 };
44 
45 
46 //And now some code that "calls" the factorial template at compile-time:
47 // Because calculations are done at compile-time, they can be
48 // used for things such as array sizes, eg.
49 // int array[ factorial<7>::value ];
50 
51 */
52 
53 #endif /* META_H_ */
Enables you to instantiate a template based on an integer value.
Definition: meta.h:20
+
+
+ + + + diff --git a/extras/doc/html/modules.html b/extras/doc/html/modules.html new file mode 100644 index 000000000..68001ed67 --- /dev/null +++ b/extras/doc/html/modules.html @@ -0,0 +1,121 @@ + + + + + + + +Mozzi: Modules + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
Modules
+
+
+
Here is a list of all modules:
+ + + + + + + + +
 CoreCore definitions and functions
 AnalogEfficient analog input functions for sensors and audio
 FixmathFixed point fractional number types and conversion routines
 MidiMidi note number to frequency conversions
 RandomFast random number generator functions
 UtilUtility functions
 SoundtablesLook-up-tables and python scripts to generate tables or convert sounds
+
+
+
+ + + + diff --git a/extras/doc/html/modules.js b/extras/doc/html/modules.js new file mode 100644 index 000000000..491f65a99 --- /dev/null +++ b/extras/doc/html/modules.js @@ -0,0 +1,10 @@ +var modules = +[ + [ "Core", "group__core.html", "group__core" ], + [ "Analog", "group__analog.html", "group__analog" ], + [ "Fixmath", "group__fixmath.html", "group__fixmath" ], + [ "Midi", "group__midi.html", "group__midi" ], + [ "Random", "group__random.html", "group__random" ], + [ "Util", "group__util.html", "group__util" ], + [ "Soundtables", "group__soundtables.html", null ] +]; \ No newline at end of file diff --git a/extras/doc/html/mozzi-circle.png b/extras/doc/html/mozzi-circle.png new file mode 100644 index 0000000000000000000000000000000000000000..90b431eda5d768a3d2fc30e8827863e432fc0ee8 GIT binary patch literal 5915 zcmV+$7v$)PP)EX>4Tx04UF6U|=$Eba8TJ5@2A+%_}Jia(7aQh>TKTzreu3z|A1cV9a2hm|R@o z7!csY00epYd8rH-;M+9@Mi6~j7i1O#X@D!apr`~${{dp7l+@y61_nk0AUnIfqyQ++ zI0wiUNy-MZH-OkhAwkYS_7NbPFCD_Z0%9jY*iS(0BA_RL>@Oho>0mY!2iP14TL#1~ zNv#0c%ix?}P+63jo>8J;WME*R;Fyx1l&TP1SzMBuTdd%jmz-ZzkYAKol9~ck3vnM9 z2tpKsLQKQZ($Yecfyw|B4-nSpKydgnik(4-AwY6zQ5lrU$Ye~Ik1%771OtQrQU(T= zKL|0CUIvB*It&c_QxRfnh71e>`V0*F<^TZ0uTXD#F&sbu000JJOGiWi#{kFxwT8hD zPXGV_32;bRa{vGf6951U69E94oEQKA00(qQO+^RY2LcNRChJ5^5dZ)cbxA})RCwCm zoqM=kRe8pLduG-;2}A^t+OK-vhu? zz>lqoFI9g^dSB*0KT*I$6D$=apkz%vmS)Koz-ho=OEpbla$5$x1Y8DOU`_mVnk8jP zOKqa0C7J*b)(#}ik}1Gu8uUKFM3e&wn5em*<2sqT&cb{8q+I7LS!7RHSuVgB|8BB0(?M!u4?cR z!`#FKop_EqJpHOB#DTCQ-F&Eb~OmQYynJb^VvG^QETF_hjTD#fCQ_-gE1Yr9GDYu|7Zw-sL6P*0ImRT1bz?v zF#u!(jb)b>jLbWc*8?Y56R(gOtM#M8qJF>#*v3|(iQBdDk|)zZR|BW;Z#0oFHZ#m= zmdpa~k&o0)%9jB9TN5vBG(Q8kA$m|r4}Tl56nMiBN<}EC|1WjAzBTc;fz`gRdEK98 zNyVD@Vc_||!*BJB8NlK+OLhsg#^8;*@3^>lEzOd>fM1BW7cp@+Xaf4x#kBy4rNG6& zR@TH{0aEGv%^no7(y97t z3y6=>N=^7RbEg){TMHq}`;z z;#eQ{Yz(+N&62G(cO4n}QoGJc+`ON0nd(oQsi@Q+v86!Qd)qiu-`UG}eXQ$^ z8Vfy3NG?!_`1_nDs-sYq1#AeMX-#}NurhGGo)Im64mb|@5b&&k0GCMWJIE(cvNTJ+ z1iXd*BGdkJN2FPDV)$A!Nr_r?%uB*7VBvryBeW5bjPl9Af5|X@7Z)wQ!kYNleEh86 zFhz^8?;<-kt>E#!0hcZwYu4{l3+b?OoPNOI6G)LdxxFNz0-PlKfQSTQO_k7}C<=_6 ze&4%5FhWxDLsh#>@f5r*AVF4aG|iIvLbb}^Ln7W@tkUnl7t=Zf_(`Ca#;l2JMM_0r zJIYEkA6@X+N?LGlNwefkYvMJ{SXb1-Q{7Q3(-iD;G;5ijb&R600DAyG_h1boj~(R6 z%htrzG)w*oIG@3!4#va~cTnc>Wxi3V1@${$v~4252p7kjfM4t1N6IfT%|yH)P$Hl% zKkIx29tV-fso=7w^V`~xTxeupsfvkg9+0g9ox4Mm#Zp-FG*|ZWQW1qgmn0pTX36X@ zoD(9JXD$}_M<%`!!~?Ps@Sr4Rp87O4Ajtri|4-8_c|Wj!L4ndv+9_$4+#^+8qd|?-&hm+T9h_8O>Nv_t$ELW1 ze=5~AQ7w}+B*077#2-nsWW-kt7R{!BveeYp3M9^A-QtBTh}SJsgkU9b2F2Bt`DbjY zXVihZ2gFmpZvh|Hsx1u|fCa#_as;OX@7L=qfo*;Dc{j#9kfd_pJB8KkWvxikEIAhV z0xs_o7G&3DTOR|C1(sM7Kd*wn^?{$_iXi%pT=)fWu{H6>ecz(Mu+`Hnc}5R2Onmby zVhymjHSwZu5<9v0+lV#s8ogfedqL7HnF^eUEArk#&kKpoDpBsUtch<#ZENEe_vL@ch_rDStwi5)#Ao#am4a*ghm>Rt9|K<&tvzpQKsx z4Sml}X_h=7b@(aZ&4F$3U@Vfve%YG%sWeLtOS9x_0?#j&mw>kepO(Y=%L3F^88B&< z>}O4UTbd=~#ss%R$qZ=amw_Jvr)yN1d!*8#ih$G4*!IA}jp z0P$Mf#+_Y(v*aKAdC+&SzNe{=pTH%=K7dOB^kZ*JQiFem%QdZ~z0>884T{b_0sJSh zg*EXV*2LG#X3PLi#T6t}BrP`Y5Oz8^sV2Y8Ax{V%z*V2j2BujP?+@Ii34R!tmOe26 z!}q-$EEF$M-<0h;Tm8-YoTI(dEZM}Gc@IL#oS(yhi~4Mn-!dP2}68ZZhEPG)rodk`r)Aq;8(+KYO*nF?~|v8S2AY z#AgiH*LYsKyDkx*DZ2Scnk82P3#^GR04`7>XHge4Hp;Q8RlxDM($GKXxt9u%opO^} z3+z`TyB7s2H!t;7N!@l*XCI)qs?9ns1G)onZ=~I>-;*92gfU-<%kW*qcy(jGv~z{% z{BwB>V9zdfV;V39WkuI1rb0Y-jv_E+^?}YvPYKkc4$ST@?<@0sa;EpnQjotcjPY z^5oA%R~IT^IL5kp`lyB7n<8mG9yqVfL_aB&d=0KZJL&W}LC zZ5utiM7sY_V4E~c)(@khif4tjy0w5=&BPU^jRIr(Y=%ph`T*XGj3>YRujsd+^r+zK-&5!%>O?{|7?A%l68HfjKwbwY z3f8?>0Y!jMMxhZ2){R!nk`GBhJ%n0WDNJoeSd_jKKu_{MdX+$<{IEQg}KMV%5}Aooc?d-L%gJD z?92kkQ5FTh5Ld)U8_zxpR9+Q0T>jA}xMIK)^LhC+FR+mTsLL z1lYpDg1S%H1_>o=O}r}2l6UHJ&D2Is)b{td&6`CwFNH?|pYIY(-`)ef4_9@vNMpG_ z@Xy{ls1p@DAUBC#dPY+gecU-96Dh7B?rQzqnr6w)K_1-#Tc%m^S>RsQJ&&Z3-?O5} z;AFd2(HKs~6@B-*B_qNm>=D4U^fBPD9w^V6f=wkOvNXiyx1QnX7mg$Ka$8V zcwg}O1=hsx7Q?z9*ezgJriGp_E26uLsOlh?V-;8EJx9{gk6o$<6nY+TK&fD<2xC-B zbCl31wlqU4<9YpUw!jDr9)2Y-<_e6}jBl)LH9#+wg8;*;EhC@lR>t?e_iC3a!ROBb z_NWx7o}!%2d{lJy5vh^uaHTz$;1X2%{omfki~`@#YhRUwP3=O*S920Gi1tC?O5lHk zD0b8b$ZO}aQUDmELV7u_XyHlu6KCPhIxOK*o|_7wZKZljO+qcVSQ9^zX34?0ymhHV zRZ`I;9X>$T7`D^JoUUr4O1o0^l^mzGZonmoVDKjpd1r2S_3?2<#z?fl$`$e^}fs6e9tDpN0_`LXV;UIT&O;D3rZQ)6qIn$(FHw-*X_WU z6%g!4R3E|RO%7?Yaw^i%%Nvk`D4^6^GI^~Ie8!r1z6edFhxu3pjQaA+g&ls#^ZRdT zBIgBx#BNo^s8+^N3J7-c{;PuL)B_26n&QLl-O_#1EI9{PBi)PrxXqe4_2T_-2Z*kg zp*}`Zb#g%edKth7E{uH$F6mTl^O-Gi+rWM%M&&*G)wn{6jVBQhUod`-`u1=a3pCPV zdoY~L2P7rCw(-i(#8rO0mB!V4-LR9Y0*#M$7z>JIv}fmDui^^DH)L{~4+q_g+uuL4 zi}_iiA4)1FSV`l0+Oa@_P6s|IFf#hzzka+N!D<)ZRc>If>Wm*!Gnvgx#4O-1fX_01 z=2tuIbB8tY@-$1|Zx#qu4RSqPu~~#Gl-{6+$!lc5QpKGPW_X**014iFqgMZNT-Dzhj8}#f(W+uZ%j9?TyAmrhhBFzi z76sCKA#PvF3k~L?3|#Mzm9-`&zv**(1?g^(v$qY!W#0VOuMg_GXA}T#Sx)7C3~mQl z5$##v>$nq+rU#nBS2Y?R^(grp4TR8QT$SAw0;66K7=F*iQhncy4rp$t{QZd`2g9qc z69b##Y5!Hes^6de6&^R|s{r3D3S4AP+UH63kRMS*h{H?VA*h6g;k=2#gW@CNr{cC* z8^!(}^UQJW9z&IFde8S!sjMOgSHj&pb(B^{y`VuNr*PO?Xj48fyL_&sd#!|!U!^*! zZB!m~kuAkVWRGY360o8Mxf`#XHXfbf9L7=j#9_R#L7{bs`&ns^cLR_ zPl(%-Vh=>~-?jJ^A{pL^eaM=4ewrmy{L$lW0SRo$8f^ubOMf*->rwn6%>KK!E+CvU zkt}Pj4#-*4?4+ZnhENVm&6@Zj+|Hqhi9hzQU0a!xm|+IwBwZ|1ZFLwzsRb^dCIh4Q-7NglATRICjlASv$L$Om(C*FPY6X%X6Y z;r7^#65N9~Ay7Kcdin})Nt~5(Z-JUtz@nCYNDwM5>7vPRv@?qtPH1wmm zVhb}Q(&0CQMzR?T{N&QHl-2(vxzGO?MjGEn?j9s=eDmmYU@&u-y1q=}#6 zX>kPn+M0L=+%bFUt4KQ50Q0ShcLtuypIB7H4L}27L;}SGS3=CkRY4Na!(q2CzJ}PJ z348-^syy#0z?wl^!4wSujC>5t@12+}`*N7x>Q8eRw$dH%Q~BKgkARD;iSN)j{M8z2jV-plAR^~Vwoas#lUPxr?w@S{KeM9AI5FK zxfqx9ADsjM^8V6lT(S8)U~BbpvHDEWwqn91q=nz&_YGEq2 + + + + + + +Mozzi: mozzi_analog.cpp Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_analog.cpp
+
+
+
1 /*
2  * mozzi_analog.cpp
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 
13 #include "mozzi_config.h"
14 #include "mozzi_analog.h"
15 #include "Stack.h"
16 //#include "mozzi_utils.h"
17 
18 // required from http://github.com/pedvide/ADC for Teensy 3.1
19 // This is a hacky way to access the ADC library, otherwise ADC.h has to be included at the top of every Arduino sketch.
20 /*#if defined(__MK20DX128__) || defined(__MK20DX256__)
21 #include "../ADC/ADC_Module.cpp"
22 #include "../ADC/ADC.cpp"
23 #endif
24 */
25 
26 void setupFastAnalogRead(int8_t speed)
27 {
28 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
29 #else
30  if (speed == FAST_ADC){ // divide by 16
31  ADCSRA |= (1 << ADPS2);
32  ADCSRA &= ~(1 << ADPS1);
33  ADCSRA &= ~(1 << ADPS0);
34  } else if(speed == FASTER_ADC){ // divide by 8
35  ADCSRA &= ~(1 << ADPS2);
36  ADCSRA |= (1 << ADPS1);
37  ADCSRA |= (1 << ADPS0);
38  } else if(speed == FASTEST_ADC){ // divide by 4
39  ADCSRA &= ~(1 << ADPS2);
40  ADCSRA |= (1 << ADPS1);
41  ADCSRA &= ~(1 << ADPS0);
42  }
43 #endif
44 }
45 
46 
47 /*
48 void adcEnableInterrupt(){
49  ADCSRA |= (1 << ADIE);
50 }
51 */
52 
53 
54 void setupMozziADC(int8_t speed) {
55  #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
56  adc = new ADC();
57  adc->enableInterrupts(ADC_0);
58 #else
59  ADCSRA |= (1 << ADIE); // adc Enable Interrupt
60  setupFastAnalogRead(speed);
62 #endif
63 }
64 
65 
66 void disconnectDigitalIn(uint8_t channel_num){
67  #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
68 #else
69  DIDR0 |= 1<<channel_num;
70  #endif
71 }
72 
73 
74 void reconnectDigitalIn(uint8_t channel_num){
75  #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
76 #else
77  DIDR0 &= ~(1<<channel_num);
78  #endif
79 }
80 
81 
83  #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
84 #else
85  for (uint8_t i = 0; i<NUM_ANALOG_INPUTS; i++){
86  DIDR0 |= 1<<i;
87  }
88  #endif
89 }
90 
91 
93  #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
94 #else
95  for (uint8_t i = 0; i<NUM_ANALOG_INPUTS; i++){
96  DIDR0 &= ~(1<<i);
97  }
98  #endif
99 }
100 
101 
102 uint8_t adcPinToChannelNum(uint8_t pin) {
103 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
104 
105 #else
106 #if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)
107  if (pin >= 54) pin -= 54; // allow for channel or pin numbers
108 #elif defined(__AVR_ATmega32U4__)
109  if (pin >= 18) pin -= 18; // allow for channel or pin numbers
110  pin = analogPinToChannel(pin); // moved from extra #if which was below in Arduino code, and redefined in mozzi_analog.h, with notes
111 #elif defined(__AVR_ATmega1284__)
112  if (pin >= 24) pin -= 24; // allow for channel or pin numbers
113 #else
114  if (pin >= 14) pin -= 14; // allow for channel or pin numbers
115 #endif
116  #endif
117  return pin;
118 }
119 
120 
121 // assumes channel is correct, not pin number, pin number would be converted first with adcPinToChannelNum
122 static void adcSetChannel(uint8_t channel) {
123 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
124 // ADC library converts pin/channel each time in startSingleRead
125 #else
126 #if defined(__AVR_ATmega32U4__)
127  ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((channel >> 3) & 0x01) << MUX5);
128 #elif defined(ADCSRB) && defined(MUX5)
129  // the MUX5 bit of ADCSRB selects whether we're reading from channels
130  // 0 to 7 (MUX5 low) or 8 to 15 (MUX5 high).
131  ADCSRB = (ADCSRB & ~(1 << MUX5)) | (((channel >> 3) & 0x01) << MUX5);
132 #endif
133 
134  // set the analog reference (high two bits of ADMUX) and select the
135  // channel (low 4 bits). this also sets ADLAR (left-adjust result)
136  // to 0 (the default).
137 #if defined(ADMUX)
138  ADMUX = (1 << REFS0) | (channel & 0x07);
139 #endif
140 #endif
141 }
142 
143 
144 
145 
146 
147 // basically analogRead() chopped in half so the ADC conversion
148 // can be started here and received by another function.
149 void adcStartConversion(uint8_t channel) {
150 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
151  teensy_pin = channel; // remember for second startSingleRead
152  adc->startSingleRead(teensy_pin); // channel/pin gets converted every time in startSingleRead
153 #else
154  adcSetChannel(channel);
155 #if defined(ADCSRA) && defined(ADCL)
156  // start the conversion
157  ADCSRA |= (1 << ADSC);
158 #endif
159 #endif
160 }
161 
162 
163 
164 /*
165 The code below was informed initially by a discussion between
166 jRaskell, bobgardner, theusch, Koshchi, and code by jRaskell.
167 http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&p=789581
168 */
169 
170 
171 static volatile int analog_readings[NUM_ANALOG_INPUTS];
172 static Stack <volatile int8_t,NUM_ANALOG_INPUTS> adc_channels_to_read;
173 volatile static int8_t current_channel = -1; // volatile because accessed in control and adc ISRs
174 static bool first = true;
175 
176 
177 /* Called each time in updateControlWithAutoADC(), after updateControl()
178 */
179 void adcStartReadCycle(){
180  if (current_channel == -1) // last read of adc_channels_to_read stack was empty, ie. all channels from last time have been read
181  {
182 #if (USE_AUDIO_INPUT == true)
183  adc_channels_to_read.push(AUDIO_INPUT_PIN); // for audio
184 #else
185  adcReadSelectedChannels();
186  first = true;
187 #endif
188  }
189 }
190 
191 
192 
193 /* gets the next channel to read off the stack, and if there is a channel there, it changes to that channel and startsa conversion.
194 */
195 void adcReadSelectedChannels() {
196  current_channel = adc_channels_to_read.pop();
197  if(current_channel != -1) adcStartConversion(current_channel);
198 }
199 
200 
201 
202 int mozziAnalogRead(uint8_t pin) {
203 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
204 // ADC lib converts pin/channel in startSingleRead
205 #else
206  pin = adcPinToChannelNum(pin); // allow for channel or pin numbers
207 #endif
208  adc_channels_to_read.push(pin);
209  return analog_readings[pin];
210 }
211 
212 
213 /*
214 void receiveFirstControlADC(){
215  // do nothing
216 }
217 */
218 
219 
220 void startSecondControlADC() {
221 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
222  adc->startSingleRead(teensy_pin);
223 #else
224  ADCSRA |= (1 << ADSC); // start a second conversion on the current channel
225 #endif
226 }
227 
228 
229 void receiveSecondControlADC(){
230 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
231  analog_readings[current_channel] = adc->readSingle();
232 #else
233  analog_readings[current_channel] = ADC; // officially (ADCL | (ADCH << 8)) but the compiler works it out
234 #endif
235 }
236 
237 
238 /* This interrupt handler cycles through all analog inputs on the adc_channels_to_read Stack,
239 doing 2 conversions on each channel but only keeping the second conversion each time,
240 because the first conversion after changing channels is often inaccurate (on atmel-based arduinos).
241 
242 The version for USE_AUDIO_INPUT==true is in MozziGuts.cpp... compilation reasons...
243 */
244 #if(USE_AUDIO_INPUT==false)
245 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
246 void adc0_isr(void)
247 #else
248 ISR(ADC_vect, ISR_BLOCK)
249 #endif
250 {
251  if (first)
252  {
253  //<1us
254  startSecondControlADC();
255  first=false;
256  }
257  else
258  {
259  // 3us
260  receiveSecondControlADC();
261  adcReadSelectedChannels();
262  first=true;
263  }
264 }
265 #endif
266 
A simple stack, used internally for keeping track of analog input channels as they are read...
Definition: Stack.h:18
+
T pop()
Get the item on top of the stack.
Definition: Stack.h:45
+
int mozziAnalogRead(uint8_t pin)
Reads the analog input of a chosen channel, without blocking other operations from running...
+
void adcReconnectAllDigitalIns()
Reconnect the digital input buffers for analog input channels which have been set for analog input wi...
+
void push(T item)
Put an item on the stack.
Definition: Stack.h:34
+
#define AUDIO_INPUT_PIN
This sets which analog input channel to use for audio input, if you have #define USE_AUDIO_INPUT true...
Definition: mozzi_config.h:83
+
void reconnectDigitalIn(uint8_t channel_num)
Reconnect the digital input buffer for an analog input channel which has been set for analog input wi...
+
void disconnectDigitalIn(uint8_t channel_num)
Prepare an analog input channel by turning off its digital input buffer.
+
void setupFastAnalogRead(int8_t speed)
This is automatically called in startMozzi.
+
void adcDisconnectAllDigitalIns()
Prepare all analog input channels by turning off their digital input buffers.
+
+
+ + + + diff --git a/extras/doc/html/mozzi__analog_8h_source.html b/extras/doc/html/mozzi__analog_8h_source.html new file mode 100644 index 000000000..a732553d1 --- /dev/null +++ b/extras/doc/html/mozzi__analog_8h_source.html @@ -0,0 +1,117 @@ + + + + + + + +Mozzi: mozzi_analog.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_analog.h
+
+
+
1 /*
2  * mozzi_analog.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef MOZZI_ANALOG_H_
13 #define MOZZI_ANALOG_H_
14 
15  #if ARDUINO >= 100
16  #include "Arduino.h"
17 #else
18  #include "WProgram.h"
19 #endif
20 
21 // required from http://github.com/pedvide/ADC for Teensy 3.1
22 #if defined(__MK20DX128__) || defined(__MK20DX256__)
23 #include <ADC.h>
24 #endif
25 
26 
27 // these are declared in Mozziguts.cpp, and used in mozzi_analog.cpp... crazy but it compiles
28 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
29  extern ADC *adc; // adc object
30  extern uint8_t teensy_pin;
31 #endif
32 
33 #if (USE_AUDIO_INPUT==true)
34 #warning "Using AUDIO_INPUT_PIN defined in mozzi_config.h for audio input."
35 #endif
36 
37 
38 
39 void adcReadSelectedChannels();
40 //void receiveFirstControlADC();
41 void startSecondControlADC();
42 void receiveSecondControlADC();
43 
44 // hack for Teensy 2 (ATmega32U4), which has "adc_mapping" instead of "analog_pin_to_channel_PGM"
45 #if defined(__AVR_ATmega32U4__) && defined(CORE_TEENSY)
46 //pasted from hardware/arduino/variants/leonardo/pins_arduino.h, doesn't work as of mozzi 0.01.2a
47 // __AVR_ATmega32U4__ has an unusual mapping of pins to channels
48 //extern const uint8_t PROGMEM analog_pin_to_channel_PGM[];
49 //#define analogPinToChannel(P) ( pgm_read_byte( analog_pin_to_channel_PGM + (P) ) )
50 
51 // look at Arduino.app/Contents/Resources/Java/hardware/teensy/cores/teensy/pins_teensy.c - analogRead
52 // adc_mapping is already declared in pins_teensy.c, but it's static there so we can't access it
53 static const uint8_t PROGMEM adc_mapping[] = {
54 // 0, 1, 4, 5, 6, 7, 13, 12, 11, 10, 9, 8
55  0, 1, 4, 5, 6, 7, 13, 12, 11, 10, 9, 8, 10, 11, 12, 13, 7, 6, 5, 4, 1, 0, 8
56 };
57 #define analogPinToChannel(P) ( pgm_read_byte( adc_mapping + (P) ) )
58 #endif
59 
60 
61 // include this although already in teensy 3 analog.c, because it is static there
62 #if defined(__MK20DX128__)
63 static const uint8_t channel2sc1a[] = {
64  5, 14, 8, 9, 13, 12, 6, 7, 15, 4,
65  0, 19, 3, 21, 26, 22, 23
66 };
67 #elif defined(__MK20DX256__)
68 static const uint8_t channel2sc1a[] = {
69  5, 14, 8, 9, 13, 12, 6, 7, 15, 4,
70  0, 19, 3, 19+128, 26, 18+128, 23,
71  5+192, 5+128, 4+128, 6+128, 7+128, 4+192
72 // A15 26 E1 ADC1_SE5a 5+64
73 // A16 27 C9 ADC1_SE5b 5
74 // A17 28 C8 ADC1_SE4b 4
75 // A18 29 C10 ADC1_SE6b 6
76 // A19 30 C11 ADC1_SE7b 7
77 // A20 31 E0 ADC1_SE4a 4+64
78 };
79 #endif
80 
81 
82 // for setupFastAnalogRead()
83 enum ANALOG_READ_SPEED {FAST_ADC,FASTER_ADC,FASTEST_ADC};
84 
105 void setupFastAnalogRead(int8_t speed=FAST_ADC);
106 
107 
108 
109 /* @ingroup analog
110 Set up for asynchronous analog input, which enables analog reads to take
111 place in the background without blocking the processor.
112 @param speed FAST_ADC, FASTER_ADC or FASTEST_ADC. See setupFastAnalogRead();
113 */
114 void setupMozziADC(int8_t speed=FAST_ADC);
115 
116 
117 
141 void disconnectDigitalIn(uint8_t channel_num);
142 
143 
149 void reconnectDigitalIn(uint8_t channel_num);
150 
151 
157 
158 
164 
165 
166 
167 /* @ingroup analog
168 Starts an analog to digital conversion of the voltage on a specified channel. Unlike
169 Arduino's analogRead() function which waits until a conversion is complete before
170 returning, adcStartConversion() only sets the conversion to begin, so you can use
171 the cpu for other things and call for the result later with adcGetResult().
172 @param channel is the analog channel number (0 to ....), which is not necessarily the same as the pin number
173 Use adcPinToChannelNum() to convert the pin number to its channel number.
174 @note Timing: about 1us when used in updateControl() with CONTROL_RATE 64.
175 */
176 void adcStartConversion(uint8_t channel);
177 
178 
179 
188 int mozziAnalogRead(uint8_t pin);
189 
190 
191 /* Used in MozziGuts.cpp, in updateControlWithAutoADC() to kick off any mozziAnalogReads waiting on the stack
192 */
193 void adcStartReadCycle();
194 
195 
196 uint8_t adcPinToChannelNum(uint8_t pin);
197 
198 #endif /* MOZZI_ANALOG_H_ */
int mozziAnalogRead(uint8_t pin)
Reads the analog input of a chosen channel, without blocking other operations from running...
+
void adcReconnectAllDigitalIns()
Reconnect the digital input buffers for analog input channels which have been set for analog input wi...
+
void reconnectDigitalIn(uint8_t channel_num)
Reconnect the digital input buffer for an analog input channel which has been set for analog input wi...
+
void disconnectDigitalIn(uint8_t channel_num)
Prepare an analog input channel by turning off its digital input buffer.
+
void setupFastAnalogRead(int8_t speed=FAST_ADC)
This is automatically called in startMozzi.
+
void adcDisconnectAllDigitalIns()
Prepare all analog input channels by turning off their digital input buffers.
+
+
+ + + + diff --git a/extras/doc/html/mozzi__config_8h_source.html b/extras/doc/html/mozzi__config_8h_source.html new file mode 100644 index 000000000..efb26388b --- /dev/null +++ b/extras/doc/html/mozzi__config_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: mozzi_config.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_config.h
+
+
+
1 #ifndef MOZZI_CONFIG_H
2 #define MOZZI_CONFIG_H
3 
4 /*
5 Edit this file if you want to choose your own configuration options.
6 */
7 
8 
26 //#define AUDIO_MODE STANDARD
27 #define AUDIO_MODE STANDARD_PLUS
28 //#define AUDIO_MODE HIFI
29 
30 
61 #define AUDIO_RATE 16384
62 //#define AUDIO_RATE 32768
63 //#define AUDIO_RATE 65536 // try on Teensy3/3.1
64 
65 
71 #define USE_AUDIO_INPUT false
72 
73 
74 
80 #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
81 #define AUDIO_INPUT_PIN 0
82 #else
83 #define AUDIO_INPUT_PIN 0
84 #endif
85 
86 //AUDIO_INPUT_CHANNEL = analogPinToChannel(AUDIO_INPUT_PIN)
87 
94 #define STEREO_HACK false
95 
96 #endif // #ifndef MOZZI_CONFIG_H
97 
+
+ + + + diff --git a/extras/doc/html/mozzi__fixmath_8cpp_source.html b/extras/doc/html/mozzi__fixmath_8cpp_source.html new file mode 100644 index 000000000..76b888257 --- /dev/null +++ b/extras/doc/html/mozzi__fixmath_8cpp_source.html @@ -0,0 +1,117 @@ + + + + + + + +Mozzi: mozzi_fixmath.cpp Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_fixmath.cpp
+
+
+
1 #include "mozzi_fixmath.h"
2 
7 //Snipped from http://code.google.com/p/ht1632c/wiki/Optimizations
8 //TB2012 changed names to not interfere with arduino compilation
9 //Fast integer math
10 //
11 //If you need to include arithmetic operations in you code but you don't need
12 //floating point operations, you could use boolean operations instead of arithmetic
13 //operations, or use smaller data types and custom functions instead of stdlib functions
14 //or C operators (expecially / and %).
15 //Look at IntegerCodeSnippets, http://code.google.com/p/ht1632c/wiki/IntegerCodeSnippets
16 //
17 //Here is some ready to use fast integer 1 uint8_t wide math functions (from ht1632c library).
18 
25 uint8_t uint8_tMod(uint8_t n, uint8_t d)
26 {
27  while(n >= d)
28  n -= d;
29  return n;
30 }
31 
37 uint8_t uint8_tDiv(uint8_t n, uint8_t d)
38 {
39  uint8_t q = 0;
40  while(n >= d)
41  {
42  n -= d;
43  q++;
44  }
45  return q;
46 }
47 
48 /* fast integer (1 uint8_t) PRNG */
49 uint8_t uint8_tRnd(uint8_t min, uint8_t max)
50 {
51  static uint8_t seed;
52  seed = (21 * seed + 21);
53  return min + uint8_tMod(seed, --max);
54 }
55 //WARNING: don't use this uint8_tRnd() function for cryptography!
56 
57 //} of snip from http://code.google.com/p/ht1632c/wiki/Optimizations
58 
59 
60 
61 // from http://stackoverflow.com/questions/101439/the-most-efficient-way-to-implement-an-integer-based-power-function-powint-int
62 /* Exponentiation by squaring.
63 */
64 int ipow(int base, int exp)
65 {
66  int result = 1;
67  while (exp)
68  {
69  if (exp & 1)
70  result *= base;
71  exp >>= 1;
72  base *= base;
73  }
74 
75  return result;
76 }
77 
78 
79 /*
80 from: http://objectmix.com/vhdl/189970-2-powerof-x-where-x-fixed-point-value-2.html
81 
82 to do 2^(x.y) first find
83 2^x and 2^(x+1) through bit shifting 1 to the left by x and (x + 1) places
84 
85 now you do linear interpolation by drawing a line through these two points 2^x,
86 2^(x+1), then use f = m*x+b. the slope, m = rise over run
87 = (2^(x+1) - 2^x)/((x+1) - (x))
88 = 2^(x) * (2 - 1) / 1
89 = 2^(x)
90 b = 2^x, so to linearly interpolate do....(edited out typo)..
91 f = 2^(x) * (y) + 2^x
92 = 2^x * (y + 1)
93 where x is integer part, y is fractional part
94 */
95 
96 
106 {
107  // to do 2^(x.y) first find
108  //2^x and 2^(x+1) through bit shifting 1 to the left by x and (x + 1) places
109  uint8_t Q = (uint8_t)((Q8n8)exponent>>8); // integer part
110  uint8_t n = (uint8_t) exponent; // fractional part
111  // f = 2^x * (y + 1)
112  return (((Q16n16)Q8n8_FIX1 << Q) * (Q8n8_FIX1 + n));
113 }
114 
115 
116 
117 
118 //http://www.codecodex.com/wiki/Calculate_an_integer_square_root
119 //see Integer Square Roots by Jack W. Crenshaw, figure 2, http://www.embedded.com/electronics-blogs/programmer-s-toolbox/4219659/Integer-Square-Roots
120 
121 uint32_t // OR uint16 OR uint8_t
122 isqrt32 (uint32_t n) // OR isqrt16 ( uint16_t n ) OR isqrt8 ( uint8_t n ) - respectively [ OR overloaded as isqrt (uint16_t?? n) in C++ ]
123 {
124  register uint32_t // OR register uint16_t OR register uint8_t - respectively
125  root, remainder, place;
126 
127  root = 0;
128  remainder = n;
129  place = 0x40000000; // OR place = 0x4000; OR place = 0x40; - respectively
130 
131  while (place > remainder)
132  place = place >> 2;
133  while (place)
134  {
135  if (remainder >= root + place)
136  {
137  remainder = remainder - root - place;
138  root = root + (place << 1);
139  }
140  root = root >> 1;
141  place = place >> 2;
142  }
143  return root;
144 }
145 
146 
147 //http://www.codecodex.com/wiki/Calculate_an_integer_square_root
148 uint16_t // OR uint16_t OR uint8_t
149 isqrt16 (uint16_t n) // OR isqrt16 ( uint16_t n ) OR isqrt8 ( uint8_t n ) - respectively [ OR overloaded as isqrt (uint16_t?? n) in C++ ]
150 {
151  register uint16_t // OR register uint16_t OR register uint8_t - respectively
152  root, remainder, place;
153 
154  root = 0;
155  remainder = n;
156  place = 0x4000; // OR place = 0x4000; OR place = 0x40; - respectively
157 
158  while (place > remainder)
159  place = place >> 2;
160  while (place)
161  {
162  if (remainder >= root + place)
163  {
164  remainder = remainder - root - place;
165  root = root + (place << 1);
166  }
167  root = root >> 1;
168  place = place >> 2;
169  }
170  return root;
171 }
172 
173 
uint16_t Q8n8
unsigned fractional number using 8 integer bits and 8 fractional bits, represents 0 to 255...
Definition: mozzi_fixmath.h:35
+
Q16n16 Q16n16_pow2(Q8n8 exponent)
fast replacement for pow(2,x), where x is a Q8n8 fractional fixed-point exponent. ...
+
uint8_t uint8_tDiv(uint8_t n, uint8_t d)
Fast uint8_t division.
+
#define Q8n8_FIX1
1 in Q8n8 format
Definition: mozzi_fixmath.h:55
+
uint8_t uint8_tMod(uint8_t n, uint8_t d)
fast uint8_t modulus
+
uint32_t Q16n16
unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535...
Definition: mozzi_fixmath.h:46
+
+
+ + + + diff --git a/extras/doc/html/mozzi__fixmath_8h_source.html b/extras/doc/html/mozzi__fixmath_8h_source.html new file mode 100644 index 000000000..9e0661cff --- /dev/null +++ b/extras/doc/html/mozzi__fixmath_8h_source.html @@ -0,0 +1,206 @@ + + + + + + + +Mozzi: mozzi_fixmath.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_fixmath.h
+
+
+
1 /*
2  * mozzi_fixmath.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12 #ifndef FIXEDMATH_H_
13 #define FIXEDMATH_H_
14 
15 #if ARDUINO >= 100
16  #include "Arduino.h"
17 #else
18  #include "WProgram.h"
19 #endif
20 
24 // types
25 typedef int8_t Q0n7;
26 typedef int8_t Q7n0;
27 typedef uint8_t Q0n8;
28 typedef uint8_t Q8n0;
29 typedef uint16_t Q0n16;
30 typedef uint32_t Q0n31;
31 typedef int16_t Q7n8;
32 typedef uint16_t Q3n13;
33 typedef int16_t Q1n14;
34 typedef int16_t Q15n0;
35 typedef uint16_t Q8n8;
36 typedef int16_t Q0n15;
37 typedef uint16_t Q1n15;
38 typedef uint16_t Q16n0;
39 typedef int32_t Q23n8;
40 typedef int32_t Q15n16;
41 typedef int32_t Q31n0;
42 typedef uint32_t Q32n0;
43 typedef uint32_t Q0n32;
44 typedef uint32_t Q8n24;
45 typedef uint32_t Q24n8;
46 typedef uint32_t Q16n16;
52 // macros to save runtime calculations for representations of 1
53 #define Q0n7_FIX1 ((Q0n7) 127)
54 #define Q7n8_FIX1 ((Q7n8) 256)
55 #define Q8n8_FIX1 ((Q8n8) 256)
56 #define Q23n8_FIX1 ((Q23n8) 256)
57 #define Q1n14_FIX1 ((Q1n14) 16384)
58 #define Q1n15_FIX1 ((Q1n15) 32768)
59 #define Q16n16_FIX1 ((Q16n16) 65536)
60 #define Q0n15_FIX1 ((Q0n15) 32767)
61 #define Q0n16_FIX1 ((Q0n16) 65535)
62 #define Q15n0_FIX1 ((Q15n0) 16384)
63 #define Q15n16_FIX1 ((Q15n16) 65536)
64 #define Q8n24_FIX1 ((Q8n24) 16777216)
65 #define Q0n32_FIX1 ((Q0n32) 4294967295)
67 #define Q16n16_PI ((Q16n16) 205887)
68 #define Q3n13_2PI ((Q3n13) 411775)
69 #define Q16n16_2PI ((Q16n16) 411775)
71 #define low15bits ((Q1n15) 32767)
75 /*
76 Type conversions: Float to Q
77 
78 To convert a number from floating point to Qm.n format:
79 
80  Multiply the floating point number by 2^n
81  Round to the nearest integer
82 
83 Q to float
84 
85 To convert a number from Qm.n format to floating point:
86 
87  Convert the number to floating point as if it were an integer
88  Multiply by 2^-n
89 */
90 
93 inline
94 Q0n7 float_to_Q0n7(float a) { return static_cast<Q0n7>(a*256); }
96 inline
97 Q0n8 float_to_Q0n8(float a) { return static_cast<Q0n8>(a*256); }
99 inline
100 Q7n8 float_to_Q7n8(float a) { return static_cast<Q7n8>(a*256); }
102 inline
103 Q8n8 float_to_Q8n8(float a) { return static_cast<Q8n8>(a*256); }
105 inline
106 Q1n14 float_to_Q1n14(float a) { return static_cast<Q1n14>(a*16384); }
108 inline
109 Q1n15 float_to_Q1n15(float a) { return static_cast<Q1n15>(a*32768); }
111 inline
112 Q8n24 float_to_Q8n24(float a) { return static_cast<Q8n24>(a*16777216); }
114 inline
115 Q23n8 float_to_Q23n8(float a) { return static_cast<Q23n8>(a*256); }
117 inline
118 Q24n8 float_to_Q24n8(float a) { return static_cast<Q24n8>(a*256); }
120 inline
121 Q16n16 float_to_Q16n16(float a) { return static_cast<Q16n16>(a*65536); }
123 inline
124 Q0n16 float_to_Q0n16(float a) { return static_cast<Q0n16>(a*65536); }
126 inline
127 Q15n16 float_to_Q15n16(float a) { return static_cast<Q15n16>(a*65536); }
129 inline
130 Q1n14 Q0n7_to_Q1n14(Q0n7 a) { return (static_cast<Q1n14>(a))<<7; }
132 inline
133 Q15n16 Q0n7_to_Q15n16(Q0n7 a) { return (static_cast<Q15n16>(a))<<8; }
135 inline
136 float Q0n7_to_float(Q0n7 a) { return (static_cast<float>(a))/256; }
138 inline
139 Q1n15 Q0n8_to_Q1n15(Q0n8 a) { return (static_cast<Q1n15>(a))<<7; }
141 inline
142 Q8n8 Q0n8_to_Q8n8(Q0n8 a) { return (static_cast<Q8n8>(a))<<8; }
144 inline
145 Q8n24 Q0n8_to_Q8n24(Q0n8 a) { return (static_cast<Q8n24>(a))<<16; }
147 inline
148 Q24n8 Q0n8_to_Q24n8(Q0n8 a) { return (static_cast<Q24n8>(a))<<8; }
150 inline
151 Q15n16 Q0n8_to_Q15n16(Q0n8 a) { return (static_cast<Q15n16>(a))<<8; }
153 inline
154 Q16n16 Q0n8_to_Q16n16(Q0n8 a) { return (static_cast<Q16n16>(a))<<8; }
156 inline
157 float Q0n8_to_float(Q0n8 a) { return (static_cast<float>(a))/256; }
159 inline
160 Q7n8 Q7n0_to_Q7n8(Q7n0 a) { return (static_cast<Q7n8>(a))<<8; }
162 inline
163 Q15n16 Q7n0_to_Q15n16(Q7n0 a) { return (static_cast<Q15n16>(a))<<16; }
165 inline
166 Q7n8 Q8n0_to_Q7n8(Q8n0 a) { return (static_cast<Q7n8>(a))<<8; }
168 inline
169 Q8n8 Q8n0_to_Q8n8(Q8n0 a) { return (static_cast<Q8n8>(a))<<8; }
171 inline
172 Q15n16 Q8n0_to_Q15n16(Q8n0 a) { return (static_cast<Q15n16>(a))<<16; }
174 inline
175 Q16n16 Q8n0_to_Q16n16(Q8n0 a) { return (static_cast<Q16n16>(a))<<16; }
177 inline
178 Q7n0 Q7n8_to_Q7n0(Q7n8 a) { return static_cast<Q7n0>((Q7n8)a>>8); }
180 inline
181 Q15n16 Q7n8_to_Q15n16(Q7n8 a) { return (static_cast<Q15n16>(a))<<8; }
183 inline
184 float Q7n8_to_float(Q7n8 a) { return (static_cast<float>(a))/256; }
186 inline
187 Q8n0 Q8n8_to_Q8n0(Q8n8 a) { return static_cast<Q8n0>((Q8n8)a>>8); }
189 inline
190 Q16n16 Q8n8_to_Q16n16(Q8n8 a) { return (static_cast<Q16n16>(a))<<8; }
192 inline
193 float Q8n8_to_float(Q8n8 a) { return (static_cast<float>(a))/256; }
195 inline
196 Q0n7 Q1n14_to_Q0n7(Q1n14 a) { return static_cast<Q0n7>((Q1n14)a>>7); }
198 inline
199 float Q1n14_to_float(Q1n14 a) { return (static_cast<float>(a))/16384; }
201 inline
202 Q0n8 Q1n15_to_Q0n8(Q1n15 a) { return static_cast<Q0n8>((Q1n15)a>>7); }
204 inline
205 float Q1n15_to_float(Q1n15 a) { return (static_cast<float>(a))/32768; }
207 inline
208 float Q0n16_to_float(Q0n16 a) { return (static_cast<float>(a))/65536; }
210 inline
211 Q15n16 Q15n0_to_Q15n16(Q15n0 a) { return (static_cast<Q15n16>(a))<<16; }
213 inline
214 Q15n16 Q16n0_to_Q15n16(Q16n0 a) { return (static_cast<Q15n16>(a))<<16; }
216 inline
217 Q23n8 Q16n0_to_Q23n8(Q16n0 a) { return (static_cast<Q23n8>(a))<<8; }
219 inline
220 Q24n8 Q16n0_to_Q24n8(Q16n0 a) { return (static_cast<Q24n8>(a))<<8; }
222 inline
223 Q16n16 Q16n0_to_Q16n16(Q16n0 a) { return (static_cast<Q16n16>(a))<<16; }
225 inline
226 float Q16n0_to_float(Q16n0 a) { return (static_cast<float>(a)); }
228 inline
229 Q0n8 Q8n24_to_Q0n8(Q8n24 a) { return static_cast<Q0n8>((Q8n24)a>>16); }
231 inline
232 float Q8n24_to_float(Q8n24 a) { return (static_cast<float>(a))/16777216; }
235 inline
236 Q31n0 Q23n8_to_Q31n0(Q23n8 a) { return static_cast<Q31n0>((Q23n8)a>>8); }
238 inline
239 Q16n0 Q23n8_to_Q16n0(Q23n8 a) { return static_cast<Q16n0>((Q23n8)a>>8); }
241 inline
242 Q15n0 Q23n8_to_Q15n0(Q23n8 a) { return static_cast<Q15n0>((Q23n8)a>>8); }
244 inline
245 Q7n8 Q23n8_to_Q7n8(Q23n8 a) { return static_cast<Q7n8>(a); }
248 inline
249 float Q23n8_to_float(Q23n8 a) { return (static_cast<float>(a))/256; }
251 inline
252 Q0n8 Q24n8_to_Q0n8(Q24n8 a) { return static_cast<Q0n8>(a); }
254 inline
255 Q16n16 Q24n8_to_Q16n0(Q24n8 a) { return (static_cast<Q16n0>((Q24n8)a))>>8; }
257 inline
258 Q32n0 Q24n8_to_Q32n0(Q24n8 a) { return static_cast<Q32n0>((Q24n8)a>>8); }
260 inline
261 Q16n16 Q24n8_to_Q16n16(Q24n8 a) { return (static_cast<Q16n16>(a))<<8; }
263 inline
264 float Q24n8_to_float(Q24n8 a) { return (static_cast<float>(a))/256; }
266 inline
267 Q0n8 Q15n16_to_Q0n8(Q15n16 a) { return static_cast<Q0n8>((Q15n16)a>>8); }
269 inline
270 Q8n0 Q15n16_to_Q8n0(Q15n16 a) { return static_cast<Q8n0>((Q15n16)a>>16); }
272 inline
273 Q15n0 Q15n16_to_Q15n0(Q15n16 a) { return static_cast<Q15n0>((Q15n16)a>>16); }
275 inline
276 Q7n8 Q15n16_to_Q7n8(Q15n16 a) { return static_cast<Q7n8>((Q15n16)a>>8); }
278 inline
279 Q8n8 Q15n16_to_Q8n8(Q15n16 a) { return static_cast<Q8n8>((Q15n16)a>>8); }
281 inline
282 Q23n8 Q15n16_to_Q23n8(Q15n16 a) { return static_cast<Q23n8>((Q15n16)a>>8); }
284 inline
285 float Q15n16_to_float(Q15n16 a) { return (static_cast<float>(a))/65536; }
287 inline
288 Q0n8 Q16n16_to_Q0n8(Q16n16 a) { return static_cast<Q0n8>((Q16n16)a>>8); }
290 inline
291 Q8n8 Q16n16_to_Q8n8(Q8n8 a) { return static_cast<Q8n8>((Q16n16)a>>16); }
293 inline
294 Q16n0 Q16n16_to_Q16n0(Q16n16 a) { return static_cast<Q16n0>((Q16n16)a>>16); }
296 inline
297 Q24n8 Q16n16_to_Q24n8(Q16n16 a) { return static_cast<Q24n8>((Q16n16)a>>8); }
299 inline
300 float Q16n16_to_float(Q16n16 a) { return (static_cast<float>(a))/65536; }
303 /* @ingroup fixmath
304 Fast (?) fixed point multiply for Q7n8 fractional numbers.
305 The c version below is 3 times faster, and not subject to the same overflow limitations (+-3.99, or +-2048)
306 @param a Q7n8 format multiplicand
307 @param b Q7n8 format multiplier
308 @return a Q7n8 format product
309 */
310 /*
311 #define Q7n8_mult(a,b) \
312 ({ \
313 int16_t prod, val1=a, val2=b ; \
314 __asm__ __volatile__ ( \
315  "muls %B1, %B2 \n\t" \
316  "mov %B0, r0 \n\t" \
317  "mul %A1, %A2\n\t" \
318  "mov %A0, r1 \n\t" \
319  "mulsu %B1, %A2 \n\t" \
320  "add %A0, r0 \n\t" \
321  "adc %B0, r1 \n\t" \
322  "mulsu %B2, %A1 \n\t" \
323  "add %A0, r0 \n\t" \
324  "adc %B0, r1 \n\t" \
325  "clr r1 \n\t" \
326  : "=&d" (prod) \
327  : "a" (val1), "a" (val2) \
328  ); \
329  prod; \
330 })
331 */
332 
339 inline
341  return ((int16_t)((((int32_t)(a))*(b))>>8));
342 }
343 
344 
345 /*
346 #define FMULS8(v1, v2) \
347 ({ \
348  uint8_t res; \
349  uint8_t val1 = v1; \
350  uint8_t val2 = v2; \
351  __asm__ __volatile__ \
352  ( \
353  "fmuls $1, $2" "\n\t" \
354  "mov $0, r1" "\n\t" \
355  "clr r1" "\n\t" \
356  : "=&d" (res) \
357  : "a" (val1), "a" (val2) \
358  ); \
359  res; \
360 }) */
361 
362 
363 /*
364 // from octosynth, Joe Marshall 2011:
365 
366  // multiply 2 16 bit numbers together and shift 8 without precision loss
367  // requires assembler really
368  volatile uint8_t zeroReg=0;
369  volatile uint16_t multipliedCounter=oscillators[c].phaseStep;
370  asm volatile
371  (
372  // high uint8_ts mult together = high uint8_t
373  "ldi %A[outVal],0" "\n\t"
374  "mul %B[phaseStep],%B[pitchB}]" "\n\t"
375  "mov %B[outVal],r0" "\n\t"
376  // ignore overflow into r1 (should never overflow)
377  // low uint8_t * high uint8_t -> both uint8_ts
378  "mul %A[phaseStep],%B[pitchB}]" "\n\t"
379  "add %A[outVal],r0" "\n\t"
380  // carry into high uint8_t
381  "adc %B[outVal],r1" "\n\t"
382  // high uint8_t* low uint8_t -> both uint8_ts
383  "mul %B[phaseStep],%A[pitchB}]" "\n\t"
384  "add %A[outVal],r0" "\n\t"
385  // carry into high uint8_t
386  "adc %B[outVal],r1" "\n\t"
387  // low uint8_t * low uint8_t -> round
388  "mul %A[phaseStep],%A[pitchB}]" "\n\t"
389  // the adc below is to round up based on high bit of low*low:
390  "adc %A[outVal],r1" "\n\t"
391  "adc %B[outVal],%[ZERO]" "\n\t"
392  "clr r1" "\n\t"
393  :[outVal] "=&d" (multipliedCounter)
394  :[phaseStep] "d" (oscillators[c].phaseStep),[pitchB}] "d"( pitchB}Multiplier),[ZERO] "d" (zeroReg)
395  :"r1","r0"
396  );
397  oscillators[c].phaseStep=multipliedCounter;
398 
399  */
400 
401 
402 
403 int16_t ipow(int16_t base, int16_t exp);
405 Q16n16 Q16n16_pow2(Q8n8 exponent);
406 
407 uint8_t uint8_tMod(uint8_t n, uint8_t d);
408 uint8_t uint8_tDiv(uint8_t n, uint8_t d);
409 uint8_t uint8_tRnd(uint8_t min, uint8_t max);
410 uint16_t isqrt16(uint16_t n);
411 uint32_t isqrt32(uint32_t n);
412 
413 #endif /* FIXEDMATH_H_ */
Q0n8 Q24n8_to_Q0n8(Q24n8 a)
Convert Q24n8 fixed to Q0n8 uint8_t.
+
float Q16n0_to_float(Q16n0 a)
Convert Q16n0 uint16_t to float.
+
Q8n8 Q16n16_to_Q8n8(Q8n8 a)
Convert Q16n16 fixed to Q8n8 uint16_t.
+
Q23n8 Q15n16_to_Q23n8(Q15n16 a)
Convert Q15n16 fixed to Q23n8 signed int32_t.
+
Q7n8 Q8n0_to_Q7n8(Q8n0 a)
Convert Q8n0 uint8_t to Q7n8 fix.
+
float Q24n8_to_float(Q24n8 a)
Convert fix to float.
+
Q16n16 Q16n0_to_Q16n16(Q16n0 a)
Convert Q16n0 uint16_t to Q16n16 fixed point uint32_t.
+
Q0n7 float_to_Q0n7(float a)
Convert float to Q0n7 fix.
Definition: mozzi_fixmath.h:94
+
int8_t Q0n7
signed fractional number using 7 fractional bits, represents -0.5 to 0.496
Definition: mozzi_fixmath.h:25
+
Q0n8 Q16n16_to_Q0n8(Q16n16 a)
Convert Q16n16 fixed to Q0n8 uint8_t.
+
Q15n0 Q15n16_to_Q15n0(Q15n16 a)
Convert Q15n16 fixed to Q15n0 signed int16_t.
+
int32_t Q15n16
signed fractional number using 15 integer bits and 16 fractional bits, represents -32767...
Definition: mozzi_fixmath.h:40
+
Q15n16 Q0n8_to_Q15n16(Q0n8 a)
Convert Q0n8 uint8_t to Q15n16 fix.
+
Q8n24 float_to_Q8n24(float a)
Convert float to Q8n24 fix.
+
Q1n15 float_to_Q1n15(float a)
Convert float to Q1n15 fix.
+
Q1n14 float_to_Q1n14(float a)
Convert float to Q1n14 fix.
+
int8_t Q7n0
ordinary old signed Q7n0 int8_t with 0 fractional bits, represents -128 to 127
Definition: mozzi_fixmath.h:26
+
uint16_t Q8n8
unsigned fractional number using 8 integer bits and 8 fractional bits, represents 0 to 255...
Definition: mozzi_fixmath.h:35
+
Q15n16 Q7n8_to_Q15n16(Q7n8 a)
Convert Q7n8 fix to Q15n16.
+
uint32_t Q32n0
unsigned (normal uint32_t int16_t) number using 32 integer bits and 0 fractional bits, represents 0 to 4294967295
Definition: mozzi_fixmath.h:42
+
Q15n16 float_to_Q15n16(float a)
Convert float to Q15n16 fix.
+
float Q0n8_to_float(Q0n8 a)
Convert Q0n8 fix to float.
+
float Q8n24_to_float(Q8n24 a)
Convert fix to float.
+
Q0n7 Q1n14_to_Q0n7(Q1n14 a)
Convert Q1n14 fixed to Q0n7 int8_t.
+
Q16n16 Q16n16_pow2(Q8n8 exponent)
fast replacement for pow(2,x), where x is a Q8n8 fractional fixed-point exponent. ...
+
float Q8n8_to_float(Q8n8 a)
Convert Q8n8 fix to float.
+
Q15n16 Q16n0_to_Q15n16(Q16n0 a)
Convert Q16n0 uint16_t to Q15n16 fix.
+
uint8_t uint8_tDiv(uint8_t n, uint8_t d)
Fast uint8_t division.
+
Q7n8 Q15n16_to_Q7n8(Q15n16 a)
Convert Q15n16 fixed to Q7n8 signed int16_t, keeping middle bits only.
+
Q24n8 Q16n0_to_Q24n8(Q16n0 a)
Convert Q16n0 uint16_t to Q24n8 fixed point uint32_t.
+
Q16n16 Q24n8_to_Q16n0(Q24n8 a)
Convert Q24n8 fixed to Q16n0 uint16_t.
+
Q8n0 Q15n16_to_Q8n0(Q15n16 a)
Convert Q15n16 fixed to Q8n0 uint8_t.
+
Q7n0 Q7n8_to_Q7n0(Q7n8 a)
Convert Q7n8 fix to Q7n0.
+
Q15n16 Q15n0_to_Q15n16(Q15n0 a)
Convert Q15n0 int16_t to Q15n16 fix.
+
Q15n16 Q0n7_to_Q15n16(Q0n7 a)
Convert Q0n7 signed int8_t to Q15n16 fix.
+
Q8n24 Q0n8_to_Q8n24(Q0n8 a)
Convert Q0n8 uint8_t to Q8n24 fix.
+
Q23n8 Q16n0_to_Q23n8(Q16n0 a)
Convert Q16n0 uint16_t to Q23n8 fixed point signed int32_t.
+
Q7n8 Q7n8_mult(Q7n8 a, Q7n8 b)
Fast fixed point multiply for Q7n8 fractional numbers.
+
int16_t Q1n14
signed fractional number using 1 integer bit and 14 fractional bits, represents -1.999 to 1.999
Definition: mozzi_fixmath.h:33
+
Q32n0 Q24n8_to_Q32n0(Q24n8 a)
Convert Q24n8 fixed to Q32n0 uint32_t.
+
Q16n16 float_to_Q16n16(float a)
Convert float to Q16n16 fix.
+
float Q16n16_to_float(Q16n16 a)
Convert fix to float.
+
uint32_t Q0n32
unsigned fractional number using 0 integer bits and 32 fractional bits, represents 0 to 0...
Definition: mozzi_fixmath.h:43
+
Q0n8 Q15n16_to_Q0n8(Q15n16 a)
Convert Q15n16 fixed to Q0n8 uint8_t.
+
Q16n16 Q24n8_to_Q16n16(Q24n8 a)
Convert Q24n8 fixed to Q16n16 uint32_t.
+
int32_t Q31n0
signed (normal int32_t int16_t) number using 31 integer bits and 0 fractional bits, represents -2147483648 to 2147483647
Definition: mozzi_fixmath.h:41
+
Q31n0 Q23n8_to_Q31n0(Q23n8 a)
Convert Q23n8 fixed to Q31n0 int32_t.
+
Q15n16 Q7n0_to_Q15n16(Q7n0 a)
Convert Q7n0 int8_t to Q15n16 fix.
+
uint32_t Q0n31
signed number using 0 integer bits and 31 fractional bits, represents -0.2147483648 to 0...
Definition: mozzi_fixmath.h:30
+
float Q0n7_to_float(Q0n7 a)
Convert Q0n7 fix to float.
+
Q8n8 float_to_Q8n8(float a)
Convert float to Q8n8 fix.
+
Q15n16 Q8n0_to_Q15n16(Q8n0 a)
Convert Q8n0 uint8_t to Q15n16 fix.
+
uint16_t Q16n0
unsigned number using 16 integer bits and 0 fractional bits, represents 0 to 65536.0
Definition: mozzi_fixmath.h:38
+
int16_t Q0n15
signed fractional number using 0 integer bits and 15 fractional bits, represents -0.32768 to 0.32767
Definition: mozzi_fixmath.h:36
+
float Q23n8_to_float(Q23n8 a)
Convert fix to float.
+
Q7n8 Q7n0_to_Q7n8(Q7n0 a)
Convert Q7n0 int8_t to Q7n8 fix.
+
uint16_t Q3n13
unsigned fractional number using 3 integer bits and 13 fractional bits, represents 0 to 7...
Definition: mozzi_fixmath.h:32
+
Q0n8 float_to_Q0n8(float a)
Convert float to Q0n8 fix.
Definition: mozzi_fixmath.h:97
+
Q23n8 float_to_Q23n8(float a)
Convert float to Q23n8 fix.
+
uint16_t Q0n16
unsigned fractional number using 16 fractional bits, represents 0.0 to 0.999
Definition: mozzi_fixmath.h:29
+
Q24n8 Q16n16_to_Q24n8(Q16n16 a)
Convert Q16n16 fixed to Q24n8 uint32_t.
+
float Q0n16_to_float(Q0n16 a)
Convert fix to float.
+
Q8n0 Q8n8_to_Q8n0(Q8n8 a)
Convert Q8n8 fix to Q8n0 uint8_t.
+
float Q1n14_to_float(Q1n14 a)
Convert fix to float.
+
float Q15n16_to_float(Q15n16 a)
Convert fix to float.
+
float Q1n15_to_float(Q1n15 a)
Convert fix to float.
+
Q7n8 float_to_Q7n8(float a)
Convert float to Q7n8 fix.
+
uint8_t uint8_tMod(uint8_t n, uint8_t d)
fast uint8_t modulus
+
uint16_t Q1n15
unsigned fractional number using 1 integer bit and 15 fractional bits, represents 0 to 1...
Definition: mozzi_fixmath.h:37
+
Q1n15 Q0n8_to_Q1n15(Q0n8 a)
Convert Q0n8 uint8_t to Q1n15 fix.
+
Q16n16 Q0n8_to_Q16n16(Q0n8 a)
Convert Q0n8 uint8_t to Q16n16 fix.
+
uint32_t Q24n8
unsigned fractional number using 24 integer bits and 8 fractional bits, represents 0 to 16777215 ...
Definition: mozzi_fixmath.h:45
+
Q8n8 Q0n8_to_Q8n8(Q0n8 a)
Convert Q0n8 uint8_t to Q8n8 fix.
+
Q16n0 Q16n16_to_Q16n0(Q16n16 a)
Convert Q16n16 fixed to Q16n0 uint16_t.
+
Q24n8 Q0n8_to_Q24n8(Q0n8 a)
Convert Q0n8 uint8_t to Q24n8 fix.
+
Q1n14 Q0n7_to_Q1n14(Q0n7 a)
Convert Q0n7 int8_t to Q1n14 fix.
+
int16_t Q15n0
signed number using 15 integer bits and 0 fractional bits, represents -2147483648 to 2147483647 ...
Definition: mozzi_fixmath.h:34
+
uint32_t Q16n16
unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535...
Definition: mozzi_fixmath.h:46
+
Q24n8 float_to_Q24n8(float a)
Convert float to Q24n8 fix.
+
Q8n8 Q8n0_to_Q8n8(Q8n0 a)
Convert uint8_t to Q8n8 fix.
+
Q0n16 float_to_Q0n16(float a)
Convert float to Q0n16 fix.
+
int16_t Q7n8
signed fractional number using 7 integer bits and 8 fractional bits, represents -127.996 to 127.996
Definition: mozzi_fixmath.h:31
+
uint8_t Q8n0
normal uint8_t with 0 fractional bits, represents 0.0 to 255.0
Definition: mozzi_fixmath.h:28
+
Q16n16 Q8n0_to_Q16n16(Q8n0 a)
Convert Q8n0 uint8_t to Q16n16 fix.
+
Q0n8 Q1n15_to_Q0n8(Q1n15 a)
Convert Q1n15 fixed to Q0n8 uint8_t.
+
uint32_t Q8n24
signed fractional number using 8 integer bits and 24 fractional bits, represents 0 to 255...
Definition: mozzi_fixmath.h:44
+
uint8_t Q0n8
unsigned fractional number using 8 fractional bits, represents 0.0 to 0.996
Definition: mozzi_fixmath.h:27
+
Q16n0 Q23n8_to_Q16n0(Q23n8 a)
Convert Q23n8 fixed to Q16n0 uint16_t.
+
Q15n0 Q23n8_to_Q15n0(Q23n8 a)
Convert Q23n8 fixed to Q15n0 signed int16_t.
+
Q0n8 Q8n24_to_Q0n8(Q8n24 a)
Convert Q8n24 fixed to Q0n8 uint8_t.
+
int32_t Q23n8
signed fractional number using 23 integer bits and 8 fractional bits, represents -8388607.996 to 8388607.996
Definition: mozzi_fixmath.h:39
+
Q16n16 Q8n8_to_Q16n16(Q8n8 a)
Convert Q8n8 fix to Q16n16 uint32_t.
+
Q8n8 Q15n16_to_Q8n8(Q15n16 a)
Convert Q15n16 fixed to Q8n8 signed int16_t, keeping middle bits only.
+
Q7n8 Q23n8_to_Q7n8(Q23n8 a)
Convert Q23n8 fixed to Q7n8 signed int16_t, losing most significant bits.
+
float Q7n8_to_float(Q7n8 a)
Convert Q7n8 fix to float.
+
+
+ + + + diff --git a/extras/doc/html/mozzi__midi_8cpp_source.html b/extras/doc/html/mozzi__midi_8cpp_source.html new file mode 100644 index 000000000..1a131a5fe --- /dev/null +++ b/extras/doc/html/mozzi__midi_8cpp_source.html @@ -0,0 +1,114 @@ + + + + + + + +Mozzi: mozzi_midi.cpp Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_midi.cpp
+
+
+
1 #include "mozzi_midi.h"
2 
17 float mtof(float midival)
18 {
19  // http://en.wikipedia.org/wiki/Note
20  // f = pow(2,(p-69/12) * 440Hz
21  // return pow(2.0,(midival-69.0/12.0) * 440.0;
22 
23  // code from AF_precision_synthesis sketch, copyright 2009, Adrian Freed.
24  float f = 0.0;
25  if(midival) f = 8.1757989156 * pow(2.0, midival/12.0);
26  return f;
27 }
28 
29 
30 /*
31 static float ucmtof(uint8_t midival)
32 {
33  return 8.1757989156 * pow(2.0, (float)midival/12.0);
34 }
35 */
36 
37 
38 
39 // static const float __attribute__(()) fmidiToFreq[128] =
40 // {
41 // ucmtof(0), ucmtof(1), ucmtof(2),ucmtof(3), ucmtof(4), ucmtof(5), ucmtof(6), ucmtof(7),
42 // ucmtof(8),ucmtof(9), ucmtof(10), ucmtof(11), ucmtof(12), ucmtof(13), ucmtof(14), ucmtof(15),
43 // ucmtof(16), ucmtof(17), ucmtof(18), ucmtof(19), ucmtof(20), ucmtof(21), ucmtof(22), ucmtof(23),
44 // ucmtof(24), ucmtof(25), ucmtof(26), ucmtof(27), ucmtof(28), ucmtof(29), ucmtof(30), ucmtof(31),
45 // ucmtof(32), ucmtof(33), ucmtof(34), ucmtof(35), ucmtof(36), ucmtof(37), ucmtof(38), ucmtof(39),
46 // ucmtof(40), ucmtof(41), ucmtof(42), ucmtof(43), ucmtof(44), ucmtof(45), ucmtof(46), ucmtof(47),
47 // ucmtof(48), ucmtof(49), ucmtof(50), ucmtof(51), ucmtof(52), ucmtof(53), ucmtof(54), ucmtof(55),
48 // ucmtof(56), ucmtof(57), ucmtof(58), ucmtof(59), ucmtof(60), ucmtof(61), ucmtof(62), ucmtof(63),
49 // ucmtof(64), ucmtof(65), ucmtof(66), ucmtof(67), ucmtof(68), ucmtof(69), ucmtof(70), ucmtof(71),
50 // ucmtof(72), ucmtof(73), ucmtof(74), ucmtof(75), ucmtof(76), ucmtof(77), ucmtof(78), ucmtof(79),
51 // ucmtof(80), ucmtof(81), ucmtof(82), ucmtof(83), ucmtof(84), ucmtof(85), ucmtof(86), ucmtof(87),
52 // ucmtof(88), ucmtof(89), ucmtof(90), ucmtof(91), ucmtof(92), ucmtof(93), ucmtof(94), ucmtof(95),
53 // ucmtof(96),ucmtof(97), ucmtof(98), ucmtof(99), ucmtof(100), ucmtof(101), ucmtof(102), ucmtof(103),
54 // ucmtof(104),ucmtof(105), ucmtof(106), ucmtof(107), ucmtof(108), ucmtof(109), ucmtof(110), ucmtof(111),
55 // ucmtof(112),ucmtof(113), ucmtof(114), ucmtof(115), ucmtof(116), ucmtof(117), ucmtof(118), ucmtof(119),
56 // ucmtof(120), ucmtof(121), ucmtof(122), ucmtof(123), ucmtof(124), ucmtof(125), ucmtof(126), ucmtof(127)
57 // };
58 //
59 // /** @ingroup midi
60 // Converts midi note number to frequency. Fast, but only accepts whole note values, no fractions.
61 // @param midival a midi note number. Unlike the mtof object in Pd, midi values can have fractions. Use mtof() or
62 // Q16n16_mtof() if you want to convert fractional midi values.
63 // @return the frequency represented by the input midi note number.
64 // @todo hard-code fmidiToFreq table instead of generating at startup, and add an interpolating m2f which returns a float.
65 // */
66 // float m2f(uint8_t midival)
67 // {
68 // return (float) pgm_read_float(fmidiToFreq+midival);
69 // }
70 
71 // static Q16n16 Q16n16_m2f(float midival)
72 // {
73 // return float_to_Q16n16(mtof(midival));
74 // }
75 
76 //static const Q16n16 __attribute__((section(".progmem.data"))) midiToFreq[128] =
77 // {
78 // Q16n16_m2f(0), Q16n16_m2f(1), Q16n16_m2f(2),Q16n16_m2f(3), Q16n16_m2f(4), Q16n16_m2f(5), Q16n16_m2f(6), Q16n16_m2f(7),
79 // Q16n16_m2f(8),Q16n16_m2f(9), Q16n16_m2f(10), Q16n16_m2f(11), Q16n16_m2f(12), Q16n16_m2f(13), Q16n16_m2f(14), Q16n16_m2f(15),
80 // Q16n16_m2f(16), Q16n16_m2f(17), Q16n16_m2f(18), Q16n16_m2f(19), Q16n16_m2f(20), Q16n16_m2f(21), Q16n16_m2f(22), Q16n16_m2f(23),
81 // Q16n16_m2f(24), Q16n16_m2f(25), Q16n16_m2f(26), Q16n16_m2f(27), Q16n16_m2f(28), Q16n16_m2f(29), Q16n16_m2f(30), Q16n16_m2f(31),
82 // Q16n16_m2f(32), Q16n16_m2f(33), Q16n16_m2f(34), Q16n16_m2f(35), Q16n16_m2f(36), Q16n16_m2f(37), Q16n16_m2f(38), Q16n16_m2f(39),
83 // Q16n16_m2f(40), Q16n16_m2f(41), Q16n16_m2f(42), Q16n16_m2f(43), Q16n16_m2f(44), Q16n16_m2f(45), Q16n16_m2f(46), Q16n16_m2f(47),
84 // Q16n16_m2f(48), Q16n16_m2f(49), Q16n16_m2f(50), Q16n16_m2f(51), Q16n16_m2f(52), Q16n16_m2f(53), Q16n16_m2f(54), Q16n16_m2f(55),
85 // Q16n16_m2f(56), Q16n16_m2f(57), Q16n16_m2f(58), Q16n16_m2f(59), Q16n16_m2f(60), Q16n16_m2f(61), Q16n16_m2f(62), Q16n16_m2f(63),
86 // Q16n16_m2f(64), Q16n16_m2f(65), Q16n16_m2f(66), Q16n16_m2f(67), Q16n16_m2f(68), Q16n16_m2f(69), Q16n16_m2f(70), Q16n16_m2f(71),
87 // Q16n16_m2f(72), Q16n16_m2f(73), Q16n16_m2f(74), Q16n16_m2f(75), Q16n16_m2f(76), Q16n16_m2f(77), Q16n16_m2f(78), Q16n16_m2f(79),
88 // Q16n16_m2f(80), Q16n16_m2f(81), Q16n16_m2f(82), Q16n16_m2f(83), Q16n16_m2f(84), Q16n16_m2f(85), Q16n16_m2f(86), Q16n16_m2f(87),
89 // Q16n16_m2f(88), Q16n16_m2f(89), Q16n16_m2f(90), Q16n16_m2f(91), Q16n16_m2f(92), Q16n16_m2f(93), Q16n16_m2f(94), Q16n16_m2f(95),
90 // Q16n16_m2f(96),Q16n16_m2f(97), Q16n16_m2f(98), Q16n16_m2f(99), Q16n16_m2f(100), Q16n16_m2f(101), Q16n16_m2f(102), Q16n16_m2f(103),
91 // Q16n16_m2f(104),Q16n16_m2f(105), Q16n16_m2f(106), Q16n16_m2f(107), Q16n16_m2f(108), Q16n16_m2f(109), Q16n16_m2f(110), Q16n16_m2f(111),
92 // Q16n16_m2f(112),Q16n16_m2f(113), Q16n16_m2f(114), Q16n16_m2f(115), Q16n16_m2f(116), Q16n16_m2f(117), Q16n16_m2f(118), Q16n16_m2f(119),
93 // Q16n16_m2f(120), Q16n16_m2f(121), Q16n16_m2f(122), Q16n16_m2f(123), Q16n16_m2f(124), Q16n16_m2f(125), Q16n16_m2f(126), Q16n16_m2f(127)
94 // };
95 
96 
97 static const uint32_t __attribute__((section(".progmem.data"))) midiToFreq[128] =
98  {
99  0, 567670, 601425, 637188, 675077, 715219, 757748, 802806, 850544, 901120,
100  954703, 1011473, 1071618, 1135340, 1202851, 1274376, 1350154, 1430438, 1515497,
101  1605613, 1701088, 1802240, 1909406, 2022946, 2143236, 2270680, 2405702, 2548752,
102  2700309, 2860877, 3030994, 3211226, 3402176, 3604479, 3818813, 4045892, 4286472,
103  4541359, 4811404, 5097504, 5400618, 5721756, 6061988, 6422452, 6804352, 7208959,
104  7637627, 8091785, 8572945, 9082719, 9622808, 10195009, 10801235, 11443507,
105  12123974, 12844905, 13608704, 14417917, 15275252, 16183563, 17145888, 18165438,
106  19245616, 20390018, 21602470, 22887014, 24247948, 25689810, 27217408, 28835834,
107  30550514, 32367136, 34291776, 36330876, 38491212, 40780036, 43204940, 45774028,
108  48495912, 51379620, 54434816, 57671668, 61101028, 64734272, 68583552, 72661752,
109  76982424, 81560072, 86409880, 91548056, 96991792, 102759240, 108869632,
110  115343336, 122202056, 129468544, 137167104, 145323504, 153964848, 163120144,
111  172819760, 183096224, 193983648, 205518336, 217739200, 230686576, 244403840,
112  258937008, 274334112, 290647008, 307929696, 326240288, 345639520, 366192448,
113  387967040, 411036672, 435478400, 461373152, 488807680, 517874016, 548668224,
114  581294016, 615859392, 652480576, 691279040, 732384896, 775934592, 822073344
115  };
116 
117 
118 
131 Q16n16 Q16n16_mtof(Q16n16 midival_fractional)
132 {
133  Q16n16 diff_fraction;
134  uint8_t index = midival_fractional >> 16;
135  uint16_t fraction = (uint16_t) midival_fractional; // keeps low word
136  Q16n16 freq1 = (Q16n16) pgm_read_dword(midiToFreq + index);
137  Q16n16 freq2 = (Q16n16) pgm_read_dword((midiToFreq + 1) + index);
138  Q16n16 difference = freq2 - freq1;
139  if (difference>=65536)
140  {
141  diff_fraction = ((difference>>8) * fraction) >> 8;
142  }
143  else
144  {
145  diff_fraction = (difference * fraction) >> 16;
146  }
147  return (Q16n16) (freq1+ diff_fraction);
148 }
149 
155 int mtof(uint8_t midi_note){
156  return (int) (pgm_read_dword(midiToFreq + midi_note) >> 16);
157 }
158 
159 
165 int mtof(int midi_note){
166  return (int) (pgm_read_dword(midiToFreq + midi_note) >> 16);
167 }
Q16n16 Q16n16_mtof(Q16n16 midival_fractional)
Converts midi note number to frequency with speed and accuracy.
Definition: mozzi_midi.cpp:131
+
float mtof(float midival)
Converts midi note number to frequency.
Definition: mozzi_midi.cpp:17
+
uint32_t Q16n16
unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535...
Definition: mozzi_fixmath.h:46
+
+
+ + + + diff --git a/extras/doc/html/mozzi__midi_8h_source.html b/extras/doc/html/mozzi__midi_8h_source.html new file mode 100644 index 000000000..7aed5209d --- /dev/null +++ b/extras/doc/html/mozzi__midi_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +Mozzi: mozzi_midi.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_midi.h
+
+
+
1 #ifndef MOZZI_MIDI_H_
2 #define MOZZI_MIDI_H_
3 
4 #include "mozzi_fixmath.h"
5 
6 float mtof(float x);
7 int mtof(uint8_t midi_note);
8 int mtof(int midi_note);
9 Q16n16 Q16n16_mtof(Q16n16 midival);
10 
11 #endif /* MOZZI_MIDI_H_ */
Q16n16 Q16n16_mtof(Q16n16 midival)
Converts midi note number to frequency with speed and accuracy.
Definition: mozzi_midi.cpp:131
+
float mtof(float x)
Converts midi note number to frequency.
Definition: mozzi_midi.cpp:17
+
uint32_t Q16n16
unsigned fractional number using 16 integer bits and 16 fractional bits, represents 0 to 65535...
Definition: mozzi_fixmath.h:46
+
+
+ + + + diff --git a/extras/doc/html/mozzi__rand_8cpp_source.html b/extras/doc/html/mozzi__rand_8cpp_source.html new file mode 100644 index 000000000..d3b407e5f --- /dev/null +++ b/extras/doc/html/mozzi__rand_8cpp_source.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: mozzi_rand.cpp Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_rand.cpp
+
+
+
1 #include "mozzi_rand.h"
2 
3 // moved these out of xorshift96() so xorshift96() can be reseeded manually
4 static unsigned long x=132456789, y=362436069, z=521288629;
5 // static unsigned long x= analogRead(A0)+123456789;
6 // static unsigned long y= analogRead(A1)+362436069;
7 // static unsigned long z= analogRead(A2)+521288629;
8 
17 unsigned long xorshift96()
18 { //period 2^96-1
19  // static unsigned long x=123456789, y=362436069, z=521288629;
20  unsigned long t;
21 
22  x ^= x << 16;
23  x ^= x >> 5;
24  x ^= x << 1;
25 
26  t = x;
27  x = y;
28  y = z;
29  z = t ^ x ^ y;
30 
31  return z;
32 }
33 
34 
44 void randSeed(long seed)
45 {
46  x=seed;
47 }
48 
49 
50 #if defined (__AVR_ATmega644P__)
51 
52 // a less fancy version for gizduino (__AVR_ATmega644P__) which doesn't know INTERNAL
53 static long longRandom()
54 {
55  return ((long)analogRead(0)+63)*(analogRead(1)+97); // added offsets in case analogRead is 0
56 }
57 
58 #elif defined (__AVR_ATmega2560__)
59 /*
60 longRandom(), used as a seed generator, comes from:
61 http://arduino.cc/forum/index.php/topic,38091.0.html
62 // AUTHOR: Rob Tillaart
63 // PURPOSE: Simple Random functions based upon unreliable internal temp sensor
64 // VERSION: 0.1
65 // DATE: 2011-05-01
66 //
67 // Released to the public domain, use at own risk
68 //
69 */
70 static long longRandom()
71 {
72  //analogReference(INTERNAL2V56);
73  unsigned long rv = 0;
74  for (uint8_t i=0; i< 32; i++) rv |= ((analogRead(8)+2294) & 1L) << i; // added 2294 in case analogRead is 0
75  return rv;
76 }
77 
78 #else
79 
80 static long longRandom()
81 {
82  //analogReference(INTERNAL);
83  unsigned long rv = 0;
84  for (uint8_t i=0; i< 32; i++) rv |= ((analogRead(8)+1171) & 1L) << i; // added 1171 in case analogRead is 0
85  return rv;
86 }
87 
88 
89 #endif
90 
91 
106 void randSeed() {
107  #if defined(__MK20DX128__) || defined(__MK20DX256__) // teensy 3, 3.1
108 #else
109  ADCSRA &= ~ (1 << ADIE); // adc Disable Interrupt, re-enable at end
110  // this attempt at remembering analog_reference stops it working
111  // maybe needs a delay after changing analog reference in longRandom (Arduino reference suggests this)
112  // because the analog reads return 0
113  //uint8_t analog_reference_orig = ADMUX&192; // analog_reference is high 2 bits of ADMUX, store this because longRandom sets it to internal
114  x=longRandom();
115  y=longRandom();
116  z=longRandom();
117  //analogReference(analog_reference_orig); // change back to original
118  ADCSRA |= (1 << ADIE); // adc re-Enable Interrupt
119  #endif
120 }
121 
122 
123 
128 void xorshiftSeed(long seed)
129 {
130  x=seed;
131 }
132 
133 
134 
141 int8_t rand(int8_t minval, int8_t maxval)
142 {
143  return (int8_t) ((((int) (lowByte(xorshift96()))) * (maxval-minval))>>8) + minval;
144 }
145 
146 
153 uint8_t rand(uint8_t minval, uint8_t maxval)
154 {
155  return (uint8_t) ((((unsigned int) (lowByte(xorshift96()))) * (maxval-minval))>>8) + minval;
156 }
157 
158 
165 int rand( int minval, int maxval)
166 {
167  return (int) ((((xorshift96() & 0xFFFF) * (maxval-minval))>>16) + minval);
168 }
169 
170 
177 unsigned int rand(unsigned int minval, unsigned int maxval)
178 {
179  return (unsigned int) ((((xorshift96() & 0xFFFF) * (maxval-minval))>>16) + minval);
180 }
181 
182 
188 int8_t rand(int8_t maxval)
189 {
190  return (int8_t) ((((int) (lowByte(xorshift96()))) * maxval)>>8);
191 }
192 
193 
199 uint8_t rand(uint8_t maxval)
200 {
201  return (uint8_t) ((((unsigned int) (lowByte(xorshift96()))) * maxval)>>8);
202 }
203 
204 
210 int rand(int maxval)
211 {
212  return (int) (((xorshift96() & 0xFFFF) * maxval)>>16);
213 }
214 
215 
221 unsigned int rand(unsigned int maxval)
222 {
223  return (unsigned int) (((xorshift96() & 0xFFFF) * maxval)>>16);
224 }
225 
226 
231 uint8_t randMidiNote()
232 {
233  return lowByte(xorshift96())>>1;
234 }
void xorshiftSeed(long seed)
Initialises Mozzi&#39;s (pseudo)random number generator xorshift96() with a chosen seed number...
Definition: mozzi_rand.cpp:128
+
void randSeed(long seed)
Initialises Mozzi&#39;s (pseudo)random number generator xorshift96(), which is used in Mozzi&#39;s rand() fun...
Definition: mozzi_rand.cpp:44
+
unsigned long xorshift96()
Random number generator.
Definition: mozzi_rand.cpp:17
+
uint8_t randMidiNote()
Generates a random number in the range for midi notes.
Definition: mozzi_rand.cpp:231
+
int8_t rand(int8_t minval, int8_t maxval)
Ranged random number generator, faster than Arduino&#39;s built-in random function, which is too slow for...
Definition: mozzi_rand.cpp:141
+
+
+ + + + diff --git a/extras/doc/html/mozzi__rand_8h_source.html b/extras/doc/html/mozzi__rand_8h_source.html new file mode 100644 index 000000000..7824d809e --- /dev/null +++ b/extras/doc/html/mozzi__rand_8h_source.html @@ -0,0 +1,116 @@ + + + + + + + +Mozzi: mozzi_rand.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_rand.h
+
+
+
1 #ifndef MOZZI_RAND_H_
2 #define MOZZI_RAND_H_
3 
4 #if ARDUINO >= 100
5  #include "Arduino.h"
6 #else
7  #include "WProgram.h"
8 #endif
9 
10 
11 unsigned long xorshift96();
12 
13 void xorshiftSeed(unsigned long seed);
14 void randSeed(unsigned long seed);
15 void randSeed();
16 
17 int8_t rand(int8_t minval, int8_t maxval);
18 int8_t rand(int8_t maxval);
19 
20 uint8_t rand(uint8_t minval, uint8_t maxval);
21 uint8_t rand(uint8_t maxval);
22 
23 int rand(int minval, int maxval);
24 int rand(int maxval);
25 
26 unsigned int rand(unsigned int minval, unsigned int maxval);
27 unsigned int rand(unsigned int maxval);
28 
29 uint8_t randMidiNote();
30 
31 #endif /* MOZZI_RAND_H_ */
void xorshiftSeed(long seed)
Initialises Mozzi&#39;s (pseudo)random number generator xorshift96() with a chosen seed number...
Definition: mozzi_rand.cpp:128
+
void randSeed()
Initialises Mozzi&#39;s (pseudo)random number generator xorshift96(), which is used in Mozzi&#39;s rand() fun...
Definition: mozzi_rand.cpp:106
+
unsigned long xorshift96()
Random number generator.
Definition: mozzi_rand.cpp:17
+
uint8_t randMidiNote()
Generates a random number in the range for midi notes.
Definition: mozzi_rand.cpp:231
+
int8_t rand(int8_t minval, int8_t maxval)
Ranged random number generator, faster than Arduino&#39;s built-in random function, which is too slow for...
Definition: mozzi_rand.cpp:141
+
+
+ + + + diff --git a/extras/doc/html/mozzi__utils_8cpp_source.html b/extras/doc/html/mozzi__utils_8cpp_source.html new file mode 100644 index 000000000..80a07ffd7 --- /dev/null +++ b/extras/doc/html/mozzi__utils_8cpp_source.html @@ -0,0 +1,112 @@ + + + + + + + +Mozzi: mozzi_utils.cpp Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_utils.cpp
+
+
+
1 #include "mozzi_utils.h"
2 
8 long trailingZeros(const unsigned long v) {
9  // find the number of trailing zeros in v, from http://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightFloatCast
10  // there are faster methods on the bit twiddling site, but this is short
11  float f = (float)(v & -v); // cast the least significant bit in v to a float
12  return (*(uint32_t *)&f >> 23) - 0x7f;
13 }
14 
15 
19  unsigned int BPMtoMillis(float bpm){
20  float seconds_per_beat = 60.f/bpm;
21  return (unsigned int) (seconds_per_beat*1000);
22  }
long trailingZeros(const unsigned long v)
Given a power of 2, work out the number to shift right by to do a divide by the number, or shift left to multiply.
Definition: mozzi_utils.cpp:8
+
+
+ + + + diff --git a/extras/doc/html/mozzi__utils_8h_source.html b/extras/doc/html/mozzi__utils_8h_source.html new file mode 100644 index 000000000..f2f9496ac --- /dev/null +++ b/extras/doc/html/mozzi__utils_8h_source.html @@ -0,0 +1,115 @@ + + + + + + + +Mozzi: mozzi_utils.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mozzi_utils.h
+
+
+
1 
2 #ifndef UTILS_H_
3 #define UTILS_H_
4 
5 
6 #if ARDUINO >= 100
7  #include "Arduino.h"
8 #else
9  #include "WProgram.h"
10 #endif
11 
12 // macros for setting and clearing register bits
13 #ifndef cbi
14 #define cbi(sfr, bit) (_SFR_UINT8_T(sfr) &= ~_BV(bit))
15 #endif
16 #ifndef sbi
17 #define sbi(sfr, bit) (_SFR_UINT8_T(sfr) |= _BV(bit))
18 #endif
19 
20 
23 inline
25 {
26  DDRB |= B00100000;
27 }
28 
29 
32 inline
34 {
35  PORTB |= B00100000;
36 }
37 
38 
41 inline
43 {
44  PORTB &= B11011111;
45 }
46 
47 
48 long trailingZeros(unsigned long v);
49 unsigned int BPMtoMillis(float bpm);
50 
51 #endif /* UTILS_H_ */
void setPin13Out()
Set digital pin 13 to output for testing timing with an oscilloscope.
Definition: mozzi_utils.h:24
+
long trailingZeros(unsigned long v)
Given a power of 2, work out the number to shift right by to do a divide by the number, or shift left to multiply.
Definition: mozzi_utils.cpp:8
+
void setPin13High()
Set pin 13 high for testing timing with an oscilloscope.
Definition: mozzi_utils.h:33
+
void setPin13Low()
Set pin 13 low for testing timing with an oscilloscope.
Definition: mozzi_utils.h:42
+
+
+ + + + diff --git a/extras/doc/html/mult16x16_8h_source.html b/extras/doc/html/mult16x16_8h_source.html new file mode 100644 index 000000000..e30404527 --- /dev/null +++ b/extras/doc/html/mult16x16_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: mult16x16.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mult16x16.h
+
+
+
1 
2 /*
3 Norbert Pozar 2009
4 http://mekonik.wordpress.com/2009/03/18/arduino-avr-gcc-multiplication/
5 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
7 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
8 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
9 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
10 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/
11 
12 // longRes = intIn1 * intIn2
13 #define MultiU16X16to32(longRes, intIn1, intIn2) \
14 asm volatile ( \
15 "clr r26 \n\t" \
16 "mul %A1, %A2 \n\t" \
17 "movw %A0, r0 \n\t" \
18 "mul %B1, %B2 \n\t" \
19 "movw %C0, r0 \n\t" \
20 "mul %B2, %A1 \n\t" \
21 "add %B0, r0 \n\t" \
22 "adc %C0, r1 \n\t" \
23 "adc %D0, r26 \n\t" \
24 "mul %B1, %A2 \n\t" \
25 "add %B0, r0 \n\t" \
26 "adc %C0, r1 \n\t" \
27 "adc %D0, r26 \n\t" \
28 "clr r1 \n\t" \
29 : \
30 "=&r" (longRes) \
31 : \
32 "a" (intIn1), \
33 "a" (intIn2) \
34 : \
35 "r26" \
36 )
37 
38 // intRes = intIn1 * intIn2 >> 16
39 // uses:
40 // r26 to store 0
41 // r27 to store the uint8_t 1 of the 32bit result
42 #define MultiU16X16toH16(intRes, intIn1, intIn2) \
43 asm volatile ( \
44 "clr r26 \n\t" \
45 "mul %A1, %A2 \n\t" \
46 "mov r27, r1 \n\t" \
47 "mul %B1, %B2 \n\t" \
48 "movw %A0, r0 \n\t" \
49 "mul %B2, %A1 \n\t" \
50 "add r27, r0 \n\t" \
51 "adc %A0, r1 \n\t" \
52 "adc %B0, r26 \n\t" \
53 "mul %B1, %A2 \n\t" \
54 "add r27, r0 \n\t" \
55 "adc %A0, r1 \n\t" \
56 "adc %B0, r26 \n\t" \
57 "clr r1 \n\t" \
58 : \
59 "=&r" (intRes) \
60 : \
61 "a" (intIn1), \
62 "a" (intIn2) \
63 : \
64 "r26" , "r27" \
65 )
66 
67 // intRes = intIn1 * intIn2 >> 16 + round
68 // uses:
69 // r26 to store 0
70 // r27 to store the uint8_t 1 of the 32bit result
71 // 21 cycles
72 #define MultiU16X16toH16Round(intRes, intIn1, intIn2) \
73 asm volatile ( \
74 "clr r26 \n\t" \
75 "mul %A1, %A2 \n\t" \
76 "mov r27, r1 \n\t" \
77 "mul %B1, %B2 \n\t" \
78 "movw %A0, r0 \n\t" \
79 "mul %B2, %A1 \n\t" \
80 "add r27, r0 \n\t" \
81 "adc %A0, r1 \n\t" \
82 "adc %B0, r26 \n\t" \
83 "mul %B1, %A2 \n\t" \
84 "add r27, r0 \n\t" \
85 "adc %A0, r1 \n\t" \
86 "adc %B0, r26 \n\t" \
87 "lsl r27 \n\t" \
88 "adc %A0, r26 \n\t" \
89 "adc %B0, r26 \n\t" \
90 "clr r1 \n\t" \
91 : \
92 "=&r" (intRes) \
93 : \
94 "a" (intIn1), \
95 "a" (intIn2) \
96 : \
97 "r26" , "r27" \
98 )
99 
100 
101 // signed16 * signed16
102 // 22 cycles
103 #define MultiS16X16to32(longRes, intIn1, intIn2) \
104 asm volatile ( \
105 "clr r26 \n\t" \
106 "mul %A1, %A2 \n\t" \
107 "movw %A0, r0 \n\t" \
108 "muls %B1, %B2 \n\t" \
109 "movw %C0, r0 \n\t" \
110 "mulsu %B2, %A1 \n\t" \
111 "sbc %D0, r26 \n\t" \
112 "add %B0, r0 \n\t" \
113 "adc %C0, r1 \n\t" \
114 "adc %D0, r26 \n\t" \
115 "mulsu %B1, %A2 \n\t" \
116 "sbc %D0, r26 \n\t" \
117 "add %B0, r0 \n\t" \
118 "adc %C0, r1 \n\t" \
119 "adc %D0, r26 \n\t" \
120 "clr r1 \n\t" \
121 : \
122 "=&r" (longRes) \
123 : \
124 "a" (intIn1), \
125 "a" (intIn2) \
126 : \
127 "r26" \
128 )
129 
130 
131 // signed16 * signed 16 >> 16
132 #define MultiS16X16toH16(intRes, intIn1, intIn2) \
133 asm volatile ( \
134 "clr r26 \n\t" \
135 "mul %A1, %A2 \n\t" \
136 "mov r27, r1 \n\t" \
137 "muls %B1, %B2 \n\t" \
138 "movw %A0, r0 \n\t" \
139 "mulsu %B2, %A1 \n\t" \
140 "sbc %B0, r26 \n\t" \
141 "add r27, r0 \n\t" \
142 "adc %A0, r1 \n\t" \
143 "adc %B0, r26 \n\t" \
144 "mulsu %B1, %A2 \n\t" \
145 "sbc %B0, r26 \n\t" \
146 "add r27, r0 \n\t" \
147 "adc %A0, r1 \n\t" \
148 "adc %B0, r26 \n\t" \
149 "clr r1 \n\t" \
150 : \
151 "=&r" (intRes) \
152 : \
153 "a" (intIn1), \
154 "a" (intIn2) \
155 : \
156 "r26", "r27" \
157 )
158 
159 // multiplies a signed and unsigned 16 bit ints with a 32 bit result
160 #define MultiSU16X16to32(longRes, intIn1, intIn2) \
161 asm volatile ( \
162 "clr r26 \n\t" \
163 "mul %A1, %A2 \n\t" \
164 "movw %A0, r0 \n\t" \
165 "mulsu %B1, %B2 \n\t" \
166 "movw %C0, r0 \n\t" \
167 "mul %B2, %A1 \n\t" \
168 "add %B0, r0 \n\t" \
169 "adc %C0, r1 \n\t" \
170 "adc %D0, r26 \n\t" \
171 "mulsu %B1, %A2 \n\t" \
172 "sbc %D0, r26 \n\t" \
173 "add %B0, r0 \n\t" \
174 "adc %C0, r1 \n\t" \
175 "adc %D0, r26 \n\t" \
176 "clr r1 \n\t" \
177 : \
178 "=&r" (longRes) \
179 : \
180 "a" (intIn1), \
181 "a" (intIn2) \
182 : \
183 "r26" \
184 )
185 
186 // multiplies signed x unsigned int and returns the highest 16 bits of the result
187 #define MultiSU16X16toH16(intRes, intIn1, intIn2) \
188 asm volatile ( \
189 "clr r26 \n\t" \
190 "mul %A1, %A2 \n\t" \
191 "mov r27, r1 \n\t" \
192 "mulsu %B1, %B2 \n\t" \
193 "movw %A0, r0 \n\t" \
194 "mul %B2, %A1 \n\t" \
195 "add r27, r0 \n\t" \
196 "adc %A0, r1 \n\t" \
197 "adc %B0, r26 \n\t" \
198 "mulsu %B1, %A2 \n\t" \
199 "sbc %B0, r26 \n\t" \
200 "add r27, r0 \n\t" \
201 "adc %A0, r1 \n\t" \
202 "adc %B0, r26 \n\t" \
203 "clr r1 \n\t" \
204 : \
205 "=&r" (intRes) \
206 : \
207 "a" (intIn1), \
208 "a" (intIn2) \
209 : \
210 "r26", "r27" \
211 )
212 
213 // multiplies signed x unsigned int and returns the highest 16 bits of the result
214 // rounds the result based on the MSB of the lower 16 bits
215 // 22 cycles
216 #define MultiSU16X16toH16Round(intRes, intIn1, intIn2) \
217 asm volatile ( \
218 "clr r26 \n\t" \
219 "mul %A1, %A2 \n\t" \
220 "mov r27, r1 \n\t" \
221 "mulsu %B1, %B2 \n\t" \
222 "movw %A0, r0 \n\t" \
223 "mul %A1, %B2 \n\t" \
224 "add r27, r0 \n\t" \
225 "adc %A0, r1 \n\t" \
226 "adc %B0, r26 \n\t" \
227 "mulsu %B1, %A2 \n\t" \
228 "sbc %B0, r26 \n\t" \
229 "add r27, r0 \n\t" \
230 "adc %A0, r1 \n\t" \
231 "adc %B0, r26 \n\t" \
232 "lsl r27 \n\t" \
233 "adc %A0, r26 \n\t" \
234 "adc %B0, r26 \n\t" \
235 "clr r1 \n\t" \
236 : \
237 "=&r" (intRes) \
238 : \
239 "a" (intIn1), \
240 "a" (intIn2) \
241 : \
242 "r26", "r27" \
243 )
244 
+
+ + + + diff --git a/extras/doc/html/mult16x8_8h_source.html b/extras/doc/html/mult16x8_8h_source.html new file mode 100644 index 000000000..3a0b9fd47 --- /dev/null +++ b/extras/doc/html/mult16x8_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: mult16x8.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mult16x8.h
+
+
+
1 
2 /*
3 Norbert Pozar 2009
4 http://mekonik.wordpress.com/2009/03/18/arduino-avr-gcc-multiplication/
5 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
7 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
8 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
9 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
10 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.*/
11 
12 // multiplies 16 bit X 8 bit
13 // stores lower 16 bits
14 #define MultiSU16X8toL16(intRes, int16In, int8In) \
15 asm volatile ( \
16 "mul %A1, %2 \n\t"\
17 "movw %A0, r0 \n\t"\
18 "mulsu %B1, %2 \n\t"\
19 "add %B0, r0 \n\t"\
20 "clr r1"\
21 : \
22 "=&r" (intRes) \
23 : \
24 "a" (int16In), \
25 "a" (int8In) \
26 )
27 
28 // multiplies 16 bit number X 8 bit constant
29 // saves lower 16 bit
30 // 8 cycles
31 #define MultiSU16XConst8toL16(intRes, int16In, int8In) \
32 asm volatile ( \
33 "ldi r22, %2 \n\t"\
34 "mul %A1, r22 \n\t"\
35 "movw %A0, r0 \n\t"\
36 "mulsu %B1, r22 \n\t"\
37 "add %B0, r0 \n\t"\
38 "clr r1 \n\t"\
39 : \
40 "=&r" (intRes) \
41 : \
42 "a" (int16In), \
43 "M" (int8In) \
44 :\
45 "r22"\
46 )
47 
48 // multiplies 16 bit number X 8 bit and stores 2 high uint8_ts
49 #define MultiSU16X8toH16(intRes, int16In, int8In) \
50 asm volatile ( \
51 "clr r26 \n\t"\
52 "mulsu %B1, %A2 \n\t"\
53 "movw %A0, r0 \n\t"\
54 "mul %A1, %A2 \n\t"\
55 "add %A0, r1 \n\t"\
56 "adc %B0, r26 \n\t"\
57 "clr r1 \n\t"\
58 : \
59 "=&r" (intRes) \
60 : \
61 "a" (int16In), \
62 "a" (int8In) \
63 :\
64 "r26"\
65 )
66 
67 // multiplies 16 bit signed number X 8 bit and stores 2 high uint8_ts
68 // rounds the number based on the MSB of the lowest uint8_t
69 #define MultiSU16X8toH16Round(intRes, int16In, int8In) \
70 asm volatile ( \
71 "clr r26 \n\t"\
72 "mulsu %B1, %A2 \n\t"\
73 "movw %A0, r0 \n\t"\
74 "mul %A1, %A2 \n\t"\
75 "add %A0, r1 \n\t"\
76 "adc %B0, r26 \n\t"\
77 "lsl r0 \n\t"\
78 "adc %A0, r26 \n\t"\
79 "adc %B0, r26 \n\t"\
80 "clr r1 \n\t"\
81 : \
82 "=&r" (intRes) \
83 : \
84 "a" (int16In), \
85 "a" (int8In) \
86 :\
87 "r26"\
88 )
+
+ + + + diff --git a/extras/doc/html/mult32x16_8h_source.html b/extras/doc/html/mult32x16_8h_source.html new file mode 100644 index 000000000..423759646 --- /dev/null +++ b/extras/doc/html/mult32x16_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: mult32x16.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
mult32x16.h
+
+
+
1 
2 /*
3 Norbert Pozar 2009
4 http://mekonik.wordpress.com/2009/03/18/arduino-avr-gcc-multiplication/
5 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
6 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
7 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
8 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
9 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
10 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
11 */
12 
13 // multiplies a signed long X unsigned int
14 // stores the high 4 uint8_ts of the result
15 // rounds the number up if the MSB of the 2 low uint8_ts is set
16 // 47 cycles
17 #define MultiSU32X16toH32Round(longRes, longIn1, intIn2) \
18 asm volatile ( \
19 "clr r26 \n\t" \
20 \
21 \
22 "mul %A1, %A2 \n\t" \
23 "mov r27, r1 \n\t" \
24 \
25 "mul %B1, %B2 \n\t" \
26 "movw %A0, r0 \n\t" \
27 \
28 "mulsu %D1, %B2 \n\t" \
29 "movw %C0, r0 \n\t" \
30 \
31 "mulsu %D1, %A2 \n\t" \
32 "sbc %D0, r26 \n\t" \
33 "add %B0, r0 \n\t" \
34 "adc %C0, r1 \n\t" \
35 "adc %D0, r26 \n\t" \
36 \
37 \
38 "mul %B1, %A2 \n\t" \
39 "add r27, r0 \n\t" \
40 "adc %A0, r1 \n\t" \
41 "adc %B0, r26 \n\t" \
42 "adc %C0, r26 \n\t" \
43 "adc %D0, r26 \n\t" \
44 \
45 "mul %A1, %B2 \n\t" \
46 "add r27, r0 \n\t" \
47 "adc %A0, r1 \n\t" \
48 "adc %B0, r26 \n\t" \
49 "adc %C0, r26 \n\t" \
50 "adc %D0, r26 \n\t" \
51 \
52 "mul %C1, %A2 \n\t" \
53 "adc %A0, r0 \n\t" \
54 "adc %B0, r1 \n\t" \
55 "adc %C0, r26 \n\t" \
56 "adc %D0, r26 \n\t" \
57 \
58 "mul %C1, %B2 \n\t" \
59 "adc %B0, r0 \n\t" \
60 "adc %C0, r1 \n\t" \
61 "adc %D0, r26 \n\t" \
62 \
63 \
64 "lsl r27 \n\t" \
65 "adc %A0, r26 \n\t" \
66 "adc %B0, r26 \n\t" \
67 "adc %C0, r26 \n\t" \
68 "adc %D0, r26 \n\t" \
69 \
70 \
71 "clr r1 \n\t" \
72 : \
73 "=&r" (longRes) \
74 : \
75 "a" (longIn1), \
76 "a" (intIn2) \
77 : \
78 "r26","r27" \
79 )
+
+ + + + diff --git a/extras/doc/html/nav_f.png b/extras/doc/html/nav_f.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa1ab2705aeb46802ea4efdc1fe15dcc990ffb9 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^j6iI`!2~2XGqLUlQt_THjv*C{Z|5H5J#4_ktXcTL ztReOEB=PUszJI)C`MX&(ls^!dQC!rs@J4x>nsJlhLI#Pwo9FMieE0hCy&JbSM@dnK+AKx+pPoN|eretBhfJ(_e;BOg6s}H~e54p?6@#a%pUXO@geCy2 ChB`$6 literal 0 HcmV?d00001 diff --git a/extras/doc/html/nav_g.png b/extras/doc/html/nav_g.png new file mode 100644 index 0000000000000000000000000000000000000000..2093a237a94f6c83e19ec6e5fd42f7ddabdafa81 GIT binary patch literal 95 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrB!3HFm1ilyoDK$?Q$B+ufw|5PB85lU25BhtE tr?otc=hd~V+ws&_A@j8Fiv!KD*dBfYfpou;V=Wf3K&ws3&r9E%5;~J0_Pgg&ebxsLQ03m`K?f?J) literal 0 HcmV?d00001 diff --git a/extras/doc/html/navtree.css b/extras/doc/html/navtree.css new file mode 100644 index 000000000..bb222de9f --- /dev/null +++ b/extras/doc/html/navtree.css @@ -0,0 +1,146 @@ +#nav-tree .children_ul { + margin:0; + padding:4px; +} + +#nav-tree ul { + list-style:none outside none; + margin:0px; + padding:0px; +} + +#nav-tree li { + white-space:nowrap; + margin:0px; + padding:0px; +} + +#nav-tree .plus { + margin:0px; +} + +#nav-tree .selected { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} + +#nav-tree img { + margin:0px; + padding:0px; + border:0px; + vertical-align: middle; +} + +#nav-tree a { + text-decoration:none; + padding:0px; + margin:0px; + outline:none; +} + +#nav-tree .label { + margin:0px; + padding:0px; + font: 12px 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +#nav-tree .label a { + padding:2px; +} + +#nav-tree .selected a { + text-decoration:none; + color:#fff; +} + +#nav-tree .children_ul { + margin:0px; + padding:0px; +} + +#nav-tree .item { + margin:0px; + padding:0px; +} + +#nav-tree { + padding: 0px 0px; + background-color: #FAFAFF; + font-size:14px; + overflow:auto; +} + +#doc-content { + overflow:auto; + display:block; + padding:0px; + margin:0px; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#side-nav { + padding:0 6px 0 0; + margin: 0px; + display:block; + position: absolute; + left: 0px; + width: 250px; +} + +.ui-resizable .ui-resizable-handle { + display:block; +} + +.ui-resizable-e { + background-image:url("splitbar.png"); + background-size:100%; + background-repeat:no-repeat; + background-attachment: scroll; + cursor:ew-resize; + height:100%; + right:0; + top:0; + width:6px; +} + +.ui-resizable-handle { + display:none; + font-size:0.1px; + position:absolute; + z-index:1; +} + +#nav-tree-contents { + margin: 6px 0px 0px 0px; +} + +#nav-tree { + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #FBFAFA; + -webkit-overflow-scrolling : touch; /* iOS 5+ */ +} + +#nav-sync { + position:absolute; + top:5px; + right:24px; + z-index:0; +} + +#nav-sync img { + opacity:0.3; +} + +#nav-sync img:hover { + opacity:0.9; +} + +@media print +{ + #nav-tree { display: none; } + div.ui-resizable-handle { display: none; position: relative; } +} + diff --git a/extras/doc/html/navtree.js b/extras/doc/html/navtree.js new file mode 100644 index 000000000..e6d31b00d --- /dev/null +++ b/extras/doc/html/navtree.js @@ -0,0 +1,517 @@ +var navTreeSubIndices = new Array(); +var arrowDown = '▼'; +var arrowRight = '►'; + +function getData(varName) +{ + var i = varName.lastIndexOf('/'); + var n = i>=0 ? varName.substring(i+1) : varName; + return eval(n.replace(/\-/g,'_')); +} + +function stripPath(uri) +{ + return uri.substring(uri.lastIndexOf('/')+1); +} + +function stripPath2(uri) +{ + var i = uri.lastIndexOf('/'); + var s = uri.substring(i+1); + var m = uri.substring(0,i+1).match(/\/d\w\/d\w\w\/$/); + return m ? uri.substring(i-6) : s; +} + +function hashValue() +{ + return $(location).attr('hash').substring(1).replace(/[^\w\-]/g,''); +} + +function hashUrl() +{ + return '#'+hashValue(); +} + +function pathName() +{ + return $(location).attr('pathname').replace(/[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]/g, ''); +} + +function localStorageSupported() +{ + try { + return 'localStorage' in window && window['localStorage'] !== null && window.localStorage.getItem; + } + catch(e) { + return false; + } +} + + +function storeLink(link) +{ + if (!$("#nav-sync").hasClass('sync') && localStorageSupported()) { + window.localStorage.setItem('navpath',link); + } +} + +function deleteLink() +{ + if (localStorageSupported()) { + window.localStorage.setItem('navpath',''); + } +} + +function cachedLink() +{ + if (localStorageSupported()) { + return window.localStorage.getItem('navpath'); + } else { + return ''; + } +} + +function getScript(scriptName,func,show) +{ + var head = document.getElementsByTagName("head")[0]; + var script = document.createElement('script'); + script.id = scriptName; + script.type = 'text/javascript'; + script.onload = func; + script.src = scriptName+'.js'; + if ($.browser.msie && $.browser.version<=8) { + // script.onload does not work with older versions of IE + script.onreadystatechange = function() { + if (script.readyState=='complete' || script.readyState=='loaded') { + func(); if (show) showRoot(); + } + } + } + head.appendChild(script); +} + +function createIndent(o,domNode,node,level) +{ + var level=-1; + var n = node; + while (n.parentNode) { level++; n=n.parentNode; } + if (node.childrenData) { + var imgNode = document.createElement("span"); + imgNode.className = 'arrow'; + imgNode.style.paddingLeft=(16*level).toString()+'px'; + imgNode.innerHTML=arrowRight; + node.plus_img = imgNode; + node.expandToggle = document.createElement("a"); + node.expandToggle.href = "javascript:void(0)"; + node.expandToggle.onclick = function() { + if (node.expanded) { + $(node.getChildrenUL()).slideUp("fast"); + node.plus_img.innerHTML=arrowRight; + node.expanded = false; + } else { + expandNode(o, node, false, false); + } + } + node.expandToggle.appendChild(imgNode); + domNode.appendChild(node.expandToggle); + } else { + var span = document.createElement("span"); + span.className = 'arrow'; + span.style.width = 16*(level+1)+'px'; + span.innerHTML = ' '; + domNode.appendChild(span); + } +} + +var animationInProgress = false; + +function gotoAnchor(anchor,aname,updateLocation) +{ + var pos, docContent = $('#doc-content'); + var ancParent = $(anchor.parent()); + if (ancParent.hasClass('memItemLeft') || + ancParent.hasClass('fieldname') || + ancParent.hasClass('fieldtype') || + ancParent.is(':header')) + { + pos = ancParent.position().top; + } else if (anchor.position()) { + pos = anchor.position().top; + } + if (pos) { + var dist = Math.abs(Math.min( + pos-docContent.offset().top, + docContent[0].scrollHeight- + docContent.height()-docContent.scrollTop())); + animationInProgress=true; + docContent.animate({ + scrollTop: pos + docContent.scrollTop() - docContent.offset().top + },Math.max(50,Math.min(500,dist)),function(){ + if (updateLocation) window.location.href=aname; + animationInProgress=false; + }); + } +} + +function newNode(o, po, text, link, childrenData, lastNode) +{ + var node = new Object(); + node.children = Array(); + node.childrenData = childrenData; + node.depth = po.depth + 1; + node.relpath = po.relpath; + node.isLast = lastNode; + + node.li = document.createElement("li"); + po.getChildrenUL().appendChild(node.li); + node.parentNode = po; + + node.itemDiv = document.createElement("div"); + node.itemDiv.className = "item"; + + node.labelSpan = document.createElement("span"); + node.labelSpan.className = "label"; + + createIndent(o,node.itemDiv,node,0); + node.itemDiv.appendChild(node.labelSpan); + node.li.appendChild(node.itemDiv); + + var a = document.createElement("a"); + node.labelSpan.appendChild(a); + node.label = document.createTextNode(text); + node.expanded = false; + a.appendChild(node.label); + if (link) { + var url; + if (link.substring(0,1)=='^') { + url = link.substring(1); + link = url; + } else { + url = node.relpath+link; + } + a.className = stripPath(link.replace('#',':')); + if (link.indexOf('#')!=-1) { + var aname = '#'+link.split('#')[1]; + var srcPage = stripPath(pathName()); + var targetPage = stripPath(link.split('#')[0]); + a.href = srcPage!=targetPage ? url : "javascript:void(0)"; + a.onclick = function(){ + storeLink(link); + if (!$(a).parent().parent().hasClass('selected')) + { + $('.item').removeClass('selected'); + $('.item').removeAttr('id'); + $(a).parent().parent().addClass('selected'); + $(a).parent().parent().attr('id','selected'); + } + var anchor = $(aname); + gotoAnchor(anchor,aname,true); + }; + } else { + a.href = url; + a.onclick = function() { storeLink(link); } + } + } else { + if (childrenData != null) + { + a.className = "nolink"; + a.href = "javascript:void(0)"; + a.onclick = node.expandToggle.onclick; + } + } + + node.childrenUL = null; + node.getChildrenUL = function() { + if (!node.childrenUL) { + node.childrenUL = document.createElement("ul"); + node.childrenUL.className = "children_ul"; + node.childrenUL.style.display = "none"; + node.li.appendChild(node.childrenUL); + } + return node.childrenUL; + }; + + return node; +} + +function showRoot() +{ + var headerHeight = $("#top").height(); + var footerHeight = $("#nav-path").height(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + (function (){ // retry until we can scroll to the selected item + try { + var navtree=$('#nav-tree'); + navtree.scrollTo('#selected',0,{offset:-windowHeight/2}); + } catch (err) { + setTimeout(arguments.callee, 0); + } + })(); +} + +function expandNode(o, node, imm, showRoot) +{ + if (node.childrenData && !node.expanded) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + expandNode(o, node, imm, showRoot); + }, showRoot); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } if (imm || ($.browser.msie && $.browser.version>8)) { + // somehow slideDown jumps to the start of tree for IE9 :-( + $(node.getChildrenUL()).show(); + } else { + $(node.getChildrenUL()).slideDown("fast"); + } + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + } + } +} + +function glowEffect(n,duration) +{ + n.addClass('glow').delay(duration).queue(function(next){ + $(this).removeClass('glow');next(); + }); +} + +function highlightAnchor() +{ + var aname = hashUrl(); + var anchor = $(aname); + if (anchor.parent().attr('class')=='memItemLeft'){ + var rows = $('.memberdecls tr[class$="'+hashValue()+'"]'); + glowEffect(rows.children(),300); // member without details + } else if (anchor.parent().attr('class')=='fieldname'){ + glowEffect(anchor.parent().parent(),1000); // enum value + } else if (anchor.parent().attr('class')=='fieldtype'){ + glowEffect(anchor.parent().parent(),1000); // struct field + } else if (anchor.parent().is(":header")) { + glowEffect(anchor.parent(),1000); // section header + } else { + glowEffect(anchor.next(),1000); // normal member + } + gotoAnchor(anchor,aname,false); +} + +function selectAndHighlight(hash,n) +{ + var a; + if (hash) { + var link=stripPath(pathName())+':'+hash.substring(1); + a=$('.item a[class$="'+link+'"]'); + } + if (a && a.length) { + a.parent().parent().addClass('selected'); + a.parent().parent().attr('id','selected'); + highlightAnchor(); + } else if (n) { + $(n.itemDiv).addClass('selected'); + $(n.itemDiv).attr('id','selected'); + } + if ($('#nav-tree-contents .item:first').hasClass('selected')) { + $('#nav-sync').css('top','30px'); + } else { + $('#nav-sync').css('top','5px'); + } + showRoot(); +} + +function showNode(o, node, index, hash) +{ + if (node && node.childrenData) { + if (typeof(node.childrenData)==='string') { + var varName = node.childrenData; + getScript(node.relpath+varName,function(){ + node.childrenData = getData(varName); + showNode(o,node,index,hash); + },true); + } else { + if (!node.childrenVisited) { + getNode(o, node); + } + $(node.getChildrenUL()).css({'display':'block'}); + node.plus_img.innerHTML = arrowDown; + node.expanded = true; + var n = node.children[o.breadcrumbs[index]]; + if (index+11) hash = '#'+parts[1].replace(/[^\w\-]/g,''); + else hash=''; + } + if (hash.match(/^#l\d+$/)) { + var anchor=$('a[name='+hash.substring(1)+']'); + glowEffect(anchor.parent(),1000); // line number + hash=''; // strip line number anchors + } + var url=root+hash; + var i=-1; + while (NAVTREEINDEX[i+1]<=url) i++; + if (i==-1) { i=0; root=NAVTREE[0][1]; } // fallback: show index + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath) + } else { + getScript(relpath+'navtreeindex'+i,function(){ + navTreeSubIndices[i] = eval('NAVTREEINDEX'+i); + if (navTreeSubIndices[i]) { + gotoNode(o,i,root,hash,relpath); + } + },true); + } +} + +function showSyncOff(n,relpath) +{ + n.html(''); +} + +function showSyncOn(n,relpath) +{ + n.html(''); +} + +function toggleSyncButton(relpath) +{ + var navSync = $('#nav-sync'); + if (navSync.hasClass('sync')) { + navSync.removeClass('sync'); + showSyncOff(navSync,relpath); + storeLink(stripPath2(pathName())+hashUrl()); + } else { + navSync.addClass('sync'); + showSyncOn(navSync,relpath); + deleteLink(); + } +} + +function initNavTree(toroot,relpath) +{ + var o = new Object(); + o.toroot = toroot; + o.node = new Object(); + o.node.li = document.getElementById("nav-tree-contents"); + o.node.childrenData = NAVTREE; + o.node.children = new Array(); + o.node.childrenUL = document.createElement("ul"); + o.node.getChildrenUL = function() { return o.node.childrenUL; }; + o.node.li.appendChild(o.node.childrenUL); + o.node.depth = 0; + o.node.relpath = relpath; + o.node.expanded = false; + o.node.isLast = true; + o.node.plus_img = document.createElement("span"); + o.node.plus_img.className = 'arrow'; + o.node.plus_img.innerHTML = arrowRight; + + if (localStorageSupported()) { + var navSync = $('#nav-sync'); + if (cachedLink()) { + showSyncOff(navSync,relpath); + navSync.removeClass('sync'); + } else { + showSyncOn(navSync,relpath); + } + navSync.click(function(){ toggleSyncButton(relpath); }); + } + + $(window).load(function(){ + navTo(o,toroot,hashUrl(),relpath); + showRoot(); + }); + + $(window).bind('hashchange', function(){ + if (window.location.hash && window.location.hash.length>1){ + var a; + if ($(location).attr('hash')){ + var clslink=stripPath(pathName())+':'+hashValue(); + a=$('.item a[class$="'+clslink.replace(/1|%O$WD@{Vww^AIAr*{o?;3I)P~c&`u>5(+ z*N}DhE?;t*CNx)8zGf2tNx=tZseKzCEZKIC`^}!;QjGtS{!QKV=%drO$IOS`@GN=D SZ+snS5QC?ypUXO@geCwuW-H(T literal 0 HcmV?d00001 diff --git a/extras/doc/html/primes_8h_source.html b/extras/doc/html/primes_8h_source.html new file mode 100644 index 000000000..9ec1365b5 --- /dev/null +++ b/extras/doc/html/primes_8h_source.html @@ -0,0 +1,114 @@ + + + + + + + +Mozzi: primes.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
primes.h
+
+
+
1 /*
2  * Primes.h
3  *
4  * Copyright 2012 Tim Barrass.
5  *
6  * This file is part of Mozzi.
7  *
8  * Mozzi is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
9  *
10  */
11 
12  /*
13 Inspired by PrimeSieve by Paul Badger 2009
14 http://playground.arduino.cc/Main/PrimeSieve
15 
16 Generates random primes up to 10000.
17 Takes up about 2.5k of progmem
18 */
19 
20 #ifndef PRIMES_H
21 #define PRIMES_H
22 
23 #include "mozzi_rand.h" // for rand()
24 
25 static const unsigned int __attribute__((section(".progmem.data"))) primes[]={
26  2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997, 1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097, 1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193, 1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297, 1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399, 1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499, 1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597, 1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699, 1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789, 1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889, 1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999, 2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099, 2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179, 2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297, 2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399, 2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477, 2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593, 2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699, 2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797, 2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897, 2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999, 3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089, 3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191, 3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299, 3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391, 3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499, 3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593, 3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697, 3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797, 3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889, 3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989, 4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099, 4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177, 4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297, 4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397, 4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493, 4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597, 4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691, 4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799, 4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889, 4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999, 5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099, 5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197, 5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297, 5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399, 5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483, 5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591, 5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693, 5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791, 5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897, 5903, 5923, 5927, 5939, 5953, 5981, 5987, 6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091, 6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199, 6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299, 6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397, 6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491, 6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599, 6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691, 6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793, 6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899, 6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997, 7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079, 7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193, 7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297, 7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393, 7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499, 7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591, 7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699, 7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793, 7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883, 7901, 7907, 7919, 7927, 7933, 7937, 7949, 7951, 7963, 7993, 8009, 8011, 8017, 8039, 8053, 8059, 8069, 8081, 8087, 8089, 8093, 8101, 8111, 8117, 8123, 8147, 8161, 8167, 8171, 8179, 8191, 8209, 8219, 8221, 8231, 8233, 8237, 8243, 8263, 8269, 8273, 8287, 8291, 8293, 8297, 8311, 8317, 8329, 8353, 8363, 8369, 8377, 8387, 8389, 8419, 8423, 8429, 8431, 8443, 8447, 8461, 8467, 8501, 8513, 8521, 8527, 8537, 8539, 8543, 8563, 8573, 8581, 8597, 8599, 8609, 8623, 8627, 8629, 8641, 8647, 8663, 8669, 8677, 8681, 8689, 8693, 8699, 8707, 8713, 8719, 8731, 8737, 8741, 8747, 8753, 8761, 8779, 8783, 8803, 8807, 8819, 8821, 8831, 8837, 8839, 8849, 8861, 8863, 8867, 8887, 8893, 8923, 8929, 8933, 8941, 8951, 8963, 8969, 8971, 8999, 9001, 9007, 9011, 9013, 9029, 9041, 9043, 9049, 9059, 9067, 9091, 9103, 9109, 9127, 9133, 9137, 9151, 9157, 9161, 9173, 9181, 9187, 9199, 9203, 9209, 9221, 9227, 9239, 9241, 9257, 9277, 9281, 9283, 9293, 9311, 9319, 9323, 9337, 9341, 9343, 9349, 9371, 9377, 9391, 9397, 9403, 9413, 9419, 9421, 9431, 9433, 9437, 9439, 9461, 9463, 9467, 9473, 9479, 9491, 9497, 9511, 9521, 9533, 9539, 9547, 9551, 9587, 9601, 9613, 9619, 9623, 9629, 9631, 9643, 9649, 9661, 9677, 9679, 9689, 9697, 9719, 9721, 9733, 9739, 9743, 9749, 9767, 9769, 9781, 9787, 9791, 9803, 9811, 9817, 9829, 9833, 9839, 9851, 9857, 9859, 9871, 9883, 9887, 9901, 9907, 9923, 9929, 9931, 9941, 9949, 9967, 9973,};
27 
28 static const unsigned int TOP_PRIME_INDEX = (sizeof(primes)/2);// - 1; //1228
29 
30 /*
31 unsigned int prime(){
32  return primes[rand(TOP_PRIME_INDEX)];
33 }
34 */
35 
46 inline
47 unsigned int randPrime(unsigned int n){
48  return pgm_read_word(primes+rand(n));
49 }
50 
61 inline
62 unsigned int randPrimeUpTo(unsigned int n){
63  unsigned int p;
64  do {
65  p = pgm_read_word(primes+rand(TOP_PRIME_INDEX));
66  } while (p > n);
67 }
68 
69 #endif // #ifndef PRIMES_H
unsigned int randPrime(unsigned int n)
Generates a random prime number between 0 and the n-1th prime number.
Definition: primes.h:47
+
unsigned int randPrimeUpTo(unsigned int n)
Generates a random prime number between 0 and the given input number inclusive.
Definition: primes.h:62
+
int8_t rand(int8_t minval, int8_t maxval)
Ranged random number generator, faster than Arduino&#39;s built-in random function, which is too slow for...
Definition: mozzi_rand.cpp:141
+
+
+ + + + diff --git a/extras/doc/html/resize.js b/extras/doc/html/resize.js new file mode 100644 index 000000000..6d78f5b97 --- /dev/null +++ b/extras/doc/html/resize.js @@ -0,0 +1,113 @@ +function initResizable() +{ + var cookie_namespace = 'doxygen'; + var sidenav,navtree,content,header,collapsed,collapsedWidth=0,barWidth=6,desktop_vp=768,titleHeight; + + function readCookie(cookie) + { + var myCookie = cookie_namespace+"_"+cookie+"="; + if (document.cookie) { + var index = document.cookie.indexOf(myCookie); + if (index != -1) { + var valStart = index + myCookie.length; + var valEnd = document.cookie.indexOf(";", valStart); + if (valEnd == -1) { + valEnd = document.cookie.length; + } + var val = document.cookie.substring(valStart, valEnd); + return val; + } + } + return 0; + } + + function writeCookie(cookie, val, expiration) + { + if (val==undefined) return; + if (expiration == null) { + var date = new Date(); + date.setTime(date.getTime()+(10*365*24*60*60*1000)); // default expiration is one week + expiration = date.toGMTString(); + } + document.cookie = cookie_namespace + "_" + cookie + "=" + val + "; expires=" + expiration+"; path=/"; + } + + function resizeWidth() + { + var windowWidth = $(window).width() + "px"; + var sidenavWidth = $(sidenav).outerWidth(); + content.css({marginLeft:parseInt(sidenavWidth)+"px"}); + writeCookie('width',sidenavWidth-barWidth, null); + } + + function restoreWidth(navWidth) + { + var windowWidth = $(window).width() + "px"; + content.css({marginLeft:parseInt(navWidth)+barWidth+"px"}); + sidenav.css({width:navWidth + "px"}); + } + + function resizeHeight() + { + var headerHeight = header.outerHeight(); + var footerHeight = footer.outerHeight(); + var windowHeight = $(window).height() - headerHeight - footerHeight; + content.css({height:windowHeight + "px"}); + navtree.css({height:windowHeight + "px"}); + sidenav.css({height:windowHeight + "px"}); + var width=$(window).width(); + if (width!=collapsedWidth) { + if (width=desktop_vp) { + if (!collapsed) { + collapseExpand(); + } + } else if (width>desktop_vp && collapsedWidth0) { + restoreWidth(0); + collapsed=true; + } + else { + var width = readCookie('width'); + if (width>200 && width<$(window).width()) { restoreWidth(width); } else { restoreWidth(200); } + collapsed=false; + } + } + + header = $("#top"); + sidenav = $("#side-nav"); + content = $("#doc-content"); + navtree = $("#nav-tree"); + footer = $("#nav-path"); + $(".side-nav-resizable").resizable({resize: function(e, ui) { resizeWidth(); } }); + $(sidenav).resizable({ minWidth: 0 }); + $(window).resize(function() { resizeHeight(); }); + var device = navigator.userAgent.toLowerCase(); + var touch_device = device.match(/(iphone|ipod|ipad|android)/); + if (touch_device) { /* wider split bar for touch only devices */ + $(sidenav).css({ paddingRight:'20px' }); + $('.ui-resizable-e').css({ width:'20px' }); + $('#nav-sync').css({ right:'34px' }); + barWidth=20; + } + var width = readCookie('width'); + if (width) { restoreWidth(width); } else { resizeWidth(); } + var url = location.href; + var i=url.indexOf("#"); + if (i>=0) window.location.hash=url.substr(i); + var _preventDefault = function(evt) { evt.preventDefault(); }; + $("#splitbar").bind("dragstart", _preventDefault).bind("selectstart", _preventDefault); + $(".ui-resizable-handle").dblclick(collapseExpand); + $(window).load(resizeHeight); +} + + diff --git a/extras/doc/html/search/all_0.html b/extras/doc/html/search/all_0.html new file mode 100644 index 000000000..43594633a --- /dev/null +++ b/extras/doc/html/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_0.js b/extras/doc/html/search/all_0.js new file mode 100644 index 000000000..5df58e597 --- /dev/null +++ b/extras/doc/html/search/all_0.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['adcdisconnectalldigitalins',['adcDisconnectAllDigitalIns',['../group__analog.html#ga5042e7c576dd0307be38eb70efdb69fe',1,'adcDisconnectAllDigitalIns(): mozzi_analog.cpp'],['../group__analog.html#ga5042e7c576dd0307be38eb70efdb69fe',1,'adcDisconnectAllDigitalIns(): mozzi_analog.cpp']]], + ['adcreconnectalldigitalins',['adcReconnectAllDigitalIns',['../group__analog.html#gabad497d1f8c8026e81849be0b65bf38f',1,'adcReconnectAllDigitalIns(): mozzi_analog.cpp'],['../group__analog.html#gabad497d1f8c8026e81849be0b65bf38f',1,'adcReconnectAllDigitalIns(): mozzi_analog.cpp']]], + ['adsr',['ADSR',['../class_a_d_s_r.html',1,'ADSR< CONTROL_UPDATE_RATE, LERP_RATE >'],['../class_a_d_s_r.html#a3c0d554daae3502cfecee7f3e6a28dd0',1,'ADSR::ADSR()']]], + ['adsr_3c_20control_5frate_2c_20audio_5frate_20_3e',['ADSR< CONTROL_RATE, AUDIO_RATE >',['../class_a_d_s_r.html',1,'']]], + ['adsr_3c_20control_5frate_2c_20control_5frate_20_3e',['ADSR< CONTROL_RATE, CONTROL_RATE >',['../class_a_d_s_r.html',1,'']]], + ['analog',['Analog',['../group__analog.html',1,'']]], + ['atindex',['atIndex',['../class_oscil.html#a97f2c0f28751641417202fee2a0776d3',1,'Oscil::atIndex()'],['../class_sample.html#a86948f48dcdc0cb19f6e256ece70149d',1,'Sample::atIndex()']]], + ['audio_5finput_5fpin',['AUDIO_INPUT_PIN',['../group__core.html#gad6f503b77ed0c93394363460509f5cbd',1,'mozzi_config.h']]], + ['audio_5fmode',['AUDIO_MODE',['../group__core.html#ga9c4a39187db1d0a1ad0fa6981920f383',1,'mozzi_config.h']]], + ['audio_5frate',['AUDIO_RATE',['../group__core.html#ga5b972bafb3267e820993812beca1b298',1,'mozzi_config.h']]], + ['audiodelay',['AudioDelay',['../class_audio_delay.html',1,'AudioDelay< NUM_BUFFER_SAMPLES, T >'],['../class_audio_delay.html#a688f69088f96bf3976a8555d3026365f',1,'AudioDelay::AudioDelay()'],['../class_audio_delay.html#a79be253fcb5709624c8fb708e54f069f',1,'AudioDelay::AudioDelay(unsigned int delaytime_cells)']]], + ['audiodelay_3c_20128_20_3e',['AudioDelay< 128 >',['../class_audio_delay.html',1,'']]], + ['audiodelay_3c_20128_2c_20int_20_3e',['AudioDelay< 128, int >',['../class_audio_delay.html',1,'']]], + ['audiodelay_3c_20256_2c_20int_20_3e',['AudioDelay< 256, int >',['../class_audio_delay.html',1,'']]], + ['audiodelayfeedback',['AudioDelayFeedback',['../class_audio_delay_feedback.html',1,'AudioDelayFeedback< NUM_BUFFER_SAMPLES, INTERP_TYPE >'],['../class_audio_delay_feedback.html#a6e6352413ac4ee9b2bc03684b072fdc7',1,'AudioDelayFeedback::AudioDelayFeedback()'],['../class_audio_delay_feedback.html#a7d038aff13126acbca484b74b1ee5620',1,'AudioDelayFeedback::AudioDelayFeedback(uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#a54d7f001d6a99bd3955fb7dab94fbfe8',1,'AudioDelayFeedback::AudioDelayFeedback(uint16_t delaytime_cells, int8_t feedback_level)']]], + ['audiohook',['audioHook',['../group__core.html#ga2fca37b988ab369e2f3c3108c683e59d',1,'audioHook(): MozziGuts.cpp'],['../group__core.html#ga2fca37b988ab369e2f3c3108c683e59d',1,'audioHook(): MozziGuts.cpp']]], + ['audioticks',['audioTicks',['../group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0',1,'audioTicks(): MozziGuts.cpp'],['../group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0',1,'audioTicks(): MozziGuts.cpp']]], + ['automap',['AutoMap',['../class_auto_map.html',1,'AutoMap'],['../class_auto_map.html#aec125f071bd83180ff0d0a71446725f3',1,'AutoMap::AutoMap()']]], + ['autorange',['AutoRange',['../class_auto_range.html',1,'AutoRange< T >'],['../class_auto_range.html#a2f0638f4d8e2937080b67fc0614c8d6d',1,'AutoRange::AutoRange()']]], + ['autorange_3c_20int_20_3e',['AutoRange< int >',['../class_auto_range.html',1,'']]] +]; diff --git a/extras/doc/html/search/all_1.html b/extras/doc/html/search/all_1.html new file mode 100644 index 000000000..bc87ea8cf --- /dev/null +++ b/extras/doc/html/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_1.js b/extras/doc/html/search/all_1.js new file mode 100644 index 000000000..d896894c7 --- /dev/null +++ b/extras/doc/html/search/all_1.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['cappoll',['CapPoll',['../class_cap_poll.html',1,'CapPoll< SENSOR_PIN, SEND_PIN >'],['../class_cap_poll.html#a4f691e78391a306d9ee89cdb1026096f',1,'CapPoll::CapPoll()']]], + ['char2mozzi_2epy',['char2mozzi.py',['../char2mozzi_8py.html',1,'']]], + ['circularbuffer',['CircularBuffer',['../class_circular_buffer.html',1,'CircularBuffer< ITEM_TYPE >'],['../class_circular_buffer.html#a6789c0d6d73594fdd412a39445b5cd67',1,'CircularBuffer::CircularBuffer()']]], + ['control_5frate',['CONTROL_RATE',['../group__core.html#gae5d737db8bc97ecf08d2ea3121782d26',1,'MozziGuts.h']]], + ['controldelay',['ControlDelay',['../class_control_delay.html',1,'']]], + ['core',['Core',['../group__core.html',1,'']]] +]; diff --git a/extras/doc/html/search/all_10.html b/extras/doc/html/search/all_10.html new file mode 100644 index 000000000..16ffd9a0c --- /dev/null +++ b/extras/doc/html/search/all_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_10.js b/extras/doc/html/search/all_10.js new file mode 100644 index 000000000..cc64330e0 --- /dev/null +++ b/extras/doc/html/search/all_10.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['uint8_5ftdiv',['uint8_tDiv',['../group__fixmath.html#ga1717d922e241ef368b81def7fd6c2446',1,'mozzi_fixmath.cpp']]], + ['uint8_5ftmod',['uint8_tMod',['../group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414',1,'uint8_tMod(uint8_t n, uint8_t d): mozzi_fixmath.cpp'],['../group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414',1,'uint8_tMod(uint8_t n, uint8_t d): mozzi_fixmath.cpp']]], + ['unpausemozzi',['unPauseMozzi',['../group__core.html#ga1718c5f0bbb56cc4b2db55702750f43f',1,'unPauseMozzi(): MozziGuts.cpp'],['../group__core.html#ga1718c5f0bbb56cc4b2db55702750f43f',1,'unPauseMozzi(): MozziGuts.cpp']]], + ['update',['update',['../class_a_d_s_r.html#a764566274a3982b43cb1f9fb47ca06ae',1,'ADSR::update()'],['../class_multi_line.html#a0f459efd016e16e8ba81612c7458cdeb',1,'MultiLine::update()'],['../class_multi_line.html#a0f459efd016e16e8ba81612c7458cdeb',1,'MultiLine::update()'],['../class_p_d_resonant.html#ae604c6401c636ab32757913f21c6dbe6',1,'PDResonant::update()'],['../class_rolling_stat.html#a85750e78ac282caec24408dce6e78201',1,'RollingStat::update(T x)'],['../class_rolling_stat.html#a6f7b384ab338da5ba10200fbce7f2eb0',1,'RollingStat::update(int8_t x)']]], + ['updateaudio',['updateAudio',['../group__core.html#ga5503f580eb9f9c25000ea6d1bd925f6f',1,'MozziGuts.h']]], + ['updatecontrol',['updateControl',['../group__core.html#ga59d187b915b2e366c88489e52801951a',1,'MozziGuts.h']]], + ['use_5faudio_5finput',['USE_AUDIO_INPUT',['../group__core.html#ga3417fc0b453af798a70340c912a4b657',1,'mozzi_config.h']]], + ['util',['Util',['../group__util.html',1,'']]] +]; diff --git a/extras/doc/html/search/all_11.html b/extras/doc/html/search/all_11.html new file mode 100644 index 000000000..d689820da --- /dev/null +++ b/extras/doc/html/search/all_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_11.js b/extras/doc/html/search/all_11.js new file mode 100644 index 000000000..2452b73bc --- /dev/null +++ b/extras/doc/html/search/all_11.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['wavepacket',['WavePacket',['../class_wave_packet.html',1,'WavePacket< ALGORITHM >'],['../class_wave_packet.html#a09afa3b26d61c97e24ccbae9cba2fd57',1,'WavePacket::WavePacket()']]], + ['wavepacketsample',['WavePacketSample',['../class_wave_packet_sample.html',1,'']]], + ['waveshaper',['WaveShaper',['../class_wave_shaper.html',1,'WaveShaper< T >'],['../class_wave_shaper_3_01char_01_4.html#a6364609248c42174f9f7e4974585e301',1,'WaveShaper< char >::WaveShaper()'],['../class_wave_shaper_3_01int_01_4.html#a9cc7f4f6a7493172cdc94411ac09275a',1,'WaveShaper< int >::WaveShaper()']]], + ['waveshaper_3c_20char_20_3e',['WaveShaper< char >',['../class_wave_shaper_3_01char_01_4.html',1,'']]], + ['waveshaper_3c_20int_20_3e',['WaveShaper< int >',['../class_wave_shaper_3_01int_01_4.html',1,'']]], + ['write',['write',['../class_audio_delay_feedback.html#aa3232fec9e7f90169e8d8eab85f39394',1,'AudioDelayFeedback::write(int8_t input)'],['../class_audio_delay_feedback.html#aeeec669071403fc0a294724e775e3812',1,'AudioDelayFeedback::write(int8_t input, uint16_t offset)']]], + ['writefeedback',['writeFeedback',['../class_audio_delay_feedback.html#a27e773a0ae0c2cee895fbcf18c1351e1',1,'AudioDelayFeedback']]] +]; diff --git a/extras/doc/html/search/all_12.html b/extras/doc/html/search/all_12.html new file mode 100644 index 000000000..698e2c5b6 --- /dev/null +++ b/extras/doc/html/search/all_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_12.js b/extras/doc/html/search/all_12.js new file mode 100644 index 000000000..9a86cca12 --- /dev/null +++ b/extras/doc/html/search/all_12.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['xorshift96',['xorshift96',['../group__random.html#gaf2deee83847f1fcee2c859d97bd072f6',1,'xorshift96(): mozzi_rand.cpp'],['../group__random.html#gaf2deee83847f1fcee2c859d97bd072f6',1,'xorshift96(): mozzi_rand.cpp']]], + ['xorshiftseed',['xorshiftSeed',['../group__random.html#gaf7117eb5e1e0676c276be7094ce30ab7',1,'mozzi_rand.cpp']]] +]; diff --git a/extras/doc/html/search/all_2.html b/extras/doc/html/search/all_2.html new file mode 100644 index 000000000..0f777c299 --- /dev/null +++ b/extras/doc/html/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_2.js b/extras/doc/html/search/all_2.js new file mode 100644 index 000000000..7f1a447c6 --- /dev/null +++ b/extras/doc/html/search/all_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dcfilter',['DCfilter',['../class_d_cfilter.html',1,'DCfilter'],['../class_d_cfilter.html#ab55e871fc9d11dfb9231e44627181c2c',1,'DCfilter::DCfilter()']]], + ['disconnectdigitalin',['disconnectDigitalIn',['../group__analog.html#ga532fe99fe78e34d4e6ae0ae2c7528353',1,'disconnectDigitalIn(uint8_t channel_num): mozzi_analog.cpp'],['../group__analog.html#ga532fe99fe78e34d4e6ae0ae2c7528353',1,'disconnectDigitalIn(uint8_t channel_num): mozzi_analog.cpp']]] +]; diff --git a/extras/doc/html/search/all_3.html b/extras/doc/html/search/all_3.html new file mode 100644 index 000000000..ac9dbf9fe --- /dev/null +++ b/extras/doc/html/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_3.js b/extras/doc/html/search/all_3.js new file mode 100644 index 000000000..031089048 --- /dev/null +++ b/extras/doc/html/search/all_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ead',['Ead',['../class_ead.html',1,'Ead'],['../class_ead.html#a4862282805c2ac3255a34a99a31564d5',1,'Ead::Ead()']]], + ['eventdelay',['EventDelay',['../class_event_delay.html',1,'EventDelay'],['../class_event_delay.html#acd7b63341732ac4c23bce04d81316017',1,'EventDelay::EventDelay()']]] +]; diff --git a/extras/doc/html/search/all_4.html b/extras/doc/html/search/all_4.html new file mode 100644 index 000000000..8308168cd --- /dev/null +++ b/extras/doc/html/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_4.js b/extras/doc/html/search/all_4.js new file mode 100644 index 000000000..3269ab20b --- /dev/null +++ b/extras/doc/html/search/all_4.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['fixmath',['Fixmath',['../group__fixmath.html',1,'']]], + ['float_5fto_5fq0n16',['float_to_Q0n16',['../group__fixmath.html#ga4d20591828f0189963f1190f7197ba68',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq0n7',['float_to_Q0n7',['../group__fixmath.html#ga1e0eab490ffe9a47fd78bcc449e3b995',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq0n8',['float_to_Q0n8',['../group__fixmath.html#ga00e21c6b9d75ed26cd3bf1b9f4f9482e',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq15n16',['float_to_Q15n16',['../group__fixmath.html#ga0e76f24ef8dfe0fa7510c4eea2608d5c',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq16n16',['float_to_Q16n16',['../group__fixmath.html#ga041d3ba65c131b9aa01b9f34ec439b71',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq1n14',['float_to_Q1n14',['../group__fixmath.html#ga1aab8b66d6d6f370cc66d82968884d18',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq1n15',['float_to_Q1n15',['../group__fixmath.html#ga447e25c2d6c9bf14d8e324df0cc02753',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq23n8',['float_to_Q23n8',['../group__fixmath.html#ga2ca980a6d71eb894b07534b30d9b7a06',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq24n8',['float_to_Q24n8',['../group__fixmath.html#gaf91bc6123ecaff1441660d3abb20bf2e',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq7n8',['float_to_Q7n8',['../group__fixmath.html#ga2a28dc262b3e79e0f67e4089cccaab45',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq8n24',['float_to_Q8n24',['../group__fixmath.html#ga33ecb8a512f7d4eff5047d4ad65f5423',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq8n8',['float_to_Q8n8',['../group__fixmath.html#ga36132b5f8f95223749b410ca235eef16',1,'mozzi_fixmath.h']]] +]; diff --git a/extras/doc/html/search/all_5.html b/extras/doc/html/search/all_5.html new file mode 100644 index 000000000..7919cd4d8 --- /dev/null +++ b/extras/doc/html/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_5.js b/extras/doc/html/search/all_5.js new file mode 100644 index 000000000..1ad5544c7 --- /dev/null +++ b/extras/doc/html/search/all_5.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['getaudioinput',['getAudioInput',['../group__analog.html#ga3f15eb8d6694020d170ebcbedb645de7',1,'getAudioInput(): MozziGuts.cpp'],['../group__analog.html#ga3f15eb8d6694020d170ebcbedb645de7',1,'getAudioInput(): MozziGuts.cpp']]], + ['getmax',['getMax',['../class_auto_range.html#a4d27e5fe43f9b376b537def88ac74119',1,'AutoRange']]], + ['getmean',['getMean',['../class_rolling_stat.html#a8521a53cde7c5d28ac9c375aaee3a972',1,'RollingStat']]], + ['getmin',['getMin',['../class_auto_range.html#acd1dae6e6ffb288efc1618e2453ad5ef',1,'AutoRange']]], + ['getphasefractional',['getPhaseFractional',['../class_oscil.html#aa774ef68b06f9652e6ac23d4e9332554',1,'Oscil']]], + ['getrange',['getRange',['../class_auto_range.html#a75c842b27ad3917be6d29e3d35b485f3',1,'AutoRange']]], + ['getstandarddeviation',['getStandardDeviation',['../class_rolling_stat.html#a234ab1d244e4b392056fcaa1fc1e4fc4',1,'RollingStat']]], + ['getvariance',['getVariance',['../class_rolling_stat.html#a3e7e5f706e3b5ac2496f14b7b639775d',1,'RollingStat']]] +]; diff --git a/extras/doc/html/search/all_6.html b/extras/doc/html/search/all_6.html new file mode 100644 index 000000000..89d590c49 --- /dev/null +++ b/extras/doc/html/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_6.js b/extras/doc/html/search/all_6.js new file mode 100644 index 000000000..8fdfa3eca --- /dev/null +++ b/extras/doc/html/search/all_6.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['int2type',['Int2Type',['../group__util.html#struct_int2_type',1,'']]], + ['intmap',['IntMap',['../class_int_map.html',1,'IntMap'],['../class_int_map.html#a36ab6e0137254909f44ae909dfe44a8a',1,'IntMap::IntMap()']]], + ['isplaying',['isPlaying',['../class_sample.html#ae4fa817151691ece9d2a91a0c0c03007',1,'Sample']]] +]; diff --git a/extras/doc/html/search/all_7.html b/extras/doc/html/search/all_7.html new file mode 100644 index 000000000..0e8c527ee --- /dev/null +++ b/extras/doc/html/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_7.js b/extras/doc/html/search/all_7.js new file mode 100644 index 000000000..413ad5999 --- /dev/null +++ b/extras/doc/html/search/all_7.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['line',['Line',['../class_line.html',1,'Line< T >'],['../class_line.html#aa6a80df90da15782ca88889ef9c8dd51',1,'Line::Line()'],['../class_line_3_01unsigned_01char_01_4.html#a151189139ee6ed39bacec86ea2364124',1,'Line< unsigned char >::Line()'],['../class_line_3_01unsigned_01int_01_4.html#a32c77e9442a640df179ec4573e8fea6d',1,'Line< unsigned int >::Line()'],['../class_line_3_01unsigned_01long_01_4.html#a797b2ebfe450971b6e75c26b1e6c88da',1,'Line< unsigned long >::Line()']]], + ['line_3c_20q15n16_20_3e',['Line< Q15n16 >',['../class_line.html',1,'']]], + ['line_3c_20q16n16_20_3e',['Line< Q16n16 >',['../class_line.html',1,'']]], + ['line_3c_20unsigned_20char_20_3e',['Line< unsigned char >',['../class_line_3_01unsigned_01char_01_4.html',1,'']]], + ['line_3c_20unsigned_20int_20_3e',['Line< unsigned int >',['../class_line_3_01unsigned_01int_01_4.html',1,'']]], + ['line_3c_20unsigned_20long_20_3e',['Line< unsigned long >',['../class_line_3_01unsigned_01long_01_4.html',1,'']]], + ['low15bits',['low15bits',['../group__fixmath.html#gac357561cf7360f82a264d90096d0126b',1,'mozzi_fixmath.h']]], + ['lowpassfilter',['LowPassFilter',['../class_low_pass_filter.html',1,'LowPassFilter'],['../class_low_pass_filter.html#a6d6538d3dfe603cce18711c990b85a03',1,'LowPassFilter::LowPassFilter()']]] +]; diff --git a/extras/doc/html/search/all_8.html b/extras/doc/html/search/all_8.html new file mode 100644 index 000000000..80bda0677 --- /dev/null +++ b/extras/doc/html/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_8.js b/extras/doc/html/search/all_8.js new file mode 100644 index 000000000..30c18272b --- /dev/null +++ b/extras/doc/html/search/all_8.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['metronome',['Metronome',['../class_metronome.html',1,'Metronome'],['../class_metronome.html#a37e8b0aa5a9aa8fa0f33212360cc0928',1,'Metronome::Metronome()']]], + ['midi',['Midi',['../group__midi.html',1,'']]], + ['mozzianalogread',['mozziAnalogRead',['../group__analog.html#gae9536bf35f6ea46a6938d5eb52b947c3',1,'mozziAnalogRead(uint8_t pin): mozzi_analog.cpp'],['../group__analog.html#gae9536bf35f6ea46a6938d5eb52b947c3',1,'mozziAnalogRead(uint8_t pin): mozzi_analog.cpp']]], + ['mozzimicros',['mozziMicros',['../group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe',1,'mozziMicros(): MozziGuts.cpp'],['../group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe',1,'mozziMicros(): MozziGuts.cpp']]], + ['mtof',['mtof',['../group__midi.html#gafacb8849f96270644ea79184fde7db37',1,'mtof(float midival): mozzi_midi.cpp'],['../group__midi.html#ga07d1ca985403df63f75aa5d143477206',1,'mtof(uint8_t midi_note): mozzi_midi.cpp'],['../group__midi.html#ga08102facf170648591b2ca24a3c39712',1,'mtof(int midi_note): mozzi_midi.cpp'],['../group__midi.html#gafacb8849f96270644ea79184fde7db37',1,'mtof(float x): mozzi_midi.cpp'],['../group__midi.html#ga07d1ca985403df63f75aa5d143477206',1,'mtof(uint8_t midi_note): mozzi_midi.cpp'],['../group__midi.html#ga08102facf170648591b2ca24a3c39712',1,'mtof(int midi_note): mozzi_midi.cpp']]], + ['multiline',['MultiLine',['../class_multi_line.html',1,'MultiLine< CONTROL_UPDATE_RATE, LERP_RATE >'],['../class_multi_line.html#ad5aed7c3561c71a13398015e2f396fdc',1,'MultiLine::MultiLine()'],['../class_multi_line.html#ad5aed7c3561c71a13398015e2f396fdc',1,'MultiLine::MultiLine()']]] +]; diff --git a/extras/doc/html/search/all_9.html b/extras/doc/html/search/all_9.html new file mode 100644 index 000000000..8ebc8a2aa --- /dev/null +++ b/extras/doc/html/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_9.js b/extras/doc/html/search/all_9.js new file mode 100644 index 000000000..5e9f20a5f --- /dev/null +++ b/extras/doc/html/search/all_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['next',['next',['../class_a_d_s_r.html#ab5cc9ada01565729187d65fce113899d',1,'ADSR::next()'],['../class_audio_delay.html#a19258636609d83a2bab11849e17b5294',1,'AudioDelay::next(T in_value, unsigned int delaytime_cells)'],['../class_audio_delay.html#a41c09b5cc9e817d8eaf111b0f74c9a0b',1,'AudioDelay::next(T in_value)'],['../class_audio_delay_feedback.html#a5a702d1a0a9b104beb0b18c80422500e',1,'AudioDelayFeedback::next(int8_t input)'],['../class_audio_delay_feedback.html#a7c7745dd84f01dbdc9b6552a4c427f0b',1,'AudioDelayFeedback::next(int8_t input, uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#af9cc2cf135fa0f1a1f0d50ca7d9f89ea',1,'AudioDelayFeedback::next(int8_t input, Q16n16 delaytime_cells)'],['../class_auto_map.html#a34bc821f4f662e54383dd9d61db782df',1,'AutoMap::next()'],['../class_auto_range.html#a788fca4c9f1e6699eb1990582015c0e3',1,'AutoRange::next()'],['../class_cap_poll.html#a894e8abbabff197f4d17106455fef718',1,'CapPoll::next()'],['../class_d_cfilter.html#ae900f943d9520fbf3a522508231d82b0',1,'DCfilter::next()'],['../class_ead.html#a57e6f7b304c2bd7dd8cedf7f4fba66c9',1,'Ead::next()'],['../class_line.html#a413f620b2824c6996b3346ee54351849',1,'Line::next()'],['../class_line_3_01unsigned_01char_01_4.html#ad33f421ca975cb6b175a1c1f3ba0b68a',1,'Line< unsigned char >::next()'],['../class_line_3_01unsigned_01int_01_4.html#a4bf1b56d036097ecc3e28d52ef129ade',1,'Line< unsigned int >::next()'],['../class_line_3_01unsigned_01long_01_4.html#a69f39cf62a30d001d50daf82f45f191b',1,'Line< unsigned long >::next()'],['../class_low_pass_filter.html#a393f154ec729419747c5dd630327b852',1,'LowPassFilter::next()'],['../class_multi_line.html#ab165b0a67b57bd590b95abc42b8bf6c2',1,'MultiLine::next()'],['../class_multi_line.html#ab165b0a67b57bd590b95abc42b8bf6c2',1,'MultiLine::next()'],['../class_oscil.html#a655de04690650b27182e3b4d07768d46',1,'Oscil::next()'],['../class_over_sample.html#a413ca7de0dbf3d2afafd84aa75857442',1,'OverSample::next()'],['../class_p_d_resonant.html#a80bd42c7ea92a64c3b8a42779a1e0d26',1,'PDResonant::next()'],['../class_phasor.html#a08ab94aeb466450173bd486fbf8eb823',1,'Phasor::next()'],['../class_portamento.html#ad39101f5275c433713df7699214638bc',1,'Portamento::next()'],['../class_r_cpoll.html#ab61697b3922ed289c8d501ccd11cbd6f',1,'RCpoll::next()'],['../class_reverb_tank.html#a4930ae7a871dba610fb141d7ab83d827',1,'ReverbTank::next()'],['../class_rolling_average.html#a23c4b93258faace0c7ee60eb395d2c4b',1,'RollingAverage::next()'],['../class_sample.html#a087e0da33436c9bfce1f462df50ac2a9',1,'Sample::next()'],['../class_sample_huffman.html#a8ec7bbb21f5cf0e780611a7539e86695',1,'SampleHuffman::next()'],['../class_smooth.html#ab7c809b6b5217771832a3e829695f8d5',1,'Smooth::next()'],['../class_state_variable.html#a14cb100c22e4a33025665ef3620ca2b8',1,'StateVariable::next()'],['../class_wave_packet.html#ab4e35082b60d3ccc29c86d09078329bd',1,'WavePacket::next()'],['../class_wave_shaper_3_01char_01_4.html#a8aa75261350b2651a2cbca264a02e944',1,'WaveShaper< char >::next()'],['../class_wave_shaper_3_01int_01_4.html#a2bf3bca1848a953c52ae94d5b58199ba',1,'WaveShaper< int >::next()']]], + ['noteoff',['noteOff',['../class_a_d_s_r.html#ab5ec578b60c4eb157312ed9c718eb44b',1,'ADSR::noteOff()'],['../class_p_d_resonant.html#a2b548734ea968d99d7939d68c95411cb',1,'PDResonant::noteOff()']]], + ['noteon',['noteOn',['../class_a_d_s_r.html#a1dd8b667b09fd695eb7957c7b2be666c',1,'ADSR::noteOn()'],['../class_p_d_resonant.html#a7d4497f3b5944f73dd2fb82d68fc099b',1,'PDResonant::noteOn()']]] +]; diff --git a/extras/doc/html/search/all_a.html b/extras/doc/html/search/all_a.html new file mode 100644 index 000000000..f17bf66a3 --- /dev/null +++ b/extras/doc/html/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_a.js b/extras/doc/html/search/all_a.js new file mode 100644 index 000000000..0ff2d7834 --- /dev/null +++ b/extras/doc/html/search/all_a.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['operator_28_29',['operator()',['../class_auto_map.html#afd49885d3f05ca0a2f417199a9e7cf10',1,'AutoMap::operator()()'],['../class_int_map.html#ae3bf8b61f2ab79ac6626245213e7cb2a',1,'IntMap::operator()()'],['../class_smooth.html#a24eb02e4c4bfe9401f24ed0399b1e392',1,'Smooth::operator()()']]], + ['oscil',['Oscil',['../class_oscil.html',1,'Oscil< NUM_TABLE_CELLS, UPDATE_RATE >'],['../class_oscil.html#afe6a75646d2dd822a654bcd85242e800',1,'Oscil::Oscil(const int8_t *TABLE_NAME)'],['../class_oscil.html#ab7dc5f97742d841fff6a4dca6d7242f3',1,'Oscil::Oscil()']]], + ['oscil_3c_208192_2c_20audio_5frate_20_3e',['Oscil< 8192, AUDIO_RATE >',['../class_oscil.html',1,'']]], + ['oscil_3c_20cos8192_5fnum_5fcells_2c_20audio_5frate_20_3e',['Oscil< COS8192_NUM_CELLS, AUDIO_RATE >',['../class_oscil.html',1,'']]], + ['oscil_3c_20sin2048_5fnum_5fcells_2c_20audio_5frate_20_3e',['Oscil< SIN2048_NUM_CELLS, AUDIO_RATE >',['../class_oscil.html',1,'']]], + ['oversample',['OverSample',['../class_over_sample.html',1,'']]] +]; diff --git a/extras/doc/html/search/all_b.html b/extras/doc/html/search/all_b.html new file mode 100644 index 000000000..6ef469ecc --- /dev/null +++ b/extras/doc/html/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_b.js b/extras/doc/html/search/all_b.js new file mode 100644 index 000000000..7387fe693 --- /dev/null +++ b/extras/doc/html/search/all_b.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['pausemozzi',['pauseMozzi',['../group__core.html#ga0dc2dc3b2c20b081df4d55ad039f64e5',1,'pauseMozzi(): MozziGuts.cpp'],['../group__core.html#ga0dc2dc3b2c20b081df4d55ad039f64e5',1,'pauseMozzi(): MozziGuts.cpp']]], + ['pdresonant',['PDResonant',['../class_p_d_resonant.html',1,'PDResonant'],['../class_p_d_resonant.html#a2bd77e08be68fc6ce89f1f71a7e1e069',1,'PDResonant::PDResonant()']]], + ['phaseincfromfreq',['phaseIncFromFreq',['../class_oscil.html#a1cb5d694d59b7ae0df2e63fa5ce5cded',1,'Oscil::phaseIncFromFreq()'],['../class_phasor.html#a9b5992b53fa7e449fec950df00c46230',1,'Phasor::phaseIncFromFreq()'],['../class_sample.html#a18e72ecdb7bac8d41038b785d6deba58',1,'Sample::phaseIncFromFreq()']]], + ['phasor',['Phasor',['../class_phasor.html',1,'Phasor< UPDATE_RATE >'],['../class_phasor.html#a147c4c3aa7506c3da800e6cc77deb4ac',1,'Phasor::Phasor()']]], + ['phasor_3c_20audio_5frate_20_3e',['Phasor< AUDIO_RATE >',['../class_phasor.html',1,'']]], + ['phmod',['phMod',['../class_oscil.html#a4c6de90bc2d4183a5146eb2ae5e3dd2c',1,'Oscil']]], + ['playing',['playing',['../class_a_d_s_r.html#a7e85542579496e15fca189f33d31f149',1,'ADSR::playing()'],['../class_multi_line.html#a16a4fc1f4378a3c47a279fe0b0459448',1,'MultiLine::playing()'],['../class_multi_line.html#a16a4fc1f4378a3c47a279fe0b0459448',1,'MultiLine::playing()']]], + ['pop',['pop',['../class_stack.html#afa9a35e13b68d9b59999227218a34d0a',1,'Stack']]], + ['portamento',['Portamento',['../class_portamento.html',1,'Portamento< CONTROL_UPDATE_RATE >'],['../class_portamento.html#adc910a47d3fe8eff848d6de42d7280df',1,'Portamento::Portamento()']]], + ['push',['push',['../class_stack.html#af67739d9b82966da46f7496f4c1fc801',1,'Stack']]] +]; diff --git a/extras/doc/html/search/all_c.html b/extras/doc/html/search/all_c.html new file mode 100644 index 000000000..4ca7bb9e5 --- /dev/null +++ b/extras/doc/html/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_c.js b/extras/doc/html/search/all_c.js new file mode 100644 index 000000000..478ccc7f2 --- /dev/null +++ b/extras/doc/html/search/all_c.js @@ -0,0 +1,101 @@ +var searchData= +[ + ['q0n15',['Q0n15',['../group__fixmath.html#ga7b0aeeb726b5790b7b181f4f1ba08ee4',1,'mozzi_fixmath.h']]], + ['q0n15_5ffix1',['Q0n15_FIX1',['../group__fixmath.html#ga38ec011e7e3e08f5df091b608ce621e2',1,'mozzi_fixmath.h']]], + ['q0n16',['Q0n16',['../group__fixmath.html#ga38b7537c31ebeb6a2aba2ea34d23f230',1,'mozzi_fixmath.h']]], + ['q0n16_5ffix1',['Q0n16_FIX1',['../group__fixmath.html#gaa1e02cbcdc65171103653df03fec3b76',1,'mozzi_fixmath.h']]], + ['q0n16_5fto_5ffloat',['Q0n16_to_float',['../group__fixmath.html#ga0440dbc7692a88dca7b1173f020c9b0d',1,'mozzi_fixmath.h']]], + ['q0n31',['Q0n31',['../group__fixmath.html#ga8f4b2d87d5b697b3625c347618fa64c4',1,'mozzi_fixmath.h']]], + ['q0n32',['Q0n32',['../group__fixmath.html#gae32cb6df74dc8053c5da2a7b6378583b',1,'mozzi_fixmath.h']]], + ['q0n32_5ffix1',['Q0n32_FIX1',['../group__fixmath.html#gacb7fad10f1c2b67504271149f8f1215f',1,'mozzi_fixmath.h']]], + ['q0n7',['Q0n7',['../group__fixmath.html#ga9a64ce80fa7c320187d2cf2104a96daa',1,'mozzi_fixmath.h']]], + ['q0n7_5ffix1',['Q0n7_FIX1',['../group__fixmath.html#ga42c55269acbc41ca1fbcbb7aea5e8767',1,'mozzi_fixmath.h']]], + ['q0n7_5fto_5ffloat',['Q0n7_to_float',['../group__fixmath.html#ga8b01eb695e8d8c197e4e83a76d391a6a',1,'mozzi_fixmath.h']]], + ['q0n7_5fto_5fq15n16',['Q0n7_to_Q15n16',['../group__fixmath.html#gac8b6733abac81f36cf8075a4d3c04e49',1,'mozzi_fixmath.h']]], + ['q0n7_5fto_5fq1n14',['Q0n7_to_Q1n14',['../group__fixmath.html#ga468ddaa38e178b45a77e0c103da22b7c',1,'mozzi_fixmath.h']]], + ['q0n8',['Q0n8',['../group__fixmath.html#ga36659a8cbbf0b380fa7bb2355e32db51',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5ffloat',['Q0n8_to_float',['../group__fixmath.html#gade631f0534cf54fadbff65911809d927',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq15n16',['Q0n8_to_Q15n16',['../group__fixmath.html#gad224b917b591bfa3554a958e84f8fadf',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq16n16',['Q0n8_to_Q16n16',['../group__fixmath.html#gab13c5f790423d9a0cf10445b366933fe',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq1n15',['Q0n8_to_Q1n15',['../group__fixmath.html#gaa9c85bc32475856ed07c3780a237ba31',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq24n8',['Q0n8_to_Q24n8',['../group__fixmath.html#ga77edd2a4cd49df42e7145da9bdb799ae',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq8n24',['Q0n8_to_Q8n24',['../group__fixmath.html#gac864675855d95314dd015ea52dc80135',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq8n8',['Q0n8_to_Q8n8',['../group__fixmath.html#ga07cdd6c75045759d9d11116f5caea4bf',1,'mozzi_fixmath.h']]], + ['q15n0',['Q15n0',['../group__fixmath.html#ga97de6e3641b7638093a53cd137c8568c',1,'mozzi_fixmath.h']]], + ['q15n0_5ffix1',['Q15n0_FIX1',['../group__fixmath.html#gafa16db677f958c243a826695b2c14c3c',1,'mozzi_fixmath.h']]], + ['q15n0_5fto_5fq15n16',['Q15n0_to_Q15n16',['../group__fixmath.html#ga8ef5b17eaddb22228824829204ee71bb',1,'mozzi_fixmath.h']]], + ['q15n16',['Q15n16',['../group__fixmath.html#ga3e1cab88474edfa08535402573125cae',1,'mozzi_fixmath.h']]], + ['q15n16_5ffix1',['Q15n16_FIX1',['../group__fixmath.html#ga7933033ba3cd84a4d09c0bd652378a38',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5ffloat',['Q15n16_to_float',['../group__fixmath.html#ga4096449c3f0598a1534255de789d2ee5',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq0n8',['Q15n16_to_Q0n8',['../group__fixmath.html#gaf8dd8621335948f9048742f0a59dc795',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq15n0',['Q15n16_to_Q15n0',['../group__fixmath.html#gaa2ec03187910e9c6418298ef55655c36',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq23n8',['Q15n16_to_Q23n8',['../group__fixmath.html#ga67b0f3ae70755ed8891e510b02813c08',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq7n8',['Q15n16_to_Q7n8',['../group__fixmath.html#ga21d72d50bd41022755514c96c2d11901',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq8n0',['Q15n16_to_Q8n0',['../group__fixmath.html#ga13bc20d9c470ccac803d53f3ebf7d861',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq8n8',['Q15n16_to_Q8n8',['../group__fixmath.html#gaf62905baa27fd9ec0cbf5ed054ebd08a',1,'mozzi_fixmath.h']]], + ['q16n0',['Q16n0',['../group__fixmath.html#ga50af2aa1b7d33bba0b6e1a88c350adfa',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5ffloat',['Q16n0_to_float',['../group__fixmath.html#ga990f68566b105bc35ed718ad5ef93d72',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5fq15n16',['Q16n0_to_Q15n16',['../group__fixmath.html#ga720cdc234e4d0979753e5aef22a93e11',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5fq16n16',['Q16n0_to_Q16n16',['../group__fixmath.html#gac193b97057ac01de898db661cb6d1c5d',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5fq23n8',['Q16n0_to_Q23n8',['../group__fixmath.html#gaab7cd08af1c66dd48873f9a5645cc95e',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5fq24n8',['Q16n0_to_Q24n8',['../group__fixmath.html#ga779f365fbc3378a0e8cc167d44fd7aad',1,'mozzi_fixmath.h']]], + ['q16n16',['Q16n16',['../group__fixmath.html#gab3127fd8ac279e1d8dda0292bc1fc8dc',1,'mozzi_fixmath.h']]], + ['q16n16_5f2pi',['Q16n16_2PI',['../group__fixmath.html#ga4bf1124c7bdac767263b2037211933e3',1,'mozzi_fixmath.h']]], + ['q16n16_5ffix1',['Q16n16_FIX1',['../group__fixmath.html#gaa4538a17e7e75b14a5826405ad06acef',1,'mozzi_fixmath.h']]], + ['q16n16_5fmtof',['Q16n16_mtof',['../group__midi.html#ga45bd3f3abd7ae5fa509eac3d3931a5b2',1,'Q16n16_mtof(Q16n16 midival_fractional): mozzi_midi.cpp'],['../group__midi.html#ga45bd3f3abd7ae5fa509eac3d3931a5b2',1,'Q16n16_mtof(Q16n16 midival): mozzi_midi.cpp']]], + ['q16n16_5fpi',['Q16n16_PI',['../group__fixmath.html#gafd4492673766377d6d9202e43bb3d8dd',1,'mozzi_fixmath.h']]], + ['q16n16_5fpow2',['Q16n16_pow2',['../group__fixmath.html#ga2e1d9d0fe4ba7edb9830efb7887c36bd',1,'mozzi_fixmath.cpp']]], + ['q16n16_5fto_5ffloat',['Q16n16_to_float',['../group__fixmath.html#gafcb57f2d0fdcce65b60401f47b871d14',1,'mozzi_fixmath.h']]], + ['q16n16_5fto_5fq0n8',['Q16n16_to_Q0n8',['../group__fixmath.html#ga1315b4f68a57d26fbedc88d5b30a44d8',1,'mozzi_fixmath.h']]], + ['q16n16_5fto_5fq16n0',['Q16n16_to_Q16n0',['../group__fixmath.html#ga89bdabdfd59a8ec3f06aedbbab087527',1,'mozzi_fixmath.h']]], + ['q16n16_5fto_5fq24n8',['Q16n16_to_Q24n8',['../group__fixmath.html#ga17dd8cb80ef87b6573926e411618105a',1,'mozzi_fixmath.h']]], + ['q16n16_5fto_5fq8n8',['Q16n16_to_Q8n8',['../group__fixmath.html#gaef6ce2a93fe5862ac373772e994713a9',1,'mozzi_fixmath.h']]], + ['q1n14',['Q1n14',['../group__fixmath.html#ga856876974bff2af13e507f42af0c4925',1,'mozzi_fixmath.h']]], + ['q1n14_5ffix1',['Q1n14_FIX1',['../group__fixmath.html#ga6f99802ebadd6b1b3ee707892e36cab9',1,'mozzi_fixmath.h']]], + ['q1n14_5fto_5ffloat',['Q1n14_to_float',['../group__fixmath.html#gad3fe2bc17bed17cd159a9c030145b6ca',1,'mozzi_fixmath.h']]], + ['q1n14_5fto_5fq0n7',['Q1n14_to_Q0n7',['../group__fixmath.html#ga5f3733fb89e77693e54328375226f5e9',1,'mozzi_fixmath.h']]], + ['q1n15',['Q1n15',['../group__fixmath.html#gadefb02e4d84cdb085fbc6251b8f4e8be',1,'mozzi_fixmath.h']]], + ['q1n15_5ffix1',['Q1n15_FIX1',['../group__fixmath.html#ga8124fb8d1bcb111532f22726dbf3e5cc',1,'mozzi_fixmath.h']]], + ['q1n15_5fto_5ffloat',['Q1n15_to_float',['../group__fixmath.html#ga9ed5a6a2041f490ffa52b5a5fa95d3e5',1,'mozzi_fixmath.h']]], + ['q1n15_5fto_5fq0n8',['Q1n15_to_Q0n8',['../group__fixmath.html#ga67c11990c9288aa762c708d3a48ba7fc',1,'mozzi_fixmath.h']]], + ['q23n8',['Q23n8',['../group__fixmath.html#gaa43a54806ef427491497cc1762480d13',1,'mozzi_fixmath.h']]], + ['q23n8_5ffix1',['Q23n8_FIX1',['../group__fixmath.html#gaad55b32c6590a3e4bb07972a7acec4a9',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5ffloat',['Q23n8_to_float',['../group__fixmath.html#ga47738704056a272968e80b399e06e82b',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5fq15n0',['Q23n8_to_Q15n0',['../group__fixmath.html#ga1b21d30a04f07940dc4ea206533b9dd8',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5fq16n0',['Q23n8_to_Q16n0',['../group__fixmath.html#gaa6a3087e0119ed233a3256f8fa25e146',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5fq31n0',['Q23n8_to_Q31n0',['../group__fixmath.html#ga8f3d1181dc6802782b9ff9aa59ca96a2',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5fq7n8',['Q23n8_to_Q7n8',['../group__fixmath.html#gac243a1fd2154b115e4ba39a70125675e',1,'mozzi_fixmath.h']]], + ['q24n8',['Q24n8',['../group__fixmath.html#ga940a116ff2bfbd1b013b41b1be73f70f',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5ffloat',['Q24n8_to_float',['../group__fixmath.html#gab495892ee3db6cbce186fbb7c7246088',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5fq0n8',['Q24n8_to_Q0n8',['../group__fixmath.html#ga94dd6fe8594b171881ade98431dfda28',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5fq16n0',['Q24n8_to_Q16n0',['../group__fixmath.html#gaefdfa391a9fef0f17d1f9df16fd9a9f0',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5fq16n16',['Q24n8_to_Q16n16',['../group__fixmath.html#ga2b445681d56f8693c3d98d5ff19b51d4',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5fq32n0',['Q24n8_to_Q32n0',['../group__fixmath.html#ga9f28b2310c92ecac72960d9bd0aff80f',1,'mozzi_fixmath.h']]], + ['q31n0',['Q31n0',['../group__fixmath.html#ga5979e4e6ca93e368ee8c042a526b3b73',1,'mozzi_fixmath.h']]], + ['q32n0',['Q32n0',['../group__fixmath.html#gafc3e7e5a9ddd997abe8e815ba91f3c4e',1,'mozzi_fixmath.h']]], + ['q3n13',['Q3n13',['../group__fixmath.html#ga2ca0a65f5b9ddef56756b4a75b3b8a68',1,'mozzi_fixmath.h']]], + ['q3n13_5f2pi',['Q3n13_2PI',['../group__fixmath.html#gac065d8a968cb7c4dd713458682ee1308',1,'mozzi_fixmath.h']]], + ['q7n0',['Q7n0',['../group__fixmath.html#gabc933ab043f14dfee980811b2a103594',1,'mozzi_fixmath.h']]], + ['q7n0_5fto_5fq15n16',['Q7n0_to_Q15n16',['../group__fixmath.html#ga64d943b21ef783f34135630a5c80be46',1,'mozzi_fixmath.h']]], + ['q7n0_5fto_5fq7n8',['Q7n0_to_Q7n8',['../group__fixmath.html#ga81b0b1f295a6a724c100e600d6b4ce28',1,'mozzi_fixmath.h']]], + ['q7n8',['Q7n8',['../group__fixmath.html#ga65001bd29222d896ae9256fd7a415d41',1,'mozzi_fixmath.h']]], + ['q7n8_5ffix1',['Q7n8_FIX1',['../group__fixmath.html#ga1a04e29b3420231fc54039caf460a88c',1,'mozzi_fixmath.h']]], + ['q7n8_5fmult',['Q7n8_mult',['../group__fixmath.html#ga306932c4fb32b1352c24b7602a696fee',1,'mozzi_fixmath.h']]], + ['q7n8_5fto_5ffloat',['Q7n8_to_float',['../group__fixmath.html#gaad3cbbc6a772d246d26fd98b5a079382',1,'mozzi_fixmath.h']]], + ['q7n8_5fto_5fq15n16',['Q7n8_to_Q15n16',['../group__fixmath.html#ga958d671aeefb66c2492b84bf299f8d13',1,'mozzi_fixmath.h']]], + ['q7n8_5fto_5fq7n0',['Q7n8_to_Q7n0',['../group__fixmath.html#gaa8be90cc674fc9ac72a2faafb11d6a5e',1,'mozzi_fixmath.h']]], + ['q8n0',['Q8n0',['../group__fixmath.html#gadec626a60cce3a7fec144d2505b79dda',1,'mozzi_fixmath.h']]], + ['q8n0_5fto_5fq15n16',['Q8n0_to_Q15n16',['../group__fixmath.html#gac0b4678c510db93302efb15497911907',1,'mozzi_fixmath.h']]], + ['q8n0_5fto_5fq16n16',['Q8n0_to_Q16n16',['../group__fixmath.html#ga589b5c022b59a72fc3fb39061048d193',1,'mozzi_fixmath.h']]], + ['q8n0_5fto_5fq7n8',['Q8n0_to_Q7n8',['../group__fixmath.html#ga4baa8569c241630ddd25d798d0a89b3d',1,'mozzi_fixmath.h']]], + ['q8n0_5fto_5fq8n8',['Q8n0_to_Q8n8',['../group__fixmath.html#ga90a5d59d5a529f4caaf408730230a156',1,'mozzi_fixmath.h']]], + ['q8n24',['Q8n24',['../group__fixmath.html#ga5ce3f8456c6ea996029b8ea0d96fb3e8',1,'mozzi_fixmath.h']]], + ['q8n24_5ffix1',['Q8n24_FIX1',['../group__fixmath.html#ga5083b2bbeeb968258e2da31d3af26a25',1,'mozzi_fixmath.h']]], + ['q8n24_5fto_5ffloat',['Q8n24_to_float',['../group__fixmath.html#ga6f0e36938a7dfae4ab399f17642c2bcd',1,'mozzi_fixmath.h']]], + ['q8n24_5fto_5fq0n8',['Q8n24_to_Q0n8',['../group__fixmath.html#ga0c5065bc7c71ac750acde1c7ce216d87',1,'mozzi_fixmath.h']]], + ['q8n8',['Q8n8',['../group__fixmath.html#ga8dcb8a23bfed3b8404f7a0d73f300c8a',1,'mozzi_fixmath.h']]], + ['q8n8_5ffix1',['Q8n8_FIX1',['../group__fixmath.html#ga00d3299412f5460cae3af8f0c58b2db1',1,'mozzi_fixmath.h']]], + ['q8n8_5fto_5ffloat',['Q8n8_to_float',['../group__fixmath.html#gabc9c251c25fa7a239d704ea3998e7e39',1,'mozzi_fixmath.h']]], + ['q8n8_5fto_5fq16n16',['Q8n8_to_Q16n16',['../group__fixmath.html#gab88fd86b4f226f0e2614b0ac813e4cad',1,'mozzi_fixmath.h']]], + ['q8n8_5fto_5fq8n0',['Q8n8_to_Q8n0',['../group__fixmath.html#gad68e3b4d1bf65e997d5e709eb4153572',1,'mozzi_fixmath.h']]] +]; diff --git a/extras/doc/html/search/all_d.html b/extras/doc/html/search/all_d.html new file mode 100644 index 000000000..fedf606a7 --- /dev/null +++ b/extras/doc/html/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_d.js b/extras/doc/html/search/all_d.js new file mode 100644 index 000000000..8fd7901c8 --- /dev/null +++ b/extras/doc/html/search/all_d.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['rand',['rand',['../group__random.html#gabe026433bdf21da516984d35730672fc',1,'rand(int8_t minval, int8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga13bc207ecda4f92e2be2fb585a5cce2b',1,'rand(uint8_t minval, uint8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga4c69deb53afb886b26c76b343513b340',1,'rand(int minval, int maxval): mozzi_rand.cpp'],['../group__random.html#ga95de742b529d5965461f1d3f6f576e18',1,'rand(unsigned int minval, unsigned int maxval): mozzi_rand.cpp'],['../group__random.html#ga99dee852111a97e20a64582de8e79ab1',1,'rand(int8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga904cf092c2b014dc6c99f7844bd3723e',1,'rand(uint8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga1182cb74988d9c8510959149adc63762',1,'rand(int maxval): mozzi_rand.cpp'],['../group__random.html#ga4ad4ab94c8b0e8a4d4be925490378733',1,'rand(unsigned int maxval): mozzi_rand.cpp'],['../group__random.html#gabe026433bdf21da516984d35730672fc',1,'rand(int8_t minval, int8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga99dee852111a97e20a64582de8e79ab1',1,'rand(int8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga13bc207ecda4f92e2be2fb585a5cce2b',1,'rand(uint8_t minval, uint8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga904cf092c2b014dc6c99f7844bd3723e',1,'rand(uint8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga4c69deb53afb886b26c76b343513b340',1,'rand(int minval, int maxval): mozzi_rand.cpp'],['../group__random.html#ga1182cb74988d9c8510959149adc63762',1,'rand(int maxval): mozzi_rand.cpp'],['../group__random.html#ga95de742b529d5965461f1d3f6f576e18',1,'rand(unsigned int minval, unsigned int maxval): mozzi_rand.cpp'],['../group__random.html#ga4ad4ab94c8b0e8a4d4be925490378733',1,'rand(unsigned int maxval): mozzi_rand.cpp']]], + ['randmidinote',['randMidiNote',['../group__random.html#ga15ff4da0bec0272bf728ea7de2d78006',1,'randMidiNote(): mozzi_rand.cpp'],['../group__random.html#ga15ff4da0bec0272bf728ea7de2d78006',1,'randMidiNote(): mozzi_rand.cpp']]], + ['random',['Random',['../group__random.html',1,'']]], + ['randprime',['randPrime',['../group__random.html#gab6c2b444d462461b82997e04105d0398',1,'primes.h']]], + ['randprimeupto',['randPrimeUpTo',['../group__random.html#gaead8db89e2403d5ef7842f894552c629',1,'primes.h']]], + ['randseed',['randSeed',['../group__random.html#ga84c58d758e238208eb82fc8ae2330b66',1,'randSeed(long seed): mozzi_rand.cpp'],['../group__random.html#ga83ff6b4e38c84713e0d67aa1ec06af66',1,'randSeed(): mozzi_rand.cpp'],['../group__random.html#ga83ff6b4e38c84713e0d67aa1ec06af66',1,'randSeed(): mozzi_rand.cpp']]], + ['rangewholesample',['rangeWholeSample',['../class_sample.html#a8a012ae52ee028222118f6bba5c7fb33',1,'Sample']]], + ['rcpoll',['RCpoll',['../class_r_cpoll.html',1,'RCpoll< SENSOR_PIN >'],['../class_r_cpoll.html#a44673505bbfbac288ec994dd48017e83',1,'RCpoll::RCpoll()']]], + ['read',['read',['../class_audio_delay.html#a26b409fbfc322ae527ba23680c56e3a9',1,'AudioDelay::read()'],['../class_audio_delay_feedback.html#a77508ec1d8da719edbc7c34173c9d7cb',1,'AudioDelayFeedback::read(Q16n16 delaytime_cells)'],['../class_audio_delay_feedback.html#a8b6cefa45ecaa174320effe25b9ce6c5',1,'AudioDelayFeedback::read()']]], + ['ready',['ready',['../class_event_delay.html#a2267889678fb75df2f6bdcbd0be0ea8a',1,'EventDelay::ready()'],['../class_metronome.html#adc67bd96eac9f9b9260f8b070b7db75f',1,'Metronome::ready()']]], + ['reconnectdigitalin',['reconnectDigitalIn',['../group__analog.html#ga26462e443299e8d39a520d4a838e00b7',1,'reconnectDigitalIn(uint8_t channel_num): mozzi_analog.cpp'],['../group__analog.html#ga26462e443299e8d39a520d4a838e00b7',1,'reconnectDigitalIn(uint8_t channel_num): mozzi_analog.cpp']]], + ['reverbtank',['ReverbTank',['../class_reverb_tank.html',1,'ReverbTank'],['../class_reverb_tank.html#a3ca18b03d045df164462338f6ed0648c',1,'ReverbTank::ReverbTank()']]], + ['rollingaverage',['RollingAverage',['../class_rolling_average.html',1,'RollingAverage< T, WINDOW_LENGTH >'],['../class_rolling_average.html#a11cf7b9e1278648b1eb10e5534fe3e29',1,'RollingAverage::RollingAverage()']]], + ['rollingaverage_3c_20t_2c_281_3c_3c_28resolution_5fincrease_5fbits_20_2a2_29_29_3e',['RollingAverage< T,(1<<(RESOLUTION_INCREASE_BITS *2))>',['../class_rolling_average.html',1,'']]], + ['rollingstat',['RollingStat',['../class_rolling_stat.html',1,'RollingStat< T, WINDOW_LENGTH >'],['../class_rolling_stat.html#a98c3f767391db80b8ad59ca53c1e6a94',1,'RollingStat::RollingStat()']]] +]; diff --git a/extras/doc/html/search/all_e.html b/extras/doc/html/search/all_e.html new file mode 100644 index 000000000..9b7808609 --- /dev/null +++ b/extras/doc/html/search/all_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_e.js b/extras/doc/html/search/all_e.js new file mode 100644 index 000000000..4ea6cef8b --- /dev/null +++ b/extras/doc/html/search/all_e.js @@ -0,0 +1,78 @@ +var searchData= +[ + ['sample',['Sample',['../class_sample.html',1,'Sample< NUM_TABLE_CELLS, UPDATE_RATE, INTERP >'],['../class_sample.html#a0a22d5d06e5665853432fe1949e9d514',1,'Sample::Sample(const int8_t *TABLE_NAME)'],['../class_sample.html#ac9a043d47ab143f7a4d9370cf9f2f02d',1,'Sample::Sample()']]], + ['samplehuffman',['SampleHuffman',['../class_sample_huffman.html',1,'SampleHuffman'],['../class_sample_huffman.html#a8587f641949024cd5aad7bfc1715adff',1,'SampleHuffman::SampleHuffman()']]], + ['set',['set',['../class_audio_delay.html#a7bd0a07f7803afda1a71b50e3f66827b',1,'AudioDelay::set()'],['../class_ead.html#af203c82721ab832c653a23ff219c040e',1,'Ead::set()'],['../class_event_delay.html#a937c86f3b05ccb6138ff7927713820da',1,'EventDelay::set()'],['../class_line.html#a6bad32d527e0d931c99e9b72c2a75c80',1,'Line::set(T value)'],['../class_line.html#a7378d526cf07c42c0792868c749dee6e',1,'Line::set(T targetvalue, T num_steps)'],['../class_line.html#a24ad85c17562e97b6823a010a5ba04c6',1,'Line::set(T startvalue, T targetvalue, T num_steps)'],['../class_line_3_01unsigned_01char_01_4.html#a6129febcfd57d32a5c771c8f730b6b7a',1,'Line< unsigned char >::set(unsigned char value)'],['../class_line_3_01unsigned_01char_01_4.html#a2b90896c1357a45daca74498f17b4909',1,'Line< unsigned char >::set(unsigned char targetvalue, unsigned char num_steps)'],['../class_line_3_01unsigned_01char_01_4.html#ad14e98651035d75c89270c6f0d5e5c46',1,'Line< unsigned char >::set(unsigned char startvalue, unsigned char targetvalue, unsigned char num_steps)'],['../class_line_3_01unsigned_01int_01_4.html#a157b1887464b81ed8388a8f73173338d',1,'Line< unsigned int >::set(unsigned int value)'],['../class_line_3_01unsigned_01int_01_4.html#a002bf2ae8e48467fd2d45072b8328e65',1,'Line< unsigned int >::set(unsigned int targetvalue, unsigned int num_steps)'],['../class_line_3_01unsigned_01int_01_4.html#a1677277eb5f3eb56e47a6e7dde0c1558',1,'Line< unsigned int >::set(unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)'],['../class_line_3_01unsigned_01long_01_4.html#abb246fabacbefbd6d88ddce719f74b0e',1,'Line< unsigned long >::set(unsigned long value)'],['../class_line_3_01unsigned_01long_01_4.html#abb89855ea745a453262cd2aeb31e2ec7',1,'Line< unsigned long >::set(unsigned long targetvalue, unsigned long num_steps)'],['../class_line_3_01unsigned_01long_01_4.html#a199dd187d87c9941515b21aea0c52a0f',1,'Line< unsigned long >::set(unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)'],['../class_phasor.html#a509e4a782a36cb9e913da170d6707421',1,'Phasor::set()'],['../class_wave_packet.html#ac693b3d676b583584a8cfc6b9cc0f37f',1,'WavePacket::set()']]], + ['setadlevels',['setADLevels',['../class_a_d_s_r.html#a5739379144932ae38f408b228d05b7cb',1,'ADSR']]], + ['setallupdatesteps',['setAllUpdateSteps',['../class_a_d_s_r.html#ab70af348346b644239a36d6a163369cc',1,'ADSR::setAllUpdateSteps()'],['../class_multi_line.html#a7e8ebd732f18ed056bc9754c372307a6',1,'MultiLine::setAllUpdateSteps()']]], + ['setattack',['setAttack',['../class_ead.html#a6bae0e92e6709c3fcd31fccd41212bac',1,'Ead']]], + ['setattacklevel',['setAttackLevel',['../class_a_d_s_r.html#a6e1741d76154cca16b2c8354b5d6db1d',1,'ADSR']]], + ['setattacktime',['setAttackTime',['../class_a_d_s_r.html#ad5160133723ed85ec89f20bde128f604',1,'ADSR']]], + ['setattackupdatesteps',['setAttackUpdateSteps',['../class_a_d_s_r.html#a12a942278a6a621794b7d34a8edbc7c5',1,'ADSR']]], + ['setbandwidth',['setBandwidth',['../class_wave_packet.html#abce5b3ca4c559473c199744753fb75aa',1,'WavePacket']]], + ['setbpm',['setBPM',['../class_metronome.html#aab384673719ebd552dd72d474ed58556',1,'Metronome']]], + ['setcentrefreq',['setCentreFreq',['../class_state_variable.html#a47e7ddad76db7009e370fa91ea5d4d3d',1,'StateVariable::setCentreFreq()'],['../class_wave_packet.html#adbbbf8b6b9eaae18ef381ff04be3eb5b',1,'WavePacket::setCentreFreq()']]], + ['setcutofffreq',['setCutoffFreq',['../class_low_pass_filter.html#ac8a9f6a04009d37885f47cdf5a45023d',1,'LowPassFilter']]], + ['setdecay',['setDecay',['../class_ead.html#aa99e6dc2d5448b4de0764c6208e5c2fc',1,'Ead']]], + ['setdecaylevel',['setDecayLevel',['../class_a_d_s_r.html#a6542f4a76a37696245447855d647b41f',1,'ADSR']]], + ['setdecaytime',['setDecayTime',['../class_a_d_s_r.html#a3b8c6492ad9a379dc0c6749677ba4d29',1,'ADSR']]], + ['setdecayupdatesteps',['setDecayUpdateSteps',['../class_a_d_s_r.html#a7fdc36f6648a058e0197ccaf2f5acdbd',1,'ADSR']]], + ['setdelaytimecells',['setDelayTimeCells',['../class_audio_delay_feedback.html#abcf71a86083db5a48ef71c1397247886',1,'AudioDelayFeedback::setDelayTimeCells(uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#a8e8344af6962ea061da8f70ed119b2bd',1,'AudioDelayFeedback::setDelayTimeCells(Q16n16 delaytime_cells)'],['../class_audio_delay_feedback.html#a7c54b49ae9f25baaf8714528295c53e2',1,'AudioDelayFeedback::setDelayTimeCells(float delaytime_cells)']]], + ['setearlyreflections',['setEarlyReflections',['../class_reverb_tank.html#a6d27d8a02ec9551a5338bb1ba4bf9af2',1,'ReverbTank']]], + ['setend',['setEnd',['../class_sample.html#a9713e2d38b94e629c06916a7543ef48f',1,'Sample']]], + ['setfeebacklevel',['setFeebackLevel',['../class_reverb_tank.html#a91eeb601e42df576737f0d44dc73c653',1,'ReverbTank']]], + ['setfeedbacklevel',['setFeedbackLevel',['../class_audio_delay_feedback.html#a2cd87a7dc91187ed439a8ec1d7e00d29',1,'AudioDelayFeedback']]], + ['setfreq',['setFreq',['../class_oscil.html#a23121f22ea447918088a79c7f9748b3d',1,'Oscil::setFreq(int frequency)'],['../class_oscil.html#aa342e74f8e73edda0b0f042770e3fba4',1,'Oscil::setFreq(float frequency)'],['../class_phasor.html#afc6106c648bddb5f2f084b8f34216b0f',1,'Phasor::setFreq(int frequency)'],['../class_phasor.html#a81f1976ebb4a91f66f26674efca52072',1,'Phasor::setFreq(float frequency)'],['../class_sample.html#aa0c37457f99def5c7036c6b6d9ee43fc',1,'Sample::setFreq(int frequency)'],['../class_sample.html#a4d5840157e98024537ae10cd27ff9f9e',1,'Sample::setFreq(float frequency)']]], + ['setfreq_5fq16n16',['setFreq_Q16n16',['../class_oscil.html#a73b52741178ed490463d9ff471cebef3',1,'Oscil']]], + ['setfreq_5fq24n8',['setFreq_Q24n8',['../class_oscil.html#abc8a4ee236f7fd45dda9dece7292b6e7',1,'Oscil::setFreq_Q24n8()'],['../class_sample.html#a903c2d634b10ac531c3c9f6a35fcb046',1,'Sample::setFreq_Q24n8()']]], + ['setfundamental',['setFundamental',['../class_wave_packet.html#af87c37ffd274eee91aa93c0f7d560be2',1,'WavePacket']]], + ['setlevels',['setLevels',['../class_a_d_s_r.html#ae6a213e9c236eb3b47e941384693e75d',1,'ADSR::setLevels()'],['../class_multi_line.html#a2e3788c36c4a6f59c62770cfef2036e5',1,'MultiLine::setLevels()']]], + ['setloopdelays',['setLoopDelays',['../class_reverb_tank.html#a0b348b630007a5cbda8b314d0c8dd604',1,'ReverbTank']]], + ['setloopingoff',['setLoopingOff',['../class_sample.html#accfdc762cd47425824179bff4cd2a78f',1,'Sample::setLoopingOff()'],['../class_sample_huffman.html#a040bfc55c19bbaa6cc42331be3646c8a',1,'SampleHuffman::setLoopingOff()']]], + ['setloopingon',['setLoopingOn',['../class_sample.html#a40e76011d841b84d2d54bf2cec6c4d5f',1,'Sample::setLoopingOn()'],['../class_sample_huffman.html#a01f9bfb513da0374fe78c12300b69760',1,'SampleHuffman::setLoopingOn()']]], + ['setpdenv',['setPDEnv',['../class_p_d_resonant.html#a7c921c18d37b0625beab9e4f06c69ca4',1,'PDResonant']]], + ['setphase',['setPhase',['../class_oscil.html#ab7b740eec56740426a47508562ed4dd5',1,'Oscil']]], + ['setphasefractional',['setPhaseFractional',['../class_oscil.html#afc77bfc5a1ad5926ad8df37725d480d7',1,'Oscil']]], + ['setphaseinc',['setPhaseInc',['../class_oscil.html#a2ff9bfcc57e07bf0df2ed7db186ecff7',1,'Oscil::setPhaseInc()'],['../class_phasor.html#aa3d62bdf762247b2523c0a625caeedd7',1,'Phasor::setPhaseInc()'],['../class_sample.html#aaff03b2a14f8f0f79c13840948151a1d',1,'Sample::setPhaseInc()']]], + ['setpin13high',['setPin13High',['../group__util.html#gaea7ee11e335eb2d6b891b886c5f3f942',1,'mozzi_utils.h']]], + ['setpin13low',['setPin13Low',['../group__util.html#ga4c87d0211135fd33a8697350235b50b4',1,'mozzi_utils.h']]], + ['setpin13out',['setPin13Out',['../group__util.html#gad1725ef17b234c4df9cc64a9bf561435',1,'mozzi_utils.h']]], + ['setreleaselevel',['setReleaseLevel',['../class_a_d_s_r.html#a2651482b2f666e224cf8ce82f4146213',1,'ADSR']]], + ['setreleasetime',['setReleaseTime',['../class_a_d_s_r.html#a2333aa55547ec8c690e632265cd4f1c4',1,'ADSR']]], + ['setreleaseupdatesteps',['setReleaseUpdateSteps',['../class_a_d_s_r.html#a21eda3f27fbfc71d12ca89f54f89adaf',1,'ADSR']]], + ['setresonance',['setResonance',['../class_low_pass_filter.html#ad655253ff702ba5bda1bdbb0199019f0',1,'LowPassFilter::setResonance()'],['../class_state_variable.html#a992e23a80b611b72e3e764c14d5ee188',1,'StateVariable::setResonance()']]], + ['setsmoothness',['setSmoothness',['../class_smooth.html#aac44bbf7a9bc6b9bae80eecc1be6e188',1,'Smooth']]], + ['setstart',['setStart',['../class_sample.html#a01836f7624ea574e966e775377d5bf11',1,'Sample']]], + ['setsustainlevel',['setSustainLevel',['../class_a_d_s_r.html#a4e54b94f8adf1555996c0aa254d3245b',1,'ADSR']]], + ['setsustaintime',['setSustainTime',['../class_a_d_s_r.html#abd93d77bf049b8151eeb735685b0e8d7',1,'ADSR']]], + ['setsustainupdatesteps',['setSustainUpdateSteps',['../class_a_d_s_r.html#aac492e771fd8e653d4ce70f519fb9382',1,'ADSR']]], + ['settable',['setTable',['../class_oscil.html#a0b22d79fb2d6c7fb50b19c00f249ed84',1,'Oscil::setTable()'],['../class_sample.html#ade1401f231c920576b1eea2776ac591f',1,'Sample::setTable()'],['../class_wave_packet_sample.html#af50b8ef715a86bcdf417961b585c170d',1,'WavePacketSample::setTable()']]], + ['settarget1level',['setTarget1Level',['../class_multi_line.html#aa79a31cd77050e22f975ada45635ac58',1,'MultiLine']]], + ['settarget1time',['setTarget1Time',['../class_multi_line.html#abb797c4d04a052ae56130e2554b07b8d',1,'MultiLine']]], + ['settarget1updatesteps',['setTarget1UpdateSteps',['../class_multi_line.html#af65dde0a6731c711fe65b4dd24293c43',1,'MultiLine']]], + ['settarget2level',['setTarget2Level',['../class_multi_line.html#ae5d8c361d54349c81d2fa99cdb8ad579',1,'MultiLine']]], + ['settarget2time',['setTarget2Time',['../class_multi_line.html#abc2ed9d5db8dd064228ffe7bb68b7044',1,'MultiLine']]], + ['settarget2updatesteps',['setTarget2UpdateSteps',['../class_multi_line.html#ad0a22fc5f50162d1933689e18ab99b9c',1,'MultiLine']]], + ['settarget3level',['setTarget3Level',['../class_multi_line.html#a7d7e332ca89c42eaf652e724c06cfd92',1,'MultiLine']]], + ['settarget3time',['setTarget3Time',['../class_multi_line.html#a9edf92a819ee55e98d7d5360dcefe582',1,'MultiLine']]], + ['settarget3updatesteps',['setTarget3UpdateSteps',['../class_multi_line.html#a65056b607b842c4b6a3bf3c66ab2e1db',1,'MultiLine']]], + ['settarget4level',['setTarget4Level',['../class_multi_line.html#a0f505af65246d7faa0917543be6aacfe',1,'MultiLine']]], + ['settarget4time',['setTarget4Time',['../class_multi_line.html#a7c750cf3cfefee3c345765cdfad8c3cf',1,'MultiLine']]], + ['settarget4updatesteps',['setTarget4UpdateSteps',['../class_multi_line.html#a0bebb4cc76e0991a6ced481cd4e2cafa',1,'MultiLine']]], + ['settargetlevel',['setTargetLevel',['../class_multi_line.html#a95bb8b96b4160e0cde1c66e6e1f9473c',1,'MultiLine']]], + ['settargettime',['setTargetTime',['../class_multi_line.html#a499325d5ce2a3534780ea228c3228684',1,'MultiLine']]], + ['settargetupdatesteps',['setTargetUpdateSteps',['../class_multi_line.html#a7c063cfd9a9e08b74eadcdb85be1a5a6',1,'MultiLine']]], + ['settime',['setTime',['../class_portamento.html#af19c3b3c189e111079f54211ff5a4ebe',1,'Portamento']]], + ['settimes',['setTimes',['../class_a_d_s_r.html#a68df2fe03f1582d79e7b55e3407d474b',1,'ADSR::setTimes()'],['../class_multi_line.html#a0ad417817ec47553a1e8ebe1e1dc5f46',1,'MultiLine::setTimes()']]], + ['setupfastanalogread',['setupFastAnalogRead',['../group__analog.html#gae909f8857d71ed79f277ee024de52574',1,'setupFastAnalogRead(int8_t speed): mozzi_analog.cpp'],['../group__analog.html#gae909f8857d71ed79f277ee024de52574',1,'setupFastAnalogRead(int8_t speed=FAST_ADC): mozzi_analog.cpp']]], + ['smooth',['Smooth',['../class_smooth.html',1,'Smooth< T >'],['../class_smooth.html#ac6626aae94eb7a22024e2054c1bbbb26',1,'Smooth::Smooth()']]], + ['soundtables',['Soundtables',['../group__soundtables.html',1,'']]], + ['stack',['Stack',['../class_stack.html',1,'Stack< T, NUM_ITEMS >'],['../class_stack.html#ab034b819e2382f80d952cf8527dc6e6c',1,'Stack::Stack()']]], + ['standard',['STANDARD',['../group__core.html#ga0b8ca8ad62b88c01b639bad62eafcbf1',1,'MozziGuts.h']]], + ['standard_5fpwm_5fresolution',['STANDARD_PWM_RESOLUTION',['../group__core.html#ga800c094e0a14fc31d87a360b3807a1b8',1,'STANDARD_PWM_RESOLUTION(): AudioConfigStandard9bitPwm.h'],['../group__core.html#ga800c094e0a14fc31d87a360b3807a1b8',1,'STANDARD_PWM_RESOLUTION(): AudioConfigStandardPlus.h']]], + ['start',['start',['../class_ead.html#ac385679b58e2f9755029b7da7405b233',1,'Ead::start()'],['../class_ead.html#a146b205e70f4b2293e643ea063f2b38f',1,'Ead::start(unsigned int attack_ms, unsigned int decay_ms)'],['../class_event_delay.html#a97a07c9371040d6388b8369352b08d83',1,'EventDelay::start()'],['../class_event_delay.html#a0943cb52a1ee36fda1156f8dd762a105',1,'EventDelay::start(unsigned int delay_milliseconds)'],['../class_metronome.html#ab85d2f5bdc5cb00d5056b0c2c6eed987',1,'Metronome::start()'],['../class_metronome.html#ad5670c748042846b02cb33c613c50422',1,'Metronome::start(unsigned int delay_milliseconds)'],['../class_multi_line.html#aa33607aeff7aef37a1ed9151cac35ea2',1,'MultiLine::start()'],['../class_multi_line.html#aa33607aeff7aef37a1ed9151cac35ea2',1,'MultiLine::start()'],['../class_portamento.html#aae67a74be47cb2e8a6ffbb90786221af',1,'Portamento::start(uint8_t note)'],['../class_portamento.html#af70701abfdd9f3d788f3b313e38017d0',1,'Portamento::start(Q16n16 note)'],['../class_sample.html#a49ab98acdfb4f81a8860ad21876bdc18',1,'Sample::start()'],['../class_sample.html#abb7084b95a6141843ede8025cdd726ac',1,'Sample::start(unsigned int startpos)'],['../class_sample_huffman.html#a15ead859261d3d916d700b75f4626f15',1,'SampleHuffman::start()']]], + ['startmozzi',['startMozzi',['../group__core.html#ga75aa9f4a501f4b167343b8caac8c6837',1,'startMozzi(int control_rate_hz): MozziGuts.cpp'],['../group__core.html#ga75aa9f4a501f4b167343b8caac8c6837',1,'startMozzi(int control_rate_hz=CONTROL_RATE): MozziGuts.cpp']]], + ['statevariable',['StateVariable',['../class_state_variable.html',1,'StateVariable< FILTER_TYPE >'],['../class_state_variable.html#a9950b71a16f63654552d3e15774d6638',1,'StateVariable::StateVariable()']]], + ['stereo_5fhack',['STEREO_HACK',['../group__core.html#ga41e77c76435031bd6088de496aa2a9e0',1,'mozzi_config.h']]], + ['stop',['stop',['../class_multi_line.html#abae6da4598432fdce5fb568f5d330d9d',1,'MultiLine::stop()'],['../class_multi_line.html#abae6da4598432fdce5fb568f5d330d9d',1,'MultiLine::stop()']]] +]; diff --git a/extras/doc/html/search/all_f.html b/extras/doc/html/search/all_f.html new file mode 100644 index 000000000..3bf97c66f --- /dev/null +++ b/extras/doc/html/search/all_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/all_f.js b/extras/doc/html/search/all_f.js new file mode 100644 index 000000000..79cd858b5 --- /dev/null +++ b/extras/doc/html/search/all_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['trailingzeros',['trailingZeros',['../group__util.html#gaf45df8dbf0bc86752d8fc697e2381cc3',1,'trailingZeros(const unsigned long v): mozzi_utils.cpp'],['../group__util.html#gaf45df8dbf0bc86752d8fc697e2381cc3',1,'trailingZeros(unsigned long v): mozzi_utils.cpp']]] +]; diff --git a/extras/doc/html/search/classes_0.html b/extras/doc/html/search/classes_0.html new file mode 100644 index 000000000..2e45b2cb4 --- /dev/null +++ b/extras/doc/html/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_0.js b/extras/doc/html/search/classes_0.js new file mode 100644 index 000000000..4ccf2b084 --- /dev/null +++ b/extras/doc/html/search/classes_0.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['adsr',['ADSR',['../class_a_d_s_r.html',1,'']]], + ['adsr_3c_20control_5frate_2c_20audio_5frate_20_3e',['ADSR< CONTROL_RATE, AUDIO_RATE >',['../class_a_d_s_r.html',1,'']]], + ['adsr_3c_20control_5frate_2c_20control_5frate_20_3e',['ADSR< CONTROL_RATE, CONTROL_RATE >',['../class_a_d_s_r.html',1,'']]], + ['audiodelay',['AudioDelay',['../class_audio_delay.html',1,'']]], + ['audiodelay_3c_20128_20_3e',['AudioDelay< 128 >',['../class_audio_delay.html',1,'']]], + ['audiodelay_3c_20128_2c_20int_20_3e',['AudioDelay< 128, int >',['../class_audio_delay.html',1,'']]], + ['audiodelay_3c_20256_2c_20int_20_3e',['AudioDelay< 256, int >',['../class_audio_delay.html',1,'']]], + ['audiodelayfeedback',['AudioDelayFeedback',['../class_audio_delay_feedback.html',1,'']]], + ['automap',['AutoMap',['../class_auto_map.html',1,'']]], + ['autorange',['AutoRange',['../class_auto_range.html',1,'']]], + ['autorange_3c_20int_20_3e',['AutoRange< int >',['../class_auto_range.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_1.html b/extras/doc/html/search/classes_1.html new file mode 100644 index 000000000..5f1bc63bb --- /dev/null +++ b/extras/doc/html/search/classes_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_1.js b/extras/doc/html/search/classes_1.js new file mode 100644 index 000000000..42a387dae --- /dev/null +++ b/extras/doc/html/search/classes_1.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['cappoll',['CapPoll',['../class_cap_poll.html',1,'']]], + ['circularbuffer',['CircularBuffer',['../class_circular_buffer.html',1,'']]], + ['controldelay',['ControlDelay',['../class_control_delay.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_2.html b/extras/doc/html/search/classes_2.html new file mode 100644 index 000000000..e3a6f9c01 --- /dev/null +++ b/extras/doc/html/search/classes_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_2.js b/extras/doc/html/search/classes_2.js new file mode 100644 index 000000000..22096e9c3 --- /dev/null +++ b/extras/doc/html/search/classes_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['dcfilter',['DCfilter',['../class_d_cfilter.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_3.html b/extras/doc/html/search/classes_3.html new file mode 100644 index 000000000..ed4b46eaf --- /dev/null +++ b/extras/doc/html/search/classes_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_3.js b/extras/doc/html/search/classes_3.js new file mode 100644 index 000000000..ba396c000 --- /dev/null +++ b/extras/doc/html/search/classes_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ead',['Ead',['../class_ead.html',1,'']]], + ['eventdelay',['EventDelay',['../class_event_delay.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_4.html b/extras/doc/html/search/classes_4.html new file mode 100644 index 000000000..b1f5f93ae --- /dev/null +++ b/extras/doc/html/search/classes_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_4.js b/extras/doc/html/search/classes_4.js new file mode 100644 index 000000000..d270be317 --- /dev/null +++ b/extras/doc/html/search/classes_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['int2type',['Int2Type',['../group__util.html#struct_int2_type',1,'']]], + ['intmap',['IntMap',['../class_int_map.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_5.html b/extras/doc/html/search/classes_5.html new file mode 100644 index 000000000..7f718b394 --- /dev/null +++ b/extras/doc/html/search/classes_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_5.js b/extras/doc/html/search/classes_5.js new file mode 100644 index 000000000..9818c94e0 --- /dev/null +++ b/extras/doc/html/search/classes_5.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['line',['Line',['../class_line.html',1,'']]], + ['line_3c_20q15n16_20_3e',['Line< Q15n16 >',['../class_line.html',1,'']]], + ['line_3c_20q16n16_20_3e',['Line< Q16n16 >',['../class_line.html',1,'']]], + ['line_3c_20unsigned_20char_20_3e',['Line< unsigned char >',['../class_line_3_01unsigned_01char_01_4.html',1,'']]], + ['line_3c_20unsigned_20int_20_3e',['Line< unsigned int >',['../class_line_3_01unsigned_01int_01_4.html',1,'']]], + ['line_3c_20unsigned_20long_20_3e',['Line< unsigned long >',['../class_line_3_01unsigned_01long_01_4.html',1,'']]], + ['lowpassfilter',['LowPassFilter',['../class_low_pass_filter.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_6.html b/extras/doc/html/search/classes_6.html new file mode 100644 index 000000000..1c02825c6 --- /dev/null +++ b/extras/doc/html/search/classes_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_6.js b/extras/doc/html/search/classes_6.js new file mode 100644 index 000000000..5758e8147 --- /dev/null +++ b/extras/doc/html/search/classes_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['metronome',['Metronome',['../class_metronome.html',1,'']]], + ['multiline',['MultiLine',['../class_multi_line.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_7.html b/extras/doc/html/search/classes_7.html new file mode 100644 index 000000000..2af8b706d --- /dev/null +++ b/extras/doc/html/search/classes_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_7.js b/extras/doc/html/search/classes_7.js new file mode 100644 index 000000000..01d393dd4 --- /dev/null +++ b/extras/doc/html/search/classes_7.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['oscil',['Oscil',['../class_oscil.html',1,'']]], + ['oscil_3c_208192_2c_20audio_5frate_20_3e',['Oscil< 8192, AUDIO_RATE >',['../class_oscil.html',1,'']]], + ['oscil_3c_20cos8192_5fnum_5fcells_2c_20audio_5frate_20_3e',['Oscil< COS8192_NUM_CELLS, AUDIO_RATE >',['../class_oscil.html',1,'']]], + ['oscil_3c_20sin2048_5fnum_5fcells_2c_20audio_5frate_20_3e',['Oscil< SIN2048_NUM_CELLS, AUDIO_RATE >',['../class_oscil.html',1,'']]], + ['oversample',['OverSample',['../class_over_sample.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_8.html b/extras/doc/html/search/classes_8.html new file mode 100644 index 000000000..a57aeaeca --- /dev/null +++ b/extras/doc/html/search/classes_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_8.js b/extras/doc/html/search/classes_8.js new file mode 100644 index 000000000..3b00cee4d --- /dev/null +++ b/extras/doc/html/search/classes_8.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['pdresonant',['PDResonant',['../class_p_d_resonant.html',1,'']]], + ['phasor',['Phasor',['../class_phasor.html',1,'']]], + ['phasor_3c_20audio_5frate_20_3e',['Phasor< AUDIO_RATE >',['../class_phasor.html',1,'']]], + ['portamento',['Portamento',['../class_portamento.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_9.html b/extras/doc/html/search/classes_9.html new file mode 100644 index 000000000..59ec04485 --- /dev/null +++ b/extras/doc/html/search/classes_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_9.js b/extras/doc/html/search/classes_9.js new file mode 100644 index 000000000..690f77670 --- /dev/null +++ b/extras/doc/html/search/classes_9.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['rcpoll',['RCpoll',['../class_r_cpoll.html',1,'']]], + ['reverbtank',['ReverbTank',['../class_reverb_tank.html',1,'']]], + ['rollingaverage',['RollingAverage',['../class_rolling_average.html',1,'']]], + ['rollingaverage_3c_20t_2c_281_3c_3c_28resolution_5fincrease_5fbits_20_2a2_29_29_3e',['RollingAverage< T,(1<<(RESOLUTION_INCREASE_BITS *2))>',['../class_rolling_average.html',1,'']]], + ['rollingstat',['RollingStat',['../class_rolling_stat.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_a.html b/extras/doc/html/search/classes_a.html new file mode 100644 index 000000000..aaef5a532 --- /dev/null +++ b/extras/doc/html/search/classes_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_a.js b/extras/doc/html/search/classes_a.js new file mode 100644 index 000000000..60f41bb2a --- /dev/null +++ b/extras/doc/html/search/classes_a.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['sample',['Sample',['../class_sample.html',1,'']]], + ['samplehuffman',['SampleHuffman',['../class_sample_huffman.html',1,'']]], + ['smooth',['Smooth',['../class_smooth.html',1,'']]], + ['stack',['Stack',['../class_stack.html',1,'']]], + ['statevariable',['StateVariable',['../class_state_variable.html',1,'']]] +]; diff --git a/extras/doc/html/search/classes_b.html b/extras/doc/html/search/classes_b.html new file mode 100644 index 000000000..e0416e614 --- /dev/null +++ b/extras/doc/html/search/classes_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/classes_b.js b/extras/doc/html/search/classes_b.js new file mode 100644 index 000000000..59c2b934a --- /dev/null +++ b/extras/doc/html/search/classes_b.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['wavepacket',['WavePacket',['../class_wave_packet.html',1,'']]], + ['wavepacketsample',['WavePacketSample',['../class_wave_packet_sample.html',1,'']]], + ['waveshaper',['WaveShaper',['../class_wave_shaper.html',1,'']]], + ['waveshaper_3c_20char_20_3e',['WaveShaper< char >',['../class_wave_shaper_3_01char_01_4.html',1,'']]], + ['waveshaper_3c_20int_20_3e',['WaveShaper< int >',['../class_wave_shaper_3_01int_01_4.html',1,'']]] +]; diff --git a/extras/doc/html/search/close.png b/extras/doc/html/search/close.png new file mode 100644 index 0000000000000000000000000000000000000000..9342d3dfeea7b7c4ee610987e717804b5a42ceb9 GIT binary patch literal 273 zcmV+s0q*{ZP)4(RlMby96)VwnbG{ zbe&}^BDn7x>$<{ck4zAK-=nT;=hHG)kmplIF${xqm8db3oX6wT3bvp`TE@m0cg;b) zBuSL}5?N7O(iZLdAlz@)b)Rd~DnSsSX&P5qC`XwuFwcAYLC+d2>+1(8on;wpt8QIC X2MT$R4iQDd00000NkvXXu0mjfia~GN literal 0 HcmV?d00001 diff --git a/extras/doc/html/search/files_0.html b/extras/doc/html/search/files_0.html new file mode 100644 index 000000000..63c6ce0c4 --- /dev/null +++ b/extras/doc/html/search/files_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/files_0.js b/extras/doc/html/search/files_0.js new file mode 100644 index 000000000..d83b085f0 --- /dev/null +++ b/extras/doc/html/search/files_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['char2mozzi_2epy',['char2mozzi.py',['../char2mozzi_8py.html',1,'']]] +]; diff --git a/extras/doc/html/search/functions_0.html b/extras/doc/html/search/functions_0.html new file mode 100644 index 000000000..03cae5d9b --- /dev/null +++ b/extras/doc/html/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_0.js b/extras/doc/html/search/functions_0.js new file mode 100644 index 000000000..b08bd9adc --- /dev/null +++ b/extras/doc/html/search/functions_0.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['adcdisconnectalldigitalins',['adcDisconnectAllDigitalIns',['../group__analog.html#ga5042e7c576dd0307be38eb70efdb69fe',1,'adcDisconnectAllDigitalIns(): mozzi_analog.cpp'],['../group__analog.html#ga5042e7c576dd0307be38eb70efdb69fe',1,'adcDisconnectAllDigitalIns(): mozzi_analog.cpp']]], + ['adcreconnectalldigitalins',['adcReconnectAllDigitalIns',['../group__analog.html#gabad497d1f8c8026e81849be0b65bf38f',1,'adcReconnectAllDigitalIns(): mozzi_analog.cpp'],['../group__analog.html#gabad497d1f8c8026e81849be0b65bf38f',1,'adcReconnectAllDigitalIns(): mozzi_analog.cpp']]], + ['adsr',['ADSR',['../class_a_d_s_r.html#a3c0d554daae3502cfecee7f3e6a28dd0',1,'ADSR']]], + ['atindex',['atIndex',['../class_oscil.html#a97f2c0f28751641417202fee2a0776d3',1,'Oscil::atIndex()'],['../class_sample.html#a86948f48dcdc0cb19f6e256ece70149d',1,'Sample::atIndex()']]], + ['audiodelay',['AudioDelay',['../class_audio_delay.html#a688f69088f96bf3976a8555d3026365f',1,'AudioDelay::AudioDelay()'],['../class_audio_delay.html#a79be253fcb5709624c8fb708e54f069f',1,'AudioDelay::AudioDelay(unsigned int delaytime_cells)']]], + ['audiodelayfeedback',['AudioDelayFeedback',['../class_audio_delay_feedback.html#a6e6352413ac4ee9b2bc03684b072fdc7',1,'AudioDelayFeedback::AudioDelayFeedback()'],['../class_audio_delay_feedback.html#a7d038aff13126acbca484b74b1ee5620',1,'AudioDelayFeedback::AudioDelayFeedback(uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#a54d7f001d6a99bd3955fb7dab94fbfe8',1,'AudioDelayFeedback::AudioDelayFeedback(uint16_t delaytime_cells, int8_t feedback_level)']]], + ['audiohook',['audioHook',['../group__core.html#ga2fca37b988ab369e2f3c3108c683e59d',1,'audioHook(): MozziGuts.cpp'],['../group__core.html#ga2fca37b988ab369e2f3c3108c683e59d',1,'audioHook(): MozziGuts.cpp']]], + ['audioticks',['audioTicks',['../group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0',1,'audioTicks(): MozziGuts.cpp'],['../group__core.html#ga55fa9d48f327b646c2f71cef7da7b8f0',1,'audioTicks(): MozziGuts.cpp']]], + ['automap',['AutoMap',['../class_auto_map.html#aec125f071bd83180ff0d0a71446725f3',1,'AutoMap']]], + ['autorange',['AutoRange',['../class_auto_range.html#a2f0638f4d8e2937080b67fc0614c8d6d',1,'AutoRange']]] +]; diff --git a/extras/doc/html/search/functions_1.html b/extras/doc/html/search/functions_1.html new file mode 100644 index 000000000..5d7a2e300 --- /dev/null +++ b/extras/doc/html/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_1.js b/extras/doc/html/search/functions_1.js new file mode 100644 index 000000000..03e90de87 --- /dev/null +++ b/extras/doc/html/search/functions_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['cappoll',['CapPoll',['../class_cap_poll.html#a4f691e78391a306d9ee89cdb1026096f',1,'CapPoll']]], + ['circularbuffer',['CircularBuffer',['../class_circular_buffer.html#a6789c0d6d73594fdd412a39445b5cd67',1,'CircularBuffer']]] +]; diff --git a/extras/doc/html/search/functions_10.html b/extras/doc/html/search/functions_10.html new file mode 100644 index 000000000..c78227c88 --- /dev/null +++ b/extras/doc/html/search/functions_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_10.js b/extras/doc/html/search/functions_10.js new file mode 100644 index 000000000..4b9f8bef2 --- /dev/null +++ b/extras/doc/html/search/functions_10.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['uint8_5ftdiv',['uint8_tDiv',['../group__fixmath.html#ga1717d922e241ef368b81def7fd6c2446',1,'mozzi_fixmath.cpp']]], + ['uint8_5ftmod',['uint8_tMod',['../group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414',1,'uint8_tMod(uint8_t n, uint8_t d): mozzi_fixmath.cpp'],['../group__fixmath.html#ga0cb78c87959d2f8cef9e2ec1bd000414',1,'uint8_tMod(uint8_t n, uint8_t d): mozzi_fixmath.cpp']]], + ['unpausemozzi',['unPauseMozzi',['../group__core.html#ga1718c5f0bbb56cc4b2db55702750f43f',1,'unPauseMozzi(): MozziGuts.cpp'],['../group__core.html#ga1718c5f0bbb56cc4b2db55702750f43f',1,'unPauseMozzi(): MozziGuts.cpp']]], + ['update',['update',['../class_a_d_s_r.html#a764566274a3982b43cb1f9fb47ca06ae',1,'ADSR::update()'],['../class_multi_line.html#a0f459efd016e16e8ba81612c7458cdeb',1,'MultiLine::update()'],['../class_multi_line.html#a0f459efd016e16e8ba81612c7458cdeb',1,'MultiLine::update()'],['../class_p_d_resonant.html#ae604c6401c636ab32757913f21c6dbe6',1,'PDResonant::update()'],['../class_rolling_stat.html#a85750e78ac282caec24408dce6e78201',1,'RollingStat::update(T x)'],['../class_rolling_stat.html#a6f7b384ab338da5ba10200fbce7f2eb0',1,'RollingStat::update(int8_t x)']]], + ['updateaudio',['updateAudio',['../group__core.html#ga5503f580eb9f9c25000ea6d1bd925f6f',1,'MozziGuts.h']]], + ['updatecontrol',['updateControl',['../group__core.html#ga59d187b915b2e366c88489e52801951a',1,'MozziGuts.h']]] +]; diff --git a/extras/doc/html/search/functions_11.html b/extras/doc/html/search/functions_11.html new file mode 100644 index 000000000..3ab653ee7 --- /dev/null +++ b/extras/doc/html/search/functions_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_11.js b/extras/doc/html/search/functions_11.js new file mode 100644 index 000000000..c6a086c71 --- /dev/null +++ b/extras/doc/html/search/functions_11.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['wavepacket',['WavePacket',['../class_wave_packet.html#a09afa3b26d61c97e24ccbae9cba2fd57',1,'WavePacket']]], + ['waveshaper',['WaveShaper',['../class_wave_shaper_3_01char_01_4.html#a6364609248c42174f9f7e4974585e301',1,'WaveShaper< char >::WaveShaper()'],['../class_wave_shaper_3_01int_01_4.html#a9cc7f4f6a7493172cdc94411ac09275a',1,'WaveShaper< int >::WaveShaper()']]], + ['write',['write',['../class_audio_delay_feedback.html#aa3232fec9e7f90169e8d8eab85f39394',1,'AudioDelayFeedback::write(int8_t input)'],['../class_audio_delay_feedback.html#aeeec669071403fc0a294724e775e3812',1,'AudioDelayFeedback::write(int8_t input, uint16_t offset)']]], + ['writefeedback',['writeFeedback',['../class_audio_delay_feedback.html#a27e773a0ae0c2cee895fbcf18c1351e1',1,'AudioDelayFeedback']]] +]; diff --git a/extras/doc/html/search/functions_12.html b/extras/doc/html/search/functions_12.html new file mode 100644 index 000000000..cacca935a --- /dev/null +++ b/extras/doc/html/search/functions_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_12.js b/extras/doc/html/search/functions_12.js new file mode 100644 index 000000000..9a86cca12 --- /dev/null +++ b/extras/doc/html/search/functions_12.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['xorshift96',['xorshift96',['../group__random.html#gaf2deee83847f1fcee2c859d97bd072f6',1,'xorshift96(): mozzi_rand.cpp'],['../group__random.html#gaf2deee83847f1fcee2c859d97bd072f6',1,'xorshift96(): mozzi_rand.cpp']]], + ['xorshiftseed',['xorshiftSeed',['../group__random.html#gaf7117eb5e1e0676c276be7094ce30ab7',1,'mozzi_rand.cpp']]] +]; diff --git a/extras/doc/html/search/functions_2.html b/extras/doc/html/search/functions_2.html new file mode 100644 index 000000000..c21af1613 --- /dev/null +++ b/extras/doc/html/search/functions_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_2.js b/extras/doc/html/search/functions_2.js new file mode 100644 index 000000000..a3c8d4b4c --- /dev/null +++ b/extras/doc/html/search/functions_2.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['dcfilter',['DCfilter',['../class_d_cfilter.html#ab55e871fc9d11dfb9231e44627181c2c',1,'DCfilter']]], + ['disconnectdigitalin',['disconnectDigitalIn',['../group__analog.html#ga532fe99fe78e34d4e6ae0ae2c7528353',1,'disconnectDigitalIn(uint8_t channel_num): mozzi_analog.cpp'],['../group__analog.html#ga532fe99fe78e34d4e6ae0ae2c7528353',1,'disconnectDigitalIn(uint8_t channel_num): mozzi_analog.cpp']]] +]; diff --git a/extras/doc/html/search/functions_3.html b/extras/doc/html/search/functions_3.html new file mode 100644 index 000000000..e6f474424 --- /dev/null +++ b/extras/doc/html/search/functions_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_3.js b/extras/doc/html/search/functions_3.js new file mode 100644 index 000000000..64c456f9e --- /dev/null +++ b/extras/doc/html/search/functions_3.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['ead',['Ead',['../class_ead.html#a4862282805c2ac3255a34a99a31564d5',1,'Ead']]], + ['eventdelay',['EventDelay',['../class_event_delay.html#acd7b63341732ac4c23bce04d81316017',1,'EventDelay']]] +]; diff --git a/extras/doc/html/search/functions_4.html b/extras/doc/html/search/functions_4.html new file mode 100644 index 000000000..9ae34ff2e --- /dev/null +++ b/extras/doc/html/search/functions_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_4.js b/extras/doc/html/search/functions_4.js new file mode 100644 index 000000000..65212b04a --- /dev/null +++ b/extras/doc/html/search/functions_4.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['float_5fto_5fq0n16',['float_to_Q0n16',['../group__fixmath.html#ga4d20591828f0189963f1190f7197ba68',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq0n7',['float_to_Q0n7',['../group__fixmath.html#ga1e0eab490ffe9a47fd78bcc449e3b995',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq0n8',['float_to_Q0n8',['../group__fixmath.html#ga00e21c6b9d75ed26cd3bf1b9f4f9482e',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq15n16',['float_to_Q15n16',['../group__fixmath.html#ga0e76f24ef8dfe0fa7510c4eea2608d5c',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq16n16',['float_to_Q16n16',['../group__fixmath.html#ga041d3ba65c131b9aa01b9f34ec439b71',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq1n14',['float_to_Q1n14',['../group__fixmath.html#ga1aab8b66d6d6f370cc66d82968884d18',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq1n15',['float_to_Q1n15',['../group__fixmath.html#ga447e25c2d6c9bf14d8e324df0cc02753',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq23n8',['float_to_Q23n8',['../group__fixmath.html#ga2ca980a6d71eb894b07534b30d9b7a06',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq24n8',['float_to_Q24n8',['../group__fixmath.html#gaf91bc6123ecaff1441660d3abb20bf2e',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq7n8',['float_to_Q7n8',['../group__fixmath.html#ga2a28dc262b3e79e0f67e4089cccaab45',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq8n24',['float_to_Q8n24',['../group__fixmath.html#ga33ecb8a512f7d4eff5047d4ad65f5423',1,'mozzi_fixmath.h']]], + ['float_5fto_5fq8n8',['float_to_Q8n8',['../group__fixmath.html#ga36132b5f8f95223749b410ca235eef16',1,'mozzi_fixmath.h']]] +]; diff --git a/extras/doc/html/search/functions_5.html b/extras/doc/html/search/functions_5.html new file mode 100644 index 000000000..54f53d072 --- /dev/null +++ b/extras/doc/html/search/functions_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_5.js b/extras/doc/html/search/functions_5.js new file mode 100644 index 000000000..1ad5544c7 --- /dev/null +++ b/extras/doc/html/search/functions_5.js @@ -0,0 +1,11 @@ +var searchData= +[ + ['getaudioinput',['getAudioInput',['../group__analog.html#ga3f15eb8d6694020d170ebcbedb645de7',1,'getAudioInput(): MozziGuts.cpp'],['../group__analog.html#ga3f15eb8d6694020d170ebcbedb645de7',1,'getAudioInput(): MozziGuts.cpp']]], + ['getmax',['getMax',['../class_auto_range.html#a4d27e5fe43f9b376b537def88ac74119',1,'AutoRange']]], + ['getmean',['getMean',['../class_rolling_stat.html#a8521a53cde7c5d28ac9c375aaee3a972',1,'RollingStat']]], + ['getmin',['getMin',['../class_auto_range.html#acd1dae6e6ffb288efc1618e2453ad5ef',1,'AutoRange']]], + ['getphasefractional',['getPhaseFractional',['../class_oscil.html#aa774ef68b06f9652e6ac23d4e9332554',1,'Oscil']]], + ['getrange',['getRange',['../class_auto_range.html#a75c842b27ad3917be6d29e3d35b485f3',1,'AutoRange']]], + ['getstandarddeviation',['getStandardDeviation',['../class_rolling_stat.html#a234ab1d244e4b392056fcaa1fc1e4fc4',1,'RollingStat']]], + ['getvariance',['getVariance',['../class_rolling_stat.html#a3e7e5f706e3b5ac2496f14b7b639775d',1,'RollingStat']]] +]; diff --git a/extras/doc/html/search/functions_6.html b/extras/doc/html/search/functions_6.html new file mode 100644 index 000000000..c7bc6fbc7 --- /dev/null +++ b/extras/doc/html/search/functions_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_6.js b/extras/doc/html/search/functions_6.js new file mode 100644 index 000000000..d881603b0 --- /dev/null +++ b/extras/doc/html/search/functions_6.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['intmap',['IntMap',['../class_int_map.html#a36ab6e0137254909f44ae909dfe44a8a',1,'IntMap']]], + ['isplaying',['isPlaying',['../class_sample.html#ae4fa817151691ece9d2a91a0c0c03007',1,'Sample']]] +]; diff --git a/extras/doc/html/search/functions_7.html b/extras/doc/html/search/functions_7.html new file mode 100644 index 000000000..7f10e2bd1 --- /dev/null +++ b/extras/doc/html/search/functions_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_7.js b/extras/doc/html/search/functions_7.js new file mode 100644 index 000000000..47b465948 --- /dev/null +++ b/extras/doc/html/search/functions_7.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['line',['Line',['../class_line.html#aa6a80df90da15782ca88889ef9c8dd51',1,'Line::Line()'],['../class_line_3_01unsigned_01char_01_4.html#a151189139ee6ed39bacec86ea2364124',1,'Line< unsigned char >::Line()'],['../class_line_3_01unsigned_01int_01_4.html#a32c77e9442a640df179ec4573e8fea6d',1,'Line< unsigned int >::Line()'],['../class_line_3_01unsigned_01long_01_4.html#a797b2ebfe450971b6e75c26b1e6c88da',1,'Line< unsigned long >::Line()']]], + ['lowpassfilter',['LowPassFilter',['../class_low_pass_filter.html#a6d6538d3dfe603cce18711c990b85a03',1,'LowPassFilter']]] +]; diff --git a/extras/doc/html/search/functions_8.html b/extras/doc/html/search/functions_8.html new file mode 100644 index 000000000..347734a83 --- /dev/null +++ b/extras/doc/html/search/functions_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_8.js b/extras/doc/html/search/functions_8.js new file mode 100644 index 000000000..9b66582a3 --- /dev/null +++ b/extras/doc/html/search/functions_8.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['metronome',['Metronome',['../class_metronome.html#a37e8b0aa5a9aa8fa0f33212360cc0928',1,'Metronome']]], + ['mozzianalogread',['mozziAnalogRead',['../group__analog.html#gae9536bf35f6ea46a6938d5eb52b947c3',1,'mozziAnalogRead(uint8_t pin): mozzi_analog.cpp'],['../group__analog.html#gae9536bf35f6ea46a6938d5eb52b947c3',1,'mozziAnalogRead(uint8_t pin): mozzi_analog.cpp']]], + ['mozzimicros',['mozziMicros',['../group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe',1,'mozziMicros(): MozziGuts.cpp'],['../group__core.html#gaaa6a42d80c5297407a45ca8bf3c1c7fe',1,'mozziMicros(): MozziGuts.cpp']]], + ['mtof',['mtof',['../group__midi.html#gafacb8849f96270644ea79184fde7db37',1,'mtof(float midival): mozzi_midi.cpp'],['../group__midi.html#ga07d1ca985403df63f75aa5d143477206',1,'mtof(uint8_t midi_note): mozzi_midi.cpp'],['../group__midi.html#ga08102facf170648591b2ca24a3c39712',1,'mtof(int midi_note): mozzi_midi.cpp'],['../group__midi.html#gafacb8849f96270644ea79184fde7db37',1,'mtof(float x): mozzi_midi.cpp'],['../group__midi.html#ga07d1ca985403df63f75aa5d143477206',1,'mtof(uint8_t midi_note): mozzi_midi.cpp'],['../group__midi.html#ga08102facf170648591b2ca24a3c39712',1,'mtof(int midi_note): mozzi_midi.cpp']]], + ['multiline',['MultiLine',['../class_multi_line.html#ad5aed7c3561c71a13398015e2f396fdc',1,'MultiLine::MultiLine()'],['../class_multi_line.html#ad5aed7c3561c71a13398015e2f396fdc',1,'MultiLine::MultiLine()']]] +]; diff --git a/extras/doc/html/search/functions_9.html b/extras/doc/html/search/functions_9.html new file mode 100644 index 000000000..6999e7e00 --- /dev/null +++ b/extras/doc/html/search/functions_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_9.js b/extras/doc/html/search/functions_9.js new file mode 100644 index 000000000..5e9f20a5f --- /dev/null +++ b/extras/doc/html/search/functions_9.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['next',['next',['../class_a_d_s_r.html#ab5cc9ada01565729187d65fce113899d',1,'ADSR::next()'],['../class_audio_delay.html#a19258636609d83a2bab11849e17b5294',1,'AudioDelay::next(T in_value, unsigned int delaytime_cells)'],['../class_audio_delay.html#a41c09b5cc9e817d8eaf111b0f74c9a0b',1,'AudioDelay::next(T in_value)'],['../class_audio_delay_feedback.html#a5a702d1a0a9b104beb0b18c80422500e',1,'AudioDelayFeedback::next(int8_t input)'],['../class_audio_delay_feedback.html#a7c7745dd84f01dbdc9b6552a4c427f0b',1,'AudioDelayFeedback::next(int8_t input, uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#af9cc2cf135fa0f1a1f0d50ca7d9f89ea',1,'AudioDelayFeedback::next(int8_t input, Q16n16 delaytime_cells)'],['../class_auto_map.html#a34bc821f4f662e54383dd9d61db782df',1,'AutoMap::next()'],['../class_auto_range.html#a788fca4c9f1e6699eb1990582015c0e3',1,'AutoRange::next()'],['../class_cap_poll.html#a894e8abbabff197f4d17106455fef718',1,'CapPoll::next()'],['../class_d_cfilter.html#ae900f943d9520fbf3a522508231d82b0',1,'DCfilter::next()'],['../class_ead.html#a57e6f7b304c2bd7dd8cedf7f4fba66c9',1,'Ead::next()'],['../class_line.html#a413f620b2824c6996b3346ee54351849',1,'Line::next()'],['../class_line_3_01unsigned_01char_01_4.html#ad33f421ca975cb6b175a1c1f3ba0b68a',1,'Line< unsigned char >::next()'],['../class_line_3_01unsigned_01int_01_4.html#a4bf1b56d036097ecc3e28d52ef129ade',1,'Line< unsigned int >::next()'],['../class_line_3_01unsigned_01long_01_4.html#a69f39cf62a30d001d50daf82f45f191b',1,'Line< unsigned long >::next()'],['../class_low_pass_filter.html#a393f154ec729419747c5dd630327b852',1,'LowPassFilter::next()'],['../class_multi_line.html#ab165b0a67b57bd590b95abc42b8bf6c2',1,'MultiLine::next()'],['../class_multi_line.html#ab165b0a67b57bd590b95abc42b8bf6c2',1,'MultiLine::next()'],['../class_oscil.html#a655de04690650b27182e3b4d07768d46',1,'Oscil::next()'],['../class_over_sample.html#a413ca7de0dbf3d2afafd84aa75857442',1,'OverSample::next()'],['../class_p_d_resonant.html#a80bd42c7ea92a64c3b8a42779a1e0d26',1,'PDResonant::next()'],['../class_phasor.html#a08ab94aeb466450173bd486fbf8eb823',1,'Phasor::next()'],['../class_portamento.html#ad39101f5275c433713df7699214638bc',1,'Portamento::next()'],['../class_r_cpoll.html#ab61697b3922ed289c8d501ccd11cbd6f',1,'RCpoll::next()'],['../class_reverb_tank.html#a4930ae7a871dba610fb141d7ab83d827',1,'ReverbTank::next()'],['../class_rolling_average.html#a23c4b93258faace0c7ee60eb395d2c4b',1,'RollingAverage::next()'],['../class_sample.html#a087e0da33436c9bfce1f462df50ac2a9',1,'Sample::next()'],['../class_sample_huffman.html#a8ec7bbb21f5cf0e780611a7539e86695',1,'SampleHuffman::next()'],['../class_smooth.html#ab7c809b6b5217771832a3e829695f8d5',1,'Smooth::next()'],['../class_state_variable.html#a14cb100c22e4a33025665ef3620ca2b8',1,'StateVariable::next()'],['../class_wave_packet.html#ab4e35082b60d3ccc29c86d09078329bd',1,'WavePacket::next()'],['../class_wave_shaper_3_01char_01_4.html#a8aa75261350b2651a2cbca264a02e944',1,'WaveShaper< char >::next()'],['../class_wave_shaper_3_01int_01_4.html#a2bf3bca1848a953c52ae94d5b58199ba',1,'WaveShaper< int >::next()']]], + ['noteoff',['noteOff',['../class_a_d_s_r.html#ab5ec578b60c4eb157312ed9c718eb44b',1,'ADSR::noteOff()'],['../class_p_d_resonant.html#a2b548734ea968d99d7939d68c95411cb',1,'PDResonant::noteOff()']]], + ['noteon',['noteOn',['../class_a_d_s_r.html#a1dd8b667b09fd695eb7957c7b2be666c',1,'ADSR::noteOn()'],['../class_p_d_resonant.html#a7d4497f3b5944f73dd2fb82d68fc099b',1,'PDResonant::noteOn()']]] +]; diff --git a/extras/doc/html/search/functions_a.html b/extras/doc/html/search/functions_a.html new file mode 100644 index 000000000..8ca8f111a --- /dev/null +++ b/extras/doc/html/search/functions_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_a.js b/extras/doc/html/search/functions_a.js new file mode 100644 index 000000000..9ee8c7d84 --- /dev/null +++ b/extras/doc/html/search/functions_a.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['operator_28_29',['operator()',['../class_auto_map.html#afd49885d3f05ca0a2f417199a9e7cf10',1,'AutoMap::operator()()'],['../class_int_map.html#ae3bf8b61f2ab79ac6626245213e7cb2a',1,'IntMap::operator()()'],['../class_smooth.html#a24eb02e4c4bfe9401f24ed0399b1e392',1,'Smooth::operator()()']]], + ['oscil',['Oscil',['../class_oscil.html#afe6a75646d2dd822a654bcd85242e800',1,'Oscil::Oscil(const int8_t *TABLE_NAME)'],['../class_oscil.html#ab7dc5f97742d841fff6a4dca6d7242f3',1,'Oscil::Oscil()']]] +]; diff --git a/extras/doc/html/search/functions_b.html b/extras/doc/html/search/functions_b.html new file mode 100644 index 000000000..a6efa7480 --- /dev/null +++ b/extras/doc/html/search/functions_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_b.js b/extras/doc/html/search/functions_b.js new file mode 100644 index 000000000..38d265d55 --- /dev/null +++ b/extras/doc/html/search/functions_b.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['pausemozzi',['pauseMozzi',['../group__core.html#ga0dc2dc3b2c20b081df4d55ad039f64e5',1,'pauseMozzi(): MozziGuts.cpp'],['../group__core.html#ga0dc2dc3b2c20b081df4d55ad039f64e5',1,'pauseMozzi(): MozziGuts.cpp']]], + ['pdresonant',['PDResonant',['../class_p_d_resonant.html#a2bd77e08be68fc6ce89f1f71a7e1e069',1,'PDResonant']]], + ['phaseincfromfreq',['phaseIncFromFreq',['../class_oscil.html#a1cb5d694d59b7ae0df2e63fa5ce5cded',1,'Oscil::phaseIncFromFreq()'],['../class_phasor.html#a9b5992b53fa7e449fec950df00c46230',1,'Phasor::phaseIncFromFreq()'],['../class_sample.html#a18e72ecdb7bac8d41038b785d6deba58',1,'Sample::phaseIncFromFreq()']]], + ['phasor',['Phasor',['../class_phasor.html#a147c4c3aa7506c3da800e6cc77deb4ac',1,'Phasor']]], + ['phmod',['phMod',['../class_oscil.html#a4c6de90bc2d4183a5146eb2ae5e3dd2c',1,'Oscil']]], + ['playing',['playing',['../class_a_d_s_r.html#a7e85542579496e15fca189f33d31f149',1,'ADSR::playing()'],['../class_multi_line.html#a16a4fc1f4378a3c47a279fe0b0459448',1,'MultiLine::playing()'],['../class_multi_line.html#a16a4fc1f4378a3c47a279fe0b0459448',1,'MultiLine::playing()']]], + ['pop',['pop',['../class_stack.html#afa9a35e13b68d9b59999227218a34d0a',1,'Stack']]], + ['portamento',['Portamento',['../class_portamento.html#adc910a47d3fe8eff848d6de42d7280df',1,'Portamento']]], + ['push',['push',['../class_stack.html#af67739d9b82966da46f7496f4c1fc801',1,'Stack']]] +]; diff --git a/extras/doc/html/search/functions_c.html b/extras/doc/html/search/functions_c.html new file mode 100644 index 000000000..657866505 --- /dev/null +++ b/extras/doc/html/search/functions_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_c.js b/extras/doc/html/search/functions_c.js new file mode 100644 index 000000000..75c20cece --- /dev/null +++ b/extras/doc/html/search/functions_c.js @@ -0,0 +1,63 @@ +var searchData= +[ + ['q0n16_5fto_5ffloat',['Q0n16_to_float',['../group__fixmath.html#ga0440dbc7692a88dca7b1173f020c9b0d',1,'mozzi_fixmath.h']]], + ['q0n7_5fto_5ffloat',['Q0n7_to_float',['../group__fixmath.html#ga8b01eb695e8d8c197e4e83a76d391a6a',1,'mozzi_fixmath.h']]], + ['q0n7_5fto_5fq15n16',['Q0n7_to_Q15n16',['../group__fixmath.html#gac8b6733abac81f36cf8075a4d3c04e49',1,'mozzi_fixmath.h']]], + ['q0n7_5fto_5fq1n14',['Q0n7_to_Q1n14',['../group__fixmath.html#ga468ddaa38e178b45a77e0c103da22b7c',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5ffloat',['Q0n8_to_float',['../group__fixmath.html#gade631f0534cf54fadbff65911809d927',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq15n16',['Q0n8_to_Q15n16',['../group__fixmath.html#gad224b917b591bfa3554a958e84f8fadf',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq16n16',['Q0n8_to_Q16n16',['../group__fixmath.html#gab13c5f790423d9a0cf10445b366933fe',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq1n15',['Q0n8_to_Q1n15',['../group__fixmath.html#gaa9c85bc32475856ed07c3780a237ba31',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq24n8',['Q0n8_to_Q24n8',['../group__fixmath.html#ga77edd2a4cd49df42e7145da9bdb799ae',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq8n24',['Q0n8_to_Q8n24',['../group__fixmath.html#gac864675855d95314dd015ea52dc80135',1,'mozzi_fixmath.h']]], + ['q0n8_5fto_5fq8n8',['Q0n8_to_Q8n8',['../group__fixmath.html#ga07cdd6c75045759d9d11116f5caea4bf',1,'mozzi_fixmath.h']]], + ['q15n0_5fto_5fq15n16',['Q15n0_to_Q15n16',['../group__fixmath.html#ga8ef5b17eaddb22228824829204ee71bb',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5ffloat',['Q15n16_to_float',['../group__fixmath.html#ga4096449c3f0598a1534255de789d2ee5',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq0n8',['Q15n16_to_Q0n8',['../group__fixmath.html#gaf8dd8621335948f9048742f0a59dc795',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq15n0',['Q15n16_to_Q15n0',['../group__fixmath.html#gaa2ec03187910e9c6418298ef55655c36',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq23n8',['Q15n16_to_Q23n8',['../group__fixmath.html#ga67b0f3ae70755ed8891e510b02813c08',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq7n8',['Q15n16_to_Q7n8',['../group__fixmath.html#ga21d72d50bd41022755514c96c2d11901',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq8n0',['Q15n16_to_Q8n0',['../group__fixmath.html#ga13bc20d9c470ccac803d53f3ebf7d861',1,'mozzi_fixmath.h']]], + ['q15n16_5fto_5fq8n8',['Q15n16_to_Q8n8',['../group__fixmath.html#gaf62905baa27fd9ec0cbf5ed054ebd08a',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5ffloat',['Q16n0_to_float',['../group__fixmath.html#ga990f68566b105bc35ed718ad5ef93d72',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5fq15n16',['Q16n0_to_Q15n16',['../group__fixmath.html#ga720cdc234e4d0979753e5aef22a93e11',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5fq16n16',['Q16n0_to_Q16n16',['../group__fixmath.html#gac193b97057ac01de898db661cb6d1c5d',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5fq23n8',['Q16n0_to_Q23n8',['../group__fixmath.html#gaab7cd08af1c66dd48873f9a5645cc95e',1,'mozzi_fixmath.h']]], + ['q16n0_5fto_5fq24n8',['Q16n0_to_Q24n8',['../group__fixmath.html#ga779f365fbc3378a0e8cc167d44fd7aad',1,'mozzi_fixmath.h']]], + ['q16n16_5fmtof',['Q16n16_mtof',['../group__midi.html#ga45bd3f3abd7ae5fa509eac3d3931a5b2',1,'Q16n16_mtof(Q16n16 midival_fractional): mozzi_midi.cpp'],['../group__midi.html#ga45bd3f3abd7ae5fa509eac3d3931a5b2',1,'Q16n16_mtof(Q16n16 midival): mozzi_midi.cpp']]], + ['q16n16_5fpow2',['Q16n16_pow2',['../group__fixmath.html#ga2e1d9d0fe4ba7edb9830efb7887c36bd',1,'mozzi_fixmath.cpp']]], + ['q16n16_5fto_5ffloat',['Q16n16_to_float',['../group__fixmath.html#gafcb57f2d0fdcce65b60401f47b871d14',1,'mozzi_fixmath.h']]], + ['q16n16_5fto_5fq0n8',['Q16n16_to_Q0n8',['../group__fixmath.html#ga1315b4f68a57d26fbedc88d5b30a44d8',1,'mozzi_fixmath.h']]], + ['q16n16_5fto_5fq16n0',['Q16n16_to_Q16n0',['../group__fixmath.html#ga89bdabdfd59a8ec3f06aedbbab087527',1,'mozzi_fixmath.h']]], + ['q16n16_5fto_5fq24n8',['Q16n16_to_Q24n8',['../group__fixmath.html#ga17dd8cb80ef87b6573926e411618105a',1,'mozzi_fixmath.h']]], + ['q16n16_5fto_5fq8n8',['Q16n16_to_Q8n8',['../group__fixmath.html#gaef6ce2a93fe5862ac373772e994713a9',1,'mozzi_fixmath.h']]], + ['q1n14_5fto_5ffloat',['Q1n14_to_float',['../group__fixmath.html#gad3fe2bc17bed17cd159a9c030145b6ca',1,'mozzi_fixmath.h']]], + ['q1n14_5fto_5fq0n7',['Q1n14_to_Q0n7',['../group__fixmath.html#ga5f3733fb89e77693e54328375226f5e9',1,'mozzi_fixmath.h']]], + ['q1n15_5fto_5ffloat',['Q1n15_to_float',['../group__fixmath.html#ga9ed5a6a2041f490ffa52b5a5fa95d3e5',1,'mozzi_fixmath.h']]], + ['q1n15_5fto_5fq0n8',['Q1n15_to_Q0n8',['../group__fixmath.html#ga67c11990c9288aa762c708d3a48ba7fc',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5ffloat',['Q23n8_to_float',['../group__fixmath.html#ga47738704056a272968e80b399e06e82b',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5fq15n0',['Q23n8_to_Q15n0',['../group__fixmath.html#ga1b21d30a04f07940dc4ea206533b9dd8',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5fq16n0',['Q23n8_to_Q16n0',['../group__fixmath.html#gaa6a3087e0119ed233a3256f8fa25e146',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5fq31n0',['Q23n8_to_Q31n0',['../group__fixmath.html#ga8f3d1181dc6802782b9ff9aa59ca96a2',1,'mozzi_fixmath.h']]], + ['q23n8_5fto_5fq7n8',['Q23n8_to_Q7n8',['../group__fixmath.html#gac243a1fd2154b115e4ba39a70125675e',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5ffloat',['Q24n8_to_float',['../group__fixmath.html#gab495892ee3db6cbce186fbb7c7246088',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5fq0n8',['Q24n8_to_Q0n8',['../group__fixmath.html#ga94dd6fe8594b171881ade98431dfda28',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5fq16n0',['Q24n8_to_Q16n0',['../group__fixmath.html#gaefdfa391a9fef0f17d1f9df16fd9a9f0',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5fq16n16',['Q24n8_to_Q16n16',['../group__fixmath.html#ga2b445681d56f8693c3d98d5ff19b51d4',1,'mozzi_fixmath.h']]], + ['q24n8_5fto_5fq32n0',['Q24n8_to_Q32n0',['../group__fixmath.html#ga9f28b2310c92ecac72960d9bd0aff80f',1,'mozzi_fixmath.h']]], + ['q7n0_5fto_5fq15n16',['Q7n0_to_Q15n16',['../group__fixmath.html#ga64d943b21ef783f34135630a5c80be46',1,'mozzi_fixmath.h']]], + ['q7n0_5fto_5fq7n8',['Q7n0_to_Q7n8',['../group__fixmath.html#ga81b0b1f295a6a724c100e600d6b4ce28',1,'mozzi_fixmath.h']]], + ['q7n8_5fmult',['Q7n8_mult',['../group__fixmath.html#ga306932c4fb32b1352c24b7602a696fee',1,'mozzi_fixmath.h']]], + ['q7n8_5fto_5ffloat',['Q7n8_to_float',['../group__fixmath.html#gaad3cbbc6a772d246d26fd98b5a079382',1,'mozzi_fixmath.h']]], + ['q7n8_5fto_5fq15n16',['Q7n8_to_Q15n16',['../group__fixmath.html#ga958d671aeefb66c2492b84bf299f8d13',1,'mozzi_fixmath.h']]], + ['q7n8_5fto_5fq7n0',['Q7n8_to_Q7n0',['../group__fixmath.html#gaa8be90cc674fc9ac72a2faafb11d6a5e',1,'mozzi_fixmath.h']]], + ['q8n0_5fto_5fq15n16',['Q8n0_to_Q15n16',['../group__fixmath.html#gac0b4678c510db93302efb15497911907',1,'mozzi_fixmath.h']]], + ['q8n0_5fto_5fq16n16',['Q8n0_to_Q16n16',['../group__fixmath.html#ga589b5c022b59a72fc3fb39061048d193',1,'mozzi_fixmath.h']]], + ['q8n0_5fto_5fq7n8',['Q8n0_to_Q7n8',['../group__fixmath.html#ga4baa8569c241630ddd25d798d0a89b3d',1,'mozzi_fixmath.h']]], + ['q8n0_5fto_5fq8n8',['Q8n0_to_Q8n8',['../group__fixmath.html#ga90a5d59d5a529f4caaf408730230a156',1,'mozzi_fixmath.h']]], + ['q8n24_5fto_5ffloat',['Q8n24_to_float',['../group__fixmath.html#ga6f0e36938a7dfae4ab399f17642c2bcd',1,'mozzi_fixmath.h']]], + ['q8n24_5fto_5fq0n8',['Q8n24_to_Q0n8',['../group__fixmath.html#ga0c5065bc7c71ac750acde1c7ce216d87',1,'mozzi_fixmath.h']]], + ['q8n8_5fto_5ffloat',['Q8n8_to_float',['../group__fixmath.html#gabc9c251c25fa7a239d704ea3998e7e39',1,'mozzi_fixmath.h']]], + ['q8n8_5fto_5fq16n16',['Q8n8_to_Q16n16',['../group__fixmath.html#gab88fd86b4f226f0e2614b0ac813e4cad',1,'mozzi_fixmath.h']]], + ['q8n8_5fto_5fq8n0',['Q8n8_to_Q8n0',['../group__fixmath.html#gad68e3b4d1bf65e997d5e709eb4153572',1,'mozzi_fixmath.h']]] +]; diff --git a/extras/doc/html/search/functions_d.html b/extras/doc/html/search/functions_d.html new file mode 100644 index 000000000..9f4209c98 --- /dev/null +++ b/extras/doc/html/search/functions_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_d.js b/extras/doc/html/search/functions_d.js new file mode 100644 index 000000000..96b058e00 --- /dev/null +++ b/extras/doc/html/search/functions_d.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['rand',['rand',['../group__random.html#gabe026433bdf21da516984d35730672fc',1,'rand(int8_t minval, int8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga13bc207ecda4f92e2be2fb585a5cce2b',1,'rand(uint8_t minval, uint8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga4c69deb53afb886b26c76b343513b340',1,'rand(int minval, int maxval): mozzi_rand.cpp'],['../group__random.html#ga95de742b529d5965461f1d3f6f576e18',1,'rand(unsigned int minval, unsigned int maxval): mozzi_rand.cpp'],['../group__random.html#ga99dee852111a97e20a64582de8e79ab1',1,'rand(int8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga904cf092c2b014dc6c99f7844bd3723e',1,'rand(uint8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga1182cb74988d9c8510959149adc63762',1,'rand(int maxval): mozzi_rand.cpp'],['../group__random.html#ga4ad4ab94c8b0e8a4d4be925490378733',1,'rand(unsigned int maxval): mozzi_rand.cpp'],['../group__random.html#gabe026433bdf21da516984d35730672fc',1,'rand(int8_t minval, int8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga99dee852111a97e20a64582de8e79ab1',1,'rand(int8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga13bc207ecda4f92e2be2fb585a5cce2b',1,'rand(uint8_t minval, uint8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga904cf092c2b014dc6c99f7844bd3723e',1,'rand(uint8_t maxval): mozzi_rand.cpp'],['../group__random.html#ga4c69deb53afb886b26c76b343513b340',1,'rand(int minval, int maxval): mozzi_rand.cpp'],['../group__random.html#ga1182cb74988d9c8510959149adc63762',1,'rand(int maxval): mozzi_rand.cpp'],['../group__random.html#ga95de742b529d5965461f1d3f6f576e18',1,'rand(unsigned int minval, unsigned int maxval): mozzi_rand.cpp'],['../group__random.html#ga4ad4ab94c8b0e8a4d4be925490378733',1,'rand(unsigned int maxval): mozzi_rand.cpp']]], + ['randmidinote',['randMidiNote',['../group__random.html#ga15ff4da0bec0272bf728ea7de2d78006',1,'randMidiNote(): mozzi_rand.cpp'],['../group__random.html#ga15ff4da0bec0272bf728ea7de2d78006',1,'randMidiNote(): mozzi_rand.cpp']]], + ['randprime',['randPrime',['../group__random.html#gab6c2b444d462461b82997e04105d0398',1,'primes.h']]], + ['randprimeupto',['randPrimeUpTo',['../group__random.html#gaead8db89e2403d5ef7842f894552c629',1,'primes.h']]], + ['randseed',['randSeed',['../group__random.html#ga84c58d758e238208eb82fc8ae2330b66',1,'randSeed(long seed): mozzi_rand.cpp'],['../group__random.html#ga83ff6b4e38c84713e0d67aa1ec06af66',1,'randSeed(): mozzi_rand.cpp'],['../group__random.html#ga83ff6b4e38c84713e0d67aa1ec06af66',1,'randSeed(): mozzi_rand.cpp']]], + ['rangewholesample',['rangeWholeSample',['../class_sample.html#a8a012ae52ee028222118f6bba5c7fb33',1,'Sample']]], + ['rcpoll',['RCpoll',['../class_r_cpoll.html#a44673505bbfbac288ec994dd48017e83',1,'RCpoll']]], + ['read',['read',['../class_audio_delay.html#a26b409fbfc322ae527ba23680c56e3a9',1,'AudioDelay::read()'],['../class_audio_delay_feedback.html#a77508ec1d8da719edbc7c34173c9d7cb',1,'AudioDelayFeedback::read(Q16n16 delaytime_cells)'],['../class_audio_delay_feedback.html#a8b6cefa45ecaa174320effe25b9ce6c5',1,'AudioDelayFeedback::read()']]], + ['ready',['ready',['../class_event_delay.html#a2267889678fb75df2f6bdcbd0be0ea8a',1,'EventDelay::ready()'],['../class_metronome.html#adc67bd96eac9f9b9260f8b070b7db75f',1,'Metronome::ready()']]], + ['reconnectdigitalin',['reconnectDigitalIn',['../group__analog.html#ga26462e443299e8d39a520d4a838e00b7',1,'reconnectDigitalIn(uint8_t channel_num): mozzi_analog.cpp'],['../group__analog.html#ga26462e443299e8d39a520d4a838e00b7',1,'reconnectDigitalIn(uint8_t channel_num): mozzi_analog.cpp']]], + ['reverbtank',['ReverbTank',['../class_reverb_tank.html#a3ca18b03d045df164462338f6ed0648c',1,'ReverbTank']]], + ['rollingaverage',['RollingAverage',['../class_rolling_average.html#a11cf7b9e1278648b1eb10e5534fe3e29',1,'RollingAverage']]], + ['rollingstat',['RollingStat',['../class_rolling_stat.html#a98c3f767391db80b8ad59ca53c1e6a94',1,'RollingStat']]] +]; diff --git a/extras/doc/html/search/functions_e.html b/extras/doc/html/search/functions_e.html new file mode 100644 index 000000000..3c2348843 --- /dev/null +++ b/extras/doc/html/search/functions_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_e.js b/extras/doc/html/search/functions_e.js new file mode 100644 index 000000000..baf530ca7 --- /dev/null +++ b/extras/doc/html/search/functions_e.js @@ -0,0 +1,74 @@ +var searchData= +[ + ['sample',['Sample',['../class_sample.html#a0a22d5d06e5665853432fe1949e9d514',1,'Sample::Sample(const int8_t *TABLE_NAME)'],['../class_sample.html#ac9a043d47ab143f7a4d9370cf9f2f02d',1,'Sample::Sample()']]], + ['samplehuffman',['SampleHuffman',['../class_sample_huffman.html#a8587f641949024cd5aad7bfc1715adff',1,'SampleHuffman']]], + ['set',['set',['../class_audio_delay.html#a7bd0a07f7803afda1a71b50e3f66827b',1,'AudioDelay::set()'],['../class_ead.html#af203c82721ab832c653a23ff219c040e',1,'Ead::set()'],['../class_event_delay.html#a937c86f3b05ccb6138ff7927713820da',1,'EventDelay::set()'],['../class_line.html#a6bad32d527e0d931c99e9b72c2a75c80',1,'Line::set(T value)'],['../class_line.html#a7378d526cf07c42c0792868c749dee6e',1,'Line::set(T targetvalue, T num_steps)'],['../class_line.html#a24ad85c17562e97b6823a010a5ba04c6',1,'Line::set(T startvalue, T targetvalue, T num_steps)'],['../class_line_3_01unsigned_01char_01_4.html#a6129febcfd57d32a5c771c8f730b6b7a',1,'Line< unsigned char >::set(unsigned char value)'],['../class_line_3_01unsigned_01char_01_4.html#a2b90896c1357a45daca74498f17b4909',1,'Line< unsigned char >::set(unsigned char targetvalue, unsigned char num_steps)'],['../class_line_3_01unsigned_01char_01_4.html#ad14e98651035d75c89270c6f0d5e5c46',1,'Line< unsigned char >::set(unsigned char startvalue, unsigned char targetvalue, unsigned char num_steps)'],['../class_line_3_01unsigned_01int_01_4.html#a157b1887464b81ed8388a8f73173338d',1,'Line< unsigned int >::set(unsigned int value)'],['../class_line_3_01unsigned_01int_01_4.html#a002bf2ae8e48467fd2d45072b8328e65',1,'Line< unsigned int >::set(unsigned int targetvalue, unsigned int num_steps)'],['../class_line_3_01unsigned_01int_01_4.html#a1677277eb5f3eb56e47a6e7dde0c1558',1,'Line< unsigned int >::set(unsigned int startvalue, unsigned int targetvalue, unsigned int num_steps)'],['../class_line_3_01unsigned_01long_01_4.html#abb246fabacbefbd6d88ddce719f74b0e',1,'Line< unsigned long >::set(unsigned long value)'],['../class_line_3_01unsigned_01long_01_4.html#abb89855ea745a453262cd2aeb31e2ec7',1,'Line< unsigned long >::set(unsigned long targetvalue, unsigned long num_steps)'],['../class_line_3_01unsigned_01long_01_4.html#a199dd187d87c9941515b21aea0c52a0f',1,'Line< unsigned long >::set(unsigned long startvalue, unsigned long targetvalue, unsigned long num_steps)'],['../class_phasor.html#a509e4a782a36cb9e913da170d6707421',1,'Phasor::set()'],['../class_wave_packet.html#ac693b3d676b583584a8cfc6b9cc0f37f',1,'WavePacket::set()']]], + ['setadlevels',['setADLevels',['../class_a_d_s_r.html#a5739379144932ae38f408b228d05b7cb',1,'ADSR']]], + ['setallupdatesteps',['setAllUpdateSteps',['../class_a_d_s_r.html#ab70af348346b644239a36d6a163369cc',1,'ADSR::setAllUpdateSteps()'],['../class_multi_line.html#a7e8ebd732f18ed056bc9754c372307a6',1,'MultiLine::setAllUpdateSteps()']]], + ['setattack',['setAttack',['../class_ead.html#a6bae0e92e6709c3fcd31fccd41212bac',1,'Ead']]], + ['setattacklevel',['setAttackLevel',['../class_a_d_s_r.html#a6e1741d76154cca16b2c8354b5d6db1d',1,'ADSR']]], + ['setattacktime',['setAttackTime',['../class_a_d_s_r.html#ad5160133723ed85ec89f20bde128f604',1,'ADSR']]], + ['setattackupdatesteps',['setAttackUpdateSteps',['../class_a_d_s_r.html#a12a942278a6a621794b7d34a8edbc7c5',1,'ADSR']]], + ['setbandwidth',['setBandwidth',['../class_wave_packet.html#abce5b3ca4c559473c199744753fb75aa',1,'WavePacket']]], + ['setbpm',['setBPM',['../class_metronome.html#aab384673719ebd552dd72d474ed58556',1,'Metronome']]], + ['setcentrefreq',['setCentreFreq',['../class_state_variable.html#a47e7ddad76db7009e370fa91ea5d4d3d',1,'StateVariable::setCentreFreq()'],['../class_wave_packet.html#adbbbf8b6b9eaae18ef381ff04be3eb5b',1,'WavePacket::setCentreFreq()']]], + ['setcutofffreq',['setCutoffFreq',['../class_low_pass_filter.html#ac8a9f6a04009d37885f47cdf5a45023d',1,'LowPassFilter']]], + ['setdecay',['setDecay',['../class_ead.html#aa99e6dc2d5448b4de0764c6208e5c2fc',1,'Ead']]], + ['setdecaylevel',['setDecayLevel',['../class_a_d_s_r.html#a6542f4a76a37696245447855d647b41f',1,'ADSR']]], + ['setdecaytime',['setDecayTime',['../class_a_d_s_r.html#a3b8c6492ad9a379dc0c6749677ba4d29',1,'ADSR']]], + ['setdecayupdatesteps',['setDecayUpdateSteps',['../class_a_d_s_r.html#a7fdc36f6648a058e0197ccaf2f5acdbd',1,'ADSR']]], + ['setdelaytimecells',['setDelayTimeCells',['../class_audio_delay_feedback.html#abcf71a86083db5a48ef71c1397247886',1,'AudioDelayFeedback::setDelayTimeCells(uint16_t delaytime_cells)'],['../class_audio_delay_feedback.html#a8e8344af6962ea061da8f70ed119b2bd',1,'AudioDelayFeedback::setDelayTimeCells(Q16n16 delaytime_cells)'],['../class_audio_delay_feedback.html#a7c54b49ae9f25baaf8714528295c53e2',1,'AudioDelayFeedback::setDelayTimeCells(float delaytime_cells)']]], + ['setearlyreflections',['setEarlyReflections',['../class_reverb_tank.html#a6d27d8a02ec9551a5338bb1ba4bf9af2',1,'ReverbTank']]], + ['setend',['setEnd',['../class_sample.html#a9713e2d38b94e629c06916a7543ef48f',1,'Sample']]], + ['setfeebacklevel',['setFeebackLevel',['../class_reverb_tank.html#a91eeb601e42df576737f0d44dc73c653',1,'ReverbTank']]], + ['setfeedbacklevel',['setFeedbackLevel',['../class_audio_delay_feedback.html#a2cd87a7dc91187ed439a8ec1d7e00d29',1,'AudioDelayFeedback']]], + ['setfreq',['setFreq',['../class_oscil.html#a23121f22ea447918088a79c7f9748b3d',1,'Oscil::setFreq(int frequency)'],['../class_oscil.html#aa342e74f8e73edda0b0f042770e3fba4',1,'Oscil::setFreq(float frequency)'],['../class_phasor.html#afc6106c648bddb5f2f084b8f34216b0f',1,'Phasor::setFreq(int frequency)'],['../class_phasor.html#a81f1976ebb4a91f66f26674efca52072',1,'Phasor::setFreq(float frequency)'],['../class_sample.html#aa0c37457f99def5c7036c6b6d9ee43fc',1,'Sample::setFreq(int frequency)'],['../class_sample.html#a4d5840157e98024537ae10cd27ff9f9e',1,'Sample::setFreq(float frequency)']]], + ['setfreq_5fq16n16',['setFreq_Q16n16',['../class_oscil.html#a73b52741178ed490463d9ff471cebef3',1,'Oscil']]], + ['setfreq_5fq24n8',['setFreq_Q24n8',['../class_oscil.html#abc8a4ee236f7fd45dda9dece7292b6e7',1,'Oscil::setFreq_Q24n8()'],['../class_sample.html#a903c2d634b10ac531c3c9f6a35fcb046',1,'Sample::setFreq_Q24n8()']]], + ['setfundamental',['setFundamental',['../class_wave_packet.html#af87c37ffd274eee91aa93c0f7d560be2',1,'WavePacket']]], + ['setlevels',['setLevels',['../class_a_d_s_r.html#ae6a213e9c236eb3b47e941384693e75d',1,'ADSR::setLevels()'],['../class_multi_line.html#a2e3788c36c4a6f59c62770cfef2036e5',1,'MultiLine::setLevels()']]], + ['setloopdelays',['setLoopDelays',['../class_reverb_tank.html#a0b348b630007a5cbda8b314d0c8dd604',1,'ReverbTank']]], + ['setloopingoff',['setLoopingOff',['../class_sample.html#accfdc762cd47425824179bff4cd2a78f',1,'Sample::setLoopingOff()'],['../class_sample_huffman.html#a040bfc55c19bbaa6cc42331be3646c8a',1,'SampleHuffman::setLoopingOff()']]], + ['setloopingon',['setLoopingOn',['../class_sample.html#a40e76011d841b84d2d54bf2cec6c4d5f',1,'Sample::setLoopingOn()'],['../class_sample_huffman.html#a01f9bfb513da0374fe78c12300b69760',1,'SampleHuffman::setLoopingOn()']]], + ['setpdenv',['setPDEnv',['../class_p_d_resonant.html#a7c921c18d37b0625beab9e4f06c69ca4',1,'PDResonant']]], + ['setphase',['setPhase',['../class_oscil.html#ab7b740eec56740426a47508562ed4dd5',1,'Oscil']]], + ['setphasefractional',['setPhaseFractional',['../class_oscil.html#afc77bfc5a1ad5926ad8df37725d480d7',1,'Oscil']]], + ['setphaseinc',['setPhaseInc',['../class_oscil.html#a2ff9bfcc57e07bf0df2ed7db186ecff7',1,'Oscil::setPhaseInc()'],['../class_phasor.html#aa3d62bdf762247b2523c0a625caeedd7',1,'Phasor::setPhaseInc()'],['../class_sample.html#aaff03b2a14f8f0f79c13840948151a1d',1,'Sample::setPhaseInc()']]], + ['setpin13high',['setPin13High',['../group__util.html#gaea7ee11e335eb2d6b891b886c5f3f942',1,'mozzi_utils.h']]], + ['setpin13low',['setPin13Low',['../group__util.html#ga4c87d0211135fd33a8697350235b50b4',1,'mozzi_utils.h']]], + ['setpin13out',['setPin13Out',['../group__util.html#gad1725ef17b234c4df9cc64a9bf561435',1,'mozzi_utils.h']]], + ['setreleaselevel',['setReleaseLevel',['../class_a_d_s_r.html#a2651482b2f666e224cf8ce82f4146213',1,'ADSR']]], + ['setreleasetime',['setReleaseTime',['../class_a_d_s_r.html#a2333aa55547ec8c690e632265cd4f1c4',1,'ADSR']]], + ['setreleaseupdatesteps',['setReleaseUpdateSteps',['../class_a_d_s_r.html#a21eda3f27fbfc71d12ca89f54f89adaf',1,'ADSR']]], + ['setresonance',['setResonance',['../class_low_pass_filter.html#ad655253ff702ba5bda1bdbb0199019f0',1,'LowPassFilter::setResonance()'],['../class_state_variable.html#a992e23a80b611b72e3e764c14d5ee188',1,'StateVariable::setResonance()']]], + ['setsmoothness',['setSmoothness',['../class_smooth.html#aac44bbf7a9bc6b9bae80eecc1be6e188',1,'Smooth']]], + ['setstart',['setStart',['../class_sample.html#a01836f7624ea574e966e775377d5bf11',1,'Sample']]], + ['setsustainlevel',['setSustainLevel',['../class_a_d_s_r.html#a4e54b94f8adf1555996c0aa254d3245b',1,'ADSR']]], + ['setsustaintime',['setSustainTime',['../class_a_d_s_r.html#abd93d77bf049b8151eeb735685b0e8d7',1,'ADSR']]], + ['setsustainupdatesteps',['setSustainUpdateSteps',['../class_a_d_s_r.html#aac492e771fd8e653d4ce70f519fb9382',1,'ADSR']]], + ['settable',['setTable',['../class_oscil.html#a0b22d79fb2d6c7fb50b19c00f249ed84',1,'Oscil::setTable()'],['../class_sample.html#ade1401f231c920576b1eea2776ac591f',1,'Sample::setTable()'],['../class_wave_packet_sample.html#af50b8ef715a86bcdf417961b585c170d',1,'WavePacketSample::setTable()']]], + ['settarget1level',['setTarget1Level',['../class_multi_line.html#aa79a31cd77050e22f975ada45635ac58',1,'MultiLine']]], + ['settarget1time',['setTarget1Time',['../class_multi_line.html#abb797c4d04a052ae56130e2554b07b8d',1,'MultiLine']]], + ['settarget1updatesteps',['setTarget1UpdateSteps',['../class_multi_line.html#af65dde0a6731c711fe65b4dd24293c43',1,'MultiLine']]], + ['settarget2level',['setTarget2Level',['../class_multi_line.html#ae5d8c361d54349c81d2fa99cdb8ad579',1,'MultiLine']]], + ['settarget2time',['setTarget2Time',['../class_multi_line.html#abc2ed9d5db8dd064228ffe7bb68b7044',1,'MultiLine']]], + ['settarget2updatesteps',['setTarget2UpdateSteps',['../class_multi_line.html#ad0a22fc5f50162d1933689e18ab99b9c',1,'MultiLine']]], + ['settarget3level',['setTarget3Level',['../class_multi_line.html#a7d7e332ca89c42eaf652e724c06cfd92',1,'MultiLine']]], + ['settarget3time',['setTarget3Time',['../class_multi_line.html#a9edf92a819ee55e98d7d5360dcefe582',1,'MultiLine']]], + ['settarget3updatesteps',['setTarget3UpdateSteps',['../class_multi_line.html#a65056b607b842c4b6a3bf3c66ab2e1db',1,'MultiLine']]], + ['settarget4level',['setTarget4Level',['../class_multi_line.html#a0f505af65246d7faa0917543be6aacfe',1,'MultiLine']]], + ['settarget4time',['setTarget4Time',['../class_multi_line.html#a7c750cf3cfefee3c345765cdfad8c3cf',1,'MultiLine']]], + ['settarget4updatesteps',['setTarget4UpdateSteps',['../class_multi_line.html#a0bebb4cc76e0991a6ced481cd4e2cafa',1,'MultiLine']]], + ['settargetlevel',['setTargetLevel',['../class_multi_line.html#a95bb8b96b4160e0cde1c66e6e1f9473c',1,'MultiLine']]], + ['settargettime',['setTargetTime',['../class_multi_line.html#a499325d5ce2a3534780ea228c3228684',1,'MultiLine']]], + ['settargetupdatesteps',['setTargetUpdateSteps',['../class_multi_line.html#a7c063cfd9a9e08b74eadcdb85be1a5a6',1,'MultiLine']]], + ['settime',['setTime',['../class_portamento.html#af19c3b3c189e111079f54211ff5a4ebe',1,'Portamento']]], + ['settimes',['setTimes',['../class_a_d_s_r.html#a68df2fe03f1582d79e7b55e3407d474b',1,'ADSR::setTimes()'],['../class_multi_line.html#a0ad417817ec47553a1e8ebe1e1dc5f46',1,'MultiLine::setTimes()']]], + ['setupfastanalogread',['setupFastAnalogRead',['../group__analog.html#gae909f8857d71ed79f277ee024de52574',1,'setupFastAnalogRead(int8_t speed): mozzi_analog.cpp'],['../group__analog.html#gae909f8857d71ed79f277ee024de52574',1,'setupFastAnalogRead(int8_t speed=FAST_ADC): mozzi_analog.cpp']]], + ['smooth',['Smooth',['../class_smooth.html#ac6626aae94eb7a22024e2054c1bbbb26',1,'Smooth']]], + ['stack',['Stack',['../class_stack.html#ab034b819e2382f80d952cf8527dc6e6c',1,'Stack']]], + ['start',['start',['../class_ead.html#ac385679b58e2f9755029b7da7405b233',1,'Ead::start()'],['../class_ead.html#a146b205e70f4b2293e643ea063f2b38f',1,'Ead::start(unsigned int attack_ms, unsigned int decay_ms)'],['../class_event_delay.html#a97a07c9371040d6388b8369352b08d83',1,'EventDelay::start()'],['../class_event_delay.html#a0943cb52a1ee36fda1156f8dd762a105',1,'EventDelay::start(unsigned int delay_milliseconds)'],['../class_metronome.html#ab85d2f5bdc5cb00d5056b0c2c6eed987',1,'Metronome::start()'],['../class_metronome.html#ad5670c748042846b02cb33c613c50422',1,'Metronome::start(unsigned int delay_milliseconds)'],['../class_multi_line.html#aa33607aeff7aef37a1ed9151cac35ea2',1,'MultiLine::start()'],['../class_multi_line.html#aa33607aeff7aef37a1ed9151cac35ea2',1,'MultiLine::start()'],['../class_portamento.html#aae67a74be47cb2e8a6ffbb90786221af',1,'Portamento::start(uint8_t note)'],['../class_portamento.html#af70701abfdd9f3d788f3b313e38017d0',1,'Portamento::start(Q16n16 note)'],['../class_sample.html#a49ab98acdfb4f81a8860ad21876bdc18',1,'Sample::start()'],['../class_sample.html#abb7084b95a6141843ede8025cdd726ac',1,'Sample::start(unsigned int startpos)'],['../class_sample_huffman.html#a15ead859261d3d916d700b75f4626f15',1,'SampleHuffman::start()']]], + ['startmozzi',['startMozzi',['../group__core.html#ga75aa9f4a501f4b167343b8caac8c6837',1,'startMozzi(int control_rate_hz): MozziGuts.cpp'],['../group__core.html#ga75aa9f4a501f4b167343b8caac8c6837',1,'startMozzi(int control_rate_hz=CONTROL_RATE): MozziGuts.cpp']]], + ['statevariable',['StateVariable',['../class_state_variable.html#a9950b71a16f63654552d3e15774d6638',1,'StateVariable']]], + ['stop',['stop',['../class_multi_line.html#abae6da4598432fdce5fb568f5d330d9d',1,'MultiLine::stop()'],['../class_multi_line.html#abae6da4598432fdce5fb568f5d330d9d',1,'MultiLine::stop()']]] +]; diff --git a/extras/doc/html/search/functions_f.html b/extras/doc/html/search/functions_f.html new file mode 100644 index 000000000..07e22cf6a --- /dev/null +++ b/extras/doc/html/search/functions_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/functions_f.js b/extras/doc/html/search/functions_f.js new file mode 100644 index 000000000..79cd858b5 --- /dev/null +++ b/extras/doc/html/search/functions_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['trailingzeros',['trailingZeros',['../group__util.html#gaf45df8dbf0bc86752d8fc697e2381cc3',1,'trailingZeros(const unsigned long v): mozzi_utils.cpp'],['../group__util.html#gaf45df8dbf0bc86752d8fc697e2381cc3',1,'trailingZeros(unsigned long v): mozzi_utils.cpp']]] +]; diff --git a/extras/doc/html/search/groups_0.html b/extras/doc/html/search/groups_0.html new file mode 100644 index 000000000..e4f877c10 --- /dev/null +++ b/extras/doc/html/search/groups_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/groups_0.js b/extras/doc/html/search/groups_0.js new file mode 100644 index 000000000..709a938a0 --- /dev/null +++ b/extras/doc/html/search/groups_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['analog',['Analog',['../group__analog.html',1,'']]] +]; diff --git a/extras/doc/html/search/groups_1.html b/extras/doc/html/search/groups_1.html new file mode 100644 index 000000000..ccecfef1e --- /dev/null +++ b/extras/doc/html/search/groups_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/groups_1.js b/extras/doc/html/search/groups_1.js new file mode 100644 index 000000000..641232743 --- /dev/null +++ b/extras/doc/html/search/groups_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['core',['Core',['../group__core.html',1,'']]] +]; diff --git a/extras/doc/html/search/groups_2.html b/extras/doc/html/search/groups_2.html new file mode 100644 index 000000000..51d195f8b --- /dev/null +++ b/extras/doc/html/search/groups_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/groups_2.js b/extras/doc/html/search/groups_2.js new file mode 100644 index 000000000..c06e4df88 --- /dev/null +++ b/extras/doc/html/search/groups_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['fixmath',['Fixmath',['../group__fixmath.html',1,'']]] +]; diff --git a/extras/doc/html/search/groups_3.html b/extras/doc/html/search/groups_3.html new file mode 100644 index 000000000..055c52085 --- /dev/null +++ b/extras/doc/html/search/groups_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/groups_3.js b/extras/doc/html/search/groups_3.js new file mode 100644 index 000000000..5edb8fa4b --- /dev/null +++ b/extras/doc/html/search/groups_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['midi',['Midi',['../group__midi.html',1,'']]] +]; diff --git a/extras/doc/html/search/groups_4.html b/extras/doc/html/search/groups_4.html new file mode 100644 index 000000000..87d7ffa92 --- /dev/null +++ b/extras/doc/html/search/groups_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/groups_4.js b/extras/doc/html/search/groups_4.js new file mode 100644 index 000000000..28844cf87 --- /dev/null +++ b/extras/doc/html/search/groups_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['random',['Random',['../group__random.html',1,'']]] +]; diff --git a/extras/doc/html/search/groups_5.html b/extras/doc/html/search/groups_5.html new file mode 100644 index 000000000..53fd147cc --- /dev/null +++ b/extras/doc/html/search/groups_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/groups_5.js b/extras/doc/html/search/groups_5.js new file mode 100644 index 000000000..2e92eb0ce --- /dev/null +++ b/extras/doc/html/search/groups_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['soundtables',['Soundtables',['../group__soundtables.html',1,'']]] +]; diff --git a/extras/doc/html/search/groups_6.html b/extras/doc/html/search/groups_6.html new file mode 100644 index 000000000..908622f0c --- /dev/null +++ b/extras/doc/html/search/groups_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/groups_6.js b/extras/doc/html/search/groups_6.js new file mode 100644 index 000000000..6a7ff87f9 --- /dev/null +++ b/extras/doc/html/search/groups_6.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['util',['Util',['../group__util.html',1,'']]] +]; diff --git a/extras/doc/html/search/mag_sel.png b/extras/doc/html/search/mag_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..81f6040a2092402b4d98f9ffa8855d12a0d4ca17 GIT binary patch literal 563 zcmV-30?hr1P)zxx&tqG15pu7)IiiXFflOc2k;dXd>%13GZAy? zRz!q0=|E6a6vV)&ZBS~G9oe0kbqyw1*gvY`{Pop2oKq#FlzgXt@Xh-7fxh>}`Fxg> z$%N%{$!4=5nM{(;=c!aG1Ofr^Do{u%Ih{^&Fc@H2)+a-?TBXrw5DW&z%Nb6mQ!L9O zl}b@6mB?f=tX3;#vl)}ggh(Vpyh(IK z(Mb0D{l{U$FsRjP;!{($+bsaaVi8T#1c0V#qEIOCYa9@UVLV`f__E81L;?WEaRA;Y zUH;rZ;vb;mk7JX|$=i3O~&If0O@oZfLg8gfIjW=dcBsz;gI=!{-r4# z4%6v$&~;q^j7Fo67yJ(NJWuX+I~I!tj^nW3?}^9bq|<3^+vapS5sgM^x7!cs(+mMT z&y%j};&~po+YO)3hoUH4E*E;e9>?R6SS&`X)p`njycAVcg{rEb41T{~Hk(bl-7eSb zmFxA2uIqo#@R?lKm50ND`~6Nfn|-b1|L6O98vt3Tx@gKz#isxO002ovPDHLkV1kyW B_l^Jn literal 0 HcmV?d00001 diff --git a/extras/doc/html/search/nomatches.html b/extras/doc/html/search/nomatches.html new file mode 100644 index 000000000..b1ded27e9 --- /dev/null +++ b/extras/doc/html/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/extras/doc/html/search/search.css b/extras/doc/html/search/search.css new file mode 100644 index 000000000..de372b104 --- /dev/null +++ b/extras/doc/html/search/search.css @@ -0,0 +1,273 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + float: none; + margin-top: 0px; + right: 0px; + width: 170px; + height: 24px; + z-index: 102; + display: inline; + position: absolute; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; + -webkit-border-radius: 0px; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #B3ACAB; + background-color: #FBFAFA; + z-index: 10001; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #696060; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #F3F2F2; + z-index:10000; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #716867; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #716867; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F5F4F4; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/extras/doc/html/search/search.js b/extras/doc/html/search/search.js new file mode 100644 index 000000000..dedce3bf0 --- /dev/null +++ b/extras/doc/html/search/search.js @@ -0,0 +1,791 @@ +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; ek7RCwB~R6VQOP#AvB$vH7i{6H{96zot$7cZT<7246EF5Np6N}+$IbiG6W zg#87A+NFaX+=_^xM1#gCtshC=E{%9^uQX_%?YwXvo{#q&MnpJ8uh(O?ZRc&~_1%^SsPxG@rfElJg-?U zm!Cz-IOn(qJP3kDp-^~qt+FGbl=5jNli^Wj_xIBG{Rc0en{!oFvyoNC7{V~T8}b>| z=jL2WIReZzX(YN(_9fV;BBD$VXQIxNasAL8ATvEu822WQ%mvv4FO#qs` BFGc_W literal 0 HcmV?d00001 diff --git a/extras/doc/html/search/search_r.png b/extras/doc/html/search/search_r.png new file mode 100644 index 0000000000000000000000000000000000000000..97ee8b439687084201b79c6f776a41f495c6392a GIT binary patch literal 612 zcmV-q0-ODbP)PbXFRCwB?)W514K@j&X?z2*SxFI6-@HT2E2K=9X9%Pb zEK*!TBw&g(DMC;|A)uGlRkOS9vd-?zNs%bR4d$w+ox_iFnE8fvIvv7^5<(>Te12Li z7C)9srCzmK{ZcNM{YIl9j{DePFgOWiS%xG@5CnnnJa4nvY<^glbz7^|-ZY!dUkAwd z{gaTC@_>b5h~;ug#R0wRL0>o5!hxm*s0VW?8dr}O#zXTRTnrQm_Z7z1Mrnx>&p zD4qifUjzLvbVVWi?l?rUzwt^sdb~d!f_LEhsRVIXZtQ=qSxuxqm zEX#tf>$?M_Y1-LSDT)HqG?`%-%ZpY!#{N!rcNIiL;G7F0`l?)mNGTD9;f9F5Up3Kg zw}a<-JylhG&;=!>B+fZaCX+?C+kHYrP%c?X2!Zu_olK|GcS4A70HEy;vn)I0>0kLH z`jc(WIaaHc7!HS@f*^R^Znx8W=_jIl2oWJoQ*h1^$FX!>*PqR1J8k|fw}w_y}TpE>7m8DqDO<3z`OzXt$ccSejbEZCg@0000 + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/extras/doc/html/search/typedefs_0.js b/extras/doc/html/search/typedefs_0.js new file mode 100644 index 000000000..b0c0bdfb5 --- /dev/null +++ b/extras/doc/html/search/typedefs_0.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['q0n15',['Q0n15',['../group__fixmath.html#ga7b0aeeb726b5790b7b181f4f1ba08ee4',1,'mozzi_fixmath.h']]], + ['q0n16',['Q0n16',['../group__fixmath.html#ga38b7537c31ebeb6a2aba2ea34d23f230',1,'mozzi_fixmath.h']]], + ['q0n31',['Q0n31',['../group__fixmath.html#ga8f4b2d87d5b697b3625c347618fa64c4',1,'mozzi_fixmath.h']]], + ['q0n32',['Q0n32',['../group__fixmath.html#gae32cb6df74dc8053c5da2a7b6378583b',1,'mozzi_fixmath.h']]], + ['q0n7',['Q0n7',['../group__fixmath.html#ga9a64ce80fa7c320187d2cf2104a96daa',1,'mozzi_fixmath.h']]], + ['q0n8',['Q0n8',['../group__fixmath.html#ga36659a8cbbf0b380fa7bb2355e32db51',1,'mozzi_fixmath.h']]], + ['q15n0',['Q15n0',['../group__fixmath.html#ga97de6e3641b7638093a53cd137c8568c',1,'mozzi_fixmath.h']]], + ['q15n16',['Q15n16',['../group__fixmath.html#ga3e1cab88474edfa08535402573125cae',1,'mozzi_fixmath.h']]], + ['q16n0',['Q16n0',['../group__fixmath.html#ga50af2aa1b7d33bba0b6e1a88c350adfa',1,'mozzi_fixmath.h']]], + ['q16n16',['Q16n16',['../group__fixmath.html#gab3127fd8ac279e1d8dda0292bc1fc8dc',1,'mozzi_fixmath.h']]], + ['q1n14',['Q1n14',['../group__fixmath.html#ga856876974bff2af13e507f42af0c4925',1,'mozzi_fixmath.h']]], + ['q1n15',['Q1n15',['../group__fixmath.html#gadefb02e4d84cdb085fbc6251b8f4e8be',1,'mozzi_fixmath.h']]], + ['q23n8',['Q23n8',['../group__fixmath.html#gaa43a54806ef427491497cc1762480d13',1,'mozzi_fixmath.h']]], + ['q24n8',['Q24n8',['../group__fixmath.html#ga940a116ff2bfbd1b013b41b1be73f70f',1,'mozzi_fixmath.h']]], + ['q31n0',['Q31n0',['../group__fixmath.html#ga5979e4e6ca93e368ee8c042a526b3b73',1,'mozzi_fixmath.h']]], + ['q32n0',['Q32n0',['../group__fixmath.html#gafc3e7e5a9ddd997abe8e815ba91f3c4e',1,'mozzi_fixmath.h']]], + ['q3n13',['Q3n13',['../group__fixmath.html#ga2ca0a65f5b9ddef56756b4a75b3b8a68',1,'mozzi_fixmath.h']]], + ['q7n0',['Q7n0',['../group__fixmath.html#gabc933ab043f14dfee980811b2a103594',1,'mozzi_fixmath.h']]], + ['q7n8',['Q7n8',['../group__fixmath.html#ga65001bd29222d896ae9256fd7a415d41',1,'mozzi_fixmath.h']]], + ['q8n0',['Q8n0',['../group__fixmath.html#gadec626a60cce3a7fec144d2505b79dda',1,'mozzi_fixmath.h']]], + ['q8n24',['Q8n24',['../group__fixmath.html#ga5ce3f8456c6ea996029b8ea0d96fb3e8',1,'mozzi_fixmath.h']]], + ['q8n8',['Q8n8',['../group__fixmath.html#ga8dcb8a23bfed3b8404f7a0d73f300c8a',1,'mozzi_fixmath.h']]] +]; diff --git a/extras/doc/html/sin1024__int8_8py_source.html b/extras/doc/html/sin1024__int8_8py_source.html new file mode 100644 index 000000000..1a8a6cd46 --- /dev/null +++ b/extras/doc/html/sin1024__int8_8py_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: sin1024_int8.py Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
sin1024_int8.py
+
+
+
1 
2 
3 
4 import array
5 import os
6 import textwrap
7 import math
8 
9 def generate(outfile, tablename, tablelength, samplerate):
10  fout = open(os.path.expanduser(outfile), "w")
11  fout.write('#ifndef ' + tablename + '_H_' + '\n')
12  fout.write('#define ' + tablename + '_H_' + '\n \n')
13  fout.write('#if ARDUINO >= 100'+'\n')
14  fout.write('#include "Arduino.h"'+'\n')
15  fout.write('#else'+'\n')
16  fout.write('#include "WProgram.h"'+'\n')
17  fout.write('#endif'+'\n')
18  fout.write('#include <avr/pgmspace.h>'+'\n \n')
19  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength)+'\n')
20  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
21  outstring = 'const int8_t __attribute__((section(".progmem.data"))) ' + tablename + '_DATA [] = {'
22 
23  try:
24  for num in range(tablelength):
25 
26  x = float(num)/tablelength
27 
28  t_x = (math.cos(2*math.pi*x-math.pi)+1)/2
29 
30  scaled = int(math.floor(t_x*255.999))-128
31 
32  outstring += str(scaled) + ', '
33  finally:
34  outstring = textwrap.fill(outstring, 80)
35  outstring += '\n }; \n \n #endif /* ' + tablename + '_H_ */\n'
36  fout.write(outstring)
37  fout.close()
38  print "wrote " + outfile
39 
40 generate("~/Desktop/sin1024_int8.h", "SIN1024", 1024, "1024")
+
+ + + + diff --git a/extras/doc/html/sin8192__uint8_8py_source.html b/extras/doc/html/sin8192__uint8_8py_source.html new file mode 100644 index 000000000..a211eb410 --- /dev/null +++ b/extras/doc/html/sin8192__uint8_8py_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: sin8192_uint8.py Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
sin8192_uint8.py
+
+
+
1 
2 
3 
4 import array
5 import os
6 import textwrap
7 import math
8 
9 def generate(outfile, tablename, tablelength, samplerate):
10  fout = open(os.path.expanduser(outfile), "w")
11  fout.write('#ifndef ' + tablename + '_H_' + '\n')
12  fout.write('#define ' + tablename + '_H_' + '\n \n')
13  fout.write('#if ARDUINO >= 100'+'\n')
14  fout.write('#include "Arduino.h"'+'\n')
15  fout.write('#else'+'\n')
16  fout.write('#include "WProgram.h"'+'\n')
17  fout.write('#endif'+'\n')
18  fout.write('#include <avr/pgmspace.h>'+'\n \n')
19  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength)+'\n')
20  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
21  outstring = 'const int8_t __attribute__((section(".progmem.data"))) ' + tablename + '_DATA [] = {'
22  halftable = tablelength/2
23  try:
24  for num in range(tablelength):
25 
27  x = float(num)/tablelength
28 
29  t_x = (math.cos(2*math.pi*x-math.pi)+1)/2
30 
31  scaled = int(math.floor(t_x*255.999))
32 
33  outstring += str(scaled) + ', '
34 
36  finally:
37  outstring = textwrap.fill(outstring, 80)
38  outstring += '\n }; \n \n #endif /* ' + tablename + '_H_ */\n'
39  fout.write(outstring)
40  fout.close()
41  print "wrote " + outfile
42 
43 
44 generate("~/Desktop/sin8192_uint8.h", "sin8192_uint", 8192, "8192")
+
+ + + + diff --git a/extras/doc/html/sin__multi__levels__int8_8py_source.html b/extras/doc/html/sin__multi__levels__int8_8py_source.html new file mode 100644 index 000000000..e208f9eb6 --- /dev/null +++ b/extras/doc/html/sin__multi__levels__int8_8py_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: sin_multi_levels_int8.py Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
sin_multi_levels_int8.py
+
+
+
1 
3 
4 import array,os,textwrap,math
5 
6 
7 
8 def generate(outfile, tablename, tablelength, numtables):
9  fout = open(os.path.expanduser(outfile), "w")
10 
11 
12 
13  fout.write('#ifndef ' + tablename + '_H_' + '\n')
14  fout.write('#define ' + tablename + '_H_' + '\n \n')
15  fout.write('#if ARDUINO >= 100'+'\n')
16  fout.write('#include "Arduino.h"'+'\n')
17  fout.write('#else'+'\n')
18  fout.write('#include "WProgram.h"'+'\n')
19  fout.write('#endif'+'\n')
20  fout.write('#include <avr/pgmspace.h>'+'\n \n')
21  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(tablelength) +'\n')
22  fout.write('const int8_t __attribute__((section(".progmem.data"))) ' + tablename + '_DATA [] = { \n')
23 
24  try:
25  for tablenum in range(numtables):
26  try:
27  outstring = '\n'
28  for num in range(tablelength):
29 
30  x = float(num)/tablelength
31 
32  t_x = math.sin(2*math.pi*x)*(float(tablenum+1)/numtables)
33 
34  scaled = int16_t(math.floor(t_x*127.999))
35 
36  outstring += str(scaled) + ', '
37  finally:
38  outstring = textwrap.fill(outstring, 80)
39  outstring += '\n'
40  fout.write(outstring)
41  finally:
42 
43  fout.write('}; \n \n #endif /* ' + tablename + '_H_ */\n')
44  fout.close()
45  print "wrote " + outfile
46 
47 
48 generate("~/Desktop/sin_64level_int8.h", "SIN_64LEVEL", 256, 64)
+
+ + + + diff --git a/extras/doc/html/sounddata_8h_source.html b/extras/doc/html/sounddata_8h_source.html new file mode 100644 index 000000000..9afedc38b --- /dev/null +++ b/extras/doc/html/sounddata_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: sounddata.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
sounddata.h
+
+
+
1 // generated by Mozzi/extras/python/audio2huff.py
2 
3 #ifndef soundtablename_H_
4 #define soundtablename_H_
5 
6 #if ARDUINO >= 100
7 #include "Arduino.h"
8 #else
9 #include "WProgram.h"
10 #endif
11 
12 #include <avr/pgmspace.h>
13 
14 
15 #define soundtablename_SAMPLERATE 16384
16 #define soundtablename_SAMPLE_BITS 8
17 int const __attribute__((section(".progmem.data"))) soundtablename_HUFFMAN[160] = {
18 94,82,79,0,-2,76,4,0,-5,0,5,70,43,40,37,34,28,7,4,0,20,0,23,0,17,19,10,0,-20,7,4,0,26,0,24,0,25,7,4,0,
19 -22,0,-24,0,22,4,0,16,0,-16,0,10,0,9,0,-7,25,22,19,13,7,4,0,-21,0,18,0,15,4,0,-17,0,19,4,0,-13,0,-14,0,-9,
20 0,7,0,1,10,0,-1,7,4,0,4,0,-4,0,-3,64,61,58,0,3,55,46,0,6,43,34,10,0,11,7,0,14,4,0,-18,0,-19,22,19,16,
21 13,7,4,0,-27,0,29,0,28,4,0,21,0,-25,0,-15,0,13,0,-12,7,4,0,12,0,-11,0,-10,7,0,-6,4,0,8,0,-8,0,2,0,0
22 };
23 unsigned long const soundtablename_SOUNDDATA_BITS = 101921L;
24 unsigned char const __attribute__((section(".progmem.data"))) soundtablename_SOUNDDATA[] = {
25 234,206,79,255,249,89,14,175,242,31,173,47,245,229,44,63,57,206,86,189,103,201,90,0,252,249,62,129,45,43,163,117,172,50,105,55,214,145,52,247,
26 37,34,81,90,36,249,210,94,109,255,75,69,19,73,244,146,71,63,148,82,89,72,156,235,195,5,231,243,175,13,47,214,87,250,195,90,207,170,143,250,
27 242,86,114,20,232,176,52,209,162,140,64,117,23,24,205,41,135,101,33,193,150,141,25,152,118,1,199,28,178,90,69,35,231,142,182,82,24,25,78,217,
28 70,19,16,105,150,136,61,235,137,140,206,161,44,150,82,128,208,16,105,25,137,113,44,170,128,85,108,58,151,104,204,64,15,156,12,223,28,165,166,80,
29 66,116,232,0,26,218,34,148,12,129,178,166,93,154,25,98,121,243,221,166,80,42,29,28,218,20,124,141,152,28,76,124,65,33,46,232,178,11,182,122,
30 155,199,208,47,70,209,89,80,9,48,142,246,10,142,99,99,114,202,208,3,36,18,132,110,40,2,70,7,149,3,210,106,106,131,103,70,147,60,25,219,
31 1,184,26,61,196,162,182,7,200,2,22,136,198,207,149,71,142,226,136,19,160,138,198,79,112,154,70,205,101,12,153,228,100,50,180,39,54,87,103,79,
32 151,24,203,52,24,167,24,183,146,93,140,27,12,151,144,100,108,177,248,122,239,107,161,215,25,151,81,47,13,9,201,179,79,76,6,164,148,206,128,41,
33 32,248,219,55,240,67,41,219,187,136,230,136,73,134,250,103,144,206,52,78,36,102,217,235,104,80,30,91,21,212,20,36,161,199,94,25,84,78,66,68,
34 230,0,50,1,194,153,128,89,221,156,108,135,98,162,113,75,48,146,246,182,143,159,48,251,188,10,55,23,93,54,137,237,66,4,228,62,88,62,109,131,
35 136,113,74,130,165,71,42,17,204,102,85,26,49,149,203,71,49,136,193,229,99,136,124,160,113,203,202,225,199,128,224,217,78,60,125,88,144,76,180,114,
36 30,216,8,165,170,71,24,86,92,136,32,48,104,228,53,172,120,157,25,107,104,13,28,78,253,142,97,133,41,14,138,2,12,16,115,41,140,24,16,6,
37 139,41,134,24,181,178,129,128,59,209,163,6,72,2,74,82,144,56,74,105,88,167,28,99,25,172,188,166,130,227,8,97,13,35,136,115,25,104,194,25,
38 16,108,249,104,211,69,24,44,11,203,119,150,14,142,51,89,142,83,213,24,13,97,158,32,209,209,145,162,242,129,227,178,9,20,113,145,39,115,199,49,
39 163,8,113,194,28,9,210,227,101,89,74,80,34,66,202,150,192,200,196,99,180,97,140,49,180,101,141,50,162,9,64,217,7,54,12,1,178,185,7,8,
40 224,74,179,199,0,203,0,153,64,192,146,224,88,57,79,31,35,202,105,72,112,142,140,75,68,108,225,178,129,139,72,217,155,2,33,145,216,96,226,107,
41 222,84,217,226,138,3,16,108,77,206,113,136,234,18,123,142,207,29,157,44,184,200,75,202,232,156,75,37,200,53,8,154,49,27,40,18,105,242,72,164,
42 178,129,68,9,135,48,16,250,100,140,27,47,56,141,120,83,219,92,102,224,44,2,73,198,46,40,210,0,166,24,184,247,108,178,105,38,151,150,17,101,
43 85,48,79,179,249,37,44,6,141,34,73,19,160,102,72,17,209,154,206,6,128,233,22,70,48,99,18,76,101,125,25,17,115,74,67,144,247,216,83,31,
44 22,80,140,249,113,140,169,23,25,216,192,134,153,72,125,110,201,237,97,83,135,112,132,209,136,199,168,73,132,149,180,176,89,39,59,187,184,200,212,32,
45 209,7,117,100,30,104,14,142,185,24,188,130,142,205,48,232,41,24,96,2,8,214,194,26,52,78,112,81,251,136,52,108,17,144,128,16,116,67,212,60,
46 179,51,20,129,86,8,52,176,122,32,199,104,55,80,78,118,139,153,200,145,39,61,105,144,196,189,246,184,161,33,115,83,50,12,157,65,224,125,107,153,
47 16,142,27,41,38,136,2,2,129,115,38,164,187,161,65,143,113,97,235,94,25,200,152,98,100,66,78,18,64,202,201,41,153,120,52,195,30,103,3,52,
48 123,182,113,126,104,47,183,27,0,120,169,194,74,2,54,96,10,158,77,242,233,196,128,129,30,146,73,101,64,238,209,41,37,203,137,9,129,5,136,20,
49 211,63,12,76,166,90,0,114,51,33,6,186,77,134,70,8,78,7,154,66,105,182,195,33,140,132,208,157,12,41,56,39,6,30,48,66,155,200,209,184,
50 151,129,88,122,0,212,205,157,96,36,199,189,219,196,118,24,224,100,3,22,160,65,18,106,162,145,52,180,22,163,100,123,181,196,42,27,253,26,148,123,
51 118,204,98,43,116,112,2,85,77,104,93,210,210,211,16,90,180,136,40,42,151,107,232,130,3,151,4,85,37,53,2,2,137,2,17,109,165,56,34,77,
52 122,148,22,24,114,232,133,166,176,18,87,80,122,250,197,94,191,181,250,138,138,112,209,10,116,188,178,247,0,36,234,159,147,251,17,22,18,225,20,65,
53 18,176,182,150,131,184,117,87,32,9,106,16,20,24,97,64,130,175,129,40,233,223,237,7,78,156,163,111,213,74,12,134,8,173,223,4,25,37,244,72,
54 37,162,116,194,129,35,156,208,210,71,133,219,164,97,45,27,105,94,7,39,95,210,124,29,206,41,166,53,81,33,72,31,193,100,165,6,147,165,79,77,
55 143,14,218,77,89,68,223,2,65,28,211,232,8,21,186,94,80,44,8,84,0,176,95,235,73,31,206,144,18,9,45,96,145,62,65,35,232,50,191,40,
56 148,176,72,56,88,34,26,80,180,142,189,120,27,109,201,242,137,69,127,148,73,42,144,33,255,156,223,85,19,249,58,57,39,223,210,190,73,43,70,9,
57 170,144,131,223,252,211,74,251,149,26,202,75,243,81,208,96,150,178,65,2,206,11,64,11,253,104,175,90,208,122,193,44,254,93,34,151,173,104,134,74,
58 169,45,47,15,58,244,143,235,36,22,87,247,39,206,178,114,124,175,207,231,191,159,191,253,63,213,155,255,249,43,215,159,89,195,38,41,71,55,167,201,
59 191,157,95,233,62,149,40,144,255,245,225,235,4,82,94,146,75,127,240,252,165,164,150,125,2,88,127,134,180,189,20,79,235,85,36,127,90,73,126,151,
60 164,127,68,165,255,163,159,62,114,116,114,79,159,242,81,57,57,58,205,63,249,201,244,79,224,114,179,235,201,239,198,115,156,155,231,191,148,123,159,39,
61 201,39,210,215,164,82,56,105,36,136,96,146,33,235,73,47,90,245,172,48,73,37,164,112,63,149,235,69,21,229,2,41,96,127,193,121,242,181,255,148,
62 86,114,187,162,122,142,178,122,142,124,146,127,170,254,115,156,250,168,147,221,122,41,107,206,79,255,124,228,228,228,146,114,126,163,106,39,207,159,207,250,
63 75,73,104,175,4,9,36,146,75,73,20,86,151,254,180,180,136,45,126,146,69,104,61,34,189,84,189,105,122,43,72,163,233,126,7,63,116,81,243,146,
64 115,253,42,175,36,254,81,62,114,86,115,159,37,82,137,201,57,58,43,202,57,207,149,235,239,7,62,86,79,231,36,159,252,147,249,209,214,180,150,146,
65 90,90,73,47,75,2,181,173,44,22,151,160,210,90,43,69,104,175,71,95,224,117,170,150,151,232,175,15,245,173,31,201,69,19,159,242,106,39,36,229,
66 31,143,57,89,89,209,202,171,202,206,115,249,57,255,255,238,125,20,111,231,61,191,175,168,158,249,53,120,47,233,245,175,214,181,250,253,104,48,253,126,
67 86,191,87,3,250,252,53,135,173,29,122,73,104,10,245,250,90,40,163,235,245,165,164,176,89,202,186,69,28,159,43,191,173,121,39,55,57,41,18,87,
68 123,159,42,163,220,156,254,87,162,178,143,232,249,68,162,79,157,101,44,231,39,57,206,138,40,249,90,4,146,71,252,162,178,151,171,250,242,151,255,254,
69 127,75,40,129,13,104,163,249,195,209,43,43,72,40,36,145,90,68,48,58,94,188,9,69,104,235,201,250,138,95,148,81,242,116,137,201,33,115,146,73,
70 207,254,115,77,63,162,127,36,230,229,127,228,212,79,250,254,228,164,78,138,56,125,210,127,4,181,249,210,90,41,21,224,138,240,209,75,214,137,69,44,
71 130,62,146,94,82,90,245,175,202,171,90,87,240,72,232,130,95,255,85,87,214,186,127,75,207,175,57,224,220,247,71,54,253,209,39,202,55,209,130,81,
72 58,89,233,71,206,73,15,41,106,221,122,90,61,58,214,142,144,107,253,18,146,73,104,146,26,64,128,52,181,165,171,175,75,214,87,148,5,47,186,33,
73 249,201,88,122,71,58,86,160,40,223,255,166,245,1,252,146,117,79,175,202,73,35,156,165,235,189,53,26,80,127,156,50,122,122,0,72,24,36,231,244,
74 25,201,12,213,73,244,11,68,221,29,96,8,129,208,6,116,116,128,8,26,127,243,135,162,146,79,148,174,8,22,110,64,247,5,254,117,165,74,49,254,
75 20,148,30,180,146,195,210,72,157,90,180,137,140,158,249,71,63,146,143,211,157,6,122,122,188,159,215,253,244,105,39,2,115,123,249,72,129,72,63,65,
76 155,157,44,230,170,181,254,136,1,214,235,245,225,186,201,90,94,25,32,10,233,254,134,170,244,179,67,40,235,202,3,233,103,209,57,75,180,9,242,148,
77 32,245,130,202,201,94,138,233,93,93,84,232,229,100,229,90,78,78,106,244,85,81,173,23,234,71,36,220,162,78,117,247,37,100,16,28,17,243,250,209,
78 209,2,184,57,208,32,253,6,81,90,90,214,151,249,214,14,8,164,191,207,172,162,181,212,77,69,2,90,90,57,58,41,85,235,251,126,48,210,165,122,
79 39,255,244,151,228,212,74,90,206,5,90,137,164,159,165,102,147,4,3,75,210,85,126,97,16,68,162,76,102,160,210,209,89,62,169,37,2,43,167,251,
80 173,6,117,249,94,114,0,131,68,255,232,18,4,11,13,0,122,240,3,170,85,39,214,87,173,122,74,149,65,19,245,92,212,10,232,224,74,69,112,173,
81 15,39,40,229,2,168,50,189,52,146,111,81,93,185,205,43,181,100,133,34,102,253,209,65,223,206,127,39,85,34,15,231,186,37,233,207,221,44,175,195,
82 193,46,171,87,95,185,202,240,58,201,2,1,131,144,90,244,179,225,82,15,93,43,90,75,214,114,82,43,37,106,175,186,41,97,170,149,254,135,170,72,
83 18,66,210,7,3,184,100,23,244,135,244,174,146,160,228,165,112,206,12,36,212,170,238,115,231,202,200,21,233,204,124,110,106,58,200,127,157,23,40,61,
84 209,170,8,100,162,115,249,205,255,210,64,150,125,32,127,3,175,32,86,189,45,47,3,148,72,1,43,160,78,127,195,208,32,209,168,229,46,163,228,171,
85 154,187,208,73,20,79,157,252,61,47,242,181,228,173,96,109,53,121,167,243,111,106,253,120,29,35,10,151,12,220,149,78,74,214,131,4,146,68,219,185,
86 207,231,191,8,250,243,175,242,142,187,130,94,127,58,195,195,13,122,192,16,103,95,250,252,129,209,208,122,63,175,88,100,231,201,245,171,211,157,28,146,
87 125,2,36,255,220,16,6,151,249,69,103,58,52,157,21,105,37,104,229,43,223,206,151,152,239,162,150,8,253,32,8,22,142,87,240,73,53,101,0,2,
88 237,167,41,45,47,238,85,94,173,252,18,39,242,125,3,184,127,223,73,45,47,206,65,96,190,52,176,243,147,173,105,37,197,130,83,173,43,147,30,129,
89 37,114,116,181,229,70,189,192,18,236,68,18,8,63,55,182,164,189,19,29,65,232,218,195,26,64,0,187,114,147,180,31,39,57,238,128,150,26,83,160,
90 89,61,244,159,5,77,130,183,72,21,139,88,150,176,201,54,224,0,148,125,210,0,4,228,193,130,0,237,79,228,221,96,26,48,79,134,159,204,88,56,
91 39,0,57,176,116,212,30,111,125,36,129,83,97,44,26,191,182,233,56,116,193,36,224,146,4,98,41,68,60,216,226,250,250,173,244,157,192,53,152,166,
92 160,37,24,57,43,72,10,132,147,175,206,137,205,119,117,241,30,87,232,52,105,214,170,43,215,233,127,74,12,130,107,232,224,112,5,9,107,182,221,65,
93 86,3,210,233,68,149,173,242,31,123,219,156,172,1,19,228,144,214,232,16,90,115,162,191,41,35,164,87,77,68,16,113,147,4,221,0,7,219,129,73,
94 105,30,41,40,53,30,87,164,1,174,178,162,1,130,4,162,21,73,34,142,178,73,114,77,23,168,18,212,125,138,75,186,4,150,80,36,0,151,64,249,
95 215,218,78,171,95,74,223,169,96,248,119,181,32,215,115,124,190,129,90,72,37,164,187,195,9,32,254,137,205,193,58,2,169,240,201,89,134,48,254,145,
96 86,146,116,157,220,158,155,159,36,228,147,184,87,207,110,26,4,220,157,23,91,65,100,155,212,146,71,225,42,128,130,37,140,26,241,243,198,140,143,73,
97 204,231,158,26,64,41,16,0,120,197,230,19,78,62,89,46,59,70,106,194,71,39,36,108,211,33,97,148,129,137,17,219,7,66,38,109,67,36,74,116,
98 29,36,59,80,122,130,74,130,14,214,180,147,170,149,0,165,125,32,231,38,41,112,214,224,116,187,4,160,190,115,96,229,62,210,82,41,49,1,52,229,
99 214,6,251,166,50,146,35,133,41,128,81,193,109,3,233,68,27,194,3,156,23,130,6,29,18,9,160,191,130,25,164,254,112,69,56,37,4,146,85,94,
100 79,163,148,5,40,52,164,31,134,145,36,254,218,143,160,255,36,172,157,160,13,12,162,8,245,20,82,94,16,67,39,131,24,42,78,124,210,73,201,36,
101 154,25,63,198,29,57,210,38,157,20,146,244,175,174,134,115,135,160,90,72,162,148,7,254,144,34,156,255,170,20,1,32,4,11,73,44,165,156,16,45,
102 127,174,254,8,23,77,95,122,112,233,131,73,131,108,19,222,51,232,216,98,212,82,13,82,49,173,77,113,245,176,201,116,50,91,107,186,10,62,28,6,
103 38,121,124,64,230,116,91,18,58,20,83,92,90,74,64,68,100,160,114,82,129,12,141,110,52,128,145,47,70,119,152,5,161,14,160,116,195,102,66,114,
104 220,100,6,176,97,54,90,164,96,209,14,158,32,76,130,48,114,84,22,134,98,196,130,248,45,255,172,172,145,52,2,128,131,83,36,181,114,60,99,181,
105 66,26,43,20,185,30,14,193,1,17,65,5,16,37,17,12,43,128,109,109,204,228,133,160,33,67,68,197,48,198,140,2,7,98,83,203,140,0,112,101,
106 52,169,100,170,48,134,204,134,12,24,125,24,40,32,226,178,129,198,209,196,33,158,50,58,49,24,4,249,77,89,44,144,96,134,82,149,101,198,28,241,
107 128,202,54,188,249,81,128,163,17,132,169,126,13,29,124,114,23,149,101,5,231,184,227,24,204,57,54,89,88,229,14,140,54,33,217,78,201,75,45,20,
108 101,150,73,16,235,103,140,49,6,100,26,101,89,96,4,174,138,48,199,19,5,108,174,112,192,187,97,54,112,14,82,154,82,28,21,142,203,70,184,236,
109 131,142,89,44,149,103,203,142,67,137,163,48,51,40,151,150,137,141,149,35,35,7,149,70,104,179,192,97,202,122,48,92,79,137,122,1,36,164,49,229,
110 179,229,199,33,101,2,182,206,145,229,72,228,236,31,35,80,244,53,212,228,52,81,237,64,133,150,14,26,68,16,34,5,44,24,192,236,209,56,94,65,
111 136,205,125,41,134,131,40,48,100,124,144,3,148,249,226,8,88,227,200,131,152,146,10,239,36,236,42,152,114,107,89,32,241,84,130,169,168,35,51,203,
112 6,38,97,162,202,18,17,216,50,32,146,203,181,174,242,242,244,102,137,3,52,107,28,70,142,115,197,20,107,80,96,58,58,217,121,154,201,100,152,147,
113 0,79,16,206,31,35,72,248,152,68,218,238,239,58,66,88,165,179,232,147,64,172,32,152,2,59,7,206,24,17,66,227,90,89,59,42,116,13,136,18,
114 86,102,158,203,98,112,179,203,90,18,226,77,56,112,71,4,102,4,158,19,14,177,131,192,153,39,79,229,115,10,155,197,31,162,164,112,36,178,82,25,
115 20,120,203,29,72,62,39,78,231,203,102,152,3,110,12,157,77,16,118,124,175,30,51,69,144,195,4,27,77,16,68,42,6,181,53,225,230,66,143,34,
116 242,227,102,158,59,143,137,204,198,72,210,91,33,97,7,106,154,97,19,136,248,50,88,49,152,115,158,212,161,179,208,179,133,129,38,153,252,161,28,29,
117 230,108,247,82,73,90,193,145,37,98,86,115,167,64,202,109,179,76,234,34,137,140,99,0,149,204,62,201,58,12,130,75,134,153,56,81,145,136,147,73,
118 86,228,89,213,114,64,232,210,227,184,241,136,204,162,75,43,28,185,1,163,25,54,161,103,78,51,52,177,6,121,12,184,13,104,73,8,120,241,225,62,
119 94,206,69,136,48,83,153,60,139,176,92,5,147,26,53,163,102,67,224,193,108,174,94,100,209,4,154,65,64,147,181,22,70,107,47,45,29,113,38,20,
120 126,17,68,149,203,69,146,126,50,193,101,81,91,22,90,57,53,164,207,153,73,92,78,73,166,31,97,144,238,130,73,6,137,98,131,60,194,44,136,228,
121 156,36,184,217,167,136,53,146,144,200,204,238,90,32,76,214,72,61,130,57,4,93,11,33,19,35,25,39,170,224,64,202,67,22,41,237,46,222,8,241,
122 121,7,226,62,16,67,172,157,186,6,207,70,5,225,178,176,31,187,40,156,60,73,94,24,198,115,81,236,67,90,52,108,207,176,86,66,29,153,196,17,
123 165,64,176,202,134,136,15,12,187,5,7,119,134,136,14,14,200,113,118,144,136,44,96,172,128,17,161,54,10,70,3,91,46,217,132,2,76,130,144,46,
124 137,205,13,9,150,72,200,121,156,206,172,51,13,116,236,148,72,199,107,93,162,49,156,146,15,156,60,6,181,195,130,203,149,21,56,0,33,103,15,242,
125 243,79,6,132,98,138,134,133,116,192,104,172,101,218,217,226,57,100,131,216,14,83,187,131,88,60,192,182,25,91,18,9,138,194,13,65,46,210,130,201,
126 70,181,198,180,41,129,240,194,19,76,212,99,125,140,104,110,52,107,186,82,12,193,31,83,70,155,89,32,203,8,217,224,85,17,213,83,1,6,204,123,
127 18,119,131,184,8,138,30,50,196,19,8,244,240,152,158,198,241,72,86,110,117,168,129,96,86,23,16,26,172,157,61,130,209,6,137,66,36,25,132,15,
128 48,130,0,81,121,36,156,90,13,159,131,69,138,46,208,1,163,115,192,246,100,136,35,165,69,137,32,184,109,6,107,181,151,104,131,70,251,176,85,104,
129 7,73,83,35,150,181,37,112,178,32,173,27,169,140,38,66,36,4,115,139,36,131,44,173,152,65,38,2,232,220,151,26,224,167,48,143,133,146,191,101,
130 129,69,96,34,215,12,43,55,42,93,241,28,120,188,143,53,144,86,48,27,184,64,180,26,144,116,236,171,66,61,68,98,44,146,52,64,119,34,195,7,
131 160,246,136,215,112,1,2,140,199,141,151,105,76,25,100,98,126,222,18,4,140,2,5,106,131,65,168,28,20,90,74,106,161,51,175,49,185,230,50,50,
132 42,80,68,19,179,76,2,54,73,209,107,65,224,202,5,6,78,218,102,26,128,64,74,33,208,76,32,86,50,218,171,5,20,150,81,54,72,200,6,193,
133 1,3,104,13,17,168,224,208,177,18,50,178,22,201,36,9,150,234,52,13,109,103,173,215,171,32,198,18,192,213,154,239,115,128,8,255,8,13,136,17,
134 39,26,137,131,78,209,17,99,0,46,213,36,148,120,169,163,105,165,196,17,221,37,48,209,56,175,105,5,145,100,204,149,207,105,192,65,163,65,38,131,
135 229,38,70,69,144,86,49,140,34,8,8,0,76,7,68,97,66,224,233,224,124,148,150,10,4,88,17,195,54,218,102,153,220,8,90,35,196,26,203,224,
136 69,129,79,48,8,21,218,213,197,21,137,214,252,72,45,96,147,64,205,2,0,208,216,79,187,135,90,8,145,108,215,119,186,248,14,96,34,199,37,135,
137 26,16,108,148,17,216,83,142,183,170,232,29,221,88,225,221,65,16,196,35,4,156,163,189,73,162,100,128,16,240,66,138,41,130,13,249,132,200,58,66,
138 26,6,43,118,116,8,246,40,34,4,8,135,139,0,9,18,80,137,141,104,20,97,40,51,108,39,163,200,0,76,28,219,34,228,150,137,31,2,161,54,
139 48,89,1,18,39,104,168,45,112,45,26,156,41,211,173,218,64,8,176,225,88,173,134,18,10,148,4,146,111,184,29,66,165,214,129,154,193,6,190,29,
140 193,50,34,152,139,5,76,9,220,41,72,19,68,82,26,41,225,143,12,231,141,17,171,56,18,191,117,204,218,40,180,81,104,147,112,45,141,36,36,12,
141 192,217,243,8,85,135,76,194,25,55,11,30,43,46,159,104,117,20,14,15,69,32,226,54,192,172,59,34,50,131,158,214,15,25,90,158,58,223,42,181,
142 59,145,71,190,32,214,214,15,99,85,204,148,144,113,59,57,17,65,165,128,79,128,55,129,98,26,35,164,96,226,44,2,193,16,19,7,176,86,88,9,
143 132,181,184,0,147,22,49,154,18,36,179,165,146,56,52,116,64,249,132,114,99,165,4,200,86,108,57,205,100,93,34,4,157,4,194,52,73,145,6,220,
144 26,112,193,68,177,130,40,46,239,244,0,27,132,73,27,184,76,217,36,60,131,36,9,64,228,39,72,0,106,29,152,0,50,1,109,38,19,90,1,195,
145 13,144,181,94,24,41,203,181,236,10,2,118,165,48,66,6,15,160,215,77,165,93,213,193,25,24,244,102,131,36,98,113,215,100,54,102,201,94,212,226,
146 7,71,202,6,100,21,198,204,32,214,133,196,37,220,90,226,13,126,8,249,30,45,44,40,188,241,43,39,66,12,108,249,145,125,192,130,136,112,113,164,
147 81,100,31,246,8,80,113,179,53,162,139,178,70,204,220,213,96,236,172,23,1,29,24,146,1,177,174,2,120,235,135,18,17,88,217,155,16,128,151,76,
148 52,124,39,253,140,78,33,136,162,237,152,65,173,42,138,200,112,181,210,162,9,246,220,224,230,228,201,36,50,128,54,87,47,96,11,2,150,218,162,5,
149 101,139,83,119,107,92,22,234,41,209,78,35,108,146,72,40,164,17,218,117,135,139,80,52,70,204,211,9,16,120,101,7,225,203,7,143,132,229,8,232,
150 208,106,251,16,136,8,37,146,149,166,73,72,88,1,9,211,90,32,76,52,40,173,7,209,70,41,118,181,132,165,196,151,55,107,81,54,174,169,151,90,
151 240,198,86,68,18,157,193,209,101,22,48,107,152,177,36,118,152,193,160,128,13,192,30,138,200,129,106,19,200,20,15,61,173,13,36,154,147,162,87,12,
152 145,135,124,64,42,200,73,211,167,113,4,104,93,23,211,188,67,44,136,59,88,110,226,54,99,13,1,56,44,20,84,35,116,97,131,233,201,54,148,237,
153 0,94,128,15,176,95,176,73,166,16,43,6,5,81,192,178,87,159,50,72,138,154,24,32,119,176,96,100,88,76,199,102,26,34,156,49,97,97,75,5,
154 105,97,75,181,2,17,206,156,73,149,165,140,166,134,2,3,220,217,157,179,199,70,187,90,232,29,214,193,104,46,100,116,8,117,167,2,44,76,32,13,
155 158,133,12,126,22,28,75,98,65,100,31,12,180,172,1,46,138,89,160,38,25,5,193,93,88,129,236,77,210,118,130,16,8,180,28,64,41,66,162,154,
156 63,106,96,182,24,1,200,41,49,5,133,205,85,1,89,99,45,14,25,116,247,5,128,113,35,33,38,254,97,158,119,18,96,119,76,172,101,64,238,215,
157 85,140,186,218,8,4,2,91,48,107,34,0,16,68,1,174,137,88,39,113,4,107,93,80,118,136,214,136,233,5,140,167,115,12,181,144,203,14,215,0,
158 119,166,45,245,162,60,88,37,65,233,8,136,37,96,6,165,115,167,116,87,85,54,240,131,136,136,36,218,97,62,85,48,108,65,57,53,159,127,63,154,
159 151,66,196,71,168,97,21,154,75,112,116,98,17,4,77,252,244,254,128,48,5,146,27,92,232,148,189,36,14,171,181,221,218,9,221,253,218,237,17,173,
160 112,0,41,192,29,222,50,198,34,139,160,4,138,73,107,32,29,134,90,96,154,122,179,26,64,122,78,179,254,179,74,208,35,135,77,55,164,157,35,146,
161 67,8,205,101,172,100,65,237,130,169,61,131,78,105,54,216,185,62,179,174,148,191,87,237,180,156,144,94,92,3,255,210,84,210,130,148,144,36,233,59,
162 131,80,3,131,82,118,130,4,238,233,221,96,131,13,56,53,169,0,107,215,128,2,207,156,148,99,164,146,181,156,23,221,92,129,186,201,62,188,149,124,
163 255,255,222,159,69,125,52,247,39,164,197,139,6,9,182,216,180,197,40,231,38,147,120,177,244,219,229,85,213,146,79,114,188,231,209,89,201,72,48,206,
164 4,8,36,224,224,224,238,156,18,119,4,0,129,2,64,14,14,14,13,0,116,129,96,181,233,125,255,255,94,137,252,231,213,244,180,179,149,254,150,179,
165 146,138,240,255,70,228,146,77,164,210,77,224,146,109,180,210,77,182,193,55,130,73,36,255,249,57,36,155,228,253,58,215,156,147,115,229,100,156,159,240,
166 75,255,244,67,214,144,96,0,147,128,0,39,112,112,0,116,0,0,0,14,0,14,14,144,36,180,117,159,71,63,78,78,138,61,206,111,228,149,79,124,
167 163,159,41,119,39,244,178,144,103,206,127,63,146,127,233,38,147,23,38,210,76,124,28,156,255,127,57,39,185,57,234,36,146,114,5,100,156,254,86,9,
168 105,95,244,180,145,69,122,214,9,120,120,1,90,13,0,2,73,58,13,160,14,224,129,240,192,18,75,13,44,61,35,228,254,137,36,146,114,73,36,223,
169 53,82,174,81,251,158,129,242,26,70,228,250,62,137,63,249,202,165,24,87,36,152,140,228,13,57,167,201,42,211,78,114,124,245,121,214,8,221,104,18,
170 202,210,208,2,93,169,252,253,95,135,112,73,37,233,192,29,32,69,0,2,0,89,211,238,131,112,253,82,7,32,122,136,37,218,28,87,243,155,79,77,
171 37,7,115,245,119,242,124,130,72,230,248,101,254,146,10,147,173,28,147,73,233,54,221,7,247,188,121,245,221,43,115,123,250,167,87,89,20,144,112,119,
172 192,51,134,82,69,32,207,111,219,246,3,202,3,5,247,104,3,131,190,128,208,13,47,111,154,1,224,211,233,56,63,72,123,124,255,232,208,201,87,10,
173 98,46,77,70,222,159,205,64,8,56,12,228,154,129,28,43,163,114,112,32,4,155,228,145,119,64,173,75,89,205,58,189,220,193,139,214,16,38,244,249,
174 53,122,90,62,233,45,242,180,154,255,7,103,21,19,210,116,140,38,186,73,52,31,107,84,56,104,160,127,227,201,210,43,72,22,119,4,225,157,222,224,
175 99,92,103,5,22,246,46,151,155,129,183,169,192,9,114,111,134,110,169,220,25,123,81,41,101,16,252,218,24,47,39,81,131,110,74,56,40,38,210,105,
176 81,10,166,36,141,116,92,11,2,210,224,6,167,75,32,4,0,251,9,224,241,4,210,115,151,58,89,7,107,160,240,0,12,12,97,199,149,212,38,233,
177 43,181,160,146,219,233,38,196,29,37,144,34,210,97,149,1,46,4,28,12,96,180,26,180,212,75,61,82,189,160,198,94,165,240,132,203,186,182,52,159,
178 61,21,6,137,208,35,225,197,166,244,152,23,37,20,108,0,101,20,153,65,32,187,148,183,93,187,181,69,48,204,58,151,7,195,176,82,6,165,131,186,
179 10,131,238,72,1,216,107,11,173,174,254,9,36,150,8,29,16,227,43,55,120,21,112,130,59,4,1,218,147,160,65,186,55,206,65,144,77,185,54,174,
180 225,67,140,52,233,160,16,137,12,135,9,93,200,186,193,1,162,247,243,84,90,151,138,23,250,10,163,5,215,162,145,32,130,176,149,134,79,105,140,172,
181 22,229,24,180,233,3,91,156,17,210,14,156,251,45,237,136,107,68,112,65,130,195,73,218,129,34,7,141,121,252,253,226,219,83,92,26,224,4,1,30,
182 28,19,171,12,20,168,101,50,104,136,38,49,21,163,102,35,35,50,177,206,81,35,64,97,133,17,128,76,161,14,140,139,43,67,17,103,140,49,194,193,
183 21,129,221,2,197,20,252,113,18,129,154,228,71,108,194,224,238,198,98,206,65,83,182,123,223,164,100,126,117,45,158,153,100,148,50,147,46,32,46,73,
184 70,8,118,92,220,102,114,198,202,196,217,36,84,134,169,194,195,29,218,33,179,160,130,18,120,128,62,77,163,70,136,240,41,20,200,242,233,176,40,128,
185 93,199,195,88,51,47,53,102,58,12,179,84,43,102,44,45,155,160,175,103,50,197,99,61,148,198,0,65,245,195,142,203,70,200,62,180,151,104,0,4,
186 51,218,70,34,131,94,97,179,116,193,33,225,69,130,43,4,153,86,48,234,13,34,208,136,219,198,144,128,156,200,93,192,44,133,24,7,11,22,152,112,
187 38,144,220,52,229,136,138,83,90,139,224,213,37,162,192,3,25,175,119,102,186,224,145,93,164,129,167,19,246,233,225,35,78,217,180,223,118,101,13,111,
188 150,10,243,208,182,201,57,153,32,37,144,210,132,243,181,173,153,209,64,108,64,34,97,148,70,88,79,226,8,65,173,147,37,3,215,53,122,52,198,85,
189 103,253,119,172,187,40,38,228,1,218,105,226,59,184,49,140,59,11,155,73,140,136,162,5,158,93,75,145,129,29,28,229,114,161,24,98,74,82,160,14,
190 17,144,17,131,6,217,72,113,14,57,195,162,39,24,143,24,142,202,113,130,163,196,18,84,192,225,28,6,138,62,115,97,131,14,6,20,241,153,248,12,
191 49,94,120,193,200,193,164,112,169,165,3,101,52,48,124,177,166,120,209,209,192,30,51,36,228,3,196,154,49,128,205,45,156,35,12,225,227,44,198,71,
192 145,200,104,217,76,54,202,229,73,146,82,128,150,67,30,100,3,178,10,226,218,49,20,34,84,211,45,235,80,225,15,154,124,190,215,121,74,89,44,30,
193 246,92,37,193,228,96,163,28,8,141,162,33,153,66,1,204,113,11,3,157,146,81,19,167,53,72,59,43,157,219,58,64,20,117,178,128,129,151,17,178,
194 158,97,27,58,116,146,0,77,70,20,14,196,165,153,167,204,209,153,229,14,123,181,132,201,5,178,217,8,138,112,204,247,152,26,201,16,170,125,157,153,
195 24,227,165,14,4,146,168,225,30,135,202,199,38,128,222,112,41,134,139,142,217,30,92,116,101,81,44,162,37,134,123,69,28,45,154,70,74,65,43,105,
196 30,217,92,172,120,227,112,194,105,104,147,68,35,36,78,20,116,140,39,226,42,32,54,201,104,230,133,113,204,7,204,37,174,162,44,10,64,137,98,148,
197 194,201,69,67,103,150,161,4,148,165,15,48,196,142,157,142,193,161,48,211,34,178,168,246,38,62,186,224,154,97,220,4,137,11,66,115,80,178,214,196,
198 8,214,64,81,57,64,53,137,196,121,11,192,59,137,80,151,20,73,109,144,142,140,143,18,183,144,116,140,162,67,50,180,44,225,173,160,2,3,94,66,
199 58,165,16,33,158,212,205,130,138,198,12,70,104,235,192,160,55,103,104,14,188,225,28,115,102,237,159,35,105,31,2,176,5,82,88,172,218,54,19,4,
200 50,192,112,247,9,242,179,161,70,58,245,12,99,45,180,73,8,215,173,99,132,17,239,131,68,32,37,146,7,162,193,11,139,39,95,46,50,40,231,3,
201 23,102,177,39,137,32,147,52,64,22,116,192,61,168,90,220,233,14,205,17,108,139,194,204,152,147,65,218,58,5,217,58,131,89,42,202,25,60,0,16,
202 147,64,174,217,139,207,79,189,174,246,8,136,123,253,78,198,97,12,30,194,224,101,219,103,65,157,70,180,38,32,12,72,173,197,145,232,25,20,117,132,
203 126,88,176,190,237,196,8,153,218,92,138,75,201,96,70,12,106,21,13,10,196,155,66,5,109,43,100,211,200,1,129,236,62,60,135,218,29,17,178,5,
204 222,75,232,108,250,114,146,138,220,249,163,198,203,251,181,196,4,5,128,193,120,78,35,39,47,6,150,39,105,90,203,167,137,0,117,221,128,27,134,97,
205 160,65,237,67,228,102,212,238,109,168,180,50,144,179,173,162,104,184,13,18,181,235,34,182,146,139,24,44,154,197,198,211,146,72,138,139,75,142,238,53,
206 35,105,86,35,173,206,63,49,92,48,115,25,48,83,180,44,130,184,96,88,62,72,51,48,129,196,74,236,180,85,164,52,64,222,248,34,152,212,35,88,
207 130,1,174,229,149,32,59,12,184,162,131,43,182,182,194,215,125,248,41,218,232,26,97,224,38,1,22,8,201,153,42,73,47,112,66,177,35,205,88,41,
208 182,2,100,68,52,0,26,64,160,7,22,113,52,152,97,86,66,215,23,120,101,59,102,17,198,185,22,38,115,18,50,55,53,204,10,95,0,32,144,31,
209 73,97,216,70,74,82,100,12,138,96,86,10,155,131,150,20,209,4,64,24,158,162,182,200,197,16,214,131,130,106,17,196,239,88,28,128,225,24,52,74,
210 192,130,80,2,133,147,5,5,165,67,180,136,32,63,92,106,128,250,44,3,214,176,102,45,78,145,64,17,66,42,106,78,238,209,9,66,68,96,240,47,
211 150,11,70,107,5,206,239,230,144,125,193,219,94,109,193,50,9,54,216,21,102,18,83,32,117,93,235,180,213,69,139,136,245,50,115,44,140,39,238,26,
212 44,220,40,112,209,9,115,99,186,131,99,73,179,65,153,160,233,40,193,97,192,40,183,73,46,200,182,24,73,88,45,104,129,92,71,114,19,76,170,66,
213 218,238,200,96,177,124,3,139,2,77,245,158,212,227,86,214,204,129,210,165,126,84,15,137,25,17,29,134,26,42,112,119,105,193,52,29,242,160,238,160,
214 143,31,16,213,191,154,237,17,169,242,99,107,150,65,103,211,20,214,59,64,151,189,22,201,156,28,40,54,213,17,75,11,250,129,73,118,128,58,83,230,
215 65,49,172,46,211,255,196,19,21,149,194,201,74,119,221,170,156,107,166,133,135,104,143,69,21,153,92,11,57,28,31,64,253,200,145,7,77,19,118,185,
216 16,71,122,90,247,106,96,200,246,102,34,10,90,49,5,220,78,236,174,38,110,172,59,199,177,144,39,134,160,232,0,212,215,119,3,7,95,69,101,12,
217 27,151,10,188,95,48,198,188,48,144,217,9,226,134,22,44,28,146,237,220,71,7,53,117,150,240,237,176,188,44,56,120,34,105,73,80,104,87,46,34,
218 1,4,215,32,166,5,101,108,51,37,128,217,132,4,147,186,164,210,29,166,26,215,0,41,221,52,43,5,40,160,235,5,129,28,178,65,107,186,7,181,
219 24,207,131,182,17,74,159,131,208,104,24,173,124,48,182,68,226,41,5,174,104,190,170,4,34,3,228,88,242,181,147,212,88,200,140,12,68,73,8,4,
220 106,141,230,16,26,156,146,197,147,27,115,95,165,196,94,116,208,78,31,128,45,160,156,71,167,86,14,107,32,244,144,116,13,70,221,34,181,165,228,56,
221 77,37,36,108,85,147,219,12,233,209,134,80,7,92,27,83,160,70,45,188,71,115,199,149,86,145,78,9,38,116,4,201,36,166,128,37,65,221,18,82,
222 75,210,186,84,173,16,73,18,72,96,145,94,157,47,143,250,74,245,193,33,249,206,238,14,0,112,223,0,95,160,39,131,211,4,244,154,104,177,146,99,
223 164,164,186,86,142,78,181,147,194,8,36,250,71,62,156,52,180,208,78,162,224,0,174,138,72,159,215,99,89,38,146,82,68,149,112,71,181,16,72,154,
224 136,109,89,2,129,84,137,56,120,32,116,117,130,36,151,0,209,167,40,10,167,68,168,38,159,57,40,77,44,220,232,45,245,232,144,201,0,56,1,36,
225 12,29,7,130,208,68,82,47,246,51,155,144,14,160,172,78,179,0,120,244,204,1,211,115,171,144,201,60,32,72,10,72,164,147,246,228,147,131,232,66,
226 86,74,39,52,143,192,130,36,69,149,155,183,162,144,38,131,64,1,186,16,16,2,116,137,185,43,182,175,12,148,111,104,183,72,26,23,43,71,161,236,
227 175,18,50,33,61,145,0,68,62,200,112,34,140,244,1,218,237,0,95,74,37,16,3,193,160,218,157,240,17,167,194,193,161,148,238,125,46,48,167,103,
228 219,97,18,194,215,6,32,78,156,152,131,240,226,3,94,96,80,64,8,112,252,82,123,131,187,133,239,64,41,23,239,130,32,13,155,46,141,102,74,99,
229 15,139,29,136,37,5,56,22,27,16,150,130,97,173,106,7,205,66,83,97,150,178,31,43,202,206,27,1,212,65,138,209,27,54,66,27,71,139,89,34,
230 164,188,10,17,144,106,73,160,128,144,116,0,138,9,155,179,110,246,189,144,132,83,71,237,71,107,110,212,64,8,45,140,49,23,17,160,35,66,226,192,
231 87,251,8,91,51,134,238,147,187,147,88,215,39,204,18,156,6,136,224,163,66,152,176,157,154,172,146,33,144,25,164,213,236,99,36,146,28,67,187,181,
232 26,15,153,11,153,194,131,146,35,160,250,114,102,152,0,133,169,220,48,1,39,228,145,243,133,144,132,15,161,110,208,223,110,118,100,19,160,58,10,200,
233 91,90,156,18,237,46,193,116,0,217,132,153,220,0,224,129,27,155,27,120,0,117,162,90,149,99,5,157,17,152,135,152,107,119,163,199,179,170,35,65,
234 0,152,45,16,19,136,156,62,14,137,246,10,83,132,67,97,149,60,17,228,230,1,203,0,71,112,64,117,36,3,89,40,20,163,160,109,130,254,129,211,
235 154,5,110,224,134,141,153,244,242,11,71,138,91,88,65,84,10,145,29,173,210,61,32,28,88,134,20,26,12,198,88,200,99,55,211,68,16,31,6,187,
236 237,105,160,208,34,230,160,112,4,248,128,19,0,163,197,21,130,234,213,51,187,18,130,60,81,69,56,143,117,12,21,134,194,7,26,90,33,31,2,176,
237 23,28,110,28,52,24,61,138,154,14,74,19,57,140,26,35,70,137,51,240,200,172,130,250,45,62,182,20,124,236,132,215,73,92,1,8,71,147,247,86,
238 8,143,75,41,152,118,86,58,157,6,207,36,29,160,29,139,246,130,46,98,152,31,204,22,234,188,206,138,48,77,205,242,72,176,131,175,50,64,12,179,
239 133,242,139,43,146,146,129,241,106,72,160,80,198,11,58,18,113,7,68,193,81,88,192,90,206,137,201,172,99,55,111,218,217,132,129,100,189,1,217,113,
240 26,53,179,5,45,99,9,154,97,168,17,119,74,11,131,163,166,132,193,112,176,128,8,27,241,56,218,62,40,177,38,243,198,187,173,145,2,91,179,7,
241 177,88,50,63,11,13,119,57,135,80,62,60,145,163,163,93,174,15,2,162,51,40,25,138,10,219,32,241,80,142,121,128,223,60,72,61,131,35,38,120,
242 130,176,71,139,237,86,145,160,229,192,1,222,120,235,128,209,174,129,231,207,153,33,1,146,64,27,8,17,66,127,58,74,251,3,240,219,52,246,130,97,
243 242,69,160,233,96,44,132,30,5,51,242,164,177,100,173,69,162,3,136,52,0,5,157,67,84,81,73,101,215,83,141,121,5,6,152,70,139,32,248,134,
244 10,50,44,147,130,124,214,206,53,133,140,134,90,13,106,110,3,94,52,137,41,194,128,123,31,99,202,199,41,239,181,196,81,7,30,60,170,45,86,5,
245 99,15,219,51,228,28,179,9,132,26,52,104,136,83,52,211,5,78,17,0,69,145,53,4,22,136,246,192,4,23,70,224,52,71,152,107,107,54,128,132,
246 86,87,49,176,81,226,178,13,113,45,50,10,136,162,197,32,19,198,184,217,186,40,242,83,211,240,40,176,45,218,230,16,141,73,208,137,10,201,7,155,
247 112,17,189,99,24,193,83,36,130,119,180,187,90,27,16,141,176,80,93,48,124,60,80,0,154,105,166,18,108,164,80,0,2,37,58,96,203,40,184,13,
248 26,217,224,128,139,81,73,175,51,80,65,99,11,128,73,13,115,72,40,22,79,97,174,38,13,92,50,150,185,89,7,2,200,194,158,198,29,146,133,169,
249 144,21,148,13,255,102,157,175,200,159,180,92,73,155,132,225,150,55,91,189,206,209,52,2,8,13,226,65,227,224,21,96,174,5,132,160,77,5,37,64,
250 32,29,18,238,208,90,13,10,197,139,118,87,116,36,194,87,94,242,208,99,54,187,93,131,197,30,61,148,164,209,217,226,0,243,100,102,224,214,131,70,
251 232,147,36,98,2,130,215,224,145,88,62,69,125,179,36,193,107,32,1,248,140,4,116,45,48,199,104,18,8,9,42,200,207,131,225,157,89,10,76,13,
252 148,4,134,109,107,183,48,46,154,22,29,25,24,137,59,184,130,46,7,201,82,137,41,62,118,136,212,251,55,118,135,86,237,1,31,42,167,3,153,25,
253 135,254,13,26,54,105,132,152,4,232,13,122,198,64,246,48,124,151,77,107,165,219,20,226,56,53,45,221,19,128,209,43,0,44,24,134,64,179,161,208,
254 62,43,43,25,7,204,194,1,41,83,3,226,238,32,120,67,9,136,99,36,132,142,133,136,130,6,33,5,113,2,192,136,131,85,79,98,10,106,74,196,
255 84,0,132,152,29,63,96,81,150,122,195,193,80,117,83,159,83,59,68,177,0,208,0,176,147,130,11,71,193,41,193,8,36,249,166,26,222,136,38,1,
256 196,34,193,242,64,163,227,45,17,171,134,92,4,118,181,32,72,79,242,81,176,198,73,25,178,94,25,187,147,108,69,194,97,49,27,135,170,88,195,65,
257 162,40,100,235,0,234,44,68,37,76,72,206,162,139,13,0,204,90,0,239,105,36,193,105,113,54,67,91,13,1,26,237,112,200,249,194,194,173,79,194,
258 7,7,48,116,0,15,151,153,56,56,80,12,16,129,76,225,243,175,9,173,116,214,136,54,105,157,51,4,33,197,146,72,225,145,17,128,141,7,76,162,
259 198,217,156,55,152,18,39,205,36,88,249,39,64,43,108,2,107,120,59,47,7,112,106,77,86,70,65,165,3,196,83,99,0,254,164,172,140,128,43,22,
260 216,64,144,2,2,64,71,4,98,34,192,9,239,99,45,16,64,37,9,50,162,138,40,176,109,68,22,129,160,129,45,221,21,187,65,220,19,128,110,145,
261 96,162,201,105,180,162,132,26,215,116,2,8,26,113,226,176,82,198,10,96,238,232,13,136,202,108,194,101,36,13,4,153,117,231,44,96,182,35,14,212,
262 238,224,198,11,21,218,1,188,97,85,217,178,28,22,6,116,148,233,61,55,4,171,36,168,53,89,37,4,35,122,15,189,65,18,92,226,79,76,141,53,
263 162,8,221,195,7,26,133,30,43,8,58,226,11,187,134,88,139,180,29,242,128,65,26,225,154,13,3,17,2,210,127,100,56,217,146,124,128,33,17,129,
264 88,76,48,88,172,97,4,186,44,87,154,100,139,16,35,147,129,131,22,45,33,216,22,221,36,143,163,229,37,134,187,150,48,198,254,25,74,150,96,224,
265 32,16,52,168,40,163,5,245,120,32,11,119,105,97,89,56,36,132,4,224,13,112,112,75,87,233,3,109,184,104,15,221,42,31,184,59,134,0,141,15,
266 186,139,146,203,77,4,147,81,64,22,163,229,159,17,197,167,209,10,80,2,5,114,114,187,155,96,146,105,40,154,73,247,95,250,32,141,72,52,15,178,
267 34,160,208,119,209,58,215,134,17,130,93,202,255,209,43,200,37,162,74,88,122,90,65,160,112,193,107,37,127,117,106,245,154,125,20,78,9,34,146,210,
268 202,244,78,23,224,129,244,114,142,138,61,89,186,39,171,207,144,40,168,4,111,148,110,173,2,98,159,33,120,126,46,9,32,43,219,88,147,128,21,122,
269 34,136,13,44,7,208,109,56,32,6,220,10,58,99,90,139,4,70,165,198,85,0,33,64,151,88,6,194,67,133,78,238,206,0,40,92,51,66,14,169,
270 202,59,182,10,93,42,40,36,20,34,133,217,162,178,251,199,75,234,164,176,130,73,205,209,64,92,52,235,184,24,112,32,201,202,97,0,34,40,247,204,
271 160,185,28,65,35,37,131,162,132,191,18,148,184,187,176,38,28,174,0,32,116,156,81,117,36,129,90,55,20,65,171,180,80,125,235,29,218,147,132,68,
272 50,24,62,55,107,164,73,134,109,108,211,208,163,228,97,27,48,13,67,216,62,64,106,17,224,139,149,48,117,151,168,65,188,15,138,19,52,69,17,35,
273 28,26,224,2,176,123,176,28,170,220,167,37,155,176,92,148,154,120,58,32,114,8,128,62,8,12,104,155,5,41,132,197,54,12,70,235,189,165,96,136,
274 47,136,160,157,171,112,118,183,55,244,253,99,48,192,71,188,50,59,160,84,231,112,206,111,144,243,131,86,24,6,239,218,120,46,158,228,148,110,193,96,
275 224,254,141,64,115,239,144,208,36,21,200,87,172,134,18,174,139,175,233,227,244,34,84,86,65,214,160,197,119,17,168,138,50,41,105,12,100,137,36,45,
276 54,73,193,46,36,15,9,91,69,21,81,162,78,135,159,102,82,196,54,116,170,233,174,160,70,161,2,124,212,80,156,43,192,179,18,234,204,208,109,20,
277 252,218,21,8,193,7,33,129,31,71,70,9,32,192,140,141,149,24,74,134,84,8,35,163,1,29,26,24,227,149,16,231,45,150,8,70,8,49,28,46,
278 57,202,113,151,98,96,10,240,48,144,37,61,222,71,199,49,130,92,227,134,48,56,81,200,107,49,246,200,50,51,80,150,83,188,130,180,100,96,48,160,
279 89,78,109,129,199,42,170,209,197,43,156,3,229,68,43,69,151,28,14,161,132,48,136,209,37,60,182,65,128,14,48,163,178,152,104,160,49,24,16,153,
280 231,142,96,40,163,7,137,168,224,74,145,69,1,140,171,90,214,217,121,92,147,133,109,163,199,33,204,122,148,104,112,161,175,32,197,231,138,51,204,214,
281 203,203,241,184,146,227,187,64,107,75,101,212,232,22,65,242,242,156,116,201,100,100,131,22,244,116,78,91,3,132,71,121,107,151,81,70,20,176,128,141,
282 121,104,144,44,118,113,16,121,246,74,66,160,30,44,200,97,142,244,103,148,12,184,140,28,24,29,152,73,36,158,239,58,39,200,51,44,41,173,151,28,
283 230,182,25,13,154,77,52,123,39,48,196,82,1,37,30,36,173,88,149,68,121,86,81,60,24,198,9,52,72,202,3,17,230,37,109,24,23,108,220,241,
284 200,109,149,72,14,82,183,137,101,154,78,124,167,150,197,148,195,178,193,140,129,45,28,206,72,178,139,60,65,176,52,206,146,88,166,29,148,205,73,199,
285 140,193,104,54,88,51,42,113,144,151,28,83,218,121,195,36,117,131,56,146,229,53,175,53,96,249,25,20,73,105,148,167,56,17,92,115,79,88,43,142,
286 68,140,88,49,31,103,187,5,139,203,71,102,128,96,52,101,150,88,96,126,32,212,60,125,156,203,204,144,73,103,141,112,224,98,56,103,114,227,147,191,
287 35,39,85,52,187,154,44,131,51,178,246,75,52,175,3,143,24,140,176,109,158,214,202,236,160,145,233,222,95,30,43,76,140,130,185,49,134,52,200,166,
288 83,172,216,86,243,230,102,130,77,162,49,0,235,195,30,102,169,38,9,208,209,161,80,222,72,42,203,205,32,69,152,107,209,72,144,40,4,72,19,192,
289 173,238,193,66,90,226,219,240,124,83,48,248,154,99,147,17,43,104,54,40,176,1,60,64,157,12,20,184,214,170,40,241,141,20,1,209,176,51,40,40,
290 214,202,222,32,84,182,184,147,228,77,40,120,173,95,247,101,225,162,66,224,34,161,75,55,164,27,172,139,56,180,81,157,53,163,102,6,72,62,34,133,
291 99,34,70,3,166,203,203,137,143,31,21,33,27,51,74,22,116,140,113,4,179,171,194,158,58,212,113,69,154,94,92,108,206,60,100,89,33,22,207,109,
292 140,28,104,142,240,88,19,76,179,177,140,0,26,33,226,46,46,139,81,65,129,47,206,22,184,236,205,173,8,20,87,218,215,96,176,16,82,106,217,73,
293 22,29,192,153,138,194,7,178,238,221,193,48,232,193,6,146,205,237,180,154,41,0,201,136,221,243,251,43,15,37,4,69,21,56,148,150,10,198,92,128,
294 8,152,40,162,179,6,136,52,178,34,3,6,204,149,146,193,64,140,126,214,181,208,131,173,123,240,198,64,9,51,92,36,137,1,208,128,156,130,114,68,
295 104,142,13,202,86,178,128,139,40,51,187,131,251,152,73,234,120,50,17,1,201,36,43,51,106,125,108,52,250,243,50,137,5,181,32,33,197,45,116,32,
296 2,235,43,90,222,65,98,9,132,22,219,22,194,0,69,131,224,174,72,14,211,30,245,140,216,46,65,205,140,1,87,115,6,25,125,132,28,148,137,52,
297 38,158,225,72,96,35,136,213,89,167,107,80,84,89,93,190,106,109,139,205,61,100,28,246,128,5,184,62,237,153,182,70,38,180,16,121,97,78,53,174,
298 147,152,141,3,5,46,246,215,26,52,50,193,72,18,222,201,35,24,195,148,17,35,19,142,189,195,11,167,217,4,130,172,223,100,67,136,8,82,6,9,
299 176,192,18,101,19,165,19,162,18,126,5,145,128,138,33,107,32,9,100,144,44,5,33,88,205,160,230,208,107,180,104,232,144,43,4,27,50,65,109,129,
300 6,141,10,146,0,75,41,163,68,3,2,198,129,58,75,56,110,138,48,166,111,115,66,123,74,1,88,214,218,108,23,3,93,36,107,68,114,154,214,193,
301 74,48,17,193,10,203,109,237,172,146,10,165,175,155,0,211,211,77,136,226,11,236,146,33,53,245,49,100,82,76,10,40,130,81,236,134,165,213,153,208,
302 227,85,56,46,146,172,232,0,76,96,162,210,74,105,102,65,174,237,123,4,128,209,174,100,145,33,217,154,172,130,141,26,11,59,204,209,38,19,134,43,
303 233,104,210,14,69,103,164,214,181,240,67,68,105,180,129,218,33,21,150,137,50,216,62,130,26,152,67,213,113,166,232,26,2,208,177,2,138,73,200,46,
304 245,156,32,86,193,4,16,15,105,136,62,73,55,106,126,43,40,176,126,221,10,114,146,130,206,96,68,218,191,162,179,242,13,49,3,216,93,43,29,41,
305 218,137,53,162,52,54,204,32,5,200,176,233,221,2,86,57,135,91,175,242,208,210,203,188,81,72,11,190,7,67,71,92,29,243,104,130,8,24,172,164,
306 1,21,147,74,2,10,46,127,58,112,33,218,200,58,74,211,88,187,12,22,8,76,209,98,138,197,88,179,219,144,123,20,26,224,22,146,72,2,225,140,
307 46,244,20,27,184,113,17,65,193,209,20,91,65,171,96,180,160,142,13,225,137,195,86,187,91,187,80,8,13,72,195,160,105,136,140,55,73,32,112,4,
308 11,43,220,66,77,164,9,138,65,2,7,19,46,253,41,160,255,160,78,0,88,42,37,196,68,177,132,244,48,49,233,5,139,147,72,90,85,172,180,235,
309 14,32,226,225,192,172,22,18,209,174,166,155,70,221,220,111,17,2,131,86,108,129,99,6,128,80,164,3,235,35,181,83,7,33,104,177,167,79,138,110,
310 148,16,4,32,53,160,112,40,19,191,69,202,104,141,38,173,179,195,125,59,164,10,196,20,127,191,224,0,142,129,35,111,162,17,160,165,140,184,3,251,
311 61,236,53,161,129,53,1,134,16,43,211,66,222,5,202,45,6,10,194,118,184,178,90,62,61,46,244,186,7,224,187,131,171,129,169,235,13,7,209,138,
312 14,157,166,33,100,232,211,9,223,60,146,16,119,18,7,177,133,186,52,151,211,137,208,42,128,32,236,36,245,233,112,39,119,58,77,64,109,7,240,183,
313 112,4,94,40,6,15,160,143,225,6,106,116,105,100,97,231,3,123,112,112,126,224,149,70,10,78,129,69,98,55,209,49,65,223,48,69,133,219,233,192,
314 2,39,26,128,48,136,7,112,209,96,167,78,34,134,112,132,113,18,176,233,209,181,136,148,88,202,180,14,193,69,237,70,193,6,128,36,127,46,34,42,
315 212,215,8,102,196,65,204,94,131,187,65,85,198,9,244,16,65,236,65,39,125,39,117,224,83,46,157,188,66,236,65,88,1,7,117,187,76,97,130,44,
316 92,206,254,43,18,39,239,78,112,134,65,0,17,17,111,21,192,246,16,63,78,197,135,133,134,0,32,243,186,117,196,23,113,26,211,192,182,160,86,24,
317 194,146,166,45,201,68,210,65,208,83,249,73,96,156,158,62,36,96,43,174,194,41,8,14,35,164,174,26,41,18,145,53,45,83,65,37,81,180,10,107,
318 172,216,78,208,97,57,113,0,148,27,251,94,138,166,4,1,110,175,48,102,15,180,216,172,220,67,69,166,235,164,197,75,54,25,170,9,34,125,195,251,
319 166,184,88,130,129,218,34,167,44,65,73,164,155,175,130,241,86,44,126,156,228,163,152,180,164,151,198,109,227,75,251,112,73,220,18,4,170,126,14,114,
320 171,3,88,52,159,7,114,79,187,204,172,86,48,165,74,52,232,18,46,170,112,12,29,173,127,37,33,4,89,0,95,177,132,247,126,241,7,213,68,238,
321 239,178,70,34,8,154,80,105,245,74,191,196,91,181,127,156,48,65,224,191,172,133,255,152,220,2,155,211,170,96,154,81,243,109,225,38,250,243,74,195,
322 0,208,46,158,52,138,5,228,146,141,58,89,116,176,124,167,48,116,186,200,70,128,91,131,128,121,161,184,137,244,114,128,1,209,165,174,25,131,224,249,
323 165,31,52,159,64,115,21,29,206,73,72,17,95,184,100,216,78,5,42,81,243,7,234,78,23,186,41,19,98,154,112,234,5,111,7,206,173,167,138,107,
324 58,87,133,206,183,112,62,179,127,168,174,173,63,224,145,3,164,215,7,242,82,202,240,71,177,111,175,75,2,0,82,88,36,8,220,130,107,92,162,93,
325 210,131,149,165,98,147,72,1,200,1,47,253,94,78,73,0,206,73,78,111,233,26,108,82,130,194,15,242,233,123,250,84,88,62,128,56,53,82,73,52,
326 174,40,100,255,127,86,130,73,6,151,199,98,59,232,199,97,3,218,29,169,76,254,129,53,46,8,36,15,244,236,184,28,233,202,90,174,128,19,76,29,
327 210,182,162,238,212,0,235,4,25,86,218,149,61,57,84,160,244,143,78,234,231,208,7,187,128,1,175,210,98,42,237,166,220,156,148,129,20,79,231,1,
328 23,146,82,52,171,10,10,239,2,197,70,32,197,208,58,69,36,225,216,247,53,19,106,71,104,121,245,165,122,67,164,156,0,1,18,26,5,165,230,224,
329 175,238,15,135,212,0,169,185,94,8,151,7,119,214,151,233,19,109,37,18,112,5,149,164,1,164,106,43,88,58,191,154,108,65,168,196,27,115,115,134,
330 21,54,148,9,36,14,120,171,33,147,73,41,88,170,44,88,38,45,0,4,26,211,254,105,195,93,136,184,1,171,72,0,22,179,5,117,132,128,6,229,
331 84,221,56,34,128,18,244,146,73,121,206,5,85,16,150,127,15,187,129,64,157,37,249,38,248,27,133,49,4,167,94,78,181,129,208,28,22,106,243,160,
332 185,55,202,57,87,207,254,114,9,113,144,11,228,198,5,32,52,144,38,34,192,37,235,70,250,180,208,242,99,41,1,2,116,27,190,117,184,103,38,60,
333 235,233,64,129,122,13,0,96,144,107,55,56,1,42,218,116,111,74,69,90,86,233,97,130,62,175,128,6,105,195,41,35,86,72,62,145,128,3,73,39,
334 63,254,81,252,175,43,254,228,134,140,28,18,74,156,160,85,107,214,141,39,210,93,89,75,48,110,20,216,183,242,137,32,4,29,100,16,21,223,183,89,
335 40,224,142,74,0,72,157,2,119,15,73,58,215,231,130,22,9,71,71,54,165,231,72,220,12,94,160,214,86,150,9,29,126,123,148,144,103,195,90,54,
336 248,35,155,232,15,245,105,44,147,25,86,156,147,160,36,184,52,8,21,248,127,117,229,46,148,159,248,138,124,219,96,173,101,45,169,32,243,163,154,105,
337 41,121,58,73,46,210,176,0,244,8,173,2,0,210,253,24,14,46,122,115,114,86,149,227,41,28,50,191,90,79,160,73,121,75,68,219,125,102,193,94,
338 26,208,47,15,233,73,1,209,41,121,185,62,109,97,245,172,173,20,224,116,147,129,55,40,17,206,124,251,58,81,48,73,206,188,164,82,74,156,156,223,
339 43,210,209,33,156,238,13,7,58,244,30,9,96,146,61,5,235,252,222,234,220,154,124,146,81,215,223,208,100,0,225,128,7,134,180,105,164,170,81,206,
340 129,37,254,131,207,130,209,167,253,42,115,78,98,156,147,175,186,195,245,160,69,44,61,27,105,69,46,146,117,122,114,30,186,78,72,30,53,234,164,85,
341 5,163,173,39,43,215,233,21,160,12,229,45,96,150,146,90,202,94,145,48,78,73,89,201,202,71,43,59,224,144,122,73,19,228,254,114,74,69,18,131,
342 36,3,255,192,228,245,36,79,20,228,162,73,205,166,223,56,7,149,160,64,85,64,142,173,32,143,211,233,34,78,115,147,78,79,155,146,191,210,193,20,
343 127,117,172,8,96,191,95,134,191,208,2,41,104,1,6,180,186,184,53,83,128
344 };
345 #endif /* soundtablename_H_ */
+
+ + + + diff --git a/extras/doc/html/splitbar.png b/extras/doc/html/splitbar.png new file mode 100644 index 0000000000000000000000000000000000000000..1ec48742a5f0498f72f6aff97c9d850f34968ad5 GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^Yzz!63>-{AmhX=Jf@VhhF)_LMI0_p zj+iCd66wfsYx%~Fo5bBXcp~^x><`xdF@J_oe)C4}&U?}J^%Wn? z3O;Sn+5i4sUGDbnv(KKN{q@(cU&d#|T_s!v-2z(zMG{4bVaj`)_xC?uSz){9;`h&= z^V8Fp$NTB8UuS2lbGpB~dw+j_eE90=fB!wM-@Eo#{&wqg_TRtD>K@YQGU!t3S;Vne egE;2Bh5ujPvw9mOx1Sy8bp}sYKbLh*2~7aVTX`-3 literal 0 HcmV?d00001 diff --git a/extras/doc/html/sync_off.png b/extras/doc/html/sync_off.png new file mode 100644 index 0000000000000000000000000000000000000000..da8ce2d400dde8441c369f30879c80b305be90c7 GIT binary patch literal 856 zcmV-e1E>6nP)zw}H5-_bS8v&%_yV zTucLTHCX_!_)(MrEJL>VO!SD)#VKQ_6)@I);?f&D+*tC&N%2Lh03PwnE2a%#Ild7G z%mFm|&nxioNcll*F$OpyiUG`Qb~`{)=@}US$*dN~ghc}siTwa^EEd|lzL#%T=wbm# zOD`E(T)@orrmRW&s@oX+U| zcWP_dxOp=Wt5&O(#%@#_dijRB@_{X-z| zgmzyC>l_Z!(^Dpse6OWG9p&#sL)`uM4iHyIbp&o{Oz1)|_GH>@w0Csy;O;#pZj1pW zC@LwTwy}{bgO{0`eF|W8GS zMFNxvoxB`?74RaQz&9hC-EDCQV1*pjhnr8d)0$V|{T$%``d)mU>O?ys4vGN48`9+Z zQXDqkO#8^En<)^he}s=s-5&MOFuw$V*{|YLv6SksIrO#sB{YMoM8EKA0*4P04JfJ2 iLopJ5XlT9x%>Dzj^P~1TB$_G!0000E}3K|N@JS4X+jcXS`u5GMB`{QqfTa0ZEn=0fe01tV?ii=C>DGX3R3mK zKGYWx6lwo~(l!qirY(jrc-5 z04!mbAS}KXwE)i{UwkBb#V6vj`K1#u$070E3k+_4io_-HX|@C*adCxZ19%=^io=-+ zH2Z~B7(D%aCEhY8_*_&0*va$x04&@&IRM$L5hsO16I6;10hVz%7J}gjZ#L?N0ZdU^ zUQTHL0dhPZ06XvNEHptxtOG3J&CloEo?d4|V@0N+4RrPQQ&3n4U}s1Z z>;f!NR+9LRyPX}u zJxPJ~Ae&pZF1`23Y$ILWY~H#Jutbq2C`o^`UHd`=JHpG>wS0Xg?=&~FY0H+RxBY(V zHf{ura5|l|wzU!I?jhIf{U`mgHGw1jgEec{0=$wuuNRlgHM_J=%jygfim zAOINgI2Pl-cwBeYvyR0@Jh{0P7HRny&z;**ei8w05Xl~40L%Wbu$2#@Z{yOx3iPKrvG5_`Z!=jWpy?F)>cNo z|AF|-V*oqbG=VnskXt&SEXC|}CVakp_mlVxV1#~yd0FfEL;}FhRlTgz395xIU;)4? zc$zBU8|lODq4*eJm7LJQGjFsjT2ra>9N=Z06Q{D>Xs5+d5d(NZT3nxrW9ClRdl5ZM z0V8gvu1!56_0q`v69Ach6i0;C6ktTQ8|*isRkTSAh_D`t zb76J+1HQliuUkbY-c?pnR1CcD&@ZVMdS~szYfZr{XKXsfT}&i}BY!R4o&K%#b=u2q izdtXmKL6AHGvmj}OwRTKp>{xX89ZJ6T-G@yGywp(?l43E literal 0 HcmV?d00001 diff --git a/extras/doc/html/tab_b.png b/extras/doc/html/tab_b.png new file mode 100644 index 0000000000000000000000000000000000000000..e5433502b2b697a7154a1701275467ee221801e3 GIT binary patch literal 164 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QrVs^jv*C{Z|C0TJZvE1{8U?L zk|cBMv{`jm*8gxk&YLpv$*uU`^aG=W5h+ zJNAH8Tw-tf3#;Y-7nR2|9{B!Q^_Ya{;)~|L{s&*aXsKZNDp^bP0l+XkKBxOMw literal 0 HcmV?d00001 diff --git a/extras/doc/html/tab_h.png b/extras/doc/html/tab_h.png new file mode 100644 index 0000000000000000000000000000000000000000..d1da50314e8ddc06dddb4457b568e1ceef1b4a07 GIT binary patch literal 167 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QhA;(jv*C{Z|7R`9dZzGwoMi} zadd$KtK*_m|4ts#UHCBWG|M-sY4hfD%QMaY?#=&r#o-OlH;36>v(DCx>76u*sn?R_ znZ(S!>91VgOUw=4a%_XnH)j3Ik*tf978#gzFW9|!TKwOmvfB^dE`3&FRmZsgqj=CW T|K*85n;AS^{an^LB{Ts5ZID38 literal 0 HcmV?d00001 diff --git a/extras/doc/html/tab_s.png b/extras/doc/html/tab_s.png new file mode 100644 index 0000000000000000000000000000000000000000..fc1842b316f125c3bfad6ffe6529bb54b098bb72 GIT binary patch literal 171 zcmeAS@N?(olHy`uVBq!ia0vp^j6kfy!2~3aiye;!QbnFFjv*C{Z|?>QH7PJSI36qC zdL~fNHK0>rk<}{uxu-rXu72~z^ho*rpHI&G{^GO8PjjNb;UuRAg72nU@Gbh@68%u7 zF1nj{zh2I@M?HzA#;4b8tUBbUyjki(vy*q^w4U1jS5_gnm1Zv!a=H+oz3bQePt1D@ WR1@PYd>w$cGkCiCxvX + + + + + + +Mozzi: table_generator_template.py Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
table_generator_template.py
+
+
+
1 import array
2 import os
3 import textwrap
4 
5 def generate(outfile, tablename, tablelength, samplerate):
6  fout = open(os.path.expanduser(outfile), "w")
7  fout.write('#ifndef ' + tablename + '_H_' + '\n')
8  fout.write('#define ' + tablename + '_H_' + '\n \n')
9  fout.write('#if ARDUINO >= 100'+'\n')
10  fout.write('#include "Arduino.h"'+'\n')
11  fout.write('#else'+'\n')
12  fout.write('#include "WProgram.h"'+'\n')
13  fout.write('#endif'+'\n')
14  fout.write('#include <avr/pgmspace.h>'+'\n \n')
15  fout.write('#define ' + tablename + '_NUM_CELLS '+ str(len(values))+'\n')
16  fout.write('#define ' + tablename + '_SAMPLERATE '+ str(samplerate)+'\n \n')
17  outstring = 'const int8_t __attribute__((section(".progmem.data"))) ' + tablename + '_DATA [] = {'
18  try:
19  for num in range(tablelength):
20  outstring += str(num/32) + ", "
21  finally:
22  outstring += "};"
23  outstring = textwrap.fill(outstring, 80)
24  fout.write(outstring)
25  fout.write('\n \n #endif /* ' + tablename + '_H_ */\n')
26  fout.close()
27  print "wrote " + outfile
28 
29 generate("~/Desktop/phasor8192_uint8.h", "phasor8192", 8192, "8192")
+
+ + + + diff --git a/extras/doc/html/tabs.css b/extras/doc/html/tabs.css new file mode 100644 index 000000000..a28614b8e --- /dev/null +++ b/extras/doc/html/tabs.css @@ -0,0 +1 @@ +.sm{position:relative;z-index:9999}.sm,.sm ul,.sm li{display:block;list-style:none;margin:0;padding:0;line-height:normal;direction:ltr;text-align:left;-webkit-tap-highlight-color:rgba(0,0,0,0)}.sm-rtl,.sm-rtl ul,.sm-rtl li{direction:rtl;text-align:right}.sm>li>h1,.sm>li>h2,.sm>li>h3,.sm>li>h4,.sm>li>h5,.sm>li>h6{margin:0;padding:0}.sm ul{display:none}.sm li,.sm a{position:relative}.sm a{display:block}.sm a.disabled{cursor:not-allowed}.sm:after{content:"\00a0";display:block;height:0;font:0/0 serif;clear:both;visibility:hidden;overflow:hidden}.sm,.sm *,.sm *:before,.sm *:after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box}#doc-content{overflow:auto;display:block;padding:0;margin:0;-webkit-overflow-scrolling:touch}.sm-dox{background-image:url("tab_b.png")}.sm-dox a,.sm-dox a:focus,.sm-dox a:hover,.sm-dox a:active{padding:0 12px;padding-right:43px;font-family:"Lucida Grande","Geneva","Helvetica",Arial,sans-serif;font-size:13px;font-weight:bold;line-height:36px;text-decoration:none;text-shadow:0 1px 1px rgba(255,255,255,0.9);color:#283a5d;outline:0}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a.current{color:#d23600}.sm-dox a.disabled{color:#bbb}.sm-dox a span.sub-arrow{position:absolute;top:50%;margin-top:-14px;left:auto;right:3px;width:28px;height:28px;overflow:hidden;font:bold 12px/28px monospace!important;text-align:center;text-shadow:none;background:rgba(255,255,255,0.5);-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox a.highlighted span.sub-arrow:before{display:block;content:'-'}.sm-dox>li:first-child>a,.sm-dox>li:first-child>:not(ul) a{-moz-border-radius:5px 5px 0 0;-webkit-border-radius:5px;border-radius:5px 5px 0 0}.sm-dox>li:last-child>a,.sm-dox>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul{-moz-border-radius:0 0 5px 5px;-webkit-border-radius:0;border-radius:0 0 5px 5px}.sm-dox>li:last-child>a.highlighted,.sm-dox>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>a.highlighted,.sm-dox>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>ul>li:last-child>*:not(ul) a.highlighted{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox ul{background:rgba(162,162,162,0.1)}.sm-dox ul a,.sm-dox ul a:focus,.sm-dox ul a:hover,.sm-dox ul a:active{font-size:12px;border-left:8px solid transparent;line-height:36px;text-shadow:none;background-color:white;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul ul a,.sm-dox ul ul a:hover,.sm-dox ul ul a:focus,.sm-dox ul ul a:active{border-left:16px solid transparent}.sm-dox ul ul ul a,.sm-dox ul ul ul a:hover,.sm-dox ul ul ul a:focus,.sm-dox ul ul ul a:active{border-left:24px solid transparent}.sm-dox ul ul ul ul a,.sm-dox ul ul ul ul a:hover,.sm-dox ul ul ul ul a:focus,.sm-dox ul ul ul ul a:active{border-left:32px solid transparent}.sm-dox ul ul ul ul ul a,.sm-dox ul ul ul ul ul a:hover,.sm-dox ul ul ul ul ul a:focus,.sm-dox ul ul ul ul ul a:active{border-left:40px solid transparent}@media(min-width:768px){.sm-dox ul{position:absolute;width:12em}.sm-dox li{float:left}.sm-dox.sm-rtl li{float:right}.sm-dox ul li,.sm-dox.sm-rtl ul li,.sm-dox.sm-vertical li{float:none}.sm-dox a{white-space:nowrap}.sm-dox ul a,.sm-dox.sm-vertical a{white-space:normal}.sm-dox .sm-nowrap>li>a,.sm-dox .sm-nowrap>li>:not(ul) a{white-space:nowrap}.sm-dox{padding:0 10px;background-image:url("tab_b.png");line-height:36px}.sm-dox a span.sub-arrow{top:50%;margin-top:-2px;right:12px;width:0;height:0;border-width:4px;border-style:solid dashed dashed dashed;border-color:#283a5d transparent transparent transparent;background:transparent;-moz-border-radius:0;-webkit-border-radius:0;border-radius:0}.sm-dox a,.sm-dox a:focus,.sm-dox a:active,.sm-dox a:hover,.sm-dox a.highlighted{padding:0 12px;background-image:url("tab_s.png");background-repeat:no-repeat;background-position:right;-moz-border-radius:0!important;-webkit-border-radius:0;border-radius:0!important}.sm-dox a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox a:hover span.sub-arrow{border-color:white transparent transparent transparent}.sm-dox a.has-submenu{padding-right:24px}.sm-dox li{border-top:0}.sm-dox>li>ul:before,.sm-dox>li>ul:after{content:'';position:absolute;top:-18px;left:30px;width:0;height:0;overflow:hidden;border-width:9px;border-style:dashed dashed solid dashed;border-color:transparent transparent #bbb transparent}.sm-dox>li>ul:after{top:-16px;left:31px;border-width:8px;border-color:transparent transparent #fff transparent}.sm-dox ul{border:1px solid #bbb;padding:5px 0;background:#fff;-moz-border-radius:5px!important;-webkit-border-radius:5px;border-radius:5px!important;-moz-box-shadow:0 5px 9px rgba(0,0,0,0.2);-webkit-box-shadow:0 5px 9px rgba(0,0,0,0.2);box-shadow:0 5px 9px rgba(0,0,0,0.2)}.sm-dox ul a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-color:transparent transparent transparent #555;border-style:dashed dashed dashed solid}.sm-dox ul a,.sm-dox ul a:hover,.sm-dox ul a:focus,.sm-dox ul a:active,.sm-dox ul a.highlighted{color:#555;background-image:none;border:0!important;color:#555;background-image:none}.sm-dox ul a:hover{background-image:url("tab_a.png");background-repeat:repeat-x;color:white;text-shadow:0 1px 1px black}.sm-dox ul a:hover span.sub-arrow{border-color:transparent transparent transparent white}.sm-dox span.scroll-up,.sm-dox span.scroll-down{position:absolute;display:none;visibility:hidden;overflow:hidden;background:#fff;height:36px}.sm-dox span.scroll-up:hover,.sm-dox span.scroll-down:hover{background:#eee}.sm-dox span.scroll-up:hover span.scroll-up-arrow,.sm-dox span.scroll-up:hover span.scroll-down-arrow{border-color:transparent transparent #d23600 transparent}.sm-dox span.scroll-down:hover span.scroll-down-arrow{border-color:#d23600 transparent transparent transparent}.sm-dox span.scroll-up-arrow,.sm-dox span.scroll-down-arrow{position:absolute;top:0;left:50%;margin-left:-6px;width:0;height:0;overflow:hidden;border-width:6px;border-style:dashed dashed solid dashed;border-color:transparent transparent #555 transparent}.sm-dox span.scroll-down-arrow{top:8px;border-style:solid dashed dashed dashed;border-color:#555 transparent transparent transparent}.sm-dox.sm-rtl a.has-submenu{padding-right:12px;padding-left:24px}.sm-dox.sm-rtl a span.sub-arrow{right:auto;left:12px}.sm-dox.sm-rtl.sm-vertical a.has-submenu{padding:10px 20px}.sm-dox.sm-rtl.sm-vertical a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-rtl>li>ul:before{left:auto;right:30px}.sm-dox.sm-rtl>li>ul:after{left:auto;right:31px}.sm-dox.sm-rtl ul a.has-submenu{padding:10px 20px!important}.sm-dox.sm-rtl ul a span.sub-arrow{right:auto;left:8px;border-style:dashed solid dashed dashed;border-color:transparent #555 transparent transparent}.sm-dox.sm-vertical{padding:10px 0;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}.sm-dox.sm-vertical a{padding:10px 20px}.sm-dox.sm-vertical a:hover,.sm-dox.sm-vertical a:focus,.sm-dox.sm-vertical a:active,.sm-dox.sm-vertical a.highlighted{background:#fff}.sm-dox.sm-vertical a.disabled{background-image:url("tab_b.png")}.sm-dox.sm-vertical a span.sub-arrow{right:8px;top:50%;margin-top:-5px;border-width:5px;border-style:dashed dashed dashed solid;border-color:transparent transparent transparent #555}.sm-dox.sm-vertical>li>ul:before,.sm-dox.sm-vertical>li>ul:after{display:none}.sm-dox.sm-vertical ul a{padding:10px 20px}.sm-dox.sm-vertical ul a:hover,.sm-dox.sm-vertical ul a:focus,.sm-dox.sm-vertical ul a:active,.sm-dox.sm-vertical ul a.highlighted{background:#eee}.sm-dox.sm-vertical ul a.disabled{background:#fff}} \ No newline at end of file diff --git a/extras/doc/html/twi__nonblock_8cpp_source.html b/extras/doc/html/twi__nonblock_8cpp_source.html new file mode 100644 index 000000000..43787c91f --- /dev/null +++ b/extras/doc/html/twi__nonblock_8cpp_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: twi_nonblock.cpp Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
twi_nonblock.cpp
+
+
+
1 /*
2  * twi_nonblock.cpp
3  *
4  * Copyright 2012 Marije Baalman.
5  *
6  */
7 
8 
9 // Added by TB2014 for Mozzi library, to hide code from Teensy 3.1
10 #if !(defined(__MK20DX128__) || defined(__MK20DX256__))
11 
12 #include "twi_nonblock.h"
13 
14 #include <avr/interrupt.h>
15 
16 uint8_t twi_writeAddress;
17 uint8_t * twi_writeData;
18 uint8_t twi_writeLength;
19 
20 uint8_t twi_readAddress;
21 // uint8_t * twi_writeData;
22 uint8_t twi_readLength;
23 
24 /*
25  * Function twi_init
26  * Desc readys twi pins and sets twi bitrate
27  * Input none
28  * Output none
29  */
30 void initialize_twi_nonblock(){
31  rxBufferIndex = 0;
32  rxBufferLength = 0;
33 
34  txBufferIndex = 0;
35  txBufferLength = 0;
36 
37  // initialize state
38  twi_state = TWI_READY;
39 
40  #if defined(__AVR_ATmega168__) || defined(__AVR_ATmega8__) || defined(__AVR_ATmega328P__)
41  // activate internal pull-ups for twi
42  // as per note from atmega8 manual pg167
43  sbi(PORTC, 4);
44  sbi(PORTC, 5);
45  #else
46  // activate internal pull-ups for twi
47  // as per note from atmega128 manual pg204
48  sbi(PORTD, 0);
49  sbi(PORTD, 1);
50  #endif
51 
52  // initialize twi prescaler and bit rate
53  cbi(TWSR, TWPS0);
54  cbi(TWSR, TWPS1);
55  TWBR = ((F_CPU / TWI_FREQ) - 16) / 2;
56 
57  /* twi bit rate formula from atmega128 manual pg 204
58  SCL Frequency = CPU Clock Frequency / (16 + (2 * TWBR))
59  note: TWBR should be 10 or higher for master mode
60  It is 72 for a 16mhz Wiring board with 100kHz TWI */
61 
62  // enable twi module, acks, and twi interrupt
63  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA);
64 }
65 
66 
67 uint8_t twowire_requestFromBlocking(uint8_t address, uint8_t quantity)
68 {
69  // clamp to buffer length
70  if(quantity > BUFFER_LENGTH){
71  quantity = BUFFER_LENGTH;
72  }
73  // perform blocking read into buffer
74  uint8_t read = twi_readFromBlocking(address, rxBuffer, quantity);
75  // set rx buffer iterator vars
76  rxBufferIndex = 0;
77  rxBufferLength = read;
78 
79  return read;
80 }
81 
82 void twowire_beginTransmission( uint8_t address ){
83  // indicate that we are transmitting
84  transmitting = 1;
85  // set address of targeted slave
86  txAddress = address;
87  // reset tx buffer iterator vars
88  txBufferIndex = 0;
89  txBufferLength = 0;
90 }
91 
92 void twowire_send( uint8_t data ){
93  if(transmitting){
94  // in master transmitter mode
95  // don't bother if buffer is full
96  if(txBufferLength >= BUFFER_LENGTH){
97  return;
98  }
99  // put byte in tx buffer
100  txBuffer[txBufferIndex] = data;
101  ++txBufferIndex;
102  // update amount in buffer
103  txBufferLength = txBufferIndex;
104  }
105 }
106 
107 uint8_t twowire_endTransmission(void)
108 {
109  // transmit buffer (blocking)
110  int8_t ret = twi_writeToBlocking(txAddress, txBuffer, txBufferLength, 1);
111  // reset tx buffer iterator vars
112  txBufferIndex = 0;
113  txBufferLength = 0;
114  // indicate that we are done transmitting
115  transmitting = 0;
116  return ret;
117 }
118 
119 /*
120  * Function twi_readFrom
121  * Desc attempts to become twi bus master and read a
122  * series of bytes from a device on the bus
123  * Input address: 7bit i2c device address
124  * data: pointer to byte array
125  * length: number of bytes to read into array
126  * Output number of bytes read
127  */
129 uint8_t twi_readFromBlocking(uint8_t address, uint8_t* data, uint8_t length)
130 {
131  uint8_t i;
132 
133  // ensure data will fit into buffer
134  if(TWI_BUFFER_LENGTH < length){
135  return 0;
136  }
137 
138  // wait until twi is ready, become master receiver
139  while(TWI_READY != twi_state){
140  continue;
141  }
142 
143  twi_state = TWI_MRX;
144  // reset error state (0xFF.. no error occured)
145  twi_error = 0xFF;
146 
147  // initialize buffer iteration vars
148  twi_masterBufferIndex = 0;
149  twi_masterBufferLength = length-1; // This is not intuitive, read on...
150  // On receive, the previously configured ACK/NACK setting is transmitted in
151  // response to the received byte before the interrupt is signalled.
152  // Therefor we must actually set NACK when the _next_ to last byte is
153  // received, causing that NACK to be sent in response to receiving the last
154  // expected byte of data.
155 
156  // build sla+w, slave device address + w bit
157  twi_slarw = TW_READ;
158  twi_slarw |= address << 1;
159 
160  // send start condition
161  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA);
162 
163  // wait for read operation to complete
164  while(TWI_MRX == twi_state){
165  continue;
166  }
167 
168  if (twi_masterBufferIndex < length)
169  length = twi_masterBufferIndex;
170 
171  // copy twi buffer to data
172  for(i = 0; i < length; ++i){
173  data[i] = twi_masterBuffer[i];
174  }
175 
176  return length;
177 }
178 
179 
180 
182 
183 
184 uint8_t twi_initiateReadFrom(uint8_t address, uint8_t length)
185 {
186 
187  // ensure data will fit into buffer
188  if(TWI_BUFFER_LENGTH < length){
189  return 0;
190  }
191 
192  twi_readLength = length;
193  twi_readAddress = address;
194 
195  if ( TWI_READY == twi_state ){
196  twi_continueReadFrom();
197  } else {
198  twi_state = TWI_PRE_MRX;
199  }
200  if (twi_error == 0xFF)
201  return 0; // success
202  else if (twi_error == TW_MT_SLA_NACK)
203  return 2; // error: address send, nack received
204  else if (twi_error == TW_MT_DATA_NACK)
205  return 3; // error: data send, nack received
206  else
207  return 4; // other twi error
208 }
209 
210 
211 
212 void twi_continueReadFrom(){
213 
214  twi_state = TWI_MRX;
215  // reset error state (0xFF.. no error occured)
216  twi_error = 0xFF;
217 
218  // initialize buffer iteration vars
219  twi_masterBufferIndex = 0;
220  twi_masterBufferLength = twi_readLength-1; // This is not intuitive, read on...
221  // On receive, the previously configured ACK/NACK setting is transmitted in
222  // response to the received byte before the interrupt is signalled.
223  // Therefor we must actually set NACK when the _next_ to last byte is
224  // received, causing that NACK to be sent in response to receiving the last
225  // expected byte of data.
226 
227  // build sla+w, slave device address + w bit
228  twi_slarw = TW_READ;
229  twi_slarw |= twi_readAddress << 1;
230 
231  // send start condition
232  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA);
233 }
234 
235 
236 
237 uint8_t twi_readMasterBuffer( uint8_t* data, uint8_t length ){
238  uint8_t i;
239  if (twi_masterBufferIndex < length)
240  length = twi_masterBufferIndex;
241 
242  // copy twi buffer to data
243  for(i = 0; i < length; ++i){
244  data[i] = twi_masterBuffer[i];
245  }
246 
247  return length;
248 }
249 
250 
251 
253 
254 
255 /*
256  * Function twi_writeTo
257  * Desc attempts to become twi bus master and write a
258  * series of bytes to a device on the bus
259  * Input address: 7bit i2c device address
260  * data: pointer to byte array
261  * length: number of bytes in array
262  * wait: boolean indicating to wait for write or not
263  * Output 0 .. success
264  * 1 .. length to long for buffer
265  * 2 .. address send, NACK received
266  * 3 .. data send, NACK received
267  * 4 .. other twi error (lost bus arbitration, bus error, ..)
268  */
270 uint8_t twi_writeToBlocking(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait)
271 {
272  uint8_t i;
273 
274  // ensure data will fit into buffer
275  if(TWI_BUFFER_LENGTH < length){
276  return 1;
277  }
278 
279  // wait until twi is ready, become master transmitter
280  while(TWI_READY != twi_state){
281  continue;
282  }
283 
284  twi_state = TWI_MTX;
285  // reset error state (0xFF.. no error occured)
286  twi_error = 0xFF;
287 
288  // initialize buffer iteration vars
289  twi_masterBufferIndex = 0;
290  twi_masterBufferLength = length;
291 
292  // copy data to twi buffer
293  for(i = 0; i < length; ++i){
294  twi_masterBuffer[i] = data[i];
295  }
296 
297  // build sla+w, slave device address + w bit
298  twi_slarw = TW_WRITE;
299  twi_slarw |= address << 1;
300 
301  // send start condition
302  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA);
303 
304  // wait for write operation to complete
305  while(wait && (TWI_MTX == twi_state)){
306  continue;
307  }
308 
309  if (twi_error == 0xFF)
310  return 0; // success
311  else if (twi_error == TW_MT_SLA_NACK)
312  return 2; // error: address send, nack received
313  else if (twi_error == TW_MT_DATA_NACK)
314  return 3; // error: data send, nack received
315  else
316  return 4; // other twi error
317 }
318 
319 
320 
322 
323 
324 uint8_t twi_initiateWriteTo(uint8_t address, uint8_t* data, uint8_t length )
325 {
326  // ensure data will fit into buffer
327  if(TWI_BUFFER_LENGTH < length){
328  return 1;
329  }
330  twi_writeAddress = address;
331  twi_writeData = data;
332  twi_writeLength = length;
333 
334  if ( TWI_READY == twi_state ){
335  twi_continueWriteTo();
336  } else {
337  twi_state = TWI_PRE_MTX;
338  }
339  if (twi_error == 0xFF)
340  return 0; // success
341  else if (twi_error == TW_MT_SLA_NACK)
342  return 2; // error: address send, nack received
343  else if (twi_error == TW_MT_DATA_NACK)
344  return 3; // error: data send, nack received
345  else
346  return 4; // other twi error
347 }
348 
349 
350 
351 void twi_continueWriteTo(){
352  uint8_t i;
353  // wait until twi is ready, become master transmitter
354 // while(TWI_READY != twi_state){
355 // continue;
356 // }
357 
358  twi_state = TWI_MTX;
359  // reset error state (0xFF.. no error occured)
360  twi_error = 0xFF;
361 
362  // initialize buffer iteration vars
363  twi_masterBufferIndex = 0;
364  twi_masterBufferLength = twi_writeLength;
365 
366  // copy data to twi buffer
367  for(i = 0; i < twi_writeLength; ++i){
368  twi_masterBuffer[i] = twi_writeData[i];
369  }
370 
371  // build sla+w, slave device address + w bit
372  twi_slarw = TW_WRITE;
373  twi_slarw |= twi_writeAddress << 1;
374 
375  // send start condition
376  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTA);
377 }
378 
379 
380 // -----------end non-blocking --------------------
381 
382 
383 /*
384  * Function twi_reply
385  * Desc sends byte or readys receive line
386  * Input ack: byte indicating to ack or to nack
387  * Output none
388  */
389 void twi_reply(uint8_t ack)
390 {
391  // transmit master read ready signal, with or without ack
392  if(ack){
393  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT) | _BV(TWEA);
394  }else{
395  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWINT);
396  }
397 }
398 
399 
400 
401 /*
402  * Function twi_stop
403  * Desc relinquishes bus master status
404  * Input none
405  * Output none
406  */
407 void twi_stop(void)
408 {
409  // send stop condition
410  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT) | _BV(TWSTO);
411 
412  // wait for stop condition to be exectued on bus
413  // TWINT is not set after a stop condition!
414  while(TWCR & _BV(TWSTO)){ //FIXME: does this cause a delay?
415  continue;
416  }
417 
418  twi_oldstate = twi_state;
419  // update twi state
420  twi_state = TWI_READY;
421  if ( twi_oldstate == TWI_PRE_MTX ){
422  twi_continueWriteTo();
423  } else if ( twi_oldstate == TWI_PRE_MRX ){
424  twi_continueReadFrom();
425  }
426 }
427 
428 
429 
430 /*
431  * Function twi_releaseBus
432  * Desc releases bus control
433  * Input none
434  * Output none
435  */
436 void twi_releaseBus(void)
437 {
438  // release bus
439  TWCR = _BV(TWEN) | _BV(TWIE) | _BV(TWEA) | _BV(TWINT);
440 
441  twi_oldstate = twi_state;
442  // update twi state
443  twi_state = TWI_READY;
444  if ( twi_oldstate == TWI_PRE_MTX ){
445  twi_continueWriteTo();
446  } else if ( twi_oldstate == TWI_PRE_MRX ){
447  twi_continueReadFrom();
448  }
449 }
450 
451 // SIGNAL(TWI_vect)
452 // ISR(TWI_vect, ISR_NOBLOCK )
453 ISR(TWI_vect)
454 {
455  switch(TW_STATUS){
456  // All Master
457  case TW_START: // sent start condition
458  case TW_REP_START: // sent repeated start condition
459  // copy device address and r/w bit to output register and ack
460  TWDR = twi_slarw;
461  twi_reply(1);
462  break;
463 
464  // Master Transmitter
465  case TW_MT_SLA_ACK: // slave receiver acked address
466  case TW_MT_DATA_ACK: // slave receiver acked data
467  // if there is data to send, send it, otherwise stop
468  if(twi_masterBufferIndex < twi_masterBufferLength){
469  // copy data to output register and ack
470  TWDR = twi_masterBuffer[twi_masterBufferIndex++];
471  twi_reply(1);
472  }else{
473  twi_stop();
474  }
475  break;
476  case TW_MT_SLA_NACK: // address sent, nack received
477  twi_error = TW_MT_SLA_NACK;
478  twi_stop();
479  break;
480  case TW_MT_DATA_NACK: // data sent, nack received
481  twi_error = TW_MT_DATA_NACK;
482  twi_stop();
483  break;
484  case TW_MT_ARB_LOST: // lost bus arbitration
485  twi_error = TW_MT_ARB_LOST;
486  twi_releaseBus();
487  break;
488 
489  // Master Receiver
490  case TW_MR_DATA_ACK: // data received, ack sent
491  // put byte into buffer
492  twi_masterBuffer[twi_masterBufferIndex++] = TWDR;
493  case TW_MR_SLA_ACK: // address sent, ack received
494  // ack if more bytes are expected, otherwise nack
495  if(twi_masterBufferIndex < twi_masterBufferLength){
496  twi_reply(1);
497  }else{
498  twi_reply(0);
499  }
500  break;
501  case TW_MR_DATA_NACK: // data received, nack sent
502  // put final byte into buffer
503  twi_masterBuffer[twi_masterBufferIndex++] = TWDR;
504  case TW_MR_SLA_NACK: // address sent, nack received
505  twi_stop();
506  break;
507  // TW_MR_ARB_LOST handled by TW_MT_ARB_LOST case
508 
509 // // Slave Receiver
510 // case TW_SR_SLA_ACK: // addressed, returned ack
511 // case TW_SR_GCALL_ACK: // addressed generally, returned ack
512 // case TW_SR_ARB_LOST_SLA_ACK: // lost arbitration, returned ack
513 // case TW_SR_ARB_LOST_GCALL_ACK: // lost arbitration, returned ack
514 // // enter slave receiver mode
515 // twi_state = TWI_SRX;
516 // // indicate that rx buffer can be overwritten and ack
517 // twi_rxBufferIndex = 0;
518 // twi_reply(1);
519 // break;
520 // case TW_SR_DATA_ACK: // data received, returned ack
521 // case TW_SR_GCALL_DATA_ACK: // data received generally, returned ack
522 // // if there is still room in the rx buffer
523 // if(twi_rxBufferIndex < TWI_BUFFER_LENGTH){
524 // // put byte in buffer and ack
525 // twi_rxBuffer[twi_rxBufferIndex++] = TWDR;
526 // twi_reply(1);
527 // }else{
528 // // otherwise nack
529 // twi_reply(0);
530 // }
531 // break;
532 // case TW_SR_STOP: // stop or repeated start condition received
533 // // put a null char after data if there's room
534 // if(twi_rxBufferIndex < TWI_BUFFER_LENGTH){
535 // twi_rxBuffer[twi_rxBufferIndex] = '\0';
536 // }
537 // // sends ack and stops interface for clock stretching
538 // twi_stop();
539 // // callback to user defined callback
540 // twi_onSlaveReceive(twi_rxBuffer, twi_rxBufferIndex);
541 // // since we submit rx buffer to "wire" library, we can reset it
542 // twi_rxBufferIndex = 0;
543 // // ack future responses and leave slave receiver state
544 // twi_releaseBus();
545 // break;
546 // case TW_SR_DATA_NACK: // data received, returned nack
547 // case TW_SR_GCALL_DATA_NACK: // data received generally, returned nack
548 // // nack back at master
549 // twi_reply(0);
550 // break;
551 //
552 // // Slave Transmitter
553 // case TW_ST_SLA_ACK: // addressed, returned ack
554 // case TW_ST_ARB_LOST_SLA_ACK: // arbitration lost, returned ack
555 // // enter slave transmitter mode
556 // twi_state = TWI_STX;
557 // // ready the tx buffer index for iteration
558 // twi_txBufferIndex = 0;
559 // // set tx buffer length to be zero, to verify if user changes it
560 // twi_txBufferLength = 0;
561 // // request for txBuffer to be filled and length to be set
562 // // note: user must call twi_transmit(bytes, length) to do this
563 // twi_onSlaveTransmit();
564 // // if they didn't change buffer & length, initialize it
565 // if(0 == twi_txBufferLength){
566 // twi_txBufferLength = 1;
567 // twi_txBuffer[0] = 0x00;
568 // }
569 // // transmit first byte from buffer, fall
570 // case TW_ST_DATA_ACK: // byte sent, ack returned
571 // // copy data to output register
572 // TWDR = twi_txBuffer[twi_txBufferIndex++];
573 // // if there is more to send, ack, otherwise nack
574 // if(twi_txBufferIndex < twi_txBufferLength){
575 // twi_reply(1);
576 // }else{
577 // twi_reply(0);
578 // }
579 // break;
580 // case TW_ST_DATA_NACK: // received nack, we are done
581 // case TW_ST_LAST_DATA: // received ack, but we are done already!
582 // // ack future responses
583 // twi_reply(1);
584 // // leave slave receiver state
585 // twi_state = TWI_READY;
586 // break;
587 
588  // All
589  case TW_NO_INFO: // no state information
590  break;
591  case TW_BUS_ERROR: // bus error, illegal stop/start
592  twi_error = TW_BUS_ERROR;
593  twi_stop();
594  break;
595  }
596 }
597 
598 #endif
+
+ + + + diff --git a/extras/doc/html/twi__nonblock_8h_source.html b/extras/doc/html/twi__nonblock_8h_source.html new file mode 100644 index 000000000..53168a929 --- /dev/null +++ b/extras/doc/html/twi__nonblock_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: twi_nonblock.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
twi_nonblock.h
+
+
+
1 /*
2  * twi_nonblock.h
3  *
4  * Copyright 2012 Marije Baalman.
5  *
6  */
7 
8 #ifndef TWI_NONBLOCK_H_
9 #define TWI_NONBLOCK_H_
10 
11 // Added by TB2014 for Teensy 3 port
12 #if !(defined(__MK20DX128__) || defined(__MK20DX256__)) // hide all code from Teensy 3.1
13 
14 
15 #include "Arduino.h"
16 
17 #include <compat/twi.h>
18 
19 #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
20 #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))
21 
22 // --- twi reading variables
23  #ifndef TWI_FREQ
24  #define TWI_FREQ 100000L
25  #endif
26 
27  #ifndef TWI_BUFFER_LENGTH
28  #define TWI_BUFFER_LENGTH 32
29  #endif
30 
31  #define TWI_READY 0
32  #define TWI_PRE_MRX 1
33  #define TWI_MRX 2
34  #define TWI_PRE_MTX 3
35  #define TWI_MTX 4
36  #define TWI_SRX 5
37  #define TWI_STX 6
38 
39 static volatile uint8_t twi_state;
40 static volatile uint8_t twi_oldstate;
41 // static uint8_t twiint_masrw;
42 static uint8_t twi_slarw;
43 
44 static uint8_t twi_masterBuffer[TWI_BUFFER_LENGTH];
45 static volatile uint8_t twi_masterBufferIndex;
46 static uint8_t twi_masterBufferLength;
47 
48 static volatile uint8_t twi_error;
49 
50 #define BUFFER_LENGTH 32
51 static uint8_t rxBuffer[BUFFER_LENGTH];
52 static uint8_t rxBufferIndex = 0;
53 static uint8_t rxBufferLength = 0;
54 
55 static uint8_t txAddress = 0;
56 static uint8_t txBuffer[BUFFER_LENGTH];
57 static uint8_t txBufferIndex = 0;
58 static uint8_t txBufferLength = 0;
59 
60 static uint8_t transmitting;
61 
62 
63 void initialize_twi_nonblock();
64 
65 uint8_t twowire_requestFrom(uint8_t address, uint8_t quantity);
66 void twowire_beginTransmission( uint8_t address );
67 void twowire_send( uint8_t data );
68 uint8_t twowire_endTransmission(void);
69 
71 uint8_t twi_initiateReadFrom(uint8_t address, uint8_t length);
72 void twi_continueReadFrom();
73 
74 uint8_t twi_readMasterBuffer( uint8_t* data, uint8_t length );
75 
76 uint8_t twi_initiateWriteTo(uint8_t address, uint8_t* data, uint8_t length );
77 void twi_continueWriteTo();
78 
79 
80 void twi_reply(uint8_t ack);
81 void twi_stop(void);
82 void twi_releaseBus(void);
83 
85 uint8_t twi_readFromBlocking(uint8_t address, uint8_t* data, uint8_t length);
86 uint8_t twi_writeToBlocking(uint8_t address, uint8_t* data, uint8_t length, uint8_t wait);
87 
88 #endif
89 #endif
+
+ + + + diff --git a/extras/doc/html/umpah__huff_8h_source.html b/extras/doc/html/umpah__huff_8h_source.html new file mode 100644 index 000000000..0c8422c5a --- /dev/null +++ b/extras/doc/html/umpah__huff_8h_source.html @@ -0,0 +1,111 @@ + + + + + + + +Mozzi: umpah_huff.h Source File + + + + + + + + + + + + + + + + +
+
+ + + + + + + + +
+
Mozzi +  version 2016-11-26-23:16 +
+
sound synthesis library for Arduino
+
+ + + + + + +
+
+
+ + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ +
+
+
umpah_huff.h
+
+
+
1 // generated by Mozzi/extras/python/audio2huff.py
2 
3 #ifndef UMPAH_H_
4 #define UMPAH_H_
5 
6 #if ARDUINO >= 100
7 #include "Arduino.h"
8 #else
9 #include "WProgram.h"
10 #endif
11 
12 #include <avr/pgmspace.h>
13 
14 
15 #define UMPAH_SAMPLERATE 16384
16 #define UMPAH_SAMPLE_BITS 8
17 int16_t const __attribute__((section(".progmem.data"))) UMPAH_HUFFMAN[280] = {
18 277,169,67,0,1,64,46,28,25,7,4,0,-25,0,-26,0,-13,16,7,0,-31,4,0,-36,0,-39,7,0,20,4,0,-38,0,-35,0,-6,16,0,5,13,
19 10,0,13,7,0,31,4,0,39,0,-34,0,-10,16,0,4,13,10,4,0,16,0,-14,4,0,-15,0,15,0,-7,100,4,0,3,0,-2,94,52,49,43,
20 10,7,4,0,-37,0,36,0,-32,0,19,31,28,22,19,0,-43,16,0,44,13,10,4,0,46,0,-45,4,0,-46,0,-62,0,45,0,41,4,0,40,0,
21 37,0,17,4,0,9,0,8,0,-4,40,22,13,7,0,-16,4,0,32,0,-33,4,0,-18,0,-17,7,4,0,-19,0,18,0,-11,16,13,10,0,21,7,
22 4,0,-40,0,-41,0,35,0,-12,0,-8,106,4,0,-1,0,2,100,55,34,19,10,4,0,22,0,-23,4,0,23,0,-20,7,4,0,25,0,-21,0,10,
23 13,0,-9,10,4,0,-24,0,-29,4,0,28,0,24,19,16,0,6,13,0,11,10,7,0,34,4,0,38,0,-42,0,27,0,-5,43,40,19,7,4,0,
24 -22,0,-27,0,12,10,4,0,-30,0,29,4,0,30,0,26,19,16,13,0,-28,10,0,33,7,4,0,42,0,-44,0,43,0,14,0,7,0,-3,0,0
25 };
26 uint32_t const UMPAH_SOUNDDATA_BITS = 196860L;
27 byte const __attribute__((section(".progmem.data"))) UMPAH_SOUNDDATA[] = {
28 210,20,130,2,84,176,64,164,16,40,8,29,42,245,148,33,72,34,0,32,104,132,68,82,192,164,66,170,80,100,40,32,2,104,165,134,133,104,242,140,
29 60,194,228,96,20,116,96,79,41,213,219,49,158,86,27,9,182,8,180,122,58,107,156,155,98,8,22,112,138,113,114,152,128,140,117,60,130,208,161,20,
30 98,207,136,134,36,230,195,107,78,3,129,129,16,68,158,98,61,163,56,71,14,4,97,30,120,29,152,6,112,161,20,96,68,179,69,176,233,152,98,156,
31 7,3,20,205,62,98,196,122,156,66,45,169,206,34,204,38,19,200,206,99,48,14,144,28,109,104,93,194,233,140,51,163,166,58,5,197,176,183,6,176,
32 242,56,181,207,40,140,97,60,141,115,33,28,214,33,198,214,133,221,14,152,197,57,24,150,107,33,108,34,149,210,60,174,45,119,77,60,29,76,65,202,
33 100,121,12,10,8,243,18,33,112,186,119,1,200,196,186,25,24,179,142,214,8,227,39,43,91,58,158,15,43,93,140,71,58,83,4,192,178,16,90,209,
34 204,232,45,132,1,115,2,34,69,161,110,102,231,17,198,51,8,139,98,56,136,177,104,97,30,96,68,179,76,81,193,192,233,140,193,201,138,17,13,48,
35 34,60,97,104,69,186,179,207,43,8,112,121,5,166,134,0,192,188,68,49,67,150,97,137,112,14,133,179,52,73,139,17,228,22,132,115,139,16,242,30,
36 7,2,45,206,236,91,185,138,96,158,98,226,8,182,98,156,218,211,160,75,88,113,145,202,35,218,152,70,0,234,56,17,78,119,98,60,226,65,16,192,
37 139,136,6,41,138,112,49,76,209,38,4,91,145,202,34,154,153,226,44,194,99,17,206,115,49,20,113,35,144,243,100,32,53,163,145,201,173,8,34,230,
38 44,68,67,136,69,49,185,196,113,212,194,35,156,236,98,40,226,83,140,197,178,112,152,163,145,208,197,8,39,98,216,193,67,204,192,59,114,136,179,25,
39 224,242,181,218,132,113,196,167,25,230,219,53,173,14,88,38,41,152,57,22,198,9,173,96,138,20,206,17,206,44,33,22,97,28,8,183,43,65,30,233,
40 26,205,48,39,172,19,22,116,57,152,183,8,150,176,227,35,148,69,56,176,12,0,140,234,34,156,226,142,55,73,183,65,139,61,112,53,166,40,228,91,
41 51,71,152,177,30,41,204,121,12,103,129,22,194,22,8,231,48,163,0,98,196,136,134,36,116,204,116,193,0,114,98,140,23,158,98,61,163,152,71,14,
42 216,71,145,158,234,34,206,33,132,121,139,18,205,49,67,166,41,138,96,158,139,97,16,167,152,138,118,206,48,14,172,3,200,192,117,60,174,97,132,81,
43 230,37,154,214,135,44,17,108,193,29,53,167,32,243,2,35,212,90,60,130,198,123,91,96,14,15,35,153,160,142,48,47,48,76,80,229,152,98,88,167,
44 51,18,205,30,98,196,80,194,208,139,113,103,158,67,192,224,242,185,154,8,227,2,217,130,98,135,44,193,108,224,29,24,167,64,147,2,113,140,233,8,
45 225,99,156,242,179,199,7,148,90,20,35,140,9,162,220,196,142,68,7,78,193,29,58,119,33,173,104,71,138,116,143,35,171,17,173,176,135,103,145,204,
46 236,69,30,101,48,76,73,216,130,233,140,83,129,137,114,15,107,70,0,142,147,91,22,51,218,217,224,118,121,92,174,196,91,88,241,30,45,135,46,131,
47 18,224,98,152,151,32,185,138,48,0,214,30,87,22,113,136,48,12,45,109,202,100,35,143,56,143,22,204,157,6,36,232,195,49,46,19,209,108,45,222,
48 96,79,33,152,180,214,206,172,35,16,103,11,15,43,88,49,128,49,35,196,67,17,28,24,38,34,16,4,46,152,45,222,98,196,91,67,137,173,142,220,
49 238,154,231,28,30,83,205,160,143,49,69,17,12,68,122,204,49,29,152,57,116,195,4,73,129,17,195,11,71,148,88,207,60,172,33,216,139,114,187,48,
50 13,99,206,51,22,122,205,22,206,6,25,139,114,11,158,98,41,14,35,202,100,231,49,3,9,213,173,181,216,207,33,231,22,230,40,93,194,233,206,135,
51 71,78,232,23,49,34,42,121,158,70,54,115,91,58,176,26,219,157,213,173,158,100,17,198,37,144,136,98,35,163,20,196,78,17,11,167,22,229,22,194,
52 44,201,210,49,3,171,17,211,90,238,166,32,121,168,142,49,39,196,67,17,206,108,83,17,196,3,183,78,34,20,91,24,7,109,97,229,28,57,218,219,
53 156,118,121,90,193,140,3,90,18,34,24,147,128,128,233,196,17,209,138,22,227,207,51,200,70,185,136,56,152,93,52,70,113,49,6,184,161,22,121,182,
54 113,139,97,8,128,98,88,103,51,18,232,30,45,132,121,15,51,200,44,103,53,182,1,132,196,28,198,71,144,197,148,69,58,96,132,65,49,19,4,230,
55 233,196,65,230,40,71,16,243,107,98,198,187,166,176,142,166,32,230,50,17,102,44,167,25,137,61,16,29,59,20,230,233,220,131,197,177,128,20,214,30,
56 65,219,92,242,49,14,162,45,210,50,17,70,41,238,71,78,33,102,24,137,130,115,116,195,140,75,90,60,131,11,77,108,88,196,116,214,1,140,196,105,
57 204,40,196,12,8,241,28,98,142,78,67,18,225,97,152,161,110,125,173,8,178,53,141,109,213,156,98,12,243,9,229,56,140,132,112,182,67,140,196,157,
58 184,76,68,193,57,58,119,35,35,20,96,20,243,60,174,45,115,16,96,24,90,219,149,140,242,24,20,17,230,36,245,208,233,216,167,71,78,205,100,98,
59 68,80,30,103,145,169,174,233,167,131,9,136,57,88,196,113,139,3,5,211,178,102,24,140,28,142,6,34,16,71,152,163,140,15,49,22,212,215,107,102,
60 19,11,91,107,153,8,182,178,35,197,177,219,52,196,177,88,102,41,200,122,96,76,3,197,166,182,209,136,98,50,99,28,58,107,156,204,242,53,147,140,
61 91,50,16,93,57,204,228,233,130,3,35,20,113,207,49,28,100,206,107,102,19,11,91,107,177,136,182,178,113,152,182,78,19,18,114,58,24,145,4,236,
62 91,28,115,204,71,49,179,143,33,132,194,121,90,230,66,44,90,65,30,96,69,220,38,40,230,114,49,44,195,230,41,154,7,152,183,106,114,152,3,11,
63 0,69,181,220,68,81,196,65,110,98,199,186,5,177,205,134,45,132,3,214,180,96,149,172,48,14,220,162,44,118,35,30,70,3,81,228,103,1,128,56,
64 133,204,19,204,232,193,48,34,8,132,243,114,26,214,11,119,108,225,30,59,96,24,6,123,168,138,114,140,113,181,130,93,6,44,116,197,107,78,3,211,
65 22,205,53,172,22,237,25,198,0,118,120,17,204,1,97,128,115,12,45,207,54,221,2,216,116,197,49,76,17,9,139,114,54,233,8,161,76,225,22,44,
66 60,8,182,3,168,142,115,59,56,204,89,92,38,36,236,232,233,140,51,179,18,225,121,139,22,238,197,161,28,56,97,8,182,19,168,142,114,138,17,231,
67 152,151,35,90,29,48,69,179,48,116,96,76,17,226,208,139,6,33,136,25,24,93,52,194,212,121,89,195,8,166,176,214,104,182,16,177,76,83,12,66,
68 45,156,38,158,103,24,167,41,128,117,96,8,230,3,169,128,114,138,22,237,97,172,211,22,122,193,22,204,49,211,90,112,137,107,14,50,57,76,3,83,
69 0,69,136,206,162,57,174,40,71,186,70,179,76,9,235,128,197,157,7,77,105,152,217,129,114,10,22,140,17,99,156,91,158,12,98,221,156,100,96,186,
70 87,9,139,100,197,22,199,49,203,90,102,54,121,185,8,229,22,236,108,35,0,99,117,17,108,1,132,91,16,120,138,107,156,220,142,102,99,20,90,116,
71 29,139,66,32,57,78,54,166,33,198,97,48,156,110,118,161,16,90,87,65,230,125,192,96,78,3,163,205,192,125,210,116,92,166,9,155,8,71,142,12,
72 98,41,132,100,45,217,200,228,56,143,179,15,51,129,204,243,96,178,107,25,168,229,56,221,176,132,123,168,224,71,176,12,142,55,42,186,26,195,92,13,
73 104,244,114,214,142,130,76,91,48,142,147,161,141,156,34,24,207,7,27,61,196,227,115,43,145,210,30,32,30,99,163,147,88,204,61,115,24,34,88,130,
74 46,99,116,215,102,102,32,234,65,22,194,41,130,45,15,96,152,19,209,208,182,57,9,49,108,192,116,156,134,78,115,140,112,117,22,236,6,163,141,156,
75 174,67,136,123,48,243,29,28,207,55,0,187,164,232,43,148,68,104,207,22,238,166,49,30,120,99,22,237,112,17,5,161,226,3,164,58,57,53,142,3,
76 183,73,194,130,211,145,219,92,68,28,30,12,22,123,171,145,204,208,65,48,37,98,139,102,67,161,108,115,30,98,217,147,137,154,209,206,45,197,134,49,
77 20,117,50,17,76,40,143,98,29,152,44,71,3,161,158,205,98,179,206,49,118,32,143,86,33,198,234,192,114,51,199,14,129,104,200,65,107,46,3,204,
78 92,228,96,78,135,109,96,128,107,153,200,71,57,198,212,97,22,231,87,19,141,136,71,35,149,177,4,90,61,97,156,71,65,201,196,32,54,229,102,140,
79 196,17,26,132,99,140,194,212,113,179,198,114,57,94,32,58,76,142,71,152,228,92,192,157,10,121,179,26,11,78,17,219,61,208,192,28,58,26,230,110,
80 23,53,152,113,50,97,156,71,35,131,148,64,23,115,152,47,48,136,224,113,60,174,197,30,81,218,8,166,16,150,107,153,145,209,172,16,139,152,19,147,
81 218,198,8,206,103,67,83,8,68,49,142,204,22,19,183,35,94,225,56,153,48,206,33,208,232,226,96,143,115,58,44,65,17,216,140,113,142,221,78,51,
82 195,71,35,156,162,11,149,147,128,90,57,142,133,167,0,145,104,64,35,57,194,198,194,102,152,76,110,134,35,24,130,230,87,3,164,105,205,172,59,59,
83 107,14,70,186,76,18,53,220,38,71,135,35,171,169,130,97,20,34,30,13,17,24,3,166,105,225,130,193,60,51,71,76,1,16,214,3,145,217,225,154,
84 56,58,184,89,237,66,3,56,142,1,105,179,161,196,122,33,22,142,67,220,172,192,98,56,76,196,102,107,171,171,144,194,237,208,194,71,11,156,251,129,
85 156,58,56,51,152,167,218,226,5,136,232,118,35,57,5,142,172,211,11,183,67,61,89,140,230,206,66,208,185,235,164,112,108,226,97,145,156,193,106,103,
86 136,6,51,171,49,128,226,193,107,140,197,114,188,228,230,61,29,51,152,98,236,65,4,73,132,227,123,136,142,81,66,44,205,4,80,224,214,107,8,75,
87 21,204,46,122,113,14,91,56,142,128,206,96,187,97,8,34,195,27,132,70,99,16,89,228,96,181,219,58,57,79,71,44,227,152,187,93,130,107,9,194,
88 67,11,145,141,213,200,56,51,116,30,0,64,98,54,197,107,136,78,13,115,160,187,157,192,87,59,49,219,9,152,234,97,102,30,5,140,23,59,70,43,
89 153,14,103,16,147,179,136,244,72,180,115,179,156,14,216,66,3,136,225,154,56,118,205,49,160,136,117,61,17,7,14,7,8,225,194,197,58,185,25,24,
90 93,10,120,16,5,134,22,9,224,118,224,115,153,48,217,211,147,148,248,229,202,57,100,206,97,189,136,193,24,240,32,49,152,220,35,134,167,64,140,48,
91 130,194,53,152,196,61,58,49,14,103,172,70,43,108,246,96,30,28,38,99,135,64,177,169,208,35,12,204,103,163,21,156,36,116,230,59,62,45,14,138,
92 230,58,10,115,177,69,140,6,9,132,112,193,103,177,177,90,227,28,153,198,142,153,194,19,215,59,20,249,225,154,61,196,192,54,49,228,160,139,51,52,
93 227,49,154,204,115,137,28,139,76,135,156,66,20,115,28,134,115,176,88,196,97,0,118,44,16,12,46,216,44,32,97,185,196,156,26,231,167,173,115,144,
94 150,123,5,4,97,4,80,225,208,212,198,232,49,138,16,79,5,96,176,143,157,24,131,145,11,16,230,61,136,197,176,152,46,196,102,11,168,225,130,35,
95 49,177,88,131,28,153,200,33,22,132,159,22,142,202,230,29,12,215,58,25,48,24,34,193,96,130,59,104,232,49,182,205,117,56,8,130,193,1,194,226,
96 205,97,186,179,79,157,92,35,24,88,46,167,86,24,140,234,116,98,59,57,51,144,116,206,30,122,206,28,143,115,157,17,128,224,20,117,102,49,186,136,
97 35,179,54,97,132,28,12,6,206,140,33,113,211,8,224,201,132,195,52,240,193,83,24,128,102,226,32,139,29,179,12,36,98,176,138,115,98,31,61,115,
98 158,137,107,156,1,136,114,118,192,98,139,14,172,83,11,169,201,158,100,112,103,16,237,202,246,76,225,113,236,243,147,102,55,8,151,98,41,180,17,104,
99 36,71,10,62,34,11,15,184,24,7,207,89,194,230,179,143,85,174,112,118,194,58,56,152,216,163,135,23,0,140,41,138,192,67,147,60,120,229,158,33,
100 100,194,57,26,192,112,41,141,152,209,196,64,106,118,32,14,21,130,35,61,134,192,62,112,97,14,78,216,7,35,79,12,53,17,156,6,67,134,40,236,
101 88,195,60,25,156,153,234,112,107,154,118,215,62,219,148,236,25,195,167,108,67,152,176,70,58,14,197,142,3,24,204,195,171,98,8,236,230,225,106,16,
102 68,3,33,16,228,100,34,31,113,112,140,234,193,117,117,57,30,24,206,12,65,135,45,114,158,181,207,159,115,142,94,194,58,41,133,192,236,118,193,106,
103 106,96,142,197,49,76,40,195,96,15,56,30,15,79,79,7,33,230,22,41,76,108,17,133,140,198,54,54,8,237,163,12,70,3,155,8,209,11,61,147,
104 38,120,228,214,17,205,88,7,67,51,11,12,118,59,58,30,28,71,44,67,51,215,42,159,114,154,219,92,244,211,195,12,163,183,9,90,11,115,77,17,
105 200,118,34,133,30,185,5,135,103,67,192,185,246,32,189,206,33,20,194,56,49,152,78,66,193,97,208,198,100,116,17,136,115,96,26,57,97,31,23,96,
106 14,68,158,14,136,99,98,145,213,152,102,102,204,113,35,4,112,140,51,11,103,6,1,217,233,224,224,60,194,114,67,9,209,161,141,138,212,226,197,29,
107 153,156,143,3,14,89,232,118,196,18,61,206,202,215,23,104,196,16,184,176,7,35,131,25,192,198,100,116,49,163,128,118,118,204,99,96,136,34,153,174,
108 1,70,8,133,219,145,237,76,19,49,97,200,234,226,58,97,59,61,98,0,187,17,179,236,243,179,88,3,168,140,114,24,112,195,99,113,97,139,29,176,
109 199,0,116,58,182,112,58,157,136,78,167,6,70,51,161,163,134,26,186,177,76,218,152,174,34,152,99,176,57,8,197,28,176,4,178,97,11,182,194,16,
110 128,140,112,104,99,57,184,142,206,102,55,17,211,0,204,237,136,49,246,114,26,215,30,107,8,114,241,195,21,238,196,70,205,48,13,139,136,164,61,114,
111 25,178,97,152,207,178,97,9,43,157,144,166,120,132,204,194,112,99,117,57,139,12,142,70,49,142,102,24,228,240,36,236,240,46,36,70,29,60,198,114,
112 1,99,20,102,54,9,152,167,3,141,134,56,121,192,194,60,244,194,118,46,97,56,54,99,57,0,224,232,102,234,115,117,113,56,29,90,14,143,0,118,
113 194,53,147,60,121,172,246,74,194,59,51,96,30,139,12,39,163,135,83,129,140,81,208,112,219,21,168,230,32,140,225,16,20,68,58,12,228,100,100,204,
114 35,137,201,213,212,66,35,49,157,176,133,29,179,202,201,128,60,123,0,245,230,17,210,152,206,109,29,78,76,108,103,71,81,71,33,194,28,204,99,199,
115 70,51,211,179,25,192,120,224,228,142,172,49,154,152,102,110,216,110,35,29,7,8,58,58,154,118,120,30,37,128,46,243,192,132,134,17,209,152,224,224,
116 44,22,14,78,172,103,172,7,108,152,131,54,215,71,179,207,148,194,58,43,136,128,108,227,30,124,192,9,16,139,120,132,64,99,100,112,48,143,109,158,
117 36,24,140,154,48,15,76,204,99,150,167,19,131,171,179,129,141,71,39,82,157,136,195,207,136,199,109,157,71,72,59,57,43,83,12,81,155,20,200,102,
118 27,138,28,135,98,71,67,177,115,209,192,132,121,140,114,134,49,208,161,217,193,141,196,116,234,100,58,49,144,114,97,65,115,195,98,88,2,81,132,124,
119 83,9,147,25,224,92,118,99,61,28,49,142,135,10,115,113,62,224,118,195,16,85,154,204,136,135,50,8,45,153,176,218,53,14,71,110,39,98,49,152,
120 187,1,89,48,13,30,35,31,121,212,237,12,99,146,14,206,6,109,71,6,167,103,7,85,29,14,222,57,28,31,59,28,30,159,117,29,54,44,57,88,
121 206,131,25,157,12,133,28,220,84,116,56,67,211,169,167,204,35,222,97,101,58,158,140,59,29,25,139,7,66,198,161,9,212,205,145,225,163,108,242,21,
122 158,84,60,31,142,7,72,102,32,54,243,140,121,232,138,108,116,34,41,235,21,140,249,217,132,73,88,2,69,30,25,59,58,158,153,11,7,45,70,67,
123 145,96,194,17,216,30,152,222,200,234,125,179,24,185,71,98,16,22,28,6,50,57,187,24,232,101,57,53,26,112,22,15,59,29,178,30,59,61,109,212,
124 115,117,29,52,113,28,177,153,8,93,90,30,142,20,92,198,81,230,22,222,120,18,167,129,230,98,48,241,97,212,248,236,88,46,56,118,122,59,41,204,
125 200,114,193,6,96,130,241,17,138,247,65,232,206,9,152,233,169,168,92,198,212,124,194,208,121,134,60,194,37,179,171,34,142,14,213,212,66,41,196,114,
126 100,100,58,113,20,57,22,68,46,173,158,186,139,139,184,136,71,181,28,30,198,115,83,35,155,70,135,54,49,135,78,160,122,56,67,231,83,91,48,159,
127 67,24,186,142,207,69,11,4,38,77,71,162,195,33,115,171,65,236,1,141,97,74,35,54,131,131,212,50,58,55,116,31,100,34,31,59,102,148,93,138,
128 236,121,232,224,211,79,6,169,224,72,163,171,39,98,195,211,35,33,203,83,65,200,177,78,221,81,144,225,177,35,134,79,29,158,220,71,74,100,115,20,
129 40,230,236,135,51,34,156,24,219,16,184,143,100,59,100,104,236,236,29,79,70,22,8,76,204,132,45,77,15,93,72,118,59,159,49,154,217,141,178,157,
130 79,169,213,145,152,225,147,80,176,93,196,204,245,196,7,76,103,206,131,28,216,106,224,57,171,128,237,161,209,12,135,46,218,142,197,140,108,135,13,15,
131 142,0,248,225,227,199,3,205,117,23,65,97,233,28,68,46,204,132,38,77,4,45,74,122,226,135,162,193,34,238,34,227,220,68,45,177,156,16,204,224,
132 71,103,7,98,132,44,100,59,117,159,29,148,72,224,73,71,7,238,167,100,106,61,104,100,118,198,236,92,88,40,248,224,130,78,179,78,166,188,112,201,
133 28,71,47,20,197,109,226,1,163,216,40,37,134,237,177,8,177,226,76,102,161,213,181,28,31,24,88,46,209,140,244,205,161,235,25,15,92,98,226,199,
134 143,117,18,107,171,34,184,157,129,144,133,93,142,134,24,116,236,7,38,69,61,113,108,93,196,120,241,96,187,197,135,96,226,118,41,140,236,204,204,237,
135 168,97,119,16,100,234,81,46,166,154,59,18,131,179,228,117,100,237,196,92,200,200,237,140,99,214,55,142,93,178,56,12,58,29,12,115,59,20,112,123,
136 177,9,12,142,204,140,207,184,180,62,234,67,238,168,61,213,182,197,135,202,226,47,106,61,24,200,245,163,67,211,33,143,90,167,110,38,178,113,30,61,
137 169,147,108,103,168,102,33,87,98,17,154,8,76,212,237,142,201,196,163,197,143,53,212,73,69,140,129,168,92,140,103,174,221,139,153,52,23,113,33,241,
138 221,177,219,222,234,36,174,44,144,204,114,132,57,149,14,147,78,99,26,57,50,53,147,137,166,186,182,142,163,212,88,200,102,49,118,134,103,102,99,29,
139 177,128,187,81,79,184,182,37,196,123,218,143,163,25,218,153,158,140,208,66,208,135,166,115,179,39,178,106,18,61,168,121,173,66,232,198,118,166,66,226,
140 140,197,204,197,11,181,43,39,20,62,44,53,183,22,202,226,60,28,79,145,168,251,67,38,70,98,133,216,192,236,201,231,110,217,30,180,61,23,20,33,
141 18,40,66,142,206,198,118,46,102,209,147,81,7,184,196,184,189,183,17,47,106,62,141,66,224,100,118,51,179,183,99,29,153,3,35,36,62,198,104,246,
142 49,230,153,31,121,144,188,204,244,141,15,90,16,93,218,139,177,207,181,60,75,139,111,106,31,99,62,12,98,227,59,23,118,41,145,145,15,177,128,151,
143 20,108,88,107,218,132,149,140,94,208,246,163,156,116,71,136,90,60,92,201,226,90,141,123,136,155,136,245,50,62,51,182,77,5,11,187,32,185,148,251,
144 27,196,177,182,107,80,242,153,31,153,139,145,161,216,161,142,218,40,187,180,100,100,104,243,38,219,99,30,86,54,64,100,200,134,108,154,10,100,102,70,
145 70,64,125,140,162,88,205,53,168,73,90,143,169,145,241,140,217,52,104,201,217,25,25,217,25,182,201,217,246,77,5,196,180,59,43,177,117,104,200,83,
146 67,238,198,62,198,3,216,208,75,25,166,177,137,41,144,249,155,37,118,46,40,80,187,66,50,51,159,50,40,243,35,91,50,30,243,35,232,237,144,59,
147 23,32,161,113,68,23,51,159,50,65,44,102,154,198,217,88,196,204,143,169,155,33,154,50,118,67,230,106,60,202,37,141,230,177,182,83,33,232,237,148,
148 99,186,158,172,236,81,89,59,40,246,55,154,198,105,88,196,204,135,169,155,33,154,50,104,70,70,96,124,204,162,76,141,109,141,183,153,137,67,51,224,
149 209,145,5,50,20,172,157,207,187,67,230,70,137,50,18,243,49,40,102,125,93,159,24,81,246,131,31,51,83,230,72,36,201,237,153,26,243,33,40,100,
150 61,93,159,25,161,241,67,31,118,12,157,161,246,141,143,104,60,75,67,239,104,126,208,249,26,31,104,49,243,53,30,103,18,100,86,204,155,121,144,146,
151 153,143,187,62,162,143,140,49,246,128,61,220,121,155,219,50,108,211,49,40,236,125,219,34,12,124,132,62,40,15,153,160,147,50,182,100,247,153,54,134,
152 99,193,216,245,104,124,97,143,187,83,230,113,38,104,217,145,175,50,18,142,199,218,31,2,11,144,5,198,139,180,65,238,202,36,200,210,153,154,134,98,
153 65,216,242,10,30,48,199,197,40,247,104,37,217,91,51,52,211,54,202,236,77,217,245,104,124,131,31,20,163,218,71,153,189,183,102,154,102,36,174,196,
154 218,15,86,135,198,20,125,162,143,119,18,102,86,204,222,105,153,165,51,19,118,37,90,15,24,97,226,148,123,72,247,111,18,209,182,218,15,53,160,244,
155 20,125,69,15,32,195,218,16,123,176,18,238,217,155,205,51,53,230,98,81,216,240,20,60,132,30,49,15,180,1,238,209,183,111,52,204,215,187,109,29,
156 143,1,67,212,99,227,40,241,64,61,218,54,102,247,187,52,166,109,163,177,32,40,121,6,30,49,7,180,1,46,209,179,50,154,102,105,93,137,180,30,
157 2,143,169,25,16,15,141,30,41,4,187,121,166,102,149,219,119,98,65,160,146,12,60,82,137,20,2,90,32,151,101,109,217,175,118,218,52,18,2,132,
158 168,194,70,81,34,128,75,68,109,161,77,104,107,221,137,70,130,64,80,146,12,60,98,9,20,2,93,163,109,10,107,183,189,219,104,236,72,52,18,162,
159 132,140,162,69,0,150,136,37,163,219,104,105,173,4,148,80,148,20,37,70,30,49,4,138,1,46,208,214,136,107,179,74,237,180,104,220,80,149,24,121,
160 8,60,80,9,21,109,161,77,118,247,187,109,26,55,20,37,70,30,66,15,20,2,69,91,104,83,93,189,238,219,70,141,218,9,1,132,144,130,69,3,
161 98,129,182,136,107,183,149,161,168,41,184,161,234,65,234,67,227,0,241,162,90,20,214,133,123,67,81,163,96,40,74,138,18,66,9,25,68,138,182,208,
162 166,180,123,218,26,86,141,197,9,1,66,72,65,35,40,145,86,218,35,109,30,246,134,149,163,113,66,84,97,42,48,145,129,177,86,218,33,173,30,246,
163 143,43,67,98,155,1,66,72,48,145,129,177,128,72,164,109,163,205,20,107,218,9,140,216,12,37,70,18,50,137,21,109,162,26,208,175,104,242,180,110,
164 41,184,161,42,65,36,81,34,173,138,67,90,21,237,13,65,70,197,54,3,9,82,9,25,68,140,13,138,67,69,21,237,30,81,70,197,55,20,37,70,
165 18,69,108,84,209,83,90,21,237,30,86,141,160,166,192,97,32,65,36,1,35,91,26,219,66,188,83,202,208,212,20,216,12,218,145,178,43,99,3,98,
166 144,209,72,107,71,189,161,168,41,184,161,42,48,146,43,99,3,98,166,138,43,197,60,162,141,65,70,198,108,6,18,69,108,96,108,85,182,133,120,167,
167 149,161,168,40,208,25,181,25,178,43,99,3,99,91,20,87,140,242,138,52,162,155,140,216,12,36,138,216,192,216,211,69,35,197,21,237,13,65,70,198,
168 109,72,218,171,100,86,198,154,50,60,81,74,40,212,20,108,83,96,48,146,43,100,3,70,154,50,60,83,202,41,229,20,108,102,192,102,212,141,144,13,
169 24,13,20,143,20,82,138,122,12,108,102,192,141,170,182,64,108,147,70,71,138,121,69,60,162,141,140,216,12,218,145,178,43,99,1,163,35,198,41,70,
170 122,12,108,99,64,141,145,77,32,26,52,209,72,104,162,148,103,160,207,65,141,2,26,4,108,128,104,211,70,71,140,82,140,82,138,54,49,170,67,84,
171 141,145,77,36,209,145,227,20,163,60,163,61,6,54,67,64,141,144,13,32,26,50,60,98,148,83,208,103,198,54,51,106,166,170,182,52,209,145,227,35,
172 197,20,162,158,131,26,4,53,84,213,86,198,154,52,209,145,226,158,131,61,6,54,67,85,77,85,108,96,52,107,198,66,138,41,70,124,134,129,13,5,
173 53,64,210,77,25,30,50,60,98,148,103,160,198,200,104,16,213,83,72,15,37,227,35,198,41,70,122,12,108,99,64,134,170,154,64,52,107,198,41,70,
174 41,70,124,143,144,208,33,170,6,144,13,37,227,20,163,20,163,62,49,160,71,129,13,85,52,128,104,211,70,71,140,82,144,168,71,200,104,41,170,166,
175 168,26,75,200,133,24,165,24,168,51,228,120,43,193,77,32,26,73,163,35,198,66,140,84,25,242,62,67,85,77,32,26,75,200,133,34,20,133,66,62,
176 67,64,134,168,61,65,228,7,146,82,33,70,42,12,249,13,5,53,65,234,6,146,242,35,198,41,70,41,70,122,17,242,26,170,105,0,210,3,201,120,
177 200,82,21,8,249,31,33,170,166,170,154,64,121,47,24,165,24,168,71,200,249,13,5,120,41,164,188,136,82,33,72,84,25,242,60,8,240,87,170,154,
178 75,201,121,16,164,42,16,168,71,200,104,43,193,77,80,122,222,68,40,197,66,21,6,124,143,5,122,131,212,13,37,227,20,163,21,8,89,31,35,193,
179 77,85,52,151,145,10,68,41,10,132,124,143,171,193,94,160,245,7,146,82,74,68,40,197,66,62,71,213,234,15,91,201,121,16,164,42,16,168,71,213,
180 224,175,5,122,131,201,121,37,34,20,133,66,22,175,5,122,131,212,30,75,200,133,34,20,133,169,106,240,87,130,154,75,201,121,16,164,66,144,178,62,
181 71,129,30,10,245,7,168,60,136,82,33,72,84,33,106,240,87,128,61,111,89,86,242,34,16,168,66,200,240,87,168,61,65,228,188,136,82,33,72,90,
182 150,165,171,212,30,160,245,148,136,82,21,8,84,35,228,125,94,160,245,7,146,242,74,68,66,21,8,90,150,175,5,122,131,214,85,149,81,20,168,71,
183 213,224,175,0,40,1,84,30,73,72,136,168,132,124,143,169,64,30,160,245,7,145,10,68,41,10,132,42,17,224,175,5,120,3,212,30,68,41,16,164,
184 68,82,200,240,82,128,20,0,171,42,202,68,41,10,132,45,75,87,130,188,1,235,122,202,168,82,34,42,33,10,10,80,2,128,21,101,89,85,17,81,
185 20,181,45,75,87,168,61,101,89,85,17,81,20,181,45,75,87,168,61,64,171,41,17,21,16,133,169,106,90,188,21,235,42,202,178,170,34,149,8,250,
186 188,0,160,5,0,42,209,104,168,132,42,16,181,120,1,64,10,0,245,148,136,82,34,41,106,90,188,0,160,5,0,122,202,178,170,33,11,82,200,240,
187 82,128,20,0,171,42,202,68,41,11,82,212,181,120,1,66,85,66,172,170,136,168,132,45,74,10,80,2,172,171,42,202,168,138,136,165,169,106,80,2,
188 128,61,101,89,85,17,81,20,181,45,94,10,245,149,104,178,173,21,17,81,20,160,5,0,42,202,178,172,170,136,168,138,88,22,175,0,40,1,86,139,
189 41,17,21,42,90,150,5,0,40,1,64,10,168,138,136,168,138,90,150,5,0,40,1,66,85,149,101,84,169,106,80,2,128,21,104,20,84,69,68,84,
190 69,74,150,165,171,192,10,18,170,32,74,168,138,149,40,2,0,20,0,171,42,202,178,170,34,162,41,106,80,2,128,20,37,89,85,17,81,20,181,45,
191 75,4,129,86,85,162,162,42,34,165,75,82,128,20,0,171,42,208,40,8,138,136,165,129,96,80,2,173,2,139,69,68,84,169,106,88,36,10,178,172,
192 170,136,168,138,90,150,5,0,40,1,66,129,42,202,168,138,149,45,74,0,80,2,173,2,138,136,168,138,136,169,4,169,66,129,40,74,168,128,136,169,
193 4,169,64,16,0,160,5,89,86,128,144,72,36,10,0,80,2,133,2,85,149,81,21,17,75,82,193,32,129,64,160,81,81,21,32,149,40,1,64,10,
194 0,85,149,104,20,4,69,44,10,0,88,20,0,171,69,68,90,42,34,164,18,9,2,128,21,101,84,69,68,84,69,45,75,4,129,66,129,64,160,80,
195 18,9,82,212,160,5,0,64,160,81,81,21,17,82,9,4,130,4,161,64,68,10,2,34,164,18,165,0,64,2,172,171,64,160,36,18,9,2,128,20,
196 0,161,64,160,34,42,34,150,9,4,130,65,2,129,64,162,164,18,165,0,40,1,64,10,0,85,160,80,18,8,128,144,44,18,5,0,64,162,164,40,
197 169,4,130,65,2,129,64,149,82,9,4,129,96,144,40,1,66,129,64,160,36,18,9,82,128,20,0,171,64,160,81,82,9,4,130,65,32,80,2,132,
198 170,136,9,4,130,65,0,18,8,20,90,5,2,128,144,72,36,18,5,0,40,80,40,8,138,136,9,4,130,65,32,129,64,160,81,82,9,82,128,36,
199 18,8,20,10,2,65,17,75,4,129,66,144,64,160,80,48,162,160,2,0,20,40,18,130,32,34,2,65,32,144,72,32,80,40,20,84,133,2,138,144,
200 72,20,40,0,80,2,133,2,128,144,72,36,18,9,2,133,2,129,69,68,84,130,65,0,16,1,2,129,77,1,16,18,9,2,128,36,16,40,20,10,
201 5,21,32,88,36,19,64,148,40,9,4,130,65,0,16,1,32,129,64,162,165,82,9,4,130,65,52,208,37,10,2,65,32,144,72,36,16,40,20,84,
202 133,3,4,0,64,4,0,40,80,18,9,4,64,42,1,114,160,23,64,160,81,104,184,106,128,168,10,129,64,162,193,117,193,52,75,202,133,66,149,16,
203 180,64,68,10,46,176,88,45,66,11,80,5,0,88,46,9,2,162,61,10,105,94,217,94,242,148,180,134,176,80,82,85,65,64,21,64,128,4,0,88,
204 42,0,32,82,133,68,121,77,52,166,154,243,94,143,45,42,128,160,170,10,160,64,85,85,34,128,192,4,130,192,16,0,160,136,136,84,123,208,215,188,
205 211,74,107,209,229,164,17,86,69,2,2,145,64,138,170,170,160,170,0,176,194,128,137,41,111,42,26,242,154,247,154,242,189,16,188,0,21,64,128,170,
206 170,64,82,2,144,21,106,16,8,97,64,42,94,133,52,175,52,215,182,247,188,165,46,138,0,160,164,5,32,42,129,20,8,170,170,10,0,1,12,48,
207 68,149,10,242,189,178,154,107,222,105,74,84,68,13,106,73,20,21,85,84,8,160,64,85,0,88,44,21,20,16,37,149,229,121,175,108,211,91,52,166,
208 189,10,152,0,42,129,21,85,85,84,8,10,64,85,0,80,80,5,10,132,1,1,10,134,189,237,182,216,147,91,109,239,122,34,0,2,168,12,10,64,
209 82,2,144,20,128,170,4,80,34,130,128,40,2,224,148,123,222,219,98,79,137,18,60,211,77,42,32,0,16,20,138,66,1,8,4,32,17,85,84,21,
210 65,85,85,85,84,20,33,222,134,182,104,241,227,207,159,108,75,111,41,64,0,128,65,128,132,85,34,169,0,132,1,148,8,160,64,82,0,16,1,65,
211 67,162,61,179,68,143,30,124,120,241,237,154,106,36,20,8,69,25,84,101,82,42,145,84,138,164,0,80,85,82,40,17,65,66,8,146,189,237,182,36,
212 120,241,227,196,137,109,239,44,36,85,33,20,138,164,85,34,144,138,66,42,168,40,1,21,72,69,85,0,208,165,43,102,182,60,120,243,226,71,137,109,
213 239,68,170,169,20,132,82,16,8,64,33,20,132,85,85,80,85,85,85,82,2,172,41,71,188,209,45,143,30,60,248,241,45,182,87,164,0,138,163,1,
214 8,4,85,33,20,132,81,149,72,170,64,34,129,8,4,90,130,2,60,166,182,216,243,226,89,15,30,36,75,205,68,130,169,8,164,34,145,84,138,164,
215 85,34,144,138,164,2,16,8,69,33,21,64,1,10,134,137,108,249,241,226,231,199,159,109,179,81,32,170,50,144,101,82,42,144,20,138,164,82,17,84,
216 128,66,0,202,163,17,72,160,180,67,77,108,121,243,236,153,50,62,60,75,101,42,40,40,196,32,196,81,149,72,170,170,164,5,80,34,169,8,65,136,
217 65,136,66,0,6,134,189,177,227,207,139,159,100,200,120,246,222,244,0,81,136,65,136,49,20,138,164,80,32,42,168,17,84,101,32,202,65,136,66,2,
218 134,143,41,162,91,62,200,251,38,67,207,137,52,210,234,66,12,49,6,33,8,69,34,129,1,84,1,64,21,72,69,24,98,12,50,170,193,10,134,154,
219 216,241,227,217,50,62,124,123,98,94,136,10,163,16,130,136,66,17,72,10,64,85,2,40,17,64,138,4,34,140,66,17,84,2,133,121,173,137,30,200,
220 251,38,67,199,143,53,229,128,16,98,12,49,6,82,42,170,130,168,42,170,168,40,41,20,131,12,65,136,164,8,20,165,109,177,39,207,178,100,124,249,
221 246,219,53,16,21,72,48,196,24,132,85,32,42,168,42,170,128,16,8,66,16,98,12,49,8,170,0,136,87,154,36,120,243,236,153,50,62,60,73,175,
222 124,0,131,16,98,16,132,82,42,170,129,1,85,64,138,163,40,195,40,195,40,202,160,25,74,246,196,137,62,200,248,185,241,231,219,53,229,130,144,132,
223 24,132,34,145,85,85,84,20,128,69,85,34,140,66,12,48,195,16,132,0,161,94,219,99,207,178,100,46,200,249,241,45,154,137,34,144,98,12,50,144,
224 138,170,10,160,69,85,32,17,84,138,65,136,48,195,16,138,161,66,154,104,147,231,217,11,178,100,200,120,150,222,136,160,65,136,65,136,66,41,21,72,
225 160,64,85,0,85,82,16,130,136,48,162,12,66,40,64,175,53,177,227,217,11,139,139,178,62,61,179,94,128,4,24,130,134,32,196,34,144,21,64,128,
226 170,0,0,164,82,16,131,12,65,134,33,21,66,133,52,72,147,226,236,142,197,217,31,30,217,165,73,8,65,134,24,98,16,138,69,5,80,80,80,0,
227 5,82,16,131,12,48,195,12,50,170,232,243,91,30,201,144,184,187,33,115,226,68,188,168,10,65,134,24,81,6,34,145,85,84,1,64,22,160,4,33,
228 6,33,6,32,196,33,20,0,10,87,182,36,123,38,66,231,108,143,159,108,215,234,66,12,48,195,16,138,64,32,42,130,130,130,168,42,169,20,131,16,
229 97,68,20,66,40,80,166,182,36,249,243,177,113,113,118,67,196,154,82,130,144,130,136,40,132,25,84,128,170,160,64,85,0,85,82,16,131,16,131,40,
230 196,34,172,10,87,137,18,61,147,38,66,236,135,159,109,239,64,2,16,131,12,66,17,85,85,65,84,20,20,20,8,170,49,8,49,8,49,20,128,0,
231 136,83,77,18,124,123,38,76,135,159,109,183,151,85,32,196,32,202,69,85,5,5,80,80,80,5,5,82,16,98,16,132,82,2,134,87,189,177,35,207,
232 159,30,124,120,150,205,42,64,8,69,24,138,164,5,80,80,5,0,0,0,5,82,16,132,24,132,34,168,6,133,121,173,182,60,120,241,226,68,182,105,
233 74,144,85,33,8,164,85,85,5,0,88,44,20,1,85,85,85,85,85,84,0,17,16,166,154,219,98,71,137,108,73,175,121,104,170,4,34,145,85,64,
234 0,1,64,2,0,0,160,170,4,85,34,130,128,7,43,222,105,162,68,182,37,179,77,121,83,5,82,41,21,84,20,1,64,0,32,16,0,0,5,5,
235 80,85,5,8,81,10,247,182,217,162,91,52,211,74,82,192,1,84,138,170,10,0,0,0,1,8,4,0,20,1,65,85,65,96,9,71,149,230,154,219,
236 102,154,107,222,137,130,170,170,170,130,128,0,0,0,64,48,128,0,40,0,2,128,6,8,133,43,222,105,166,182,247,154,84,76,20,21,84,20,20,2,
237 0,1,12,2,16,0,5,0,80,5,135,66,149,239,53,230,154,243,74,84,76,20,21,84,20,22,161,0,134,24,64,0,0,0,0,2,1,162,33,94,
238 83,94,243,94,82,149,18,21,0,85,0,0,0,128,66,16,224,16,0,0,0,88,4,40,136,82,189,239,123,222,82,161,120,40,2,130,128,0,4,2,
239 16,193,3,8,0,64,0,2,26,34,20,165,123,202,242,148,168,156,0,20,0,0,2,16,134,28,33,8,64,2,176,12,17,17,10,87,149,229,41,74,
240 148,133,64,0,1,96,1,8,97,248,67,8,4,3,10,81,10,82,188,165,41,81,19,0,0,0,0,128,66,28,48,248,67,0,128,64,52,162,20,165,
241 41,74,133,68,225,0,0,0,0,128,67,15,254,24,64,33,133,40,136,82,148,165,68,68,64,192,32,0,16,8,97,193,2,129,240,132,32,16,232,136,
242 136,82,161,74,148,240,0,0,8,4,33,195,250,112,194,16,135,165,16,168,84,42,34,82,24,0,4,33,8,124,41,248,97,132,48,233,68,68,42,34,
243 34,80,48,128,4,2,16,195,244,254,28,33,224,148,162,21,17,17,41,194,16,132,33,135,255,252,48,195,10,104,136,136,137,68,248,4,32,16,195,15,
244 79,167,12,48,255,68,162,34,37,63,8,66,28,63,250,120,112,195,133,52,162,81,41,76,48,132,33,135,255,167,240,225,240,77,18,137,74,126,16,225,
245 195,254,159,225,195,135,77,41,74,83,134,24,67,15,255,79,248,112,253,52,162,83,160,120,97,240,160,122,127,240,225,255,74,105,79,134,24,120,127,211,
246 255,195,195,79,74,82,159,14,31,255,255,254,31,15,211,77,63,195,15,15,244,255,254,31,244,211,79,252,63,255,255,255,135,255,211,167,15,15,135,253,
247 63,208,60,33,250,104,148,74,127,12,60,63,15,254,31,255,233,165,52,240,225,225,255,195,78,31,15,250,82,148,211,252,56,127,15,255,255,167,79,79,
248 254,24,97,240,225,255,224,158,157,52,211,167,255,240,255,194,16,132,48,79,135,166,137,68,68,68,162,116,135,8,66,16,128,64,33,211,0,0,80,0,
249 8,83,66,161,74,242,148,165,42,34,34,83,225,0,0,0,0,0,0,0,80,80,85,0,80,5,8,122,33,74,242,188,215,154,243,94,242,149,18,129,
250 10,128,42,170,168,40,40,2,170,170,130,168,40,0,0,7,232,136,87,148,211,94,217,166,154,107,222,84,68,192,0,21,85,65,85,85,85,72,170,69,
251 85,85,5,0,128,67,74,21,10,82,189,239,53,230,154,107,222,247,161,83,128,2,170,170,170,170,169,21,85,84,138,160,170,0,0,16,244,162,21,10,
252 87,149,230,188,211,94,107,222,242,149,19,0,0,85,85,85,82,42,145,85,85,85,85,64,0,0,0,2,26,81,10,82,149,239,53,230,154,105,166,189,
253 229,41,104,16,80,85,85,32,42,170,170,145,85,72,170,160,160,0,16,195,232,136,87,149,230,188,211,77,52,211,94,242,161,104,16,5,85,85,85,85,
254 85,85,85,85,85,85,80,0,5,0,0,0,14,136,82,189,230,154,217,173,182,105,166,189,229,42,96,0,170,170,164,85,85,85,85,85,85,85,5,80,
255 85,0,80,80,0,0,209,10,83,77,52,75,98,68,137,109,182,222,242,162,64,21,84,138,69,82,42,170,170,169,21,85,85,84,138,170,170,160,160,0,
256 1,161,74,243,91,18,60,121,241,227,196,182,219,202,152,42,145,72,164,82,41,20,138,69,85,34,170,130,170,170,145,72,164,80,80,134,136,83,77,108,
257 120,243,231,217,31,30,36,75,222,144,2,41,8,66,16,138,66,41,21,72,164,82,42,169,21,85,85,85,85,85,64,0,40,133,123,109,137,62,61,145,
258 243,231,196,137,53,232,128,10,164,33,6,33,20,132,85,82,41,20,138,164,80,85,85,82,42,170,170,168,122,21,239,53,177,227,199,159,62,60,120,246,
259 205,121,112,82,16,132,33,8,69,82,41,20,138,66,16,138,160,160,170,164,82,16,138,170,1,68,71,188,214,196,143,30,124,249,241,227,196,182,105,82,
260 0,164,33,8,66,17,72,170,69,33,20,132,82,42,168,42,129,21,84,138,170,161,10,33,74,107,98,71,159,30,200,249,241,35,205,52,165,130,169,8,
261 66,16,138,164,85,34,145,72,69,33,21,72,164,82,42,145,72,170,170,29,10,243,91,18,60,249,243,236,143,143,18,36,215,162,0,41,8,66,16,132,
262 33,21,85,84,138,164,82,17,72,170,66,41,8,66,16,132,80,93,10,107,98,71,159,100,201,147,38,67,199,182,242,164,20,132,32,196,33,8,170,170,
263 170,170,164,82,41,20,138,69,33,8,66,16,131,17,85,66,133,52,209,227,207,139,178,23,23,100,124,120,147,74,144,33,8,48,195,16,132,34,170,170,
264 170,170,170,130,169,20,131,16,97,134,24,98,17,85,67,41,77,108,120,246,76,133,217,11,178,62,61,179,74,128,4,32,195,12,49,6,34,145,85,84,
265 21,84,21,65,72,66,12,66,12,65,134,33,8,0,20,66,154,104,145,231,217,50,23,100,200,248,246,219,122,85,70,24,97,134,24,98,17,85,85,84,
266 20,20,20,0,20,138,49,6,24,97,134,24,138,161,148,175,53,177,227,207,178,100,46,125,144,241,45,188,168,10,65,134,24,97,134,33,8,170,160,160,
267 10,160,170,170,170,69,82,16,131,12,49,21,84,2,82,189,182,199,159,62,46,201,147,35,227,219,53,233,2,16,97,134,20,66,16,138,170,10,10,10,
268 10,10,170,10,164,32,195,10,24,97,136,69,80,161,74,104,145,39,207,139,178,23,100,200,248,150,205,42,2,144,97,133,12,49,8,69,85,80,80,5,
269 80,80,85,85,33,6,24,97,134,24,98,16,128,0,136,83,91,18,61,147,38,66,226,236,143,143,18,107,210,170,65,134,24,97,136,69,32,42,130,130,
270 168,42,170,144,132,24,97,134,24,97,134,33,20,0,17,30,246,196,143,62,200,92,92,93,145,241,226,91,122,65,72,48,195,12,49,8,170,170,170,10,
271 170,10,170,164,33,8,65,136,40,80,194,136,50,170,130,20,173,182,60,123,33,113,113,118,76,143,143,18,105,82,170,48,195,12,65,136,69,85,5,5,
272 5,85,85,85,85,34,144,131,12,65,134,24,138,171,161,77,52,72,241,236,153,50,100,124,248,150,205,42,65,72,65,136,49,8,69,34,130,168,2,128,
273 0,0,42,169,8,66,12,49,6,33,21,67,66,188,214,196,137,62,124,249,243,227,219,109,229,72,41,8,49,6,33,21,85,64,0,0,0,0,0,1,
274 85,84,138,66,16,132,85,85,13,10,247,182,36,120,241,231,199,137,18,105,165,77,72,66,16,132,34,170,168,0,64,32,1,0,0,85,85,33,20,132,
275 82,2,134,136,87,154,216,145,34,68,143,108,73,175,122,32,2,144,132,82,17,84,20,0,32,16,132,32,10,10,170,170,164,80,80,88,81,10,247,154,
276 219,98,91,18,217,166,188,169,0,85,34,145,85,65,66,1,8,4,32,16,5,0,85,85,85,85,80,130,34,21,239,53,182,219,109,179,77,121,81,2,
277 170,170,69,80,80,0,8,66,24,66,0,160,160,170,10,160,160,1,208,165,123,205,52,214,205,53,239,122,38,10,10,170,170,0,1,8,97,194,0,0,
278 10,160,170,10,10,1,13,16,165,123,205,52,211,77,123,202,136,128,0,10,170,160,0,1,135,134,16,128,2,130,168,40,40,0,4,18,133,43,222,243,
279 94,107,222,242,162,96,0,160,160,160,16,135,135,224,21,5,5,85,5,0,12,18,84,41,94,247,189,239,43,209,19,128,40,2,128,4,56,127,128,64,
280 1,64,0,20,0,2,29,16,165,41,94,242,188,165,42,34,96,0,160,0,1,15,195,240,128,0,2,128,2,132,3,210,84,41,74,242,149,232,84,68,
281 192,0,0,0,33,135,248,112,128,0,0,0,0,4,3,209,16,165,41,74,82,148,168,137,192,0,0,32,24,127,195,128,64,0,0,32,0,16,233,66,
282 161,74,82,148,168,84,166,16,0,0,132,56,127,14,16,0,128,4,2,31,162,33,74,133,41,80,168,148,132,0,32,1,14,31,225,132,32,16,0,128,
283 67,210,136,84,41,80,165,68,74,97,0,0,8,67,15,254,24,4,2,16,135,233,66,162,21,10,136,136,158,1,0,8,66,31,254,24,64,33,8,67,
284 210,136,136,133,68,66,209,56,66,0,16,135,255,225,225,8,67,15,165,40,136,84,68,162,120,64,32,16,225,211,240,240,195,14,31,210,136,137,68,68,
285 208,56,64,33,225,167,255,135,12,56,127,74,81,17,41,78,24,66,24,127,79,225,248,112,225,250,82,136,148,211,134,24,127,255,255,134,28,63,244,162,
286 82,159,195,15,15,79,255,225,195,135,14,154,82,137,167,225,195,255,167,135,240,225,225,254,148,166,154,67,195,225,167,255,252,56,120,127,166,148,167,255,
287 135,255,255,240,248,126,29,58,105,167,240,255,255,255,15,248,127,253,41,167,255,15,255,255,225,254,31,253,58,127,255,255,254,31,255,195,254,157,58,127,
288 195,255,255,135,255,225,255,167,79,167,15,255,225,255,255,255,255,79,79,225,255,252,63,255,255,195,211,211,255,255,255,15,255,250,7,255,244,253,63,135,
289 254,31,255,255,132,63,165,40,148,167,240,195,135,12,56,127,167,255,211,166,154,127,252,56,97,15,15,255,166,154,125,63,252,63,195,15,255,74,105,166,
290 144,248,97,255,135,15,195,253,61,52,233,233,255,195,15,14,16,134,26,120,122,82,136,148,68,68,166,159,132,32,16,0,0,0,252,0,0,20,3,4,
291 162,33,74,87,148,165,66,149,18,148,248,0,0,0,40,2,128,40,42,170,168,40,2,132,52,149,30,87,154,243,77,52,215,189,232,84,225,5,5,85,
292 85,80,80,85,85,34,145,85,65,64,0,3,232,133,43,222,105,173,182,107,102,154,247,149,19,0,5,82,42,170,170,145,84,132,82,41,21,85,65,96,
293 1,232,133,41,74,243,94,105,173,154,217,166,189,229,68,224,160,164,85,34,144,138,69,34,145,72,170,170,10,1,0,244,68,66,148,175,121,166,154,217,
294 166,154,107,222,84,76,0,21,72,170,69,34,144,138,69,34,169,20,20,0,0,2,16,165,16,165,123,205,123,109,154,219,102,154,247,149,19,5,5,34,
295 169,21,72,164,82,41,8,69,34,170,128,0,66,28,18,84,43,222,105,173,154,217,173,154,107,202,84,68,8,40,41,21,84,138,69,82,41,8,170,69,
296 85,80,0,0,0,0,13,17,30,247,154,219,109,137,109,182,205,52,175,68,193,64,138,164,82,42,145,84,138,69,34,145,85,84,21,84,1,64,2,20,
297 41,94,246,219,18,60,72,241,34,91,53,239,68,10,170,145,72,69,34,169,20,138,69,82,41,20,138,66,42,170,170,128,0,65,10,87,182,216,241,231,
298 217,31,30,60,73,175,42,64,20,138,66,16,138,66,16,138,66,17,72,164,85,85,33,20,132,34,170,168,6,133,41,173,143,62,124,93,147,38,67,199,
299 154,242,193,84,131,16,132,33,8,66,17,72,69,33,8,69,34,145,72,69,85,34,170,168,0,80,175,108,72,243,236,133,217,11,159,30,36,215,150,10,
300 164,32,196,24,132,33,8,164,33,8,66,17,72,170,170,164,33,8,164,34,128,5,16,175,52,72,147,231,217,50,100,200,120,150,205,42,85,72,66,12,
301 66,16,132,33,20,132,32,196,33,8,170,170,170,65,136,66,16,138,1,68,123,205,18,60,249,246,66,236,143,159,30,217,165,74,170,140,66,12,66,17,
302 72,66,16,132,32,196,33,20,138,170,66,41,8,69,34,128,104,133,53,177,35,217,50,100,201,147,33,226,77,122,32,42,144,131,16,132,34,144,132,33,
303 8,65,136,65,148,132,33,8,66,41,8,69,32,0,80,175,108,72,243,231,197,217,11,178,62,60,73,165,44,21,72,65,136,65,148,132,34,144,132,32,
304 196,24,132,33,8,66,16,132,24,98,17,85,116,121,162,79,178,100,118,46,118,201,145,241,38,189,32,164,32,196,24,132,33,21,72,164,33,8,66,16,
305 132,33,8,66,12,65,136,48,196,34,174,83,91,30,125,145,217,217,217,217,219,33,226,77,42,2,144,131,12,48,196,33,8,69,34,144,138,66,41,20,
306 132,24,131,10,24,80,194,136,66,0,2,33,173,137,62,200,92,244,236,236,237,145,241,230,189,0,8,48,194,134,24,97,136,66,42,145,85,72,170,170,
307 65,136,48,195,12,48,195,12,50,168,4,165,123,99,207,178,23,59,59,59,23,100,124,73,175,64,33,6,20,40,97,67,16,98,41,21,84,138,170,10,
308 170,164,32,195,12,40,80,161,134,85,0,66,148,209,34,79,139,178,59,59,59,100,200,251,102,190,4,32,194,133,12,40,97,136,66,42,170,170,170,145,
309 84,138,66,41,6,24,97,134,25,85,66,133,53,177,39,217,11,157,157,157,139,178,30,36,210,160,16,130,134,20,40,97,134,34,145,85,85,85,84,138,
310 170,170,69,24,97,66,133,12,49,8,160,136,83,91,30,125,145,217,217,217,216,187,35,226,77,42,1,8,40,97,66,134,24,98,17,72,170,170,170,170,
311 170,170,65,134,24,97,67,10,24,98,42,130,33,77,18,60,251,35,179,179,179,177,118,71,196,154,84,5,24,97,133,12,48,196,24,138,69,85,82,42,
312 145,84,131,12,48,195,12,48,161,134,34,168,101,121,162,71,178,100,118,118,122,46,46,200,123,102,150,4,32,161,134,20,49,6,34,144,138,164,85,34,
313 145,72,66,12,65,134,20,40,80,161,136,69,90,21,182,199,178,23,59,61,59,61,59,100,124,75,101,64,82,12,48,161,67,16,98,41,21,85,72,164,
314 33,8,69,33,6,32,195,10,20,40,97,134,34,133,30,104,147,236,133,207,79,79,79,78,217,31,108,210,192,132,24,80,161,134,24,98,16,132,82,41,
315 21,85,85,84,131,16,80,194,154,10,20,48,196,34,229,53,177,44,153,30,158,158,158,158,139,178,30,219,210,66,12,40,80,161,67,12,66,17,85,84,
316 138,170,160,170,164,24,97,134,20,40,97,66,134,24,128,178,189,177,44,133,207,79,68,34,19,209,118,67,205,122,1,8,40,80,166,131,10,24,132,34,
317 145,65,85,84,20,1,72,65,133,12,41,160,161,66,133,16,139,149,237,143,100,46,122,33,61,16,157,157,159,30,107,208,8,48,161,66,133,10,24,98,
318 16,138,170,170,160,160,10,170,65,134,20,48,161,133,10,24,98,42,172,165,108,73,246,71,103,167,162,19,211,182,67,219,122,72,65,66,133,10,20,48,
319 196,33,21,85,85,85,85,85,85,72,66,12,48,161,66,154,10,24,101,90,60,209,231,217,29,136,68,34,19,211,177,113,237,154,146,16,97,66,133,10,
320 24,98,16,138,164,85,85,34,130,169,8,65,134,24,80,195,12,48,195,17,65,17,230,137,62,200,236,236,244,244,236,92,248,246,222,128,164,24,97,66,
321 134,24,132,34,145,85,85,85,65,85,84,132,24,97,133,12,48,196,33,21,65,17,230,137,30,200,92,92,236,236,93,144,241,38,149,1,72,65,133,16,
322 98,16,138,170,170,170,170,170,10,170,164,24,97,134,24,98,16,138,160,8,134,154,36,249,241,118,66,226,231,207,137,53,229,129,8,65,134,32,196,82,
323 42,170,168,40,2,128,2,129,8,48,195,12,48,196,82,0,4,165,53,182,199,159,62,200,249,241,226,91,52,169,5,33,6,32,202,66,42,130,130,128,
324 40,0,42,170,169,20,132,82,41,21,84,2,133,121,173,137,30,124,121,241,226,68,154,242,165,84,132,33,8,66,42,130,128,40,0,0,0,40,42,169,
325 20,132,82,40,40,0,34,35,205,108,72,145,227,199,137,109,179,74,136,0,164,33,20,138,69,5,5,0,0,0,0,0,0,85,85,85,85,32,40,0,
326 80,165,52,214,196,137,30,36,75,102,189,233,170,169,8,69,34,168,40,40,0,0,66,0,0,10,10,170,170,160,160,1,66,149,230,182,216,145,45,182,
327 217,175,42,64,21,72,164,85,80,80,5,0,0,128,4,32,10,160,170,10,160,0,28,165,123,205,109,182,219,108,211,74,84,64,5,82,42,145,65,65,
328 64,2,0,16,128,64,1,64,20,21,64,0,57,81,239,53,179,91,108,211,94,82,164,0,20,138,170,10,10,0,1,0,132,32,0,0,10,10,0,0,
329 0,26,33,74,107,205,52,214,222,247,148,188,21,85,84,20,20,0,2,1,8,112,0,0,0,80,5,0,14,136,143,123,205,121,166,189,229,42,36,0,
330 21,65,65,64,0,0,33,8,67,8,0,0,2,128,0,7,68,66,189,239,53,239,123,202,133,192,1,65,84,1,64,32,24,97,132,33,0,128,40,0,
331 66,8,136,82,189,239,123,222,82,162,36,0,1,64,20,0,2,1,14,28,33,0,128,0,64,33,209,16,175,121,94,242,189,17,56,2,128,40,0,4,
332 2,24,112,240,132,32,0,16,14,136,133,43,202,242,148,165,79,0,0,0,0,0,8,67,15,135,8,64,32,16,250,21,10,87,148,165,42,39,128,0,
333 0,0,0,4,48,255,135,8,64,32,31,68,41,74,82,161,74,148,194,0,0,0,16,132,60,63,194,16,128,67,10,81,10,133,41,74,136,137,224,0,
334 0,1,0,134,31,255,132,2,16,194,148,68,66,149,10,136,137,194,0,16,0,134,31,254,28,33,8,67,210,133,68,42,21,17,62,1,0,0,132,48,
335 254,159,134,16,132,62,137,42,33,81,17,52,12,0,32,16,195,135,79,240,194,16,195,165,17,17,10,136,148,240,8,4,2,24,127,167,248,97,8,125,
336 40,136,136,136,148,240,132,33,12,63,255,225,134,28,41,165,17,17,40,159,132,33,134,30,26,127,225,135,15,165,40,137,68,255,12,48,248,127,254,24,
337 97,253,41,68,68,167,240,135,15,135,255,248,97,195,166,148,162,83,76,56,124,63,255,195,134,28,62,154,37,18,154,97,195,15,255,255,135,12,63,244,
338 162,82,159,195,195,255,255,195,12,56,116,233,74,38,159,14,31,255,255,225,135,15,244,166,148,255,240,255,255,252,48,225,255,74,83,79,248,127,255,255,
339 195,15,15,167,77,62,152,116,255,225,255,195,135,15,211,166,159,255,255,255,255,15,15,254,158,159,255,211,255,195,225,225,255,244,250,127,255,255,255,240,
340 255,135,211,233,254,9,253,63,248,124,60,63,253,62,159,15,167,255,255,240,255,193,63,211,255,255,211,252,63,15,135,254,159,79,225,211,255,255,248,127,
341 255,253,63,255,255,255,252,63,15,253,63,79,255,255,255,240,255,255,254,159,255,167,240,255,135,255,15,250,127,79,255,255,252,63,255,255,255,79,250,127,
342 195,252,63,254,31,233,255,211,255,255,248,127,255,255,255,79,233,255,195,248,127,225,255,167,255,79,244,240,255,195,255,255,255,253,62,159,255,15,195,252,
343 63,253,63,253,62,159,225,252,63,255,255,255,233,244,255,248,126,31,135,255,233,255,211,233,255,15,248,127,255,255,254,158,159,255,195,240,252,63,255,233,
344 253,61,63,225,255,135,255,255,255,233,233,255,240,255,15,240,255,254,159,211,211,252,63,248,127,255,255,254,158,159,255,15,248,127,135,255,244,253,61,63,
345 195,255,195,255,255,255,233,233,255,240,255,135,248,127,255,211,211,211,255,15,252,63,255,255,255,78,159,255,135,252,63,15,255,250,125,62,159,248,127,195,
346 255,14,159,255,167,167,255,240,254,31,195,255,250,127,79,211,252,63,240,255,255,255,250,125,63,254,31,225,252,63,255,79,233,255,255,255,195,255,255,255,
347 211,211,255,240,255,15,240,255,255,167,167,167,254,31,225,255,255,195,233,250,116,250,67,248,126,31,195,255,255,167,167,167,255,135,225,254,31,79,195,167,
348 233,211,233,225,248,120,126,31,255,253,62,158,159,255,15,135,240,255,244,255,233,211,255,254,30,31,15,255,253,63,79,167,255,195,225,252,63,250,127,244,
349 244,255,255,15,135,225,255,254,159,211,233,255,195,240,255,195,250,127,253,61,63,255,15,135,255,135,254,159,244,250,127,195,240,255,255,255,255,167,233,255,
350 225,240,255,193,63,255,254,159,211,252,62,31,225,244,255,255,167,250,127,248,124,63,15,250,127,253,63,167,252,63,15,225,255,167,255,79,244,255,248,126,
351 31,135,255,211,253,63,79,255,15,135,225,255,250,127,167,244,255,254,30,31,135,255,244,254,159,211,255,195,195,240,255,250,127,244,254,159,255,135,195,240,
352 255,233,255,211,253,63,240,248,127,15,254,159,253,63,211,255,225,240,255,135,250,127,244,255,211,240,255,15,255,255,255,167,255,79,225,255,135,255,255,255,
353 211,255,255,248,127,255,255,255,211,255,255,254,31,255,255,255,250,127,255,252,63,255,255,255,244,255,255,255,15,255,255,255,253,63,255,254,31,255,255,255,
354 167,255,255,255,195,255,255,255,253,63,255,255,15,255,255,255,211,255,255,252,63,255,232,31,255,250,127,255,240,255,255,244,15,255,244,240,240,255,166,148,
355 211,233,135,225,135,15,195,250,7,240,225,250,105,166,158,159,233,255,195,254,30,28,48,195,167,211,233,254,157,63,255,211,225,225,195,255,15,254,159,255,
356 211,255,135,79,211,248,127,211,248,112,135,255,233,135,250,125,63,240,79,77,63,135,14,28,56,83,165,63,135,225,167,135,255,253,40,148,77,48,225,225,
357 15,255,167,160,124,33,8,64,0,2,1,8,116,68,66,161,81,10,133,68,68,74,127,134,24,4,0,63,194,0,0,0,1,0,128,2,168,0,116,162,
358 34,34,34,33,81,10,82,149,229,41,74,84,68,194,0,0,0,16,0,128,40,2,128,40,0,0,4,56,97,132,32,0,16,209,17,16,168,82,149,229,
359 53,239,123,202,82,149,48,130,130,128,40,0,0,0,0,2,130,130,130,128,0,0,0,6,148,74,66,24,105,165,17,10,133,41,74,82,188,165,41,74,
360 84,68,224,10,10,160,160,0,1,8,0,40,42,130,168,2,128,0,116,162,74,148,167,135,162,33,74,133,43,202,87,149,229,41,81,48,0,80,85,0,
361 0,0,132,1,65,85,85,84,20,2,16,254,157,41,68,162,81,16,168,84,41,74,133,41,74,84,42,34,80,32,10,10,10,1,0,128,2,128,42,170,
362 170,130,128,4,3,74,34,83,211,209,40,133,66,148,165,41,74,133,41,74,84,42,38,0,0,160,160,170,0,0,0,0,10,10,10,10,10,1,8,126,
363 148,233,250,34,34,20,165,41,74,242,188,175,41,74,84,68,192,21,65,85,85,85,64,0,1,64,20,20,0,0,2,31,165,41,8,67,135,162,34,20,
364 165,43,222,107,205,52,215,189,229,42,64,21,72,164,33,20,138,170,160,160,160,160,0,0,16,254,148,78,1,0,0,8,6,20,68,41,94,105,166,182,
365 216,150,219,52,215,189,16,1,72,65,134,24,98,12,66,42,170,128,40,0,4,0,63,210,136,148,134,0,0,0,10,1,208,165,121,166,182,36,72,145,
366 45,137,52,210,151,5,32,196,20,48,194,134,24,132,82,2,168,40,0,0,6,20,162,34,21,17,41,240,8,0,40,40,0,104,87,188,211,68,182,60,
367 72,145,45,154,242,224,164,32,195,10,24,97,134,24,132,33,21,65,64,33,253,40,84,68,66,162,83,8,0,0,2,168,40,6,82,148,211,91,18,60,
368 72,241,45,154,242,164,20,132,24,130,134,24,97,136,66,41,21,84,1,96,1,133,40,136,133,68,68,68,167,192,0,0,1,64,52,66,189,237,182,216,
369 145,34,68,154,105,75,0,82,12,48,194,134,24,98,16,138,170,160,0,0,1,12,58,81,18,136,136,137,78,144,130,130,170,128,81,30,246,219,18,60,
370 72,241,45,154,242,193,84,131,12,40,97,134,24,138,64,80,5,0,80,0,8,97,166,136,148,68,248,67,0,128,0,104,82,189,182,219,30,36,120,145,
371 38,188,169,82,16,97,133,10,24,80,196,33,21,65,64,32,16,255,255,192,33,255,8,6,136,87,154,216,241,227,207,159,30,37,183,165,72,48,161,77,
372 26,52,104,40,80,196,34,128,0,67,135,250,34,34,112,134,0,0,16,0,85,80,12,175,120,145,39,217,11,139,178,100,124,73,165,128,195,52,118,208,
373 205,219,182,141,26,12,48,202,170,1,244,68,162,34,81,17,41,211,0,128,0,2,170,145,85,66,82,182,217,246,71,103,103,103,108,143,137,53,1,70,
374 104,209,217,153,153,155,183,110,197,10,24,132,80,0,250,34,34,34,34,21,17,19,64,192,2,24,0,0,40,44,16,165,109,177,236,153,11,139,139,159,
375 30,217,80,8,48,167,110,221,153,153,187,118,208,80,195,17,72,10,16,210,136,84,66,161,80,168,148,252,41,224,10,10,170,161,41,77,18,60,251,35,
376 177,118,71,199,154,244,2,12,209,163,179,51,55,102,109,26,52,24,98,17,64,0,52,162,33,80,165,42,21,18,148,240,134,156,0,1,64,2,136,246,
377 196,143,62,46,201,147,33,45,189,1,70,20,41,219,179,55,110,221,138,104,48,195,17,85,64,61,17,10,133,121,74,82,162,39,132,0,61,3,0,0,
378 0,161,94,104,145,236,153,11,178,62,37,178,160,40,205,5,59,118,102,237,219,70,130,133,12,69,32,40,7,209,16,168,82,148,165,42,34,34,66,1,
379 15,194,10,1,161,94,219,99,199,178,62,124,72,151,150,4,25,160,167,109,29,180,104,208,97,134,85,80,0,195,166,136,136,84,68,45,41,15,165,18,
380 144,0,5,13,10,243,91,30,60,248,241,237,154,84,5,32,194,154,52,104,208,80,161,68,33,20,20,48,233,165,18,136,84,68,68,240,0,0,254,16,
381 232,133,121,162,68,143,30,60,123,102,149,42,65,134,104,209,163,65,66,133,12,50,170,128,127,210,136,136,136,136,136,148,8,66,20,254,16,229,41,77,
382 108,72,145,35,219,53,232,128,164,24,97,77,5,10,20,48,196,34,168,4,62,157,40,136,136,136,136,148,225,195,225,8,116,71,148,214,219,109,182,205,
383 121,82,10,65,136,40,97,133,16,98,17,84,22,31,166,148,74,34,34,37,19,8,66,31,195,209,10,87,154,107,102,182,247,189,53,82,16,131,12,49,
384 6,34,170,168,0,7,253,41,68,68,68,68,68,240,135,195,135,162,33,74,243,77,121,175,121,104,0,164,33,8,66,16,132,85,0,0,135,233,233,74,
385 34,81,17,52,14,31,134,30,136,133,43,205,123,222,82,166,10,170,69,33,20,138,10,0,16,248,126,154,81,40,148,167,15,254,26,81,16,165,43,222,
386 87,162,36,0,21,84,138,170,170,0,176,135,254,26,105,74,37,41,255,225,253,17,10,87,148,175,66,240,5,5,82,42,130,128,0,127,255,13,52,210,
387 154,127,240,240,165,37,71,148,165,41,83,128,2,170,170,130,128,0,127,79,15,15,167,79,233,233,255,74,33,74,82,149,17,56,2,130,170,130,128,0,
388 7,255,195,250,105,77,63,255,250,81,16,168,84,42,39,0,5,5,5,5,0,135,233,211,135,233,233,255,252,63,209,17,16,165,68,68,225,0,80,0,
389 80,8,67,211,254,31,211,167,195,255,233,165,17,10,133,68,79,0,0,0,80,0,8,67,255,255,244,211,250,127,255,165,17,17,17,62,1,0,0,0,
390 0,195,233,233,135,233,244,255,255,195,211,68,162,34,105,8,66,0,16,135,254,156,62,31,233,255,211,255,165,18,136,148,225,8,4,2,16,195,211,248,
391 127,244,253,63,233,254,154,82,159,8,64,33,12,61,58,127,240,254,159,10,127,255,166,148,167,240,194,16,195,233,233,225,225,240,255,211,211,211,211,74,
392 83,225,132,33,8,97,233,244,240,255,233,255,250,127,78,157,56,97,132,33,15,233,166,159,255,240,248,127,250,125,52,211,248,97,195,255,211,255,15,135,
393 240,250,122,116,211,78,159,135,8,97,135,255,211,255,255,255,211,250,126,156,60,56,97,225,167,166,159,255,255,135,255,255,211,211,240,254,31,250,127,240,
394 252,63,254,159,167,167,167,195,225,195,195,254,159,255,255,255,244,253,63,248,120,112,255,233,211,233,135,255,135,255,255,211,255,255,15,255,79,255,225,255,
395 15,250,122,116,255,252,56,120,127,211,250,127,255,225,255,244,244,252,62,30,31,250,116,233,255,135,248,124,63,244,244,255,255,240,255,167,255,240,255,248,
396 127,79,78,159,255,15,15,15,244,255,254,159,255,195,255,79,255,225,252,62,159,79,167,195,255,240,248,127,211,233,255,255,240,250,127,248,127,255,255,253,
397 58,127,195,252,63,15,79,255,254,159,210,31,195,250,127,225,255,255,244,250,124,63,255,195,225,254,159,79,255,255,255,255,248,127,255,255,254,157,63,225,
398 254,31,255,255,255,167,255,225,255,211,255,248,127,255,167,255,255,255,135,195,254,158,159,255,255,255,248,127,255,255,255,253,63,255,255,195,255,255,255,167,
399 255,248,127,244,255,195,255,255,79,255,255,255,248,124,62,159,250,127,255,255,15,255,254,159,254,31,253,63,255,255,248,127,255,253,63,255,225,255,255,255,
400 167,255,255,255,255,255,225,252,63,79,244,255,255,255,240,255,255,211,254,31,250,127,255,255,225,255,255,250,127,255,225,255,255,255,233,255,255,255,130,127,
401 255,135,240,255,167,233,253,60,63,252,63,255,244,255,252,63,255,211,255,255,225,255,255,211,255,255,15,255,255,253,63,255,255,195,233,255,255,15,240,254,
402 159,211,255,255,255,15,255,167,255,252,63,255,254,159,255,248,127,254,159,255,248,127,255,255,250,127,255,255,135,211,255,225,255,255,255,233,255,255,255,195,
403 255,167,255,255,195,255,255,211,255,135,255,211,255,255,225,255,255,255,253,63,255,255,255,255,240,255,255,255,167,255,255,255,15,255,233,255,255,225,255,255,
404 255,255,255,244,255,255,255,135,255,195,211,254,159,255,255,255,255,252,63,255,255,255,167,255,255,248,127,244,255,255,195,255,255,255,244,255,255,255,255,255,
405 135,255,255,255,244,255,255,252,63,211,255,135,255,255,211,252,63,250,127,240,255,233,255,255,248,127,255,255,255,253,63,255,255,255,135,255,255,255,233,255,
406 255,255,4,15,211,248,127,255,167,255,225,255,255,255,255,167,253,56,127,135,255,255,255,255,233,255,255,255,255,135,255,255,255,211,255,255,225,255,79,254,
407 31,254,159,255,15,255,253,63,225,255,167,255,255,195,255,255,255,255,244,255,255,255,254,31,255,255,255,255,79,255,252,63,253,60,63,250,127,255,240,255,
408 255,255,255,211,250,7,255,4,130,120,39,130,5,3,224,144,79,64,160,39,255,193,56,32,32,36,30,117,48,14,166,40,196,109,210,103,152,2,25,25,
409 157,34,49,167,9,224,75,21,217,132,75,13,197,212,114,118,234,59,96,139,185,218,8,3,220,195,8,133,116,132,186,24,216,130,238,131,27,61,134,197,
410 96,29,89,135,7,59,139,132,93,156,102,228,123,153,25,163,51,132,186,26,154,226,17,0,112,207,57,56,15,2,51,128,230,196,29,184,79,92,198,110,
411 70,220,192,34,43,152,123,144,201,156,33,112,142,217,231,38,97,224,240,204,57,177,7,110,19,214,115,27,144,75,152,130,32,57,141,114,59,115,29,186,
412 7,110,115,155,48,240,192,96,157,24,131,129,4,66,206,99,114,9,115,43,144,28,198,136,134,110,99,183,64,237,174,115,16,24,12,38,97,201,206,99,
413 112,136,92,173,66,32,151,48,198,10,28,70,152,46,220,199,172,209,99,56,228,32,136,204,38,11,13,136,99,102,142,92,198,66,32,247,49,12,25,196,
414 107,145,160,180,46,205,117,103,28,196,19,195,9,192,195,115,152,220,35,151,43,83,144,75,148,80,136,130,209,172,215,108,225,119,67,171,156,230,193,48,
415 176,24,167,70,17,212,64,28,181,218,156,39,220,173,28,133,115,35,52,103,48,246,107,83,56,114,225,49,179,216,174,6,1,212,64,57,181,220,89,162,
416 238,87,102,11,197,162,136,130,156,199,220,142,46,83,152,130,117,98,29,24,44,243,8,128,112,103,11,29,2,238,102,142,71,139,72,34,10,115,31,102,
417 181,51,135,34,8,225,158,195,98,136,198,23,1,201,206,44,112,139,181,204,221,6,185,129,154,51,152,248,130,212,231,61,102,14,25,231,70,24,140,97,
418 96,156,24,142,34,9,219,57,219,145,236,235,53,92,167,220,142,46,113,200,130,56,98,56,24,172,35,171,48,224,196,22,8,34,236,230,142,131,92,192,
419 34,10,114,143,116,25,53,207,68,1,99,16,232,224,96,29,88,39,54,32,176,64,59,107,153,51,77,114,131,52,142,86,220,38,77,115,177,0,112,207,
420 57,48,196,102,3,128,228,231,28,58,14,220,206,220,141,185,128,193,35,148,123,53,219,148,237,154,234,207,57,48,76,44,6,99,21,174,59,102,158,179,
421 140,217,162,92,164,102,220,207,114,25,185,69,221,3,182,185,204,64,17,152,12,83,163,0,198,32,142,92,238,46,134,78,86,142,68,22,138,228,104,229,
422 100,225,22,49,7,46,3,27,8,232,116,97,14,24,34,23,59,139,160,251,148,83,53,25,197,116,10,107,139,184,69,140,243,131,48,194,120,112,28,152,
423 67,177,4,114,196,50,102,159,114,168,136,142,98,152,38,98,208,133,194,56,115,156,216,39,131,195,128,228,196,28,56,68,44,230,55,32,145,104,134,8,
424 11,77,136,134,110,83,183,64,225,136,115,112,48,15,14,3,155,156,112,225,59,114,153,51,91,56,149,154,162,211,110,70,55,40,229,194,234,231,58,51,
425 24,2,48,128,115,115,186,179,69,217,205,25,162,92,160,113,220,167,196,71,109,113,203,160,118,196,58,48,88,12,6,9,205,206,117,112,158,185,152,217,
426 163,197,161,140,21,22,155,17,12,197,161,11,52,112,215,57,8,12,38,19,48,228,215,49,186,15,69,163,38,104,145,105,68,64,56,155,48,76,156,167,
427 174,17,195,92,228,204,103,176,156,7,38,112,225,194,122,230,99,48,91,56,144,193,7,49,243,140,205,158,115,114,56,176,24,162,9,212,234,204,97,185,
428 199,14,19,211,137,169,200,246,176,142,65,157,38,220,141,71,16,133,154,117,103,48,196,6,123,9,194,114,103,14,4,67,177,104,204,193,109,210,1,110,
429 51,164,125,200,212,230,29,56,78,172,67,155,5,128,192,102,28,154,231,86,104,133,210,99,17,30,233,41,130,51,164,60,193,50,115,14,132,65,219,61,
430 130,225,48,157,89,174,6,16,176,193,28,179,140,204,17,46,145,12,17,143,55,185,24,221,33,119,65,213,204,114,16,25,236,65,0,232,206,58,185,4,
431 39,19,25,130,36,226,83,141,78,33,38,11,183,48,133,200,234,215,57,8,39,134,123,48,232,215,48,186,7,78,103,17,16,251,164,208,227,3,205,238,
432 67,39,72,93,154,59,22,142,78,134,3,16,64,102,49,12,102,9,209,206,100,35,196,46,85,48,6,156,79,17,237,26,195,230,8,237,210,29,56,88,
433 76,231,3,21,156,120,16,71,78,97,219,144,92,226,118,96,149,210,41,130,208,90,23,114,56,179,142,14,19,171,17,192,193,98,24,92,39,6,112,177,
434 200,46,45,52,114,60,90,1,16,97,105,182,107,136,180,33,16,14,173,115,147,129,132,192,16,14,78,113,219,144,114,206,118,35,207,179,158,34,145,202,
435 46,113,187,115,14,153,166,54,185,209,130,196,97,48,78,110,99,27,132,236,226,106,17,13,107,20,193,24,226,18,228,50,115,30,179,71,108,230,24,130,
436 120,103,184,88,172,225,195,144,114,45,49,152,35,221,37,56,193,172,108,193,50,107,4,34,33,213,204,115,16,88,140,71,3,13,202,120,114,30,156,77,
437 71,24,147,136,4,84,90,62,34,133,51,142,7,24,177,158,224,116,24,88,66,11,21,174,117,112,142,93,39,23,35,103,152,161,17,90,199,136,134,71,
438 16,187,52,118,229,57,184,79,12,246,99,21,174,99,116,14,156,172,98,33,241,104,135,28,90,52,68,104,45,11,186,5,142,81,208,130,35,49,24,167,
439 71,57,132,64,16,185,133,142,19,238,147,177,17,14,34,156,109,28,199,166,11,83,156,232,96,152,207,14,17,4,240,99,114,29,25,206,38,11,38,177,
440 161,130,167,156,68,50,60,217,51,71,14,99,128,130,120,115,176,92,14,113,25,154,112,115,56,136,135,206,33,71,26,28,70,152,34,133,163,177,16,88,
441 206,57,56,79,12,246,99,21,174,99,116,14,78,38,161,16,214,176,80,136,49,230,246,107,27,88,118,232,49,179,152,98,9,224,240,225,96,179,197,135,
442 25,201,206,208,192,11,185,144,71,161,196,36,193,99,56,133,217,166,17,104,230,204,98,49,24,44,55,48,140,228,61,56,156,76,17,39,153,5,185,29,
443 38,206,51,33,104,66,34,14,217,204,87,65,225,132,225,112,53,204,110,65,208,180,212,96,143,60,198,56,193,172,120,136,198,214,11,186,14,167,17,205,
444 152,196,98,49,88,108,227,11,144,116,229,50,17,226,238,82,152,6,218,236,132,113,25,195,161,110,44,107,157,4,22,3,93,192,116,115,48,4,19,214,
445 177,213,154,217,230,208,68,83,204,209,16,200,226,59,114,14,25,199,71,9,225,128,32,48,88,134,49,16,224,229,50,22,227,220,196,22,243,136,209,16,
446 204,90,23,102,142,28,167,6,99,61,206,197,57,185,79,2,1,219,164,44,116,54,233,12,113,163,152,72,138,25,206,115,17,230,103,134,97,130,56,58,
447 184,89,140,241,195,160,66,45,11,29,15,48,46,221,2,143,59,161,169,210,100,32,142,28,167,6,97,225,132,193,98,177,12,108,211,131,56,200,193,100,
448 230,81,110,130,208,147,141,163,148,66,228,117,115,156,153,135,134,19,128,228,206,58,136,7,103,16,177,194,107,88,209,154,51,88,246,107,24,180,122,205,
449 117,103,177,93,6,51,27,53,152,35,49,152,39,38,32,163,4,251,149,92,138,113,21,194,212,113,31,102,29,92,163,150,43,1,136,195,57,53,204,98,
450 9,235,57,141,154,61,202,67,5,28,173,152,34,153,194,22,107,139,16,232,32,29,79,12,22,27,60,198,225,16,185,154,157,13,139,66,153,170,113,21,
451 194,100,230,30,32,14,25,195,151,1,225,132,197,97,179,221,93,7,6,123,67,4,245,158,130,220,214,32,145,16,102,185,216,130,44,107,142,88,167,134,
452 121,200,224,231,48,184,15,92,174,34,0,151,48,167,69,202,246,107,70,184,187,161,197,158,115,16,14,162,51,5,134,192,29,136,35,167,57,147,52,123,
453 56,142,75,152,174,131,39,51,33,0,118,206,29,49,79,12,35,161,205,206,117,102,30,179,154,153,163,217,202,96,189,174,60,227,35,16,114,96,177,176,
454 142,78,19,8,140,224,58,49,14,172,195,215,48,176,65,108,226,104,232,83,136,174,131,39,43,39,11,171,92,230,204,48,158,24,44,54,16,237,194,58,
455 115,153,57,15,185,84,68,185,91,114,52,114,157,186,29,92,227,166,97,225,132,197,57,181,206,172,195,183,43,139,133,177,104,103,64,57,158,205,104,206,
456 61,102,181,48,142,142,17,193,140,64,98,136,206,174,129,203,156,201,208,37,204,65,4,5,164,112,153,57,143,136,3,183,56,229,130,35,48,24,103,38,
457 16,224,64,16,185,216,217,163,218,234,228,181,205,114,59,115,157,136,46,44,243,131,4,234,35,49,78,76,35,27,48,245,174,212,32,182,229,24,65,7,
458 41,68,19,54,185,241,0,88,196,29,56,12,102,22,41,208,240,44,112,142,152,78,220,140,152,128,205,71,59,220,45,26,231,217,142,172,65,11,12,194,
459 192,58,28,24,70,54,9,219,157,140,64,18,215,35,133,26,239,112,138,115,139,136,45,76,33,211,4,112,35,49,78,71,135,86,8,229,136,100,32,137,
460 115,138,112,217,200,32,180,103,31,102,11,24,130,22,25,140,240,115,57,158,7,14,1,11,60,200,65,100,207,86,107,217,237,179,72,207,23,16,88,216,
461 67,150,41,140,70,57,28,24,3,134,41,219,17,169,130,37,174,40,64,181,208,64,20,231,62,32,53,48,135,44,81,217,132,232,114,17,157,88,34,22,
462 17,155,48,251,16,130,9,92,229,16,69,49,15,179,28,88,71,172,83,25,224,230,112,60,14,24,167,108,246,166,96,151,56,194,10,57,222,225,25,158,
463 46,225,50,60,28,25,142,167,86,25,200,194,59,112,30,179,218,153,141,181,198,102,3,93,25,142,216,131,216,46,44,33,11,20,198,97,58,28,196,97,
464 219,4,245,128,100,32,15,103,144,65,43,156,209,4,83,60,248,128,212,194,28,177,71,6,19,145,192,240,59,98,158,177,24,217,141,181,198,16,1,174,
465 86,99,70,33,246,11,81,224,114,224,29,152,216,167,67,11,83,48,66,120,51,16,71,177,8,32,92,229,102,59,115,143,96,139,25,227,147,161,140,70,
466 57,28,15,3,183,1,219,60,201,152,61,136,65,5,28,230,136,2,153,236,153,140,108,1,203,20,118,117,58,28,196,103,87,1,235,60,201,152,219,16,
467 102,101,206,86,11,70,32,247,3,83,8,66,116,28,29,78,71,3,11,171,4,66,192,118,32,31,96,43,132,172,39,136,34,153,231,216,45,76,35,214,
468 25,140,70,57,142,143,3,182,25,219,61,141,130,37,136,48,129,98,20,64,20,207,100,193,99,60,14,88,110,167,83,145,192,234,234,197,16,176,12,153,
469 130,89,228,16,44,242,176,69,51,199,184,26,152,7,167,65,193,212,224,58,17,157,88,98,236,3,38,8,150,17,4,2,176,158,32,145,128,46,193,51,
470 17,132,44,55,83,25,192,116,97,117,58,29,176,24,216,173,179,198,112,89,232,193,20,194,18,224,99,60,8,78,131,179,25,204,224,117,22,48,207,79,
471 6,108,17,44,2,48,81,128,86,8,204,33,238,3,35,193,217,209,212,234,112,29,29,71,103,67,182,1,147,20,75,8,83,5,25,229,96,140,192,30,
472 193,50,48,136,88,110,38,51,145,192,112,44,97,158,158,12,156,2,88,66,152,40,196,71,0,166,16,150,43,27,0,236,232,234,117,29,28,14,174,172,
473 51,179,193,155,128,123,0,102,98,48,10,193,25,128,125,192,100,35,30,157,29,76,103,1,209,212,88,116,23,17,140,152,173,176,6,112,88,72,224,20,
474 192,30,195,99,17,142,206,142,163,131,129,192,198,226,195,61,48,187,112,15,60,43,129,24,5,112,10,60,9,97,177,136,194,231,39,83,168,232,114,117,
475 22,28,133,196,99,54,24,150,1,28,8,192,43,128,99,192,246,41,145,132,244,228,44,28,28,7,35,129,97,208,92,194,102,195,18,120,35,21,24,5,
476 97,140,120,18,195,99,48,139,156,197,134,49,208,132,112,44,57,11,152,93,176,196,152,85,192,130,51,220,3,24,71,176,204,142,167,103,55,81,216,228,
477 66,99,22,28,197,196,99,51,163,103,130,48,231,130,176,197,24,68,176,204,142,167,103,49,96,236,116,57,28,53,28,153,29,93,176,219,17,149,139,17,
478 138,197,24,70,18,116,50,58,139,156,221,71,99,145,9,141,196,230,200,194,236,232,104,140,70,26,8,197,97,144,194,61,134,102,99,61,57,184,186,142,
479 132,35,134,163,152,185,132,204,232,217,224,140,57,225,24,99,30,4,157,12,142,162,231,49,96,236,114,33,29,184,156,133,204,46,216,109,152,72,195,67,
480 9,88,99,24,68,157,12,206,167,103,7,17,216,228,66,56,106,56,50,58,153,157,13,48,144,232,2,49,78,130,140,35,206,70,70,51,179,155,139,168,
481 232,114,59,99,57,139,152,221,157,4,136,202,116,136,197,58,10,48,137,57,49,152,197,199,78,35,177,201,232,225,168,230,200,234,236,232,105,133,88,115,
482 9,88,99,24,71,156,140,204,103,103,7,17,216,232,244,118,212,115,100,117,118,114,108,194,67,164,194,135,65,70,17,39,35,35,24,184,233,196,118,57,
483 16,142,218,142,98,230,54,135,70,206,170,195,67,11,206,131,24,68,156,140,140,98,227,167,17,216,228,244,112,212,112,100,117,118,114,52,194,67,164,194,
484 83,160,199,81,39,35,49,192,185,193,197,212,114,122,234,212,112,100,56,118,114,108,194,167,36,48,161,208,99,171,103,35,51,27,35,131,136,236,66,33,
485 29,184,156,25,24,221,156,196,152,84,232,135,82,157,8,117,30,114,51,28,11,156,26,157,68,39,163,182,163,129,243,27,179,155,102,17,142,147,10,28,
486 136,117,108,230,236,198,46,58,106,117,16,136,93,90,142,2,230,55,103,38,206,164,57,33,213,14,131,29,68,156,204,199,12,142,14,46,162,19,215,86,
487 161,211,35,27,179,153,167,82,28,144,194,83,144,198,49,39,55,99,182,71,6,49,96,132,66,234,198,58,100,56,118,115,108,234,49,201,12,40,114,24,
488 234,217,204,204,112,200,114,212,44,61,61,117,99,29,31,29,187,57,182,99,33,201,14,165,57,144,198,36,224,236,118,200,116,212,44,61,61,117,99,28,
489 178,28,59,56,54,117,33,205,12,115,144,198,54,206,14,199,108,135,44,98,195,211,215,22,49,211,33,219,179,155,99,130,28,208,198,135,2,14,13,56,
490 59,28,31,28,177,186,158,157,139,24,199,39,199,110,206,13,152,200,115,65,194,28,200,56,108,224,208,118,124,114,100,44,59,61,113,106,28,178,29,187,
491 56,54,99,33,192,166,57,204,134,51,78,13,7,99,199,76,98,195,179,183,22,161,203,33,219,179,128,145,193,14,101,28,78,106,56,108,116,208,118,124,
492 114,198,44,59,59,113,106,16,178,29,187,29,54,56,24,224,83,26,28,8,56,108,116,209,212,120,233,141,196,236,237,197,140,114,125,213,216,232,72,224,
493 135,4,28,33,193,71,6,142,154,58,143,28,177,184,139,157,184,177,136,89,14,221,142,155,29,140,112,40,226,112,81,217,167,6,142,167,199,38,66,195,
494 179,183,22,49,11,33,219,177,211,99,130,14,138,99,65,210,142,13,29,52,117,30,57,50,22,29,157,184,153,8,79,186,180,29,54,59,32,232,163,132,
495 56,16,118,104,232,83,168,241,9,147,136,185,219,83,25,233,241,99,177,203,99,177,135,69,28,78,4,29,154,57,20,234,60,66,102,226,46,122,212,198,
496 33,100,234,208,114,216,236,135,4,28,32,233,71,6,142,154,58,143,16,153,56,139,139,181,49,136,79,186,180,28,182,59,32,232,163,185,193,71,102,142,
497 69,58,143,16,153,184,139,157,184,153,30,178,117,104,57,53,212,97,209,71,17,210,142,205,28,180,117,30,33,51,113,100,118,212,100,122,124,88,208,114,
498 36,118,67,129,71,113,210,142,205,28,138,117,30,122,102,226,200,237,196,200,244,248,177,216,229,177,217,7,69,28,32,233,71,102,142,154,11,7,136,76,
499 154,133,197,218,140,143,79,139,26,14,77,117,32,233,7,113,210,142,205,28,180,22,9,16,153,53,50,59,106,99,61,62,44,104,33,109,212,131,164,117,
500 142,149,212,209,200,161,96,241,9,147,83,35,182,166,51,211,226,199,99,147,93,72,57,40,238,58,81,217,163,145,66,193,231,166,110,34,226,236,102,71,
501 163,220,90,8,91,117,32,229,29,99,162,58,154,57,104,44,30,122,102,226,46,46,212,100,122,124,88,208,66,219,169,7,40,235,28,171,169,163,150,142,
502 35,207,76,218,133,197,216,204,143,71,184,180,16,154,234,162,20,117,65,10,186,154,33,20,44,30,118,102,212,46,201,140,200,244,123,139,65,11,110,164,
503 28,149,214,57,87,83,68,34,156,68,158,153,181,11,178,99,50,61,30,226,208,66,107,170,136,81,213,4,42,44,120,132,83,136,147,211,54,161,118,76,
504 102,103,163,220,90,8,91,117,81,202,58,160,133,93,77,16,180,113,30,118,102,212,200,93,168,204,236,123,139,65,9,162,194,14,81,213,4,42,44,52,
505 66,41,196,73,233,155,27,38,76,102,103,99,220,69,30,154,44,32,230,44,65,9,5,134,136,90,56,143,59,51,99,100,201,140,204,236,123,136,163,211,
506 69,138,33,65,98,8,85,197,226,17,78,34,78,204,216,217,50,106,51,59,30,226,40,244,209,98,158,160,177,4,42,44,52,244,83,80,147,183,108,108,
507 153,49,153,157,143,113,20,122,104,177,68,40,44,136,84,88,105,232,167,17,39,102,102,71,217,49,153,157,143,113,20,122,104,177,68,40,44,65,9,28,
508 77,61,20,212,36,236,205,141,147,38,51,51,177,45,77,15,77,22,41,234,11,16,66,162,195,79,69,53,9,59,51,50,62,201,141,216,184,246,161,71,
509 102,184,169,234,11,16,66,162,195,79,69,53,9,23,118,198,200,249,145,153,216,150,161,71,175,113,83,212,22,33,234,184,154,118,41,168,73,217,153,145,
510 246,76,110,197,199,181,10,59,53,196,130,27,140,66,70,167,158,138,106,18,46,236,200,251,35,35,49,113,237,66,142,205,113,83,212,113,136,85,197,231,
511 162,154,132,139,187,50,62,124,201,216,184,150,161,71,175,113,83,212,113,158,171,139,207,69,53,9,23,118,198,200,249,145,152,184,246,161,71,175,106,83,
512 212,113,158,171,83,206,198,106,18,46,236,200,249,243,39,108,132,177,138,59,53,197,79,109,83,213,113,52,236,83,27,98,238,204,143,178,50,118,200,75,
513 24,163,179,90,136,122,142,40,118,173,79,59,25,168,75,38,140,103,207,153,59,23,18,212,40,236,214,162,30,163,138,29,131,83,206,198,106,18,46,236,
514 200,249,243,39,108,132,177,138,59,123,82,157,163,84,236,26,158,46,51,27,98,237,12,135,159,51,118,46,217,144,161,115,90,148,237,26,167,106,212,243,
515 177,154,132,178,104,100,60,249,147,177,118,216,198,23,123,25,14,209,169,14,213,169,231,99,49,182,46,208,200,249,243,38,140,132,177,138,23,53,169,78,
516 209,197,14,213,169,226,227,49,182,46,236,204,121,243,55,108,132,177,138,23,53,169,78,209,170,118,13,79,23,35,80,150,77,12,135,159,51,118,200,75,
517 24,163,183,177,144,237,26,167,96,212,241,113,152,196,178,104,100,60,249,155,182,66,76,133,11,154,212,162,232,199,23,6,167,139,140,198,219,38,134,99,
518 199,153,180,62,36,200,80,187,216,212,92,173,83,176,106,120,185,24,219,100,208,204,120,247,110,207,137,50,20,46,246,53,23,70,56,184,53,60,92,102,
519 54,217,52,51,30,61,219,182,77,153,12,200,214,53,23,70,56,184,49,189,145,24,219,100,208,204,73,243,55,108,155,50,25,147,216,212,93,24,231,106,
520 198,246,68,99,109,147,67,49,227,221,180,62,217,152,161,119,177,168,186,49,197,193,141,236,134,50,108,248,163,49,35,221,180,62,217,144,204,158,100,172,
521 144,202,46,12,101,23,24,201,182,77,12,199,137,118,208,251,102,67,50,123,26,139,163,28,92,24,222,200,99,51,89,52,51,30,61,219,67,237,153,12,
522 46,246,48,100,134,81,117,50,43,34,25,54,125,163,177,35,204,218,31,108,200,102,79,50,86,72,198,140,129,141,236,136,100,217,246,142,196,143,118,208,
523 251,102,99,31,121,146,139,204,172,128,200,172,136,100,105,241,78,196,137,104,208,123,102,99,50,121,146,178,67,40,186,153,149,145,12,155,62,209,216,145,
524 238,218,15,108,204,102,69,50,86,72,101,100,6,69,100,49,153,167,197,59,18,37,216,161,237,153,140,201,230,74,47,50,67,224,100,243,228,50,108,120,
525 167,98,68,180,104,61,179,49,153,60,201,89,33,149,144,25,60,249,12,205,62,41,216,145,45,26,31,52,204,135,222,100,172,144,202,201,76,138,200,99,
526 51,79,180,118,36,75,70,135,205,118,49,247,153,171,36,50,178,3,39,159,33,153,167,197,59,18,37,216,161,237,153,140,125,230,106,125,12,144,248,25,
527 60,249,12,205,30,41,216,145,45,5,15,53,216,199,222,102,172,166,118,74,102,83,228,51,52,120,167,98,68,180,104,61,179,50,31,41,154,178,67,43,
528 32,50,121,242,25,154,60,83,70,196,180,20,60,215,99,31,121,154,159,67,36,62,6,69,62,71,102,143,20,236,72,150,130,135,154,236,99,239,51,86,
529 83,59,32,50,120,242,59,52,120,167,98,91,104,40,121,166,100,30,243,53,62,134,115,224,102,83,228,118,104,241,77,27,18,208,80,243,93,144,249,76,
530 192,252,206,124,12,202,124,134,102,143,20,209,177,45,5,9,53,217,7,188,205,79,161,156,248,59,40,245,51,52,120,206,196,182,40,80,147,93,144,123,
531 204,212,250,25,207,171,180,62,71,102,137,25,163,98,90,10,30,107,178,15,121,154,159,67,57,240,51,41,242,59,120,241,77,27,18,208,80,147,93,144,
532 123,204,212,250,25,207,131,180,62,71,102,143,25,163,109,138,20,37,183,100,30,87,106,61,12,231,192,204,163,200,236,209,35,52,109,182,131,9,53,217,
533 7,188,204,7,163,185,240,51,41,242,59,52,72,205,27,108,80,161,38,187,32,242,187,81,232,103,62,6,101,30,174,205,18,51,70,219,20,40,121,174,
534 200,60,174,192,122,25,160,240,118,81,42,236,209,35,52,109,182,131,9,123,66,9,123,181,30,142,227,193,217,71,145,163,196,140,40,209,45,6,18,246,
535 132,30,87,106,61,29,199,131,180,30,174,205,18,51,70,219,20,40,73,173,8,60,174,192,122,59,143,7,101,30,70,143,18,48,163,91,20,40,73,174,
536 200,60,174,212,122,59,143,7,104,61,93,154,36,102,141,182,40,80,147,90,16,75,221,128,251,184,240,104,131,200,209,226,70,20,107,98,134,108,214,132,
537 18,86,138,61,29,199,131,178,143,35,67,68,140,209,182,197,12,217,173,8,36,173,20,125,218,9,6,136,60,141,30,36,97,70,182,40,102,205,104,65,
538 37,104,163,209,220,120,59,40,242,52,120,145,133,26,216,161,155,53,161,4,149,162,143,180,143,7,101,30,70,134,182,65,70,182,40,102,205,104,65,37,
539 104,163,237,34,65,161,68,145,163,196,140,40,211,69,12,37,237,20,73,90,40,251,72,240,118,81,42,209,226,70,20,217,162,134,18,246,138,36,174,192,
540 74,59,65,32,209,4,171,71,137,24,81,173,138,25,179,90,40,146,187,1,246,145,32,208,162,72,41,237,140,40,214,197,12,217,173,8,36,173,0,74,
541 59,143,6,136,37,90,60,72,194,141,108,80,205,188,81,4,149,160,9,71,104,36,26,32,149,104,241,35,10,53,177,67,54,241,68,18,86,128,37,26,
542 68,131,66,137,86,143,108,130,141,52,97,155,120,162,54,86,128,38,210,38,209,4,171,71,182,65,70,154,48,205,188,81,4,149,160,9,138,137,6,133,
543 18,173,30,217,5,26,104,162,26,107,69,108,173,0,77,164,77,162,9,81,69,108,130,141,108,81,13,53,162,182,81,74,37,26,68,131,66,182,162,138,
544 217,5,26,104,195,54,241,74,217,90,0,148,105,18,13,10,218,138,121,164,25,230,140,67,94,41,91,43,64,19,105,18,2,144,74,138,43,100,25,237,
545 138,35,111,20,65,37,104,2,109,17,176,20,141,168,167,154,65,70,154,48,205,188,81,4,160,160,19,21,110,208,173,168,162,182,65,158,104,196,53,227,
546 17,178,138,6,226,173,218,21,181,20,86,200,40,211,70,33,175,20,173,148,80,54,141,34,64,82,54,162,158,105,6,121,163,16,215,138,86,202,41,68,
547 197,68,128,164,109,69,60,210,12,243,70,33,175,20,173,160,160,109,5,91,1,72,216,10,43,100,20,105,163,12,219,197,43,101,20,13,163,68,108,5,
548 35,96,40,173,144,81,166,140,51,101,24,141,148,80,55,21,108,5,20,208,20,86,200,51,205,24,134,188,82,182,130,129,180,21,108,5,21,181,20,243,
549 72,51,205,24,134,188,82,182,81,64,220,85,176,20,86,212,83,205,32,207,52,98,26,241,148,210,138,6,226,173,197,35,106,40,173,144,103,154,49,13,
550 120,165,108,162,129,184,171,96,50,26,2,138,217,6,121,163,16,215,138,86,202,40,27,138,182,2,138,104,10,43,100,25,230,140,67,94,50,154,81,64,
551 220,105,177,72,218,138,121,164,25,239,33,13,40,202,105,69,3,104,42,216,12,134,128,162,182,65,158,104,196,53,227,41,165,20,13,198,155,20,141,168,
552 197,52,131,60,209,136,105,70,86,208,96,53,5,91,1,144,208,24,166,144,103,154,49,13,120,165,109,6,3,80,85,176,25,13,1,138,105,6,121,163,
553 16,215,140,166,160,192,106,10,182,3,33,160,41,230,144,103,154,49,13,41,8,218,12,6,160,171,96,50,26,3,20,210,17,239,33,30,241,148,212,24,
554 13,65,86,192,100,53,70,41,170,51,222,66,26,82,41,168,48,26,130,173,128,200,104,12,83,72,71,188,132,123,198,83,80,96,53,5,77,140,134,168,
555 197,53,70,123,200,67,74,69,53,6,6,227,77,1,144,208,24,166,144,143,121,8,247,140,166,160,192,106,10,67,64,100,52,6,43,212,103,188,132,52,
556 163,41,165,24,13,141,54,50,26,164,67,84,133,121,21,239,25,77,66,1,177,166,197,33,160,49,77,33,30,82,43,202,69,121,70,3,99,77,140,134,
557 169,10,245,33,94,69,121,72,166,160,192,106,13,52,6,67,64,98,189,72,87,145,94,82,41,168,48,26,131,77,1,144,208,24,175,82,60,170,71,148,
558 138,106,12,6,160,211,64,100,53,72,87,169,10,242,43,202,69,121,70,3,99,77,140,134,169,10,245,33,94,69,121,72,166,160,192,106,13,52,8,143,
559 2,33,170,51,222,66,60,164,83,80,96,53,6,190,50,60,6,43,212,143,42,145,229,32,61,8,6,201,124,100,52,6,43,212,143,121,8,242,145,77,
560 65,175,65,166,128,200,104,12,87,169,10,242,43,202,69,121,70,3,100,190,50,26,164,43,212,133,121,21,229,34,188,163,1,178,95,25,13,1,138,245,
561 35,202,164,121,72,175,40,192,108,151,201,52,6,43,212,133,121,21,229,34,154,132,7,160,211,64,147,84,133,122,144,175,34,148,164,7,161,1,232,52,
562 216,200,240,33,94,164,121,84,143,41,1,232,64,122,13,52,8,143,1,138,245,33,94,69,121,72,175,40,192,108,151,198,71,129,10,245,33,94,69,121,
563 72,175,40,192,108,151,201,52,6,43,212,133,121,21,229,34,154,132,7,160,215,201,53,72,87,169,10,242,43,202,69,121,70,3,100,190,50,26,164,43,
564 212,133,122,145,229,34,188,163,95,37,242,77,82,21,234,66,188,138,244,85,122,18,249,47,145,30,4,71,170,148,170,71,148,138,244,32,27,37,241,145,
565 224,66,148,8,82,170,188,164,87,148,128,249,47,145,30,4,71,169,10,245,35,202,64,41,70,190,75,228,188,8,87,169,10,245,35,202,69,122,16,30,
566 132,188,8,143,2,35,192,133,121,21,229,32,61,8,15,66,94,4,71,129,17,234,66,188,138,242,145,94,132,7,161,47,2,35,192,136,240,33,94,69,
567 121,72,5,41,1,242,95,37,224,66,148,8,82,170,188,164,2,148,128,249,47,145,30,4,71,170,148,170,165,41,0,168,160,249,47,146,240,33,74,4,
568 41,85,94,138,175,66,95,37,242,94,4,41,64,133,42,171,209,64,165,32,62,160,249,17,224,68,120,16,165,85,41,72,15,66,3,228,188,8,143,2,
569 35,213,74,85,82,148,128,244,32,61,9,124,136,80,84,122,169,74,170,82,144,30,132,7,201,124,136,89,17,234,165,42,169,74,64,42,18,249,47,5,
570 188,8,82,129,10,85,87,162,171,208,151,201,124,151,130,161,65,74,85,82,148,128,84,37,242,95,37,224,168,245,82,149,84,165,32,61,8,15,168,62,
571 68,40,42,20,8,82,170,148,164,7,161,1,245,150,68,120,16,165,5,41,85,74,82,3,208,128,250,203,34,20,21,30,170,133,80,42,40,21,9,124,
572 151,200,133,5,66,130,161,85,74,85,87,161,37,66,94,10,133,5,71,170,148,170,165,41,0,168,160,249,47,145,10,10,133,2,20,170,165,42,171,208,
573 146,161,47,145,11,34,61,84,165,85,41,72,5,69,2,161,37,173,224,66,148,21,10,160,84,80,42,40,62,68,44,136,80,84,40,41,81,64,168,160,
574 84,36,168,75,193,80,160,168,80,84,42,129,81,64,168,160,249,47,5,66,130,161,65,80,170,5,69,2,162,131,235,44,136,80,84,40,42,21,64,168,
575 160,84,36,181,150,183,130,161,65,80,170,5,69,7,214,90,203,89,100,66,130,161,84,10,138,5,66,75,89,107,120,42,20,21,10,160,84,80,42,40,
576 62,178,200,133,5,66,130,161,84,10,138,5,69,7,214,90,202,10,133,5,42,40,21,20,10,138,5,173,224,168,80,84,40,42,21,64,168,160,84,80,
577 125,101,5,66,130,161,84,16,170,8,85,2,161,37,69,150,178,213,10,160,133,80,68,89,107,44,151,130,203,84,64,82,160,2,21,64,168,160,84,89,
578 100,66,130,161,65,74,138,5,69,2,162,129,80,151,130,161,65,80,160,168,85,2,162,129,107,45,101,173,224,168,80,82,160,41,81,65,245,150,183,130,
579 161,65,81,1,74,128,165,69,2,162,203,89,106,137,89,65,81,1,81,20,11,89,107,45,101,169,74,10,82,168,21,0,10,139,45,111,0,148,1,16,
580 20,168,160,84,80,68,80,45,101,172,160,8,85,4,42,130,34,130,33,41,80,44,136,149,68,0,42,0,21,0,10,129,44,37,170,22,165,72,33,84,
581 10,138,8,138,5,5,148,22,80,84,64,4,64,4,64,2,162,203,89,107,40,42,32,42,21,65,17,65,17,64,181,148,2,88,33,66,133,0,42,0,
582 21,0,10,139,40,4,160,168,128,168,128,168,138,5,69,2,194,80,9,106,133,0,66,168,21,20,17,20,18,74,73,40,44,160,165,64,4,42,202,139,
583 42,42,22,23,128,33,64,16,170,5,128,34,45,43,40,4,160,8,128,5,64,2,162,129,81,64,176,2,214,128,168,138,168,138,169,80,74,129,107,44,
584 16,160,5,72,20,160,5,40,3,225,42,4,181,66,130,162,0,80,21,17,64,176,162,44,176,148,21,16,21,16,1,32,169,80,74,130,86,80,84,64,
585 4,64,2,160,81,2,88,95,4,124,10,88,21,0,17,20,18,160,80,0,40,4,160,8,128,5,64,2,160,1,107,64,90,1,40,11,69,13,85,32,
586 8,129,44,37,170,20,1,10,20,46,242,209,229,4,124,41,92,23,5,160,2,64,11,9,97,74,208,22,138,180,80,68,90,66,136,180,168,34,168,85,
587 82,0,136,18,166,106,35,205,41,94,105,80,175,130,34,172,8,176,32,65,65,1,65,0,40,0,136,0,136,20,64,165,105,90,87,5,72,42,84,53,
588 84,5,164,16,169,43,202,134,154,82,154,244,71,148,37,5,10,144,36,80,5,93,85,42,9,0,44,37,132,186,22,5,64,4,168,107,74,208,23,85,
589 10,174,160,136,18,150,83,94,87,154,242,189,229,148,160,26,146,4,80,2,4,9,130,210,168,128,8,129,66,133,16,41,9,97,64,4,128,37,66,10,
590 176,85,130,130,65,11,66,188,165,52,210,148,215,162,61,2,128,161,82,0,1,2,171,168,96,9,10,114,232,154,32,83,4,69,224,8,11,170,173,72,
591 21,92,37,74,61,232,83,94,87,154,84,43,210,136,1,5,36,8,176,85,64,80,214,128,8,128,5,64,149,1,10,128,136,129,74,224,180,85,130,172,
592 8,176,32,107,46,87,162,60,210,188,211,74,87,189,37,64,8,17,65,72,0,170,21,13,65,33,72,81,2,93,11,161,66,136,0,136,180,0,10,170,
593 130,145,65,72,21,10,111,42,20,215,189,237,154,87,154,84,41,97,169,1,72,170,4,88,42,234,26,210,18,132,168,146,150,133,46,88,80,0,32,176,
594 85,0,82,2,145,65,72,16,4,42,35,222,247,182,217,175,108,215,189,229,74,85,64,132,32,16,101,5,32,2,168,84,18,0,93,10,146,149,17,30,
595 148,46,136,0,149,8,42,212,101,2,12,170,66,40,40,82,134,188,166,137,108,214,196,137,123,102,189,10,80,0,82,12,164,20,50,144,98,42,145,64,
596 20,16,1,11,66,149,16,175,163,209,16,165,161,82,136,11,5,85,2,12,170,49,20,132,34,170,175,71,148,173,182,107,98,68,182,219,109,188,175,40,
597 4,8,69,32,162,16,97,149,70,34,130,168,64,17,40,82,202,242,161,94,136,87,162,21,16,17,1,96,69,0,34,130,140,160,49,8,164,25,65,65,
598 17,10,105,175,52,123,109,182,61,183,154,107,209,16,20,20,98,16,130,134,33,6,34,169,20,0,1,52,68,66,189,10,87,161,74,84,71,162,33,122,
599 1,1,72,50,128,196,85,24,132,81,149,85,67,68,53,239,109,182,219,30,37,179,91,108,165,42,0,84,132,33,5,12,65,134,34,144,128,170,184,80,
600 180,121,80,175,122,21,229,66,149,37,46,144,8,17,84,131,12,163,12,66,16,101,82,40,66,82,149,237,182,107,99,196,182,36,73,175,53,233,212,138,
601 163,12,66,10,25,72,66,42,145,96,0,137,66,149,10,242,148,175,42,61,17,10,148,72,106,69,82,17,84,98,41,8,69,82,40,0,2,36,166,189,
602 237,137,109,177,226,91,53,179,74,133,69,0,32,196,32,195,12,163,12,69,33,20,21,125,11,41,74,82,188,168,242,149,10,84,68,44,18,160,160,50,
603 170,140,164,32,196,81,136,64,34,251,222,83,68,137,108,72,241,45,137,108,215,148,168,0,4,33,8,48,162,16,80,202,65,136,170,171,0,162,74,82,
604 163,202,82,188,165,41,74,136,82,229,128,85,85,70,25,72,48,196,81,136,170,69,0,9,74,87,182,219,98,71,137,18,60,121,166,154,244,192,138,65,
605 133,12,65,66,134,32,195,42,144,128,10,9,162,21,10,242,148,166,148,175,121,80,175,162,36,53,80,81,136,164,24,132,32,162,40,196,32,17,116,67,
606 77,52,72,241,226,79,159,30,37,182,205,66,160,17,84,97,67,12,41,160,196,20,49,8,49,20,8,24,33,81,30,242,149,239,41,94,244,43,222,82,
607 188,186,2,168,16,132,32,194,136,48,194,136,48,195,41,21,122,26,243,68,143,18,60,251,33,227,199,137,53,239,74,130,138,24,97,154,10,20,40,80,
608 195,12,49,20,138,0,0,136,136,242,149,239,121,94,105,74,247,148,165,42,34,36,0,8,66,16,97,136,48,195,16,97,134,82,12,160,0,133,123,219,
609 18,36,75,35,227,207,159,30,107,102,151,144,131,16,83,65,66,133,52,24,97,67,16,131,40,40,105,41,74,87,154,87,188,210,189,239,41,94,84,68,
610 192,20,132,82,16,138,48,195,16,97,136,66,17,84,128,136,143,108,214,199,143,30,60,251,33,45,137,53,229,74,170,140,40,80,194,154,10,24,80,195,
611 16,97,149,84,3,161,80,175,121,94,107,202,247,188,165,52,168,82,250,170,168,196,33,6,33,8,48,202,48,196,82,17,64,47,123,219,18,60,73,243,
612 231,207,137,30,36,215,149,0,0,97,134,24,80,161,66,133,10,24,97,134,82,16,0,2,137,41,74,87,154,87,188,210,189,239,41,74,84,164,0,20,
613 132,81,134,33,6,24,131,12,49,8,49,21,86,143,43,109,137,30,61,145,243,231,207,137,53,183,151,82,16,97,133,10,20,40,80,161,134,20,66,16,
614 96,80,90,101,41,74,247,149,230,188,165,121,81,229,68,42,39,5,82,12,49,8,48,196,32,196,82,16,128,164,209,30,107,102,143,30,36,121,241,34,
615 91,109,229,68,5,85,24,97,136,48,162,12,48,202,65,136,10,171,133,17,10,242,163,222,82,188,165,41,74,84,41,116,0,80,85,85,33,8,66,12,
616 164,33,21,72,161,4,43,222,107,98,91,18,60,75,109,182,105,74,144,5,33,20,97,134,33,6,33,20,101,85,80,0,4,208,165,66,149,232,87,149,
617 10,82,161,94,146,160,64,21,85,72,170,66,17,72,69,85,32,2,130,34,20,211,77,52,75,109,137,109,183,189,233,192,138,164,24,138,49,8,164,34,
618 170,168,2,130,65,16,168,143,42,60,165,71,149,16,168,136,158,10,0,10,160,164,85,34,170,169,1,65,122,60,175,52,214,205,109,182,222,107,209,18,
619 10,10,66,41,8,69,82,42,170,128,2,240,68,73,74,136,242,162,20,178,149,17,19,72,0,0,40,42,170,170,170,170,168,40,4,40,82,148,215,154,
620 246,205,53,239,122,33,96,21,85,82,17,85,72,160,170,0,161,134,148,42,34,20,168,133,68,42,34,33,116,194,10,160,170,160,170,160,170,0,11,133,
621 17,17,229,123,205,123,222,247,161,81,3,80,80,82,2,170,168,42,128,44,33,77,17,37,44,168,90,21,40,154,36,40,0,21,0,85,0,80,80,0,
622 0,0,242,149,10,242,189,239,121,74,84,74,0,5,84,20,21,65,84,0,0,32,30,137,68,73,81,17,17,40,137,78,144,192,0,1,64,21,64,0,
623 2,1,130,34,74,82,148,175,41,74,82,162,97,0,80,5,0,5,0,0,0,128,126,148,74,34,34,37,17,52,211,240,10,128,0,0,0,0,64,48,
624 166,136,133,66,148,165,42,21,19,192,0,0,1,64,0,2,1,12,18,9,77,18,136,148,77,19,78,144,132,2,0,0,0,16,0,135,10,37,10,136,
625 82,149,10,90,80,48,0,0,0,0,0,128,97,195,78,148,165,17,52,77,52,248,6,161,0,0,0,192,56,38,136,136,136,84,66,162,34,120,66,0,
626 0,1,0,132,56,125,52,165,41,68,211,167,195,0,128,6,1,128,112,160,81,40,136,136,84,68,77,33,128,4,2,16,8,67,240,78,148,166,137,211,
627 79,72,112,8,6,1,0,225,250,81,40,84,68,68,211,192,33,0,128,66,24,127,211,74,105,74,116,255,14,1,128,66,24,97,166,148,68,74,34,37,
628 60,33,0,192,48,195,255,233,77,52,233,208,63,132,33,132,48,225,72,37,41,74,34,81,62,24,96,24,7,15,254,157,58,83,211,255,12,33,134,28,
629 63,210,148,74,82,159,195,0,195,135,240,79,233,211,167,255,248,112,225,195,255,77,41,74,122,67,132,48,195,255,253,58,126,159,255,15,195,135,135,244,
630 210,154,83,252,48,225,195,255,233,250,127,79,255,15,15,135,255,211,74,116,240,225,195,130,67,244,10,127,79,233,4,252,18,31,135,135,255,167,77,63,
631 240,225,255,130,96,159,253,63,167,252,18,28,60,63,255,77,52,255,225,195,255,255,254,159,255,208,63,195,240,255,160,39,78,159,240,225,255,255,255,79,
632 255,255,254,31,135,254,157,58,127,135,135,255,255,255,79,254,129,76,18,31,135,135,254,158,158,159,15,135,255,255,253,63,255,255,252,63,135,233,244,244,
633 240,252,63,255,255,254,159,255,208,63,240,240,255,167,211,255,254,31,255,255,254,159,255,255,240,254,9,10,127,79,255,240,255,255,255,244,255,254,129,255,
634 135,240,253,62,159,255,240,255,255,255,244,254,159,240,252,63,135,232,9,233,255,254,20,15,255,255,250,127,244,13,3,248,127,4,134,159,211,255,252,63,
635 255,255,253,1,63,253,33,252,63,240,164,41,250,127,255,194,129,255,255,250,2,127,255,255,195,255,255,211,255,252,63,255,255,253,63,255,255,225,255,255,
636 253,63,255,225,64,255,255,250,127,244,10,67,252,16,63,252,19,253,63,255,193,33,255,255,244,255,255,255,135,255,255,244,255,255,225,255,255,255,79,253,
637 48,72,127,15,254,9,255,211,255,255,225,255,255,233,255,164,40,31,225,255,255,253,63,255,240,64,255,255,253,63,244,248,127,15,252,19,255,211,255,255,
638 248,127,255,250,127,164,18,31,248,127,130,66,159,244,255,255,252,63,255,253,63,250,7,252,63,255,255,167,255,255,240,255,255,255,79,255,255,135,255,255,
639 250,127,255,252,63,255,255,167,255,255,135,255,255,211,255,255,224,129,255,255,250,2,127,255,252,63,255,255,211,255,254,9,13,3,255,255,211,255,255,225,
640 255,255,254,144,79,255,248,82,20,15,255,250,127,255,255,15,255,255,167,255,255,194,129,255,255,254,159,255,255,15,255,255,160,39,255,255,194,129,255,255,
641 250,2,127,255,224,129,255,255,244,255,255,130,67,255,255,253,63,255,255,4,15,255,255,167,255,255,135,255,255,211,255,255,254,31,255,254,159,255,195,255,
642 255,253,63,255,255,252,63,255,255,211,255,254,31,255,254,159,255,255,254,31,255,255,211,255,240,255,255,79,255,255,254,31,255,255,255,64,167,255,195,255,
643 254,128,159,255,255,240,164,48
644 };
645 #endif /* UMPAH_H_ */
+
+ + + +