Changeset 508
- Timestamp:
- 10/06/07 10:28:35 (1 year ago)
- Files:
-
- ocaml-remix/trunk/Makefile (modified) (1 diff)
- ocaml-remix/trunk/instrument.ml (modified) (1 diff)
- ocaml-remix/trunk/instrument_test.ml (modified) (1 diff)
- ocaml-remix/trunk/layer.ml (modified) (7 diffs)
- ocaml-remix/trunk/layer.mli (modified) (1 diff)
- ocaml-remix/trunk/layer_test_sins.ml (modified) (1 diff)
- ocaml-remix/trunk/sound.ml (modified) (1 diff)
- ocaml-remix/trunk/sound.mli (modified) (1 diff)
- ocaml-remix/trunk/track.ml (modified) (5 diffs)
- ocaml-remix/trunk/track_test_sins.ml (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
ocaml-remix/trunk/Makefile
r502 r508 1 1 ALL: all 2 2 3 COMPONENTS = remix time volume sound tone wave envelope transparency layer\4 track instrument ladspa3 COMPONENTS = remix time volume sound plugin tone wave envelope transparency \ 4 layer track instrument ladspa 5 5 TESTS = sound_test_sin layer_test_sins track_test_sins instrument_test \ 6 6 ladspa_test ocaml-remix/trunk/instrument.ml
r499 r508 9 9 10 10 let add_note instrument layer amplitude tone length = 11 Layer.add_sound layer (instrument.sound_function amplitude tone) 11 Layer.add_plugin layer 12 (Plugin.from_sound (instrument.sound_function amplitude tone)) 12 13 (Time.Beats instrument.position, Time.Beats length); 13 14 instrument.position <- instrument.position +. length;; ocaml-remix/trunk/instrument_test.ml
r499 r508 23 23 (d, 0, 0.5); (e flat, 0, 0.5); (f sharp, 0, 0.5); (g, 0, 2.5)]);; 24 24 25 let sound = Layer.to_sound layer ;;25 let sound = Layer.to_sound layer Sound.silence;; 26 26 27 27 Sound.preview remix sound (Time.Beats 0., Time.Beats 12.) ocaml-remix/trunk/layer.ml
r488 r508 1 1 (** a layer consists of a list of sounds with start times and lengths, and 2 2 a transparency list (nb: default transparency is 0.0) *) 3 type layer = {mutable la_ sounds:(Time.extent * Sound.sound) list;3 type layer = {mutable la_plugins:(Time.extent * Plugin.plugin) list; 4 4 mutable la_transparency: 5 5 (Time.extent * Transparency.transparency) list};; … … 7 7 exception OverlappingSounds;; 8 8 9 let empty () = {la_ sounds=[]; la_transparency=[]};;9 let empty () = {la_plugins=[]; la_transparency=[]};; 10 10 11 let add_ sound layer soundextent =12 layer.la_ sounds <- (extent, sound)::layer.la_sounds;;11 let add_plugin layer plugin extent = 12 layer.la_plugins <- (extent, plugin)::layer.la_plugins;; 13 13 14 14 let add_transparency layer trans extent = … … 20 20 let rec _print_sounds l = match l with 21 21 | ((start, length), sound)::t -> ( 22 Printf.printf "\t soundfrom %s len %s\n"22 Printf.printf "\tplugin from %s len %s\n" 23 23 (Time.to_string start) (Time.to_string length); 24 24 _print_sounds t) … … 31 31 | [] -> () in 32 32 Printf.printf "layer is:\n"; 33 _print_sounds layer.la_ sounds;33 _print_sounds layer.la_plugins; 34 34 _print_transparencies layer.la_transparency;; 35 35 … … 57 57 * <----render----> 58 58 *) 59 let to_sound layer remix layer_extent (render_start, render_length) =59 let to_sound layer undersound remix layer_extent (render_start, render_length) = 60 60 let raw_render_start = Time.time_to_raw_time remix render_start in 61 61 let raw_render_length = Time.time_to_raw_time remix render_length in … … 72 72 let rl = (min (raw_render_start + raw_render_length) 73 73 (raw_start + raw_length)) - rs in 74 let raw_sound = sremix (start,length)74 let raw_sound = (s undersound) remix (start,length) 75 75 (Time.Samples rs, Time.Samples rl) in 76 76 Array.blit raw_sound 0 sound … … 78 78 (rl * Remix.channels remix)); 79 79 _layer_to_sound t) in 80 _layer_to_sound layer.la_ sounds;80 _layer_to_sound layer.la_plugins; 81 81 sound;; 82 82 ocaml-remix/trunk/layer.mli
r488 r508 4 4 5 5 (** add_sound remix layer sound start length *) 6 val add_ sound : layer -> Sound.sound-> Time.extent -> unit;;6 val add_plugin : layer -> Plugin.plugin -> Time.extent -> unit;; 7 7 8 val to_sound : layer -> Sound.sound ;;8 val to_sound : layer -> Sound.sound -> Sound.sound;; 9 9 10 10 val add_transparency : layer -> Transparency.transparency -> ocaml-remix/trunk/layer_test_sins.ml
r499 r508 7 7 (Time.Seconds 0.1);; 8 8 9 let a = Envelope.apply e (Wave.sin (Volume.constant 30000.) 440.);; 10 let hi_a = Envelope.apply e (Wave.square (Volume.constant 20000.) 880.);; 11 let e = Envelope.apply e (Wave.tri (Volume.constant 20000.) 660.);; 9 let a = Plugin.from_sound 10 (Envelope.apply e (Wave.sin (Volume.constant 30000.) 440.));; 11 let hi_a = Plugin.from_sound 12 (Envelope.apply e (Wave.square (Volume.constant 20000.) 880.));; 13 let e = Plugin.from_sound 14 (Envelope.apply e (Wave.tri (Volume.constant 20000.) 660.));; 12 15 13 16 let layer = Layer.empty ();; 14 Layer.add_ soundlayer a (Time.Seconds 2.0, Time.Seconds 4.0);;15 Layer.add_ soundlayer hi_a (Time.Seconds 6.0, Time.Seconds 2.0);;16 Layer.add_ soundlayer e (Time.Seconds 12.0, Time.Seconds 3.0);;17 Layer.add_plugin layer a (Time.Seconds 2.0, Time.Seconds 4.0);; 18 Layer.add_plugin layer hi_a (Time.Seconds 6.0, Time.Seconds 2.0);; 19 Layer.add_plugin layer e (Time.Seconds 12.0, Time.Seconds 3.0);; 17 20 18 21 Layer.print layer;; 19 let sound = Layer.to_sound layer ;;22 let sound = Layer.to_sound layer Sound.silence;; 20 23 21 24 Sound.preview remix sound (Time.Seconds 0.0, Time.Seconds 15.0) ocaml-remix/trunk/sound.ml
r501 r508 5 5 length *) 6 6 type sound = Remix.remix -> Time.extent -> Time.extent -> raw_sound;; 7 8 let silence r e (s,l) = 9 let raw_length = Time.time_to_raw_samples r l in 10 Array.create raw_length 0;; 7 11 8 12 (* note: length applies to raw sounds *) ocaml-remix/trunk/sound.mli
r501 r508 4 4 data *) 5 5 type sound = Remix.remix -> Time.extent -> Time.extent -> raw_sound;; 6 7 val silence : sound;; 6 8 7 9 (** write_sound remix output sound start length *) ocaml-remix/trunk/track.ml
r488 r508 93 93 maybe_gen_tcache track pos remix; 94 94 let olayer = Layer.empty () in 95 let _add_s_to_out sound raw_start raw_length = Layer.add_sound olayer sound 95 let _add_s_to_out sound raw_start raw_length = Layer.add_plugin olayer 96 (Plugin.from_sound sound) 96 97 (Time.Samples raw_start, Time.Samples raw_length) in 97 let _add_l_to_out layer = _add_s_to_out (Layer.to_sound layer) in98 (*let _add_l_to_out layer = _add_s_to_out (Layer.to_sound layer) in*) 98 99 let (layer, pretrans) = layers.(pos) in 99 100 let (translist, _) = strip pretrans in … … 101 102 if raw_length == 0 then () else match l with 102 103 | [] -> ( 103 _add_l_to_out layer raw_start raw_length 104 let sound2 = _render_at (pos + 1) in 105 let sound1 = Layer.to_sound layer sound2 in 106 _add_s_to_out sound1 raw_start raw_length 107 (*_add_l_to_out layer raw_start raw_length*) 104 108 ) 105 109 | elem::r -> ( … … 107 111 (* case 1,2 *) 108 112 let diff = min (elem.tce_raw_start - raw_start) raw_length in 109 _add_l_to_out layer raw_start diff; 113 let sound2 = _render_at (pos + 1) in 114 let sound1 = Layer.to_sound layer sound2 in 115 _add_s_to_out sound1 raw_start diff; 116 (* _add_l_to_out layer raw_start diff; *) 110 117 _render_at_2 elem.tce_raw_start (raw_length - diff) (elem::r) 111 118 ) else ( … … 114 121 let render_end = raw_start + raw_length in 115 122 let l = (min trans_end render_end) - raw_start in 116 let sound1 = (Layer.to_sound layer) in117 123 let sound2 = _render_at (pos + 1) in 124 let sound1 = (Layer.to_sound layer sound2) in 118 125 let trans = elem.tce_transparency in 119 126 let ext = (Time.Samples raw_start, Time.Samples l) in 120 127 _add_s_to_out (apply_transparency sound1 ext sound2 ext 121 trans (elem.tce_start, elem.tce_length)) 122 raw_start l; 128 trans (elem.tce_start, elem.tce_length)) raw_start l; 123 129 _render_at_2 (raw_start + l) (raw_length - l) r 124 130 ) … … 127 133 let raw_length = Time.time_to_raw_time remix length in 128 134 _render_at_2 raw_start raw_length translist; 129 Layer.to_sound olayer remix extent (start, length) in135 Layer.to_sound olayer Sound.silence remix extent (start, length) in 130 136 _render_at 0 remix extent (start,length);; 131 137 ocaml-remix/trunk/track_test_sins.ml
r499 r508 8 8 let e = Wave.sin (Volume.constant 20000.) (Tone.note Tone.e 1);; 9 9 let [a; e] = List.map (Envelope.apply env) [a; e];; 10 let [a; e] = List.map Plugin.from_sound [a; e];; 11 10 12 11 13 (* AAAA AAAA EEEE … … 16 18 let trans1 = Transparency.linear_ramp 0.0 1.0;; 17 19 let trans2 = Transparency.linear_ramp 1.0 0.0;; 18 Layer.add_ soundlayer1 a (Time.Seconds 0.0, Time.Seconds 4.0);;19 Layer.add_ soundlayer1 a (Time.Seconds 6.0, Time.Seconds 4.0);;20 Layer.add_ soundlayer1 e (Time.Seconds 11.0, Time.Seconds 4.0);;20 Layer.add_plugin layer1 a (Time.Seconds 0.0, Time.Seconds 4.0);; 21 Layer.add_plugin layer1 a (Time.Seconds 6.0, Time.Seconds 4.0);; 22 Layer.add_plugin layer1 e (Time.Seconds 11.0, Time.Seconds 4.0);; 21 23 Layer.add_transparency layer1 trans1 (Time.Seconds 0.0, Time.Seconds 4.0);; 22 24 Layer.add_transparency layer1 trans1 (Time.Seconds 8.0, Time.Seconds 4.0);; … … 24 26 25 27 let layer2 = Layer.empty ();; 26 Layer.add_ soundlayer2 e (Time.Seconds 0.0, Time.Seconds 4.0);;27 Layer.add_ soundlayer2 e (Time.Seconds 5.0, Time.Seconds 6.0);;28 Layer.add_ soundlayer2 a (Time.Seconds 12.0, Time.Seconds 4.0);;28 Layer.add_plugin layer2 e (Time.Seconds 0.0, Time.Seconds 4.0);; 29 Layer.add_plugin layer2 e (Time.Seconds 5.0, Time.Seconds 6.0);; 30 Layer.add_plugin layer2 a (Time.Seconds 12.0, Time.Seconds 4.0);; 29 31 30 32 let track = Track.empty ();;
