mirror of
https://github.com/storytold/soundcraft.git
synced 2026-10-24 10:36:46 -06:00
Merge pull request #867 from Silvertree2010/fix/h1222-copy-range-keeps-fades-of-the-or
Reset fades at cut edges in copy_range
This commit is contained in:
@@ -149,9 +149,11 @@ pub fn copy_range(s: &Session, track: TrackId, range: Range) -> Vec<Clip> {
|
|||||||
let old = part.start;
|
let old = part.start;
|
||||||
part.trim_start_to(isect.start);
|
part.trim_start_to(isect.start);
|
||||||
rebase_midi_start(&mut part, old, t);
|
rebase_midi_start(&mut part, old, t);
|
||||||
|
part.fade_in = Fade::default();
|
||||||
}
|
}
|
||||||
if isect.end < part.end() {
|
if isect.end < part.end() {
|
||||||
part.trim_end_to(isect.end);
|
part.trim_end_to(isect.end);
|
||||||
|
part.fade_out = Fade::default();
|
||||||
}
|
}
|
||||||
part.start -= range.start;
|
part.start -= range.start;
|
||||||
out.push(part);
|
out.push(part);
|
||||||
@@ -874,6 +876,20 @@ mod tests {
|
|||||||
s.track(t).unwrap().clips().iter().map(|c| (c.start, c.length, c.source_offset())).collect()
|
s.track(t).unwrap().clips().iter().map(|c| (c.start, c.length, c.source_offset())).collect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn copy_range_resets_fades_at_cut_edges() {
|
||||||
|
let (mut s, t) = session_with_clip();
|
||||||
|
if let Some(c) = s.track_mut(t).and_then(|t| t.playlist_mut()).and_then(|p| p.clips.first_mut()) {
|
||||||
|
c.fade_in = Fade { len: 100, shape: FadeShape::Linear, curvature: 0.0 };
|
||||||
|
c.fade_out = Fade { len: 100, shape: FadeShape::Linear, curvature: 0.0 };
|
||||||
|
}
|
||||||
|
let fades = |r: Range| -> Vec<(Samples, Samples)> { copy_range(&s, t, r).iter().map(|c| (c.fade_in.len, c.fade_out.len)).collect() };
|
||||||
|
assert_eq!(fades(Range::new(2000, 3000)), vec![(0, 0)]);
|
||||||
|
assert_eq!(fades(Range::new(0, 3000)), vec![(100, 0)]);
|
||||||
|
assert_eq!(fades(Range::new(2000, 6000)), vec![(0, 100)]);
|
||||||
|
assert_eq!(fades(Range::new(0, 6000)), vec![(100, 100)]);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn separate_splits_and_heal_rejoins() {
|
fn separate_splits_and_heal_rejoins() {
|
||||||
let (mut s, t) = session_with_clip();
|
let (mut s, t) = session_with_clip();
|
||||||
|
|||||||
Reference in New Issue
Block a user