From: <sag...@us...> - 2014-11-10 00:27:58
|
Revision: 4579 http://sourceforge.net/p/modplug/code/4579 Author: saga-games Date: 2014-11-10 00:27:49 +0000 (Mon, 10 Nov 2014) Log Message: ----------- [New] openmpt123: Added possibility to change playback tempo and pitch through openmpt::ext::interactive. Modified Paths: -------------- trunk/OpenMPT/libopenmpt/dox/changelog.md trunk/OpenMPT/openmpt123/openmpt123.cpp Modified: trunk/OpenMPT/libopenmpt/dox/changelog.md =================================================================== --- trunk/OpenMPT/libopenmpt/dox/changelog.md 2014-11-10 00:01:55 UTC (rev 4578) +++ trunk/OpenMPT/libopenmpt/dox/changelog.md 2014-11-10 00:27:49 UTC (rev 4579) @@ -20,6 +20,8 @@ * [Bug] The -autotools tarballs were not working at all. * Vastly improved MT2 loader. + * Added openmpt::ext::interactive, an extension which adds a whole bunch of + new functionality to change playback in some way or another. * Added possibility to sync sample playback when using openmpt::module::set_position_* by setting the ctl value seek.sync_samples=1 * Support for "hidden" subsongs has been added. Modified: trunk/OpenMPT/openmpt123/openmpt123.cpp =================================================================== --- trunk/OpenMPT/openmpt123/openmpt123.cpp 2014-11-10 00:01:55 UTC (rev 4578) +++ trunk/OpenMPT/openmpt123/openmpt123.cpp 2014-11-10 00:27:49 UTC (rev 4579) @@ -81,7 +81,9 @@ #include <sys/types.h> #endif +#define LIBOPENMPT_EXT_IS_EXPERIMENTAL #include <libopenmpt/libopenmpt.hpp> +#include <libopenmpt/libopenmpt_ext.hpp> #include "openmpt123.hpp" @@ -547,6 +549,8 @@ log << " [j] seek 1 seconds backward" << std::endl; log << " [k] seek 1 seconds forward" << std::endl; log << " [l] seek 10 seconds forward" << std::endl; + log << " [u]|[i] +/- tempo" << std::endl; + log << " [o]|[p] +/- pitch" << std::endl; log << " [3]|[4] +/- gain" << std::endl; log << " [5]|[6] +/- stereo separation" << std::endl; log << " [7]|[8] +/- filter taps" << std::endl; @@ -577,6 +581,7 @@ template < typename Tmod > static bool handle_keypress( int c, commandlineflags & flags, Tmod & mod, write_buffers_interface & audio_stream ) { + openmpt::ext::interactive *interactive = static_cast<openmpt::ext::interactive*>( mod.get_interface( openmpt::ext::interactive_id ) ); switch ( c ) { case 'q': throw silent_exit_exception(); break; case 'N': throw prev_file(10); break; @@ -592,6 +597,10 @@ case 'L': mod.set_position_order_row( mod.get_current_order() + 1, 0 ); break; case 'm': throw next_file(1); break; case 'M': throw next_file(10); break; + case 'u': interactive->set_tempo_factor( std::max( 0.00001, interactive->get_tempo_factor() * std::pow( 2.0, -1.0 / 24.0 ) ) ); break; + case 'i': interactive->set_tempo_factor( std::min( 4.0, interactive->get_tempo_factor() * std::pow( 2.0, 1.0 / 24.0 ) ) ); break; + case 'o': interactive->set_pitch_factor( std::max( 0.00001, interactive->get_pitch_factor() * std::pow( 2.0, -1.0 / 24.0 ) ) ); break; + case 'p': interactive->set_pitch_factor( std::min( 4.0, interactive->get_pitch_factor() * std::pow( 2.0, 1.0 / 24.0 ) ) ); break; case '3': flags.gain -=100; apply_mod_settings( flags, mod ); break; case '4': flags.gain +=100; apply_mod_settings( flags, mod ); break; case '5': flags.separation -= 5; apply_mod_settings( flags, mod ); break; @@ -1396,7 +1405,7 @@ } { - openmpt::module mod( data_stream, silentlog, flags.ctls ); + openmpt::module_ext mod( data_stream, silentlog, flags.ctls ); mod.select_subsong( -1 ); // play all subsongs consecutively silentlog.str( std::string() ); // clear, loader messages get stored to get_metadata( "warnings" ) by libopenmpt internally render_mod_file( flags, filename, filesize, mod, log, audio_stream ); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |