mirror of
				https://github.com/TomHarte/CLK.git
				synced 2025-11-04 00:16:26 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
//
 | 
						|
//  AudioToggle.hpp
 | 
						|
//  Clock Signal
 | 
						|
//
 | 
						|
//  Created by Thomas Harte on 17/04/2018.
 | 
						|
//  Copyright 2018 Thomas Harte. All rights reserved.
 | 
						|
//
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include "Outputs/Speaker/Implementation/BufferSource.hpp"
 | 
						|
#include "Concurrency/AsyncTaskQueue.hpp"
 | 
						|
 | 
						|
namespace Audio {
 | 
						|
 | 
						|
/*!
 | 
						|
	Provides a sample source that can programmatically be set to one of two values.
 | 
						|
*/
 | 
						|
class Toggle: public Outputs::Speaker::BufferSource<Toggle, false> {
 | 
						|
public:
 | 
						|
	Toggle(Concurrency::AsyncTaskQueue<false> &audio_queue);
 | 
						|
 | 
						|
	template <Outputs::Speaker::Action action>
 | 
						|
	void apply_samples(const std::size_t number_of_samples, Outputs::Speaker::MonoSample *const target) {
 | 
						|
		Outputs::Speaker::fill<action>(target, target + number_of_samples, level_);
 | 
						|
	}
 | 
						|
	void set_sample_volume_range(const std::int16_t range);
 | 
						|
	bool is_zero_level() const {
 | 
						|
		return !level_;
 | 
						|
	}
 | 
						|
 | 
						|
	void set_output(bool enabled);
 | 
						|
	bool get_output() const;
 | 
						|
 | 
						|
private:
 | 
						|
	// Accessed on the calling thread.
 | 
						|
	bool is_enabled_ = false;
 | 
						|
	Concurrency::AsyncTaskQueue<false> &audio_queue_;
 | 
						|
 | 
						|
	// Accessed on the audio thread.
 | 
						|
	int16_t level_ = 0, volume_ = 0;
 | 
						|
	bool level_active_ = false;
 | 
						|
};
 | 
						|
 | 
						|
}
 |