Changeset 508

Show
Ignore:
Timestamp:
10/06/07 10:28:35 (1 year ago)
Author:
shans
Message:

Layers now accept plugins instead of sounds (getting closer to original remix
approach). To embed sounds, use Plugin.from_sound.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • ocaml-remix/trunk/Makefile

    r502 r508  
    11ALL: all 
    22 
    3 COMPONENTS = remix time volume sound tone wave envelope transparency layer
    4                         track instrument ladspa 
     3COMPONENTS = remix time volume sound plugin tone wave envelope transparency
     4                        layer track instrument ladspa  
    55TESTS = sound_test_sin layer_test_sins track_test_sins instrument_test \ 
    66                        ladspa_test 
  • ocaml-remix/trunk/instrument.ml

    r499 r508  
    99 
    1010let 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)) 
    1213                  (Time.Beats instrument.position, Time.Beats length); 
    1314  instrument.position <- instrument.position +. length;; 
  • ocaml-remix/trunk/instrument_test.ml

    r499 r508  
    2323              (d, 0, 0.5); (e flat, 0, 0.5); (f sharp, 0, 0.5); (g, 0, 2.5)]);; 
    2424 
    25 let sound = Layer.to_sound layer;; 
     25let sound = Layer.to_sound layer Sound.silence;; 
    2626 
    2727Sound.preview remix sound (Time.Beats 0., Time.Beats 12.)  
  • ocaml-remix/trunk/layer.ml

    r488 r508  
    11(** a layer consists of a list of sounds with start times and lengths, and 
    22    a transparency list (nb: default transparency is 0.0) *) 
    3 type layer = {mutable la_sounds:(Time.extent * Sound.sound) list; 
     3type layer = {mutable la_plugins:(Time.extent * Plugin.plugin) list; 
    44              mutable la_transparency: 
    55              (Time.extent * Transparency.transparency) list};; 
     
    77exception OverlappingSounds;; 
    88 
    9 let empty () = {la_sounds=[]; la_transparency=[]};; 
     9let empty () = {la_plugins=[]; la_transparency=[]};; 
    1010 
    11 let add_sound layer sound extent = 
    12   layer.la_sounds <- (extent, sound)::layer.la_sounds;; 
     11let add_plugin layer plugin extent = 
     12  layer.la_plugins <- (extent, plugin)::layer.la_plugins;; 
    1313 
    1414let add_transparency layer trans extent = 
     
    2020  let rec _print_sounds l = match l with 
    2121    | ((start, length), sound)::t -> ( 
    22             Printf.printf "\tsound from %s len %s\n"  
     22            Printf.printf "\tplugin from %s len %s\n"  
    2323                              (Time.to_string start) (Time.to_string length); 
    2424            _print_sounds t) 
     
    3131    | [] -> () in 
    3232  Printf.printf "layer is:\n";  
    33   _print_sounds layer.la_sounds; 
     33  _print_sounds layer.la_plugins; 
    3434  _print_transparencies layer.la_transparency;; 
    3535 
     
    5757 *          <----render----> 
    5858 *) 
    59 let to_sound layer remix layer_extent (render_start, render_length) =  
     59let to_sound layer undersound remix layer_extent (render_start, render_length) = 
    6060  let raw_render_start = Time.time_to_raw_time remix render_start in 
    6161  let raw_render_length = Time.time_to_raw_time remix render_length in 
     
    7272          let rl = (min (raw_render_start + raw_render_length)  
    7373                            (raw_start + raw_length)) - rs in 
    74           let raw_sound = s remix (start,length)  
     74          let raw_sound = (s undersound) remix (start,length)  
    7575                                (Time.Samples rs, Time.Samples rl) in 
    7676          Array.blit raw_sound 0 sound 
     
    7878                         (rl * Remix.channels remix)); 
    7979        _layer_to_sound t) in 
    80   _layer_to_sound layer.la_sounds; 
     80  _layer_to_sound layer.la_plugins; 
    8181  sound;; 
    8282 
  • ocaml-remix/trunk/layer.mli

    r488 r508  
    44 
    55(** add_sound remix layer sound start length *) 
    6 val add_sound : layer -> Sound.sound -> Time.extent -> unit;; 
     6val add_plugin : layer -> Plugin.plugin -> Time.extent -> unit;; 
    77 
    8 val to_sound : layer -> Sound.sound;; 
     8val to_sound : layer -> Sound.sound -> Sound.sound;; 
    99 
    1010val add_transparency : layer -> Transparency.transparency ->  
  • ocaml-remix/trunk/layer_test_sins.ml

    r499 r508  
    77                                                          (Time.Seconds 0.1);; 
    88 
    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.);; 
     9let a    = Plugin.from_sound  
     10                (Envelope.apply e (Wave.sin    (Volume.constant 30000.) 440.));; 
     11let hi_a = Plugin.from_sound  
     12                (Envelope.apply e (Wave.square (Volume.constant 20000.) 880.));; 
     13let e    = Plugin.from_sound 
     14                (Envelope.apply e (Wave.tri    (Volume.constant 20000.) 660.));; 
    1215 
    1316let layer = Layer.empty ();; 
    14 Layer.add_sound layer a    (Time.Seconds 2.0, Time.Seconds 4.0);; 
    15 Layer.add_sound layer hi_a (Time.Seconds 6.0, Time.Seconds 2.0);; 
    16 Layer.add_sound layer e    (Time.Seconds 12.0, Time.Seconds 3.0);; 
     17Layer.add_plugin layer a    (Time.Seconds 2.0, Time.Seconds 4.0);; 
     18Layer.add_plugin layer hi_a (Time.Seconds 6.0, Time.Seconds 2.0);; 
     19Layer.add_plugin layer e    (Time.Seconds 12.0, Time.Seconds 3.0);; 
    1720 
    1821Layer.print layer;; 
    19 let sound = Layer.to_sound layer;; 
     22let sound = Layer.to_sound layer Sound.silence;; 
    2023                                                             
    2124Sound.preview remix sound (Time.Seconds 0.0, Time.Seconds 15.0)  
  • ocaml-remix/trunk/sound.ml

    r501 r508  
    55   length *) 
    66type sound = Remix.remix -> Time.extent -> Time.extent -> raw_sound;;  
     7 
     8let silence r e (s,l) = 
     9  let raw_length = Time.time_to_raw_samples r l in 
     10  Array.create raw_length 0;; 
    711 
    812(* note: length applies to raw sounds *) 
  • ocaml-remix/trunk/sound.mli

    r501 r508  
    44    data *) 
    55type sound = Remix.remix -> Time.extent -> Time.extent -> raw_sound;;  
     6 
     7val silence : sound;; 
    68 
    79(** write_sound remix output sound start length *) 
  • ocaml-remix/trunk/track.ml

    r488 r508  
    9393    maybe_gen_tcache track pos remix; 
    9494    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) 
    9697                          (Time.Samples raw_start, Time.Samples raw_length) in 
    97     let _add_l_to_out layer = _add_s_to_out (Layer.to_sound layer) in 
     98    (*let _add_l_to_out layer = _add_s_to_out (Layer.to_sound layer) in*) 
    9899    let (layer, pretrans) = layers.(pos) in 
    99100    let (translist, _) = strip pretrans in 
     
    101102      if raw_length == 0 then () else match l with 
    102103      | [] -> ( 
    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*) 
    104108      ) 
    105109      | elem::r -> ( 
     
    107111            (* case 1,2 *) 
    108112            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; *) 
    110117            _render_at_2 elem.tce_raw_start (raw_length - diff) (elem::r) 
    111118          ) else ( 
     
    114121            let render_end = raw_start + raw_length in 
    115122            let l = (min trans_end render_end) - raw_start in  
    116             let sound1 = (Layer.to_sound layer) in 
    117123            let sound2 = _render_at (pos + 1) in 
     124            let sound1 = (Layer.to_sound layer sound2) in 
    118125            let trans = elem.tce_transparency in  
    119126            let ext = (Time.Samples raw_start, Time.Samples l) in 
    120127            _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; 
    123129            _render_at_2 (raw_start + l) (raw_length - l) r 
    124130          ) 
     
    127133    let raw_length = Time.time_to_raw_time remix length in 
    128134    _render_at_2 raw_start raw_length translist; 
    129     Layer.to_sound olayer remix extent (start, length) in 
     135    Layer.to_sound olayer Sound.silence remix extent (start, length) in 
    130136  _render_at 0 remix extent (start,length);; 
    131137       
  • ocaml-remix/trunk/track_test_sins.ml

    r499 r508  
    88let e = Wave.sin (Volume.constant 20000.) (Tone.note Tone.e 1);; 
    99let [a; e] = List.map (Envelope.apply env) [a; e];; 
     10let [a; e] = List.map Plugin.from_sound [a; e];; 
     11 
    1012 
    1113(* AAAA  AAAA EEEE  
     
    1618let trans1 = Transparency.linear_ramp 0.0 1.0;; 
    1719let trans2 = Transparency.linear_ramp 1.0 0.0;; 
    18 Layer.add_sound layer1 a (Time.Seconds 0.0, Time.Seconds 4.0);; 
    19 Layer.add_sound layer1 a (Time.Seconds 6.0, Time.Seconds 4.0);; 
    20 Layer.add_sound layer1 e (Time.Seconds 11.0, Time.Seconds 4.0);; 
     20Layer.add_plugin layer1 a (Time.Seconds 0.0, Time.Seconds 4.0);; 
     21Layer.add_plugin layer1 a (Time.Seconds 6.0, Time.Seconds 4.0);; 
     22Layer.add_plugin layer1 e (Time.Seconds 11.0, Time.Seconds 4.0);; 
    2123Layer.add_transparency layer1 trans1 (Time.Seconds 0.0, Time.Seconds 4.0);; 
    2224Layer.add_transparency layer1 trans1 (Time.Seconds 8.0, Time.Seconds 4.0);; 
     
    2426 
    2527let layer2 = Layer.empty ();; 
    26 Layer.add_sound layer2 e (Time.Seconds 0.0, Time.Seconds 4.0);; 
    27 Layer.add_sound layer2 e (Time.Seconds 5.0, Time.Seconds 6.0);; 
    28 Layer.add_sound layer2 a (Time.Seconds 12.0, Time.Seconds 4.0);; 
     28Layer.add_plugin layer2 e (Time.Seconds 0.0, Time.Seconds 4.0);; 
     29Layer.add_plugin layer2 e (Time.Seconds 5.0, Time.Seconds 6.0);; 
     30Layer.add_plugin layer2 a (Time.Seconds 12.0, Time.Seconds 4.0);; 
    2931 
    3032let track = Track.empty ();;