Changeset 513

Show
Ignore:
Timestamp:
10/24/07 16:54:11 (10 months ago)
Author:
shans
Message:

Unbounded constant transparency. Fixes to track to allow this.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • ocaml-remix/trunk/continuous_sound_test.ml

    r512 r513  
    55let envelope = Note.from_envelope  
    66  (Envelope.adsr (Time.Seconds 0.1) (Time.Seconds 0.4) 0.8 (Time.Seconds 0.1));; 
     7let envelope2 = Note.from_envelope  
     8  (Envelope.adsr (Time.Seconds 0.2) (Time.Seconds 0.2) 0.9 (Time.Seconds 0.3));; 
    79 
    810let continuous = (Time.Seconds 0.0, Time.Forever);; 
     
    1315let env_layer = Layer.empty ();; 
    1416Layer.add_note env_layer  
    15           (NoteUtil.repeat (Time.Seconds 1.0) envelope) continuous;; 
     17          (NoteUtil.repeat (Time.Seconds 0.75) envelope) continuous;; 
     18Layer.add_transparency env_layer (Transparency.constant 0.5) continuous;; 
     19 
     20let env_layer2 = Layer.empty ();; 
     21Layer.add_note env_layer2 
     22          (NoteUtil.repeat (Time.Seconds 0.8) envelope2) continuous;; 
     23Layer.add_transparency env_layer2 (Transparency.constant 0.5) continuous;; 
    1624 
    1725let track = Track.empty ();; 
     26Track.add_layer track env_layer2;; 
    1827Track.add_layer track env_layer;; 
    1928Track.add_layer track sound_layer;; 
  • ocaml-remix/trunk/noteUtil.ml

    r512 r513  
     1(* shift takes an input note, and shifts its render window: 
     2 
     3    <-----------------note extent-------------------------> 
     4        <------------------------shift amount-----------<---render request---> 
     5        <---actual render---> 
     6 *) 
     7 
    18let shift slength note initsound remix extent render_extent =  
    29  let raw_rstart, raw_rlength = Time.extent_to_raw_time remix render_extent in 
    310  let raw_shift = Time.time_to_raw_time remix slength in 
    411  Printf.printf "shift (%d,%d) by %d\n%!" raw_rstart raw_rlength raw_shift; 
     12  Printf.printf "render at (%d,%d) in (%d,%d)\n%!" (raw_rstart + raw_shift) 
     13    raw_rlength (Time.time_to_raw_time remix (fst extent)) 
     14    (Time.time_to_raw_time remix (snd extent)); 
    515  note initsound remix extent 
    616          (Time.Samples (raw_rstart + raw_shift), Time.Samples raw_rlength);;  
    717 
     18(* repeat takes an input length and note, and duplicates the note with length  
     19   as the size.  e.g. 
     20 
     21   <---------------------------------------->    (input extent) 
     22   <---length---><---length---><---length--->    (actual note extents) 
     23 
     24  For a render request within a single length, this is easy: 
     25 
     26  <---length---><---length---><---length---> 
     27                  <ren-req> 
     28 
     29  Simply use a note extent of  
     30    (render_start - note_start)/length*length + note_start, length 
     31  and the existing render request. 
     32 
     33  For a render request that crosses multiple lengths, it's slightly harder: 
     34   
     35  <---length---><---length---><---length---> 
     36             <--render-request--> 
     37   
     38  We'll use a layer, add three notes of full size: 
     39 
     40  <---length---><---length---><---length---> 
     41 
     42  then render the size of the render extent out as a new note 
     43   
     44 *) 
    845let repeat length note initsound remix extent render_extent = 
    946  let raw_start, raw_length = Time.extent_to_raw_time remix render_extent in 
    1047  let raw_replength = Time.time_to_raw_time remix length in 
    1148  let reps = raw_start / raw_replength in 
    12   let repe = (raw_start + raw_length) / raw_replength in 
    13   let theshift l = shift (Time.Samples (-l)) note in 
     49  let repe = (raw_start + raw_length - 1) / raw_replength in 
    1450  if reps = repe then ( 
    15     theshift (reps * raw_replength) initsound remix  
    16                                   (fst extent, length) render_extent  
     51    note initsound remix  
     52                  (Time.Samples (reps * raw_replength), length) render_extent  
    1753  ) else ( 
    1854    let l = Layer.empty () in 
     55    let add n s len = Layer.add_note l n (Time.Samples s, Time.Samples len) in 
     56    for i = reps to repe do 
     57      add note (i * raw_replength) raw_replength 
     58    done; 
     59    Layer.to_note l initsound remix extent render_extent 
     60     
     61    (*  
    1962    let first_seg_len = ((reps + 1) * raw_replength) - raw_start in 
    2063    let last_seg_start = repe * raw_replength in 
     
    2770      add (theshift (i * raw_replength)) (i * raw_replength) raw_replength 
    2871    done; 
    29     Layer.to_note l initsound remix extent render_extent 
     72    *) 
    3073  );; 
  • ocaml-remix/trunk/track.ml

    r512 r513  
    11type tcache_elem = { 
    22    tce_raw_start: Time.raw_time; 
    3     tce_raw_length: Time.raw_time; 
    43    tce_start: Time.time; 
    54    tce_length:Time.time; 
     
    1110let gen_tcache_elem remix (start, length) trans = 
    1211  {tce_raw_start = Time.time_to_raw_time remix start; 
    13    tce_raw_length = Time.time_to_raw_time remix length; 
    1412   tce_start = start; 
    1513   tce_length = length; 
     
    117115          ) else ( 
    118116            (* case 3,4,5,6 *) 
    119             let trans_end = elem.tce_raw_start + elem.tce_raw_length in 
    120             let render_end = raw_start + raw_length in 
    121             let l = (min trans_end render_end) - raw_start in  
     117            let ext = Time.overlap remix (elem.tce_start, elem.tce_length) 
     118                        (Time.Samples raw_start, Time.Samples raw_length) in 
    122119            let sound2 = _render_at (pos + 1) in 
    123120            let sound1 = (Layer.to_note layer sound2) in 
    124121            let trans = elem.tce_transparency in  
    125             let ext = (Time.Samples raw_start, Time.Samples l) in 
     122            let raw_start, l = Time.extent_to_raw_time remix ext in 
    126123            _add_s_to_out (apply_transparency sound1 ext sound2 ext  
    127124                trans (elem.tce_start, elem.tce_length)) raw_start l; 
  • ocaml-remix/trunk/transparency.ml

    r490 r513  
    77  let _to_raw a = (Time.time_to_raw_time remix a) * Remix.channels remix in 
    88  let raw_start = _to_raw start in 
     9  if length = Time.Forever then 
     10    Printf.printf "can't create a linear ramp with an unbounded end time!\n%!"; 
    911  let raw_length = _to_raw length in 
    1012  let raw_ostart = _to_raw ostart in 
     
    1416                      float_of_int raw_length *. (end_val -. start_val) in 
    1517  Array.init raw_olength _fill;; 
     18 
     19let constant value remix size (rstart, rlength) = 
     20  Array.create (Time.time_to_raw_samples remix rlength) value;; 
  • ocaml-remix/trunk/transparency.mli

    r488 r513  
    44      -> raw_transparency;; 
    55 
    6 val linear_ramp : float -> float -> transparency 
     6val linear_ramp : float -> float -> transparency;; 
     7 
     8val constant : float -> transparency;;