Audio-Nama

 view release on metacpan or  search on metacpan

lib/Audio/Nama/Initializations.pm  view on Meta::CPAN

				my $delay = shift();
				modify_effect($id,2,undef,$delay)
			},
	#	this causes beeping during make test
	#	beep_command					=> 'beep -f 350 -l 700',
		seek_end_margin	=>10,
		midi_record_buffer => 'midi_record',
		midi_default_input_channel => 'keyboard',
		ecasound_channel_ops 		=> {map{$_,1} qw(chcopy chmove chorder chmix chmute)},
		waveform_height				=> 200,
		waveform_canvas_x			=> 2400,
		waveform_canvas_y			=> 4800,
		waveform_pixels_per_second  => 10,
		loop_chain_channel_width     => 16,

		ticks_per_quarter_note		=> 24,
		

	}, 'Audio::Nama::Config';

	{ package Audio::Nama::Config;
	use Carp;
	use Audio::Nama::Globals qw(:singletons);
	use v5.36;
	our @ISA = 'Audio::Nama::Object'; #  for ->dump and ->as_hash methods

	sub serialize_formats { split " ", $_[0]->{serialize_formats} }

	sub hardware_latency {
		no warnings 'uninitialized';
		$config->{devices}->{$config->{alsa_capture_device}}{hardware_latency} || 0
	}
 	sub buffersize {
		package Audio::Nama;
 		Audio::Nama::ChainSetup::setup_requires_realtime()
			?  $config->{engine_buffersize}->{realtime}->{default}
			:  $config->{engine_buffersize}->{nonrealtime}->{default}
 	}
	sub globals_realtime {
		Audio::Nama::ChainSetup::setup_requires_realtime()
			? $config->{ecasound_globals}->{realtime}
			: $config->{ecasound_globals}->{nonrealtime}
	}
	} # end Audio::Nama::Config package

	$prompt = "nama ('h' for help)> ";

	$this_bus = 'Main';
	
	$setup->{_old_snapshot} = {};
	$setup->{_last_rec_tracks} = [];

	$mastering->{track_names} = [ qw(Eq Low Mid High Boost) ];

	init_wav_memoize() if $config->{memoize};

}

sub initialize_interfaces {
	
	logsub((caller(0))[3]);
	
	if ( $config->{opts}->{g}){
			Audio::Nama::Graphical::initialize_tk() and $ui = Audio::Nama::Graphical->new()
			or pager_newline( "Unable to load perl Tk module. Starting in console mode.")
	}
	if ( not defined $ui ){
		$ui = Audio::Nama::Text->new();
		$text->{loop} = IO::Async::Loop->new;
	}
	choose_sleep_routine();
	$config->{want_logging} = initialize_logger($config->{opts}->{L});

	logpkg(__FILE__,__LINE__,'debug', sub{"Command line options\n".  json_out($config->{opts})});

	read_config(global_config());  # from .namarc if we have one
	# set sample rate is needed for prepare_static_effects_data() and initialize_project_data()
	$config->{sample_rate} = $config->{opts}->{z} if $config->{opts}->{z};

	logpkg(__FILE__,__LINE__,'debug',sub{"Config data\n".Dumper $config});
	
	Audio::Nama::MidiEngine->new(name => $config->{midi_engine_name}) if $config->{use_midi}; 
	initialize_ecasound_engine();
		
	logpkg(__FILE__,__LINE__,'debug',"reading config file");
	if ($config->{opts}->{d}){
		pager("project_root $config->{opts}->{d} specified on command line\n");
		$config->{root_dir} = $config->{opts}->{d};
	}
	if ($config->{opts}->{p}){
		$config->{root_dir} = getcwd();
		pager("placing all files in current working directory ($config->{root_dir})\n");
	}

	# skip initializations if user (test) supplies project
	# directory
	
	first_run() unless $config->{opts}->{d}; 

	prepare_static_effects_data() unless $config->{opts}->{S};
	setup_user_customization();	# depends on effect_index() in above

	get_ecasound_iam_keywords();
	load_keywords(); # for autocompletion
	parse_midi_help();

	$ui->init_gui;
	$ui->transport_gui;
	$ui->time_gui;
	
	# fake JACK for testing environment

	if( $config->{opts}->{J}){
		parse_ports_list(get_data_section("fake_jack_lsp"));
		parse_port_latency(get_data_section("fake_jack_latency"));
		$jack->{jackd_running} = 1;
	}

	# periodically check if JACK is running, and get client/port/latency list

	sleeper(0.2); # allow time for first polling



( run in 1.141 second using v1.01-cache-2.11-cpan-5a3173703d6 )