13
0

added logarithmic option for waveform scaling. added save/restore of rectified and logscale waveform options in session. modified sconstruct to look for certain libs in some common locations, this should be usable controllable but isnt yet. deals better with the libsndfile build when flac is installed.

git-svn-id: svn://localhost/ardour2/trunk@1219 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Jesse Chappell 2006-12-16 05:14:34 +00:00
parent df9bb392ef
commit 732a482f43
15 changed files with 386 additions and 175 deletions

View File

@ -502,10 +502,184 @@ libraries['midi++2'] = LibraryInfo (LIBS='midi++', LIBPATH='#libs/midi++2', CPPP
libraries['pbd'] = LibraryInfo (LIBS='pbd', LIBPATH='#libs/pbd', CPPPATH='#libs/pbd')
libraries['gtkmm2ext'] = LibraryInfo (LIBS='gtkmm2ext', LIBPATH='#libs/gtkmm2ext', CPPPATH='#libs/gtkmm2ext')
# SCons should really do this for us
conf = Configure (env)
have_cxx = conf.TryAction (Action (str(env['CXX']) + ' --version'))
if have_cxx[0] != 1:
print "This system has no functional C++ compiler. You cannot build Ardour from source without one."
sys.exit (1)
else:
print "Congratulations, you have a functioning C++ compiler."
env = conf.Finish()
#
# Compiler flags and other system-dependent stuff
#
opt_flags = []
debug_flags = [ '-g' ]
# guess at the platform, used to define compiler flags
config_guess = os.popen("tools/config.guess").read()[:-1]
config_cpu = 0
config_arch = 1
config_kernel = 2
config_os = 3
config = config_guess.split ("-")
print "system triple: " + config_guess
# Autodetect
if env['DIST_TARGET'] == 'auto':
if config[config_arch] == 'apple':
# The [.] matches to the dot after the major version, "." would match any character
if re.search ("darwin[0-7][.]", config[config_kernel]) != None:
env['DIST_TARGET'] = 'panther'
else:
env['DIST_TARGET'] = 'tiger'
else:
if re.search ("x86_64", config[config_cpu]) != None:
env['DIST_TARGET'] = 'x86_64'
elif re.search("i[0-5]86", config[config_cpu]) != None:
env['DIST_TARGET'] = 'i386'
elif re.search("powerpc", config[config_cpu]) != None:
env['DIST_TARGET'] = 'powerpc'
else:
env['DIST_TARGET'] = 'i686'
print "\n*******************************"
print "detected DIST_TARGET = " + env['DIST_TARGET']
print "*******************************\n"
if config[config_cpu] == 'powerpc' and env['DIST_TARGET'] != 'none':
#
# Apple/PowerPC optimization options
#
# -mcpu=7450 does not reliably work with gcc 3.*
#
if env['DIST_TARGET'] == 'panther' or env['DIST_TARGET'] == 'tiger':
if config[config_arch] == 'apple':
opt_flags.extend ([ "-mcpu=7450", "-faltivec"])
else:
opt_flags.extend ([ "-mcpu=7400", "-maltivec", "-mabi=altivec"])
else:
opt_flags.extend([ "-mcpu=750", "-mmultiple" ])
opt_flags.extend (["-mhard-float", "-mpowerpc-gfxopt"])
elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_64", config[config_cpu]) != None)) and env['DIST_TARGET'] != 'none':
build_host_supports_sse = 0
debug_flags.append ("-DARCH_X86")
opt_flags.append ("-DARCH_X86")
if config[config_kernel] == 'linux' :
if env['DIST_TARGET'] != 'i386':
flag_line = os.popen ("cat /proc/cpuinfo | grep '^flags'").read()[:-1]
x86_flags = flag_line.split (": ")[1:][0].split (' ')
if "mmx" in x86_flags:
opt_flags.append ("-mmmx")
if "sse" in x86_flags:
build_host_supports_sse = 1
if "3dnow" in x86_flags:
opt_flags.append ("-m3dnow")
if config[config_cpu] == "i586":
opt_flags.append ("-march=i586")
elif config[config_cpu] == "i686":
opt_flags.append ("-march=i686")
if ((env['DIST_TARGET'] == 'i686') or (env['DIST_TARGET'] == 'x86_64')) and build_host_supports_sse:
opt_flags.extend (["-msse", "-mfpmath=sse"])
debug_flags.extend (["-msse", "-mfpmath=sse"])
# end of processor-specific section
# optimization section
if env['FPU_OPTIMIZATION']:
if env['DIST_TARGET'] == 'tiger':
opt_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS")
debug_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS")
libraries['core'].Append(LINKFLAGS= '-framework Accelerate')
elif env['DIST_TARGET'] == 'i686' or env['DIST_TARGET'] == 'x86_64':
opt_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
debug_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
if env['DIST_TARGET'] == 'x86_64':
opt_flags.append ("-DUSE_X86_64_ASM")
debug_flags.append ("-DUSE_X86_64_ASM")
if build_host_supports_sse != 1:
print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)"
# end optimization section
#
# save off guessed arch element in an env
#
env.Append(CONFIG_ARCH=config[config_arch])
#
# ARCH="..." overrides all
#
if env['ARCH'] != '':
opt_flags = env['ARCH'].split()
#
# prepend boiler plate optimization flags
#
opt_flags[:0] = [
"-O3",
"-fomit-frame-pointer",
"-ffast-math",
"-fstrength-reduce"
]
if env['DEBUG'] == 1:
env.Append(CCFLAGS=" ".join (debug_flags))
else:
env.Append(CCFLAGS=" ".join (opt_flags))
#
# warnings flags
#
env.Append(CCFLAGS="-Wall")
env.Append(CXXFLAGS="-Woverloaded-virtual")
if env['EXTRA_WARN']:
env.Append(CCFLAGS="-Wextra -pedantic")
env.Append(CXXFLAGS="-ansi")
if env['LIBLO']:
env.Append(CCFLAGS="-DHAVE_LIBLO")
#
# fix scons nitpickiness on APPLE
#
def prep_libcheck(topenv, libinfo):
if topenv['DIST_TARGET'] == 'panther' or topenv['DIST_TARGET'] == 'tiger':
libinfo.Append(CCFLAGS="-I/opt/local/include", LINKFLAGS="-L/opt/local/lib")
prep_libcheck(env, env)
#
# Check for libusb
libraries['usb'] = LibraryInfo ()
prep_libcheck(env, libraries['usb'])
conf = Configure (libraries['usb'])
if conf.CheckLib ('usb', 'usb_interrupt_write'):
@ -519,6 +693,8 @@ libraries['usb'] = conf.Finish ()
# Check for FLAC
libraries['flac'] = LibraryInfo ()
prep_libcheck(env, libraries['flac'])
libraries['flac'].Append(CCFLAGS="-I/usr/local/include", LINKFLAGS="-L/usr/local/lib")
conf = Configure (libraries['flac'])
conf.CheckLib ('FLAC', 'FLAC__stream_decoder_new', language='CXX')
@ -530,6 +706,8 @@ libraries['flac'] = conf.Finish ()
# boost (we don't link against boost, just use some header files)
libraries['boost'] = LibraryInfo ()
prep_libcheck(env, libraries['boost'])
libraries['boost'].Append(CCFLAGS="-I/usr/local/include", LINKFLAGS="-L/usr/local/lib")
conf = Configure (libraries['boost'])
if conf.CheckHeader ('boost/shared_ptr.hpp', language='CXX') == False:
print "Boost header files do not appear to be installed."
@ -542,7 +720,8 @@ libraries['boost'] = conf.Finish ()
if env['LIBLO']:
libraries['lo'] = LibraryInfo ()
prep_libcheck(env, libraries['lo'])
conf = Configure (libraries['lo'])
if conf.CheckLib ('lo', 'lo_server_new') == False:
print "liblo does not appear to be installed."
@ -554,6 +733,7 @@ if env['LIBLO']:
# Check for dmalloc
libraries['dmalloc'] = LibraryInfo ()
prep_libcheck(env, libraries['dmalloc'])
#
# look for the threaded version
@ -794,177 +974,12 @@ else:
config_prefix = '$DESTDIR' + final_config_prefix
# SCons should really do this for us
conf = Configure (env)
have_cxx = conf.TryAction (Action (str(env['CXX']) + ' --version'))
if have_cxx[0] != 1:
print "This system has no functional C++ compiler. You cannot build Ardour from source without one."
sys.exit (1)
else:
print "Congratulations, you have a functioning C++ compiler."
env = conf.Finish()
#
# Compiler flags and other system-dependent stuff
#
opt_flags = []
debug_flags = [ '-g' ]
# guess at the platform, used to define compiler flags
config_guess = os.popen("tools/config.guess").read()[:-1]
config_cpu = 0
config_arch = 1
config_kernel = 2
config_os = 3
config = config_guess.split ("-")
print "system triple: " + config_guess
# Autodetect
if env['DIST_TARGET'] == 'auto':
if config[config_arch] == 'apple':
# The [.] matches to the dot after the major version, "." would match any character
if re.search ("darwin[0-7][.]", config[config_kernel]) != None:
env['DIST_TARGET'] = 'panther'
else:
env['DIST_TARGET'] = 'tiger'
else:
if re.search ("x86_64", config[config_cpu]) != None:
env['DIST_TARGET'] = 'x86_64'
elif re.search("i[0-5]86", config[config_cpu]) != None:
env['DIST_TARGET'] = 'i386'
elif re.search("powerpc", config[config_cpu]) != None:
env['DIST_TARGET'] = 'powerpc'
else:
env['DIST_TARGET'] = 'i686'
print "\n*******************************"
print "detected DIST_TARGET = " + env['DIST_TARGET']
print "*******************************\n"
if config[config_cpu] == 'powerpc' and env['DIST_TARGET'] != 'none':
#
# Apple/PowerPC optimization options
#
# -mcpu=7450 does not reliably work with gcc 3.*
#
if env['DIST_TARGET'] == 'panther' or env['DIST_TARGET'] == 'tiger':
if config[config_arch] == 'apple':
opt_flags.extend ([ "-mcpu=7450", "-faltivec"])
else:
opt_flags.extend ([ "-mcpu=7400", "-maltivec", "-mabi=altivec"])
else:
opt_flags.extend([ "-mcpu=750", "-mmultiple" ])
opt_flags.extend (["-mhard-float", "-mpowerpc-gfxopt"])
elif ((re.search ("i[0-9]86", config[config_cpu]) != None) or (re.search ("x86_64", config[config_cpu]) != None)) and env['DIST_TARGET'] != 'none':
build_host_supports_sse = 0
debug_flags.append ("-DARCH_X86")
opt_flags.append ("-DARCH_X86")
if config[config_kernel] == 'linux' :
if env['DIST_TARGET'] != 'i386':
flag_line = os.popen ("cat /proc/cpuinfo | grep '^flags'").read()[:-1]
x86_flags = flag_line.split (": ")[1:][0].split (' ')
if "mmx" in x86_flags:
opt_flags.append ("-mmmx")
if "sse" in x86_flags:
build_host_supports_sse = 1
if "3dnow" in x86_flags:
opt_flags.append ("-m3dnow")
if config[config_cpu] == "i586":
opt_flags.append ("-march=i586")
elif config[config_cpu] == "i686":
opt_flags.append ("-march=i686")
if ((env['DIST_TARGET'] == 'i686') or (env['DIST_TARGET'] == 'x86_64')) and build_host_supports_sse:
opt_flags.extend (["-msse", "-mfpmath=sse"])
debug_flags.extend (["-msse", "-mfpmath=sse"])
# end of processor-specific section
# optimization section
if env['FPU_OPTIMIZATION']:
if env['DIST_TARGET'] == 'tiger':
opt_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS")
debug_flags.append ("-DBUILD_VECLIB_OPTIMIZATIONS")
libraries['core'].Append(LINKFLAGS= '-framework Accelerate')
elif env['DIST_TARGET'] == 'i686' or env['DIST_TARGET'] == 'x86_64':
opt_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
debug_flags.append ("-DBUILD_SSE_OPTIMIZATIONS")
if env['DIST_TARGET'] == 'x86_64':
opt_flags.append ("-DUSE_X86_64_ASM")
debug_flags.append ("-DUSE_X86_64_ASM")
if build_host_supports_sse != 1:
print "\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)"
# end optimization section
#
# save off guessed arch element in an env
#
env.Append(CONFIG_ARCH=config[config_arch])
#
# ARCH="..." overrides all
#
if env['ARCH'] != '':
opt_flags = env['ARCH'].split()
#
# prepend boiler plate optimization flags
#
opt_flags[:0] = [
"-O3",
"-fomit-frame-pointer",
"-ffast-math",
"-fstrength-reduce"
]
if env['DEBUG'] == 1:
env.Append(CCFLAGS=" ".join (debug_flags))
else:
env.Append(CCFLAGS=" ".join (opt_flags))
#
# warnings flags
#
env.Append(CCFLAGS="-Wall")
env.Append(CXXFLAGS="-Woverloaded-virtual")
if env['EXTRA_WARN']:
env.Append(CCFLAGS="-Wextra -pedantic")
env.Append(CXXFLAGS="-ansi")
if env['LIBLO']:
env.Append(CCFLAGS="-DHAVE_LIBLO")
#
# everybody needs this
#
env.Merge ([ libraries['core'] ])
#
# fix scons nitpickiness on APPLE
#
if env['DIST_TARGET'] == 'panther' or env['DIST_TARGET'] == 'tiger':
env.Append(CCFLAGS="-I/opt/local/include", LINKFLAGS="-L/opt/local/lib")
#
# i18n support

View File

@ -851,6 +851,8 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct)
wave->property_amplitude_above_axis() = _amplitude_above_axis;
wave->property_wave_color() = _region->muted() ? color_map[cMutedWaveForm] : color_map[cWaveForm];
wave->property_region_start() = _region->start();
wave->property_rectified() = (bool) (_flags & WaveformRectified);
wave->property_logscaled() = (bool) (_flags & WaveformLogScaled);
if (!(_flags & WaveformVisible)) {
wave->hide();
@ -965,6 +967,8 @@ AudioRegionView::store_flags()
node->add_property ("waveform-visible", (_flags & WaveformVisible) ? "yes" : "no");
node->add_property ("envelope-visible", (_flags & EnvelopeVisible) ? "yes" : "no");
node->add_property ("waveform-rectified", (_flags & WaveformRectified) ? "yes" : "no");
node->add_property ("waveform-logscaled", (_flags & WaveformLogScaled) ? "yes" : "no");
_region->add_extra_xml (*node);
}
@ -985,6 +989,18 @@ AudioRegionView::set_flags (XMLNode* node)
_flags |= EnvelopeVisible;
}
}
if ((prop = node->property ("waveform-rectified")) != 0) {
if (prop->value() == "yes") {
_flags |= WaveformRectified;
}
}
if ((prop = node->property ("waveform-logscaled")) != 0) {
if (prop->value() == "yes") {
_flags |= WaveformLogScaled;
}
}
}
void
@ -1024,9 +1040,30 @@ AudioRegionView::set_waveform_shape (WaveformShape shape)
} else {
_flags &= ~WaveformRectified;
}
store_flags ();
}
}
void
AudioRegionView::set_waveform_scale (WaveformScale scale)
{
bool yn = (scale == LogWaveform);
if (yn != (bool) (_flags & WaveformLogScaled)) {
for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
(*wave)->property_logscaled() = yn;
}
if (yn) {
_flags |= WaveformLogScaled;
} else {
_flags &= ~WaveformLogScaled;
}
store_flags ();
}
}
GhostRegion*
AudioRegionView::add_ghost (AutomationTimeAxisView& atv)
{

View File

@ -72,8 +72,10 @@ class AudioRegionView : public RegionView
void set_envelope_visible (bool);
void set_waveform_visible (bool yn);
void set_waveform_shape (WaveformShape);
void set_waveform_scale (WaveformScale);
bool waveform_rectified() const { return _flags & WaveformRectified; }
bool waveform_logscaled() const { return _flags & WaveformLogScaled; }
bool waveform_visible() const { return _flags & WaveformVisible; }
bool envelope_visible() const { return _flags & EnvelopeVisible; }
@ -116,7 +118,8 @@ class AudioRegionView : public RegionView
enum Flags {
EnvelopeVisible = 0x1,
WaveformVisible = 0x4,
WaveformRectified = 0x8
WaveformRectified = 0x8,
WaveformLogScaled = 0x10,
};
void reset_fade_shapes ();

View File

@ -383,7 +383,47 @@ AudioStreamView::set_waveform_shape (WaveformShape shape)
arv->set_waveform_shape (shape);
}
}
WaveformShape
AudioStreamView::get_waveform_shape () const
{
// assumes that the first represents all for our purposes
if (region_views.size() > 0) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(region_views.front());
if (arv) {
if (arv->waveform_rectified())
return Rectified;
}
}
return Traditional;
}
void
AudioStreamView::set_waveform_scale (WaveformScale scale)
{
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
if (arv)
arv->set_waveform_scale (scale);
}
}
WaveformScale
AudioStreamView::get_waveform_scale () const
{
// assumes that the first represents all for our purposes
if (region_views.size() > 0) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(region_views.front());
if (arv) {
if (arv->waveform_logscaled())
return LogWaveform;
}
}
return LinearWaveform;
}
void
AudioStreamView::setup_rec_box ()
{

View File

@ -59,6 +59,9 @@ class AudioStreamView : public StreamView
~AudioStreamView ();
void set_waveform_shape (WaveformShape);
WaveformShape get_waveform_shape () const;
void set_waveform_scale (WaveformScale);
WaveformScale get_waveform_scale () const;
int set_height (gdouble h);
int set_samples_per_unit (gdouble spp);

View File

@ -253,14 +253,40 @@ AudioTimeAxisView::append_extra_display_menu_items ()
waveform_item->set_active (editor.show_waveforms());
ignore_toggle = false;
waveform_items.push_back (SeparatorElem());
RadioMenuItem::Group group;
waveform_items.push_back (RadioMenuElem (group, _("Traditional"), bind (mem_fun(*this, &AudioTimeAxisView::set_waveform_shape), Traditional)));
traditional_item = static_cast<RadioMenuItem *> (&waveform_items.back());
waveform_items.push_back (RadioMenuElem (group, _("Rectified"), bind (mem_fun(*this, &AudioTimeAxisView::set_waveform_shape), Rectified)));
rectified_item = static_cast<RadioMenuItem *> (&waveform_items.back());
waveform_items.push_back (SeparatorElem());
RadioMenuItem::Group group2;
waveform_items.push_back (RadioMenuElem (group2, _("Linear"), bind (mem_fun(*this, &AudioTimeAxisView::set_waveform_scale), LinearWaveform)));
linearscale_item = static_cast<RadioMenuItem *> (&waveform_items.back());
waveform_items.push_back (RadioMenuElem (group2, _("Logarithmic"), bind (mem_fun(*this, &AudioTimeAxisView::set_waveform_scale), LogWaveform)));
logscale_item = static_cast<RadioMenuItem *> (&waveform_items.back());
// setting initial item state
AudioStreamView* asv = audio_view();
if (asv) {
ignore_toggle = true;
if (asv->get_waveform_shape() == Rectified)
rectified_item->set_active(true);
else traditional_item->set_active(true);
if (asv->get_waveform_scale() == LogWaveform)
logscale_item->set_active(true);
else linearscale_item->set_active(true);
ignore_toggle = false;
}
items.push_back (MenuElem (_("Waveform"), *waveform_menu));
}
@ -303,13 +329,25 @@ AudioTimeAxisView::set_waveform_shape (WaveformShape shape)
{
AudioStreamView* asv = audio_view();
if (asv) {
if (asv && !ignore_toggle) {
asv->set_waveform_shape (shape);
}
map_frozen ();
}
void
AudioTimeAxisView::set_waveform_scale (WaveformScale scale)
{
AudioStreamView* asv = audio_view();
if (asv && !ignore_toggle) {
asv->set_waveform_scale (scale);
}
map_frozen ();
}
void
AudioTimeAxisView::add_gain_automation_child ()
{

View File

@ -98,6 +98,7 @@ class AudioTimeAxisView : public RouteTimeAxisView
void toggle_show_waveforms ();
void set_waveform_shape (WaveformShape);
void toggle_waveforms ();
void set_waveform_scale (WaveformScale);
void show_all_automation ();
void show_existing_automation ();
@ -125,6 +126,8 @@ class AudioTimeAxisView : public RouteTimeAxisView
Gtk::CheckMenuItem* waveform_item;
Gtk::RadioMenuItem* traditional_item;
Gtk::RadioMenuItem* rectified_item;
Gtk::RadioMenuItem* linearscale_item;
Gtk::RadioMenuItem* logscale_item;
Gtk::CheckMenuItem* gain_automation_item;
Gtk::CheckMenuItem* pan_automation_item;
};

View File

@ -26,6 +26,7 @@
#include <ardour/dB.h>
#include "logmeter.h"
#include "canvas-waveview.h"
#include "rgb_macros.h"
@ -49,7 +50,8 @@ enum {
PROP_HEIGHT,
PROP_WAVE_COLOR,
PROP_RECTIFIED,
PROP_REGION_START
PROP_REGION_START,
PROP_LOGSCALED,
};
static void gnome_canvas_waveview_class_init (GnomeCanvasWaveViewClass *class);
@ -253,6 +255,13 @@ gnome_canvas_waveview_class_init (GnomeCanvasWaveViewClass *class)
g_param_spec_boolean ("rectified", NULL, NULL,
FALSE,
(G_PARAM_READABLE | G_PARAM_WRITABLE)));
g_object_class_install_property
(gobject_class,
PROP_LOGSCALED,
g_param_spec_boolean ("logscaled", NULL, NULL,
FALSE,
(G_PARAM_READABLE | G_PARAM_WRITABLE)));
g_object_class_install_property
(gobject_class,
@ -308,6 +317,7 @@ gnome_canvas_waveview_init (GnomeCanvasWaveView *waveview)
waveview->gain_curve_function = NULL;
waveview->gain_src = NULL;
waveview->rectified = FALSE;
waveview->logscaled = FALSE;
waveview->region_start = 0;
waveview->samples_per_unit = 1.0;
waveview->amplitude_above_axis = 1.0;
@ -577,7 +587,29 @@ gnome_canvas_waveview_ensure_cache (GnomeCanvasWaveView *waveview, gulong start_
free (gain);
}
/* do optional log scaling. this implementation is not particularly efficient */
if (waveview->logscaled) {
guint32 n;
GnomeCanvasWaveViewCacheEntry* buf = cache->data;
for (n = 0; n < cache->data_size; ++n) {
if (buf[n].max > 0.0f) {
buf[n].max = alt_log_meter(coefficient_to_dB(buf[n].max));
} else if (buf[n].max < 0.0f) {
buf[n].max = -alt_log_meter(coefficient_to_dB(-buf[n].max));
}
if (buf[n].min > 0.0f) {
buf[n].min = alt_log_meter(coefficient_to_dB(buf[n].min));
} else if (buf[n].min < 0.0f) {
buf[n].min = -alt_log_meter(coefficient_to_dB(-buf[n].min));
}
}
}
cache->start = ostart;
cache->end = new_cache_end;
@ -770,6 +802,17 @@ gnome_canvas_waveview_set_property (GObject *object,
redraw = TRUE;
}
break;
case PROP_LOGSCALED:
if (waveview->logscaled != g_value_get_boolean(value)) {
waveview->logscaled = g_value_get_boolean(value);
if (waveview->cache_updater) {
waveview->cache->start = 0;
waveview->cache->end = 0;
}
redraw = TRUE;
calc_bounds = TRUE;
}
break;
case PROP_REGION_START:
waveview->region_start = g_value_get_uint(value);
redraw = TRUE;
@ -869,6 +912,10 @@ gnome_canvas_waveview_get_property (GObject *object,
g_value_set_boolean (value, waveview->rectified);
break;
case PROP_LOGSCALED:
g_value_set_boolean (value, waveview->logscaled);
break;
case PROP_REGION_START:
g_value_set_uint (value, waveview->region_start);
break;

View File

@ -101,7 +101,8 @@ struct _GnomeCanvasWaveView
uint32_t wave_color;
char rectified;
char logscaled;
/* These are updated by the update() routine
to optimize the render() routine, which may
be called several times after a single update().

View File

@ -8,6 +8,11 @@ enum WaveformShape {
Rectified
};
enum WaveformScale {
LinearWaveform=0,
LogWaveform,
};
enum Width {
Wide,

View File

@ -1,7 +1,7 @@
#ifndef __ardour_gtk_log_meter_h__
#define __ardour_gtk_log_meter_h__
#if 0
#if 1
inline float
_log_meter (float power, double lower_db, double upper_db, double non_linearity)
{
@ -9,7 +9,7 @@ _log_meter (float power, double lower_db, double upper_db, double non_linearity)
}
inline float
log_meter (float power)
alt_log_meter (float power)
{
return _log_meter (power, -192.0, 0.0, 8.0);
}

View File

@ -268,6 +268,14 @@ Glib::PropertyProxy_ReadOnly<guint> WaveView::property_region_start() const
{
return Glib::PropertyProxy_ReadOnly<guint> (this, "region_start");
}
Glib::PropertyProxy<gint> WaveView::property_logscaled()
{
return Glib::PropertyProxy<gint> (this, "logscaled");
}
Glib::PropertyProxy_ReadOnly<gint> WaveView::property_logscaled() const
{
return Glib::PropertyProxy_ReadOnly<gint> (this, "logscaled");
}
} // namespace Canvas

View File

@ -147,6 +147,8 @@ public:
Glib::PropertyProxy_ReadOnly<gint> property_rectified() const;
Glib::PropertyProxy<guint> property_region_start();
Glib::PropertyProxy_ReadOnly<guint> property_region_start() const;
Glib::PropertyProxy<gint> property_logscaled();
Glib::PropertyProxy_ReadOnly<gint> property_logscaled() const;
};
} /* namespace Canvas */

View File

@ -6,8 +6,9 @@ import glob
sndfile_files = glob.glob('src/*.c') + glob.glob('src/GSM610/*.c') + glob.glob('src/G72x/*.c')
Import('env install_prefix')
Import('env install_prefix libraries')
sndfile = env.Copy()
sndfile.Merge([libraries['flac'] ])
domain = 'libsndfile'

View File

@ -12235,9 +12235,17 @@ rm -f conftest.$ac_objext
if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
(eval $ac_compile) 2>conftest.er1
ac_status=$?
cat conftest.$ac_ext > blah1.c
echo $CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext > blah1
grep -v '^ *+' conftest.er1 >conftest.err
rm -f conftest.er1
cat conftest.err >&5
cat conftest.err > blah2
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); } &&
{ ac_try='test -z "$ac_c_werror_flag"