From: <man...@us...> - 2013-05-13 20:49:05
|
Revision: 2081 http://sourceforge.net/p/modplug/code/2081 Author: manxorist Date: 2013-05-13 20:48:55 +0000 (Mon, 13 May 2013) Log Message: ----------- [Mod] Change the unit of volume ramping from samples to microseconds in libopenmpt. [Fix] Apply volume ramping settings in winamp and xmplay plugins. Modified Paths: -------------- trunk/OpenMPT/libopenmpt/SettingsForm.h trunk/OpenMPT/libopenmpt/libopenmpt.h trunk/OpenMPT/libopenmpt/libopenmpt.hpp trunk/OpenMPT/libopenmpt/libopenmpt_impl.hpp trunk/OpenMPT/libopenmpt/libopenmpt_settings.h trunk/OpenMPT/libopenmpt/libopenmpt_winamp.cpp trunk/OpenMPT/libopenmpt/libopenmpt_xmplay.cpp trunk/OpenMPT/openmpt123/openmpt123.cpp trunk/OpenMPT/soundlib/MixerSettings.cpp trunk/OpenMPT/soundlib/MixerSettings.h Modified: trunk/OpenMPT/libopenmpt/SettingsForm.h =================================================================== --- trunk/OpenMPT/libopenmpt/SettingsForm.h 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/libopenmpt/SettingsForm.h 2013-05-13 20:48:55 UTC (rev 2081) @@ -57,8 +57,8 @@ trackBarStereoSeparation->Value = settings->stereoseparation; - trackBarVolrampin->Value = settings->volrampin; - trackBarVolrampout->Value = settings->volrampout; + trackBarVolrampin->Value = settings->volrampinus; + trackBarVolrampout->Value = settings->volrampoutus; // //TODO: Add the constructor code here @@ -315,28 +315,28 @@ // // trackBarVolrampin // - this->trackBarVolrampin->LargeChange = 16; + this->trackBarVolrampin->LargeChange = 1000; this->trackBarVolrampin->Location = System::Drawing::Point(106, 261); - this->trackBarVolrampin->Maximum = 256; + this->trackBarVolrampin->Maximum = 10000; this->trackBarVolrampin->Name = L"trackBarVolrampin"; this->trackBarVolrampin->Size = System::Drawing::Size(121, 42); this->trackBarVolrampin->TabIndex = 17; - this->trackBarVolrampin->TickFrequency = 16; + this->trackBarVolrampin->TickFrequency = 1000; this->trackBarVolrampin->TickStyle = System::Windows::Forms::TickStyle::Both; - this->trackBarVolrampin->Value = 16; + this->trackBarVolrampin->Value = 363; this->trackBarVolrampin->Scroll += gcnew System::EventHandler(this, &SettingsForm::trackBarVolrampin_Scroll); // // trackBarVolrampout // - this->trackBarVolrampout->LargeChange = 16; + this->trackBarVolrampout->LargeChange = 1000; this->trackBarVolrampout->Location = System::Drawing::Point(106, 309); - this->trackBarVolrampout->Maximum = 256; + this->trackBarVolrampout->Maximum = 10000; this->trackBarVolrampout->Name = L"trackBarVolrampout"; this->trackBarVolrampout->Size = System::Drawing::Size(121, 42); this->trackBarVolrampout->TabIndex = 18; - this->trackBarVolrampout->TickFrequency = 16; + this->trackBarVolrampout->TickFrequency = 1000; this->trackBarVolrampout->TickStyle = System::Windows::Forms::TickStyle::Both; - this->trackBarVolrampout->Value = 42; + this->trackBarVolrampout->Value = 952; this->trackBarVolrampout->Scroll += gcnew System::EventHandler(this, &SettingsForm::trackBarVolrampout_Scroll); // // SettingsForm @@ -419,11 +419,11 @@ settings->changed(); } private: System::Void trackBarVolrampin_Scroll(System::Object^ sender, System::EventArgs^ e) { - settings->volrampin = (int)trackBarVolrampin->Value; + settings->volrampinus = (int)trackBarVolrampin->Value; settings->changed(); } private: System::Void trackBarVolrampout_Scroll(System::Object^ sender, System::EventArgs^ e) { - settings->volrampout = (int)trackBarVolrampout->Value; + settings->volrampoutus = (int)trackBarVolrampout->Value; settings->changed(); } }; Modified: trunk/OpenMPT/libopenmpt/libopenmpt.h =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt.h 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/libopenmpt/libopenmpt.h 2013-05-13 20:48:55 UTC (rev 2081) @@ -69,8 +69,8 @@ #define OPENMPT_MODULE_RENDER_QUALITY_PERCENT 4 #define OPENMPT_MODULE_RENDER_MAXMIXCHANNELS 5 #define OPENMPT_MODULE_RENDER_INTERPOLATION_MODE 6 -#define OPENMPT_MODULE_RENDER_VOLUMERAMP_IN_SAMPLES 7 -#define OPENMPT_MODULE_RENDER_VOLUMERAMP_OUT_SAMPLES 8 +#define OPENMPT_MODULE_RENDER_VOLUMERAMP_IN_US 7 +#define OPENMPT_MODULE_RENDER_VOLUMERAMP_OUT_US 8 #define OPENMPT_MODULE_RENDER_INTERPOLATION_NEAREST 1 #define OPENMPT_MODULE_RENDER_INTERPOLATION_LINEAR 2 Modified: trunk/OpenMPT/libopenmpt/libopenmpt.hpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt.hpp 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/libopenmpt/libopenmpt.hpp 2013-05-13 20:48:55 UTC (rev 2081) @@ -83,8 +83,8 @@ RENDER_QUALITY_PERCENT = 4, RENDER_MAXMIXCHANNELS = 5, RENDER_INTERPOLATION_MODE = 6, - RENDER_VOLUMERAMP_IN_SAMPLES = 7, - RENDER_VOLUMERAMP_OUT_SAMPLES = 8, + RENDER_VOLUMERAMP_IN_US = 7, + RENDER_VOLUMERAMP_OUT_US = 8, }; enum interpolation_mode { Modified: trunk/OpenMPT/libopenmpt/libopenmpt_impl.hpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_impl.hpp 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/libopenmpt/libopenmpt_impl.hpp 2013-05-13 20:48:55 UTC (rev 2081) @@ -142,9 +142,13 @@ m_sndFile.m_MixerSettings.m_SampleFormat != format ) { MixerSettings mixersettings = m_sndFile.m_MixerSettings; + std::int32_t volrampin_us = mixersettings.GetVolumeRampUpMicroseconds(); + std::int32_t volrampout_us = mixersettings.GetVolumeRampDownMicroseconds(); mixersettings.gdwMixingFreq = samplerate; mixersettings.gnChannels = channels; mixersettings.m_SampleFormat = format; + mixersettings.SetVolumeRampUpMicroseconds( volrampin_us ); + mixersettings.SetVolumeRampDownMicroseconds( volrampout_us ); m_sndFile.SetMixerSettings( mixersettings ); } } @@ -280,11 +284,11 @@ } throw openmpt::exception_message("unknown interpolation mode set internally"); } break; - case module::RENDER_VOLUMERAMP_IN_SAMPLES: { - return m_sndFile.m_MixerSettings.glVolumeRampUpSamples; + case module::RENDER_VOLUMERAMP_IN_US: { + return m_sndFile.m_MixerSettings.GetVolumeRampUpMicroseconds(); } break; - case module::RENDER_VOLUMERAMP_OUT_SAMPLES: { - return m_sndFile.m_MixerSettings.glVolumeRampDownSamples; + case module::RENDER_VOLUMERAMP_OUT_US: { + return m_sndFile.m_MixerSettings.GetVolumeRampDownMicroseconds(); } break; default: throw openmpt::exception_message("unknown command"); break; } @@ -341,18 +345,18 @@ m_sndFile.SetResamplerSettings( newsettings ); } } break; - case module::RENDER_VOLUMERAMP_IN_SAMPLES: { - if ( m_sndFile.m_MixerSettings.glVolumeRampUpSamples != value ) { - MixerSettings settings = m_sndFile.m_MixerSettings; - settings.glVolumeRampUpSamples = value; - m_sndFile.SetMixerSettings( settings ); + case module::RENDER_VOLUMERAMP_IN_US: { + MixerSettings newsettings = m_sndFile.m_MixerSettings; + newsettings.SetVolumeRampUpMicroseconds( value ); + if ( m_sndFile.m_MixerSettings.glVolumeRampUpSamples != newsettings.glVolumeRampUpSamples ) { + m_sndFile.SetMixerSettings( newsettings ); } } break; - case module::RENDER_VOLUMERAMP_OUT_SAMPLES: { - if ( m_sndFile.m_MixerSettings.glVolumeRampDownSamples != value ) { - MixerSettings settings = m_sndFile.m_MixerSettings; - settings.glVolumeRampDownSamples = value; - m_sndFile.SetMixerSettings( settings ); + case module::RENDER_VOLUMERAMP_OUT_US: { + MixerSettings newsettings = m_sndFile.m_MixerSettings; + newsettings.SetVolumeRampDownMicroseconds( value ); + if ( m_sndFile.m_MixerSettings.glVolumeRampDownSamples != newsettings.glVolumeRampDownSamples ) { + m_sndFile.SetMixerSettings( newsettings ); } } break; default: throw openmpt::exception_message("unknown command"); break; Modified: trunk/OpenMPT/libopenmpt/libopenmpt_settings.h =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_settings.h 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/libopenmpt/libopenmpt_settings.h 2013-05-13 20:48:55 UTC (rev 2081) @@ -42,8 +42,8 @@ int repeatcount; int maxmixchannels; int interpolationmode; - int volrampin; - int volrampout; + int volrampinus; + int volrampoutus; void load(); void save(); void edit( HWND parent, const char * title ); @@ -63,8 +63,8 @@ read_setting( "repeatcount", repeatcount ); read_setting( "maxmixchannels", maxmixchannels ); read_setting( "interpolationmode", interpolationmode ); - read_setting( "volrampin", volrampin ); - read_setting( "volrampout", volrampout ); + read_setting( "volrampin_microseconds", volrampinus ); + read_setting( "volrampout_microseconds", volrampoutus ); } inline void settings::save() { @@ -75,8 +75,8 @@ write_setting( "repeatcount", repeatcount ); write_setting( "maxmixchannels", maxmixchannels ); write_setting( "interpolationmode", interpolationmode ); - write_setting( "volrampin", volrampin ); - write_setting( "volrampout", volrampout ); + write_setting( "volrampin_microseconds", volrampinus ); + write_setting( "volrampout_microseconds", volrampoutus ); } inline void settings::edit( HWND parent, const char * title ) { @@ -91,8 +91,8 @@ repeatcount = 0; maxmixchannels = 256; interpolationmode = OPENMPT_MODULE_RENDER_INTERPOLATION_FIR_KAISER4T; - volrampin = 16; - volrampout = 42; + volrampinus = 363; + volrampoutus = 952; } inline settings::~settings() { Modified: trunk/OpenMPT/libopenmpt/libopenmpt_winamp.cpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_winamp.cpp 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/libopenmpt/libopenmpt_winamp.cpp 2013-05-13 20:48:55 UTC (rev 2081) @@ -121,6 +121,8 @@ self->mod->set_render_param( openmpt::module::RENDER_REPEATCOUNT, self->settings->repeatcount ); self->mod->set_render_param( openmpt::module::RENDER_MAXMIXCHANNELS, self->settings->maxmixchannels ); self->mod->set_render_param( openmpt::module::RENDER_INTERPOLATION_MODE, self->settings->interpolationmode ); + self->mod->set_render_param( openmpt::module::RENDER_VOLUMERAMP_IN_US, self->settings->volrampinus ); + self->mod->set_render_param( openmpt::module::RENDER_VOLUMERAMP_OUT_US, self->settings->volrampoutus ); } self->settings->save(); } Modified: trunk/OpenMPT/libopenmpt/libopenmpt_xmplay.cpp =================================================================== --- trunk/OpenMPT/libopenmpt/libopenmpt_xmplay.cpp 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/libopenmpt/libopenmpt_xmplay.cpp 2013-05-13 20:48:55 UTC (rev 2081) @@ -107,6 +107,8 @@ self->mod->set_render_param( openmpt::module::RENDER_REPEATCOUNT, self->settings->repeatcount ); self->mod->set_render_param( openmpt::module::RENDER_MAXMIXCHANNELS, self->settings->maxmixchannels ); self->mod->set_render_param( openmpt::module::RENDER_INTERPOLATION_MODE, self->settings->interpolationmode ); + self->mod->set_render_param( openmpt::module::RENDER_VOLUMERAMP_IN_US, self->settings->volrampinus ); + self->mod->set_render_param( openmpt::module::RENDER_VOLUMERAMP_OUT_US, self->settings->volrampoutus ); } self->settings->save(); } Modified: trunk/OpenMPT/openmpt123/openmpt123.cpp =================================================================== --- trunk/OpenMPT/openmpt123/openmpt123.cpp 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/openmpt123/openmpt123.cpp 2013-05-13 20:48:55 UTC (rev 2081) @@ -68,8 +68,8 @@ std::int32_t samplerate; std::int32_t gain; std::int32_t quality; - std::int32_t rampinsamples; - std::int32_t rampoutsamples; + std::int32_t rampinus; + std::int32_t rampoutus; bool quiet; bool verbose; bool show_message; @@ -87,8 +87,8 @@ samplerate = 48000; gain = 0; quality = 100; - rampinsamples = 16; - rampoutsamples = 42; + rampinus = ( 16 * 1000000 + ( 44100 / 2 ) ) / 44100; // openmpt defaults at 44KHz, rounded + rampoutus = ( 42 * 1000000 + ( 44100 / 2 ) ) / 44100; // openmpt defaults at 44KHz, rounded quiet = false; verbose = false; show_message = false; @@ -362,8 +362,8 @@ std::clog << " --repeat n Repeat song n times (-1 means forever) [default: " << openmpt123_flags().repeatcount << "]" << std::endl; std::clog << " --quality n Set rendering quality to n % [default: " << openmpt123_flags().quality << "]" << std::endl; std::clog << " --seek n Seek to n seconds on start [default: " << openmpt123_flags().seek_target << "]" << std::endl; - std::clog << " --volrampin n Use n samples volume ramping on sample begin [default: " << openmpt123_flags().rampinsamples << "]" << std::endl; - std::clog << " --volrampout n Use n samples volume ramping on sample end [default: " << openmpt123_flags().rampoutsamples << "]" << std::endl; + std::clog << " --volrampin n Use n microseconds volume ramping on sample begin [default: " << openmpt123_flags().rampinus << "]" << std::endl; + std::clog << " --volrampout n Use n microseconds volume ramping on sample end [default: " << openmpt123_flags().rampoutus << "]" << std::endl; std::clog << std::endl; std::clog << " -- Interpret further arguments as filenames" << std::endl; std::clog << std::endl; @@ -498,8 +498,8 @@ mod.set_render_param( openmpt::module::RENDER_REPEATCOUNT, flags.repeatcount ); mod.set_render_param( openmpt::module::RENDER_QUALITY_PERCENT, flags.quality ); mod.set_render_param( openmpt::module::RENDER_MASTERGAIN_DB, flags.gain ); - mod.set_render_param( openmpt::module::RENDER_VOLUMERAMP_IN_SAMPLES, flags.rampinsamples ); - mod.set_render_param( openmpt::module::RENDER_VOLUMERAMP_OUT_SAMPLES, flags.rampoutsamples ); + mod.set_render_param( openmpt::module::RENDER_VOLUMERAMP_IN_US, flags.rampinus ); + mod.set_render_param( openmpt::module::RENDER_VOLUMERAMP_OUT_US, flags.rampoutus ); if ( flags.seek_target > 0.0 ) { mod.seek_seconds( flags.seek_target ); @@ -650,11 +650,11 @@ ++i; } else if ( arg == "--volrampin" && nextarg != "" ) { std::istringstream istr( nextarg ); - istr >> flags.rampinsamples; + istr >> flags.rampinus; ++i; } else if ( arg == "--volrampout" && nextarg != "" ) { std::istringstream istr( nextarg ); - istr >> flags.rampoutsamples; + istr >> flags.rampoutus; ++i; } else if ( arg.size() > 0 && arg.substr( 0, 1 ) == "-" ) { throw show_help_exception(); Modified: trunk/OpenMPT/soundlib/MixerSettings.cpp =================================================================== --- trunk/OpenMPT/soundlib/MixerSettings.cpp 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/soundlib/MixerSettings.cpp 2013-05-13 20:48:55 UTC (rev 2081) @@ -10,6 +10,7 @@ #include "stdafx.h" #include "MixerSettings.h" #include "Snd_defs.h" +#include "../common/misc_util.h" MixerSettings::MixerSettings() { @@ -36,3 +37,27 @@ #endif } + + +int32 MixerSettings::GetVolumeRampUpMicroseconds() const +{ + return Util::muldivr(glVolumeRampUpSamples, 1000000, gdwMixingFreq); +} + + +int32 MixerSettings::GetVolumeRampDownMicroseconds() const +{ + return Util::muldivr(glVolumeRampDownSamples, 1000000, gdwMixingFreq); +} + + +void MixerSettings::SetVolumeRampUpMicroseconds(int32 rampUpMicroseconds) +{ + glVolumeRampUpSamples = Util::muldivr(rampUpMicroseconds, gdwMixingFreq, 1000000); +} + + +void MixerSettings::SetVolumeRampDownMicroseconds(int32 rampDownMicroseconds) +{ + glVolumeRampDownSamples = Util::muldivr(rampDownMicroseconds, gdwMixingFreq, 1000000); +} Modified: trunk/OpenMPT/soundlib/MixerSettings.h =================================================================== --- trunk/OpenMPT/soundlib/MixerSettings.h 2013-05-13 18:21:56 UTC (rev 2080) +++ trunk/OpenMPT/soundlib/MixerSettings.h 2013-05-13 20:48:55 UTC (rev 2081) @@ -35,6 +35,11 @@ //rewbs.resamplerConf long glVolumeRampUpSamples, glVolumeRampDownSamples; //end rewbs.resamplerConf + + int32 GetVolumeRampUpMicroseconds() const; + int32 GetVolumeRampDownMicroseconds() const; + void SetVolumeRampUpMicroseconds(int32 rampUpMicroseconds); + void SetVolumeRampDownMicroseconds(int32 rampDownMicroseconds); #ifndef MODPLUG_TRACKER DWORD m_FinalOutputGain; // factor multiplied to the final mixer output just before clipping and dithering, fixed point 16.16 This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |