kira 0.7.1

Expressive audio library for games
Documentation
use ringbuf::HeapRb;

use crate::{
	clock::clock_info::MockClockInfoProviderBuilder,
	dsp::Frame,
	manager::command::MixerCommand,
	track::{SubTrackId, Track, TrackBuilder, TrackRoutes},
};

use super::Mixer;

#[test]
fn parent_routing() {
	let (unused_sub_track_producer, _) = HeapRb::new(1).split();
	let mut mixer = Mixer::new(100, unused_sub_track_producer, 1, TrackBuilder::new());
	let sub_track_controller = mixer.sub_track_controller();
	let parent_track_id = SubTrackId(sub_track_controller.try_reserve().unwrap());
	mixer.run_command(MixerCommand::AddSubTrack(
		parent_track_id,
		Track::new(TrackBuilder::new().volume(0.5)),
	));
	let child_track_id = SubTrackId(sub_track_controller.try_reserve().unwrap());
	mixer.run_command(MixerCommand::AddSubTrack(
		child_track_id,
		Track::new(
			TrackBuilder::new().routes(TrackRoutes::empty().with_route(parent_track_id, 0.5)),
		),
	));
	mixer
		.track_mut(child_track_id.into())
		.unwrap()
		.add_input(Frame::from_mono(1.0));
	assert_eq!(
		mixer.process(1.0, &MockClockInfoProviderBuilder::new(0).build()),
		Frame::from_mono(0.25)
	);
}

#[test]
fn send_routing() {
	let (unused_sub_track_producer, _) = HeapRb::new(1).split();
	let mut mixer = Mixer::new(100, unused_sub_track_producer, 1, TrackBuilder::new());
	let sub_track_controller = mixer.sub_track_controller();
	let send_track_id = SubTrackId(sub_track_controller.try_reserve().unwrap());
	mixer.run_command(MixerCommand::AddSubTrack(
		send_track_id,
		Track::new(TrackBuilder::new().volume(0.5)),
	));
	let other_track_id = SubTrackId(sub_track_controller.try_reserve().unwrap());
	mixer.run_command(MixerCommand::AddSubTrack(
		other_track_id,
		Track::new(TrackBuilder::new().routes(TrackRoutes::new().with_route(send_track_id, 0.5))),
	));
	mixer
		.track_mut(other_track_id.into())
		.unwrap()
		.add_input(Frame::from_mono(1.0));
	assert_eq!(
		mixer.process(1.0, &MockClockInfoProviderBuilder::new(0).build()),
		Frame::from_mono(1.25)
	);
}