///|
/// Create a new voice with loop points from an audio source.
pub fn new_voice_with_loop(
  mixer : Mixer,
  source : AudioSource,
  loop_start : Int,
  loop_end : Int,
  gain? : Float = 1.0,
  pan? : Float = 0.0,
  looping? : Bool = true,
) -> Voice {
  let id = VoiceId(mixer.next_voice_id)
  mixer.next_voice_id = mixer.next_voice_id + 1
  let sample_rate = source_sample_rate(source)
  Voice::{
    id,
    source,
    position: 0.0,
    gain,
    pan,
    state: VoiceState::Playing,
    looping,
    sample_rate,
    loop_start,
    loop_end,
    envelope: None,
    effects: [],
  }
}