| | 6 | |
|---|
| | 7 | let get_ports ladspa = |
|---|
| | 8 | let ports = Ladspa_raw.port_count ladspa in |
|---|
| | 9 | let rec _portdesc n = |
|---|
| | 10 | if n = ports then [] |
|---|
| | 11 | else (n, Ladspa_raw.port_descriptor ladspa n)::_portdesc (n + 1) in |
|---|
| | 12 | _portdesc 0 |
|---|
| | 13 | |
|---|
| | 14 | let set_control_value plugin handle port value = |
|---|
| | 15 | let v = Ladspa_raw.control_value_to_buffer value in |
|---|
| | 16 | Ladspa_raw.connect_port plugin handle port v;; |
|---|
| | 17 | |
|---|
| | 18 | let ladspa_init func ladspa handle = |
|---|
| | 19 | let ports = get_ports ladspa in |
|---|
| | 20 | let inControlPorts = List.filter (function (a,(b,c)) -> |
|---|
| | 21 | b = Ladspa_raw.Input && c = Ladspa_raw.Control) ports in |
|---|
| | 22 | List.iter (function p -> set_control_value ladspa handle p (func p)) |
|---|
| | 23 | (List.map fst inControlPorts); |
|---|
| | 24 | let outControlPorts = List.filter (function (a,(b,c)) -> |
|---|
| | 25 | b = Ladspa_raw.Output && c = Ladspa_raw.Control) ports in |
|---|
| | 26 | List.iter (function p -> set_control_value ladspa handle p 0.0) |
|---|
| | 27 | (List.map fst outControlPorts);; |
|---|
| 43 | | if List.length inAudioPorts = 1 && List.length outAudioPorts = 1 then ( |
|---|
| | 61 | let num_in = List.length inAudioPorts in |
|---|
| | 62 | let num_out = List.length outAudioPorts in |
|---|
| | 63 | let create_in_buffers n sound length = |
|---|
| | 64 | let b = Array.init n (function _ -> Ladspa_raw.empty_buffer length) in |
|---|
| | 65 | Ladspa_raw.raw_sound_to_buffers sound b length; b in |
|---|
| | 66 | let create_out_buffers n length = |
|---|
| | 67 | Array.init n (function _ -> Ladspa_raw.empty_buffer length) in |
|---|
| | 68 | let connect portlist portpos h b i = |
|---|
| | 69 | Ladspa_raw.connect_port ladspa h.(i) (fst (List.nth portlist portpos)) |
|---|
| | 70 | b.(i) in |
|---|
| | 71 | if num_in = 1 && num_out = 1 then ( |
|---|
| 52 | | Ladspa_raw.connect_port ladspa handles.(i) (fst (List.hd inAudioPorts)) |
|---|
| 53 | | buffers.(i); |
|---|
| 54 | | Ladspa_raw.connect_port ladspa handles.(i) (fst (List.hd outAudioPorts)) |
|---|
| 55 | | outbuffers.(i); |
|---|
| | 77 | connect inAudioPorts 0 handles buffers i; |
|---|
| | 78 | connect outAudioPorts 0 handles outbuffers i; |
|---|
| | 79 | Ladspa_raw.run ladspa handles.(i) raw_length |
|---|
| | 80 | ) done; |
|---|
| | 81 | Ladspa_raw.buffers_to_raw_sound outbuffers raw_length |
|---|
| | 82 | ) else if num_in = 0 && num_out = 1 then ( |
|---|
| | 83 | let channels = Remix.channels remix in |
|---|
| | 84 | let outbuffers = create_out_buffers channels raw_length in |
|---|
| | 85 | for i = 0 to (channels - 1) do ( |
|---|
| | 86 | connect outAudioPorts 0 handles outbuffers i; |
|---|