make i18n build work ; add mackie dir back to build ; token work on amp for MIDI; don't try to subgroup route groups with MIDI (for now)

git-svn-id: svn://localhost/ardour2/branches/3.0@5412 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis
2009-07-22 13:51:16 +00:00
parent 272c1a40db
commit 3b7230552d
14 changed files with 488 additions and 354 deletions

View File

@@ -28,6 +28,7 @@
#include "ardour/buffer_set.h"
#include "ardour/configuration.h"
#include "ardour/io.h"
#include "ardour/midi_buffer.h"
#include "ardour/mute_master.h"
#include "ardour/session.h"
@@ -193,9 +194,26 @@ Amp::apply_gain (BufferSet& bufs, nframes_t nframes, gain_t initial, gain_t targ
delta = target - initial;
}
/* MIDI Gain */
for (BufferSet::midi_iterator i = bufs.midi_begin(); i != bufs.midi_end(); ++i) {
#if 0
MidiBuffer& mb (*i);
for (MidiBuffer::iterator m = mb.begin(); m != mb.end(); ++m) {
Evoral::MIDIEvent<MidiBuffer::TimeType> ev (*m);
if (ev.buffer()[0] == MIDI_CMD_NOTE_ON) {
ev.buffer()[2] = (uint8_t) rint (ev.buffer()[2] * 1.0);
}
}
#endif
}
/* Audio Gain */
for (BufferSet::audio_iterator i = bufs.audio_begin(); i != bufs.audio_end(); ++i) {
Sample* const buffer = i->data();
fractional_pos = 1.0;
for (nframes_t nx = 0; nx < declick; ++nx) {

View File

@@ -126,6 +126,25 @@ public:
audio_iterator audio_begin() { return audio_iterator(*this, 0); }
audio_iterator audio_end() { return audio_iterator(*this, _count.n_audio()); }
class midi_iterator {
public:
MidiBuffer& operator*() { return _set.get_midi(_index); }
MidiBuffer* operator->() { return &_set.get_midi(_index); }
midi_iterator& operator++() { ++_index; return *this; } // yes, prefix only
bool operator==(const midi_iterator& other) { return (_index == other._index); }
bool operator!=(const midi_iterator& other) { return (_index != other._index); }
private:
friend class BufferSet;
midi_iterator(BufferSet& list, size_t index) : _set(list), _index(index) {}
BufferSet& _set;
size_t _index;
};
midi_iterator midi_begin() { return midi_iterator(*this, 0); }
midi_iterator midi_end() { return midi_iterator(*this, _count.n_midi()); }
class iterator {
public:

View File

@@ -64,6 +64,15 @@ public:
*((TimeType*)(buffer._data + offset)),
event_size, ev_start);
}
inline EventType operator*() {
uint8_t* ev_start = buffer._data + offset + sizeof(TimeType);
int event_size = Evoral::midi_event_size(ev_start);
assert(event_size >= 0);
return EventType(EventTypeMap::instance().midi_event_type(*ev_start),
*((TimeType*)(buffer._data + offset)),
event_size, ev_start);
}
inline iterator_base<BufferType, EventType>& operator++() {
uint8_t* ev_start = buffer._data + offset + sizeof(TimeType);
int event_size = Evoral::midi_event_size(ev_start);

View File

@@ -328,8 +328,6 @@ Delivery::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame, nfra
Amp::apply_simple_gain (bufs, nframes, tgain);
}
// Attach output buffers to port buffers
if (_panner && _panner->npanners() && !_panner->bypassed()) {
// Use the panner to distribute audio to output port buffers

View File

@@ -117,6 +117,8 @@ InternalSend::run (BufferSet& bufs, sframes_t start_frame, sframes_t end_frame,
_amp->run (sendbufs, start_frame, end_frame, nframes);
/* XXX NEED TO PAN */
/* consider metering */
if (_metering) {

View File

@@ -760,10 +760,6 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter
return true;
}
} else if (prop->value() == "listen" || prop->value() == "deliver") {
/* XXX need to generalize */
} else if (prop->value() == "intsend") {
processor.reset (new InternalSend (_session, _mute_master, node));
@@ -795,6 +791,7 @@ Route::add_processor_from_xml (const XMLNode& node, ProcessorList::iterator iter
} else {
error << string_compose(_("unknown Processor type \"%1\"; ignored"), prop->value()) << endmsg;
return false;
}
if (iter == _processors.end() && processor->visible() && !_processors.empty()) {
@@ -2649,6 +2646,8 @@ Route::meter ()
{
Glib::RWLock::ReaderLock rm (_processor_lock, Glib::TRY_LOCK);
assert (_meter);
_meter->meter ();
for (ProcessorList::iterator i = _processors.begin(); i != _processors.end(); ++i) {

View File

@@ -34,6 +34,8 @@
#include "ardour/configuration.h"
#include "ardour/session.h"
#include "i18n.h"
using namespace ARDOUR;
using namespace sigc;
using namespace std;
@@ -224,6 +226,15 @@ RouteGroup::make_subgroup ()
RouteList rl;
uint32_t nin = 0;
/* since we don't do MIDI Busses yet, check quickly ... */
for (list<Route*>::iterator i = routes.begin(); i != routes.end(); ++i) {
if ((*i)->output()->n_ports().n_midi() != 0) {
PBD::info << _("You cannot subgroup MIDI tracks at this time") << endmsg;
return;
}
}
for (list<Route*>::iterator i = routes.begin(); i != routes.end(); ++i) {
nin = max (nin, (*i)->output()->n_ports().n_audio());
}

View File

@@ -190,7 +190,13 @@ Send::configure_io (ChanCount in, ChanCount out)
return false;
}
return Processor::configure_io (in, out);
if (!Processor::configure_io (in, out)) {
return false;
}
reset_panner ();
return true;
}
/** Set up the XML description of a send so that its name is unique.

View File

@@ -3,6 +3,7 @@ import autowaf
import os
import glob
import Options
from w18n import build_i18n
# Version of this package (even if built as a child)
MAJOR = '3'
@@ -26,6 +27,160 @@ blddir = 'build'
path_prefix = 'libs/ardour/'
libardour_sources = [
'amp.cc',
'analyser.cc',
'audio_buffer.cc',
'audio_diskstream.cc',
'audio_library.cc',
'audio_playlist.cc',
'audio_playlist_importer.cc',
'audio_port.cc',
'audio_region_importer.cc',
'audio_track.cc',
'audio_track_importer.cc',
'audioanalyser.cc',
'audioengine.cc',
'audiofile_tagger.cc',
'audiofilesource.cc',
'audioregion.cc',
'audiosource.cc',
'auditioner.cc',
'automatable.cc',
'automation.cc',
'automation_control.cc',
'automation_list.cc',
'beats_frames_converter.cc',
'broadcast_info.cc',
'buffer.cc',
'buffer_set.cc',
'bundle.cc',
'chan_count.cc',
'chan_mapping.cc',
'configuration.cc',
'control_protocol_manager.cc',
'control_protocol_search_path.cc',
'crossfade.cc',
'cycle_timer.cc',
'default_click.cc',
'delivery.cc',
'directory_names.cc',
'diskstream.cc',
'element_import_handler.cc',
'element_importer.cc',
'enums.cc',
'event_type_map.cc',
'export_channel.cc',
'export_channel_configuration.cc',
'export_file_io.cc',
'export_filename.cc',
'export_format_base.cc',
'export_format_manager.cc',
'export_format_specification.cc',
'export_formats.cc',
'export_handler.cc',
'export_preset.cc',
'export_processor.cc',
'export_profile_manager.cc',
'export_status.cc',
'export_timespan.cc',
'export_utilities.cc',
'file_source.cc',
'filename_extensions.cc',
'filesystem_paths.cc',
'filter.cc',
'find_session.cc',
'gain.cc',
'gdither.cc',
'globals.cc',
'import.cc',
'internal_return.cc',
'internal_send.cc',
'interpolation.cc',
'io.cc',
'io_processor.cc',
'jack_slave.cc',
'ladspa_plugin.cc',
'location.cc',
'location_importer.cc',
'meter.cc',
'midi_buffer.cc',
'midi_clock_slave.cc',
'midi_diskstream.cc',
'midi_model.cc',
'midi_patch_manager.cc',
'midi_playlist.cc',
'midi_port.cc',
'midi_region.cc',
'midi_ring_buffer.cc',
'midi_source.cc',
'midi_state_tracker.cc',
'midi_stretch.cc',
'midi_track.cc',
'mix.cc',
'mtc_slave.cc',
'mute_master.cc',
'named_selection.cc',
'onset_detector.cc',
'panner.cc',
'pcm_utils.cc',
'playlist.cc',
'playlist_factory.cc',
'plugin.cc',
'plugin_insert.cc',
'plugin_manager.cc',
'port.cc',
'port_insert.cc',
'port_set.cc',
'processor.cc',
'quantize.cc',
'rc_configuration.cc',
'recent_sessions.cc',
'region.cc',
'region_factory.cc',
'resampled_source.cc',
'return.cc',
'reverse.cc',
'route.cc',
'route_group.cc',
'rb_effect.cc',
'send.cc',
'session.cc',
'session_butler.cc',
'session_click.cc',
'session_command.cc',
'session_configuration.cc',
'session_directory.cc',
'session_events.cc',
'session_export.cc',
'session_metadata.cc',
'session_midi.cc',
'session_process.cc',
'session_state.cc',
'session_state_utils.cc',
'session_time.cc',
'session_transport.cc',
'session_utils.cc',
'smf_source.cc',
'sndfile_helpers.cc',
'sndfileimportable.cc',
'sndfilesource.cc',
'source.cc',
'source_factory.cc',
'strip_silence.cc',
'svn_revision.cc',
'tape_file_matcher.cc',
'template_utils.cc',
'tempo.cc',
'tempo_map_importer.cc',
'ticker.cc',
'track.cc',
'transient_detector.cc',
'user_bundle.cc',
'utils.cc',
'version.cc'
]
def set_options(opt):
autowaf.set_options(opt)
@@ -76,160 +231,8 @@ def configure(conf):
def build(bld):
# Library
obj = bld.new_task_gen('cxx', 'shlib')
obj.source = '''
amp.cc
analyser.cc
audio_buffer.cc
audio_diskstream.cc
audio_library.cc
audio_playlist.cc
audio_playlist_importer.cc
audio_port.cc
audio_region_importer.cc
audio_track.cc
audio_track_importer.cc
audioanalyser.cc
audioengine.cc
audiofile_tagger.cc
audiofilesource.cc
audioregion.cc
audiosource.cc
auditioner.cc
automatable.cc
automation.cc
automation_control.cc
automation_list.cc
beats_frames_converter.cc
broadcast_info.cc
buffer.cc
buffer_set.cc
bundle.cc
chan_count.cc
chan_mapping.cc
configuration.cc
control_protocol_manager.cc
control_protocol_search_path.cc
crossfade.cc
cycle_timer.cc
default_click.cc
delivery.cc
directory_names.cc
diskstream.cc
element_import_handler.cc
element_importer.cc
enums.cc
event_type_map.cc
export_channel.cc
export_channel_configuration.cc
export_file_io.cc
export_filename.cc
export_format_base.cc
export_format_manager.cc
export_format_specification.cc
export_formats.cc
export_handler.cc
export_preset.cc
export_processor.cc
export_profile_manager.cc
export_status.cc
export_timespan.cc
export_utilities.cc
file_source.cc
filename_extensions.cc
filesystem_paths.cc
filter.cc
find_session.cc
gain.cc
gdither.cc
globals.cc
import.cc
internal_return.cc
internal_send.cc
interpolation.cc
io.cc
io_processor.cc
jack_slave.cc
ladspa_plugin.cc
location.cc
location_importer.cc
meter.cc
midi_buffer.cc
midi_clock_slave.cc
midi_diskstream.cc
midi_model.cc
midi_patch_manager.cc
midi_playlist.cc
midi_port.cc
midi_region.cc
midi_ring_buffer.cc
midi_source.cc
midi_state_tracker.cc
midi_stretch.cc
midi_track.cc
mix.cc
mtc_slave.cc
mute_master.cc
named_selection.cc
onset_detector.cc
panner.cc
pcm_utils.cc
playlist.cc
playlist_factory.cc
plugin.cc
plugin_insert.cc
plugin_manager.cc
port.cc
port_insert.cc
port_set.cc
processor.cc
quantize.cc
rc_configuration.cc
recent_sessions.cc
region.cc
region_factory.cc
resampled_source.cc
return.cc
reverse.cc
route.cc
route_group.cc
rb_effect.cc
send.cc
session.cc
session_butler.cc
session_click.cc
session_command.cc
session_configuration.cc
session_directory.cc
session_events.cc
session_export.cc
session_metadata.cc
session_midi.cc
session_process.cc
session_state.cc
session_state_utils.cc
session_time.cc
session_transport.cc
session_utils.cc
smf_source.cc
sndfile_helpers.cc
sndfileimportable.cc
sndfilesource.cc
source.cc
source_factory.cc
strip_silence.cc
svn_revision.cc
tape_file_matcher.cc
template_utils.cc
tempo.cc
tempo_map_importer.cc
ticker.cc
track.cc
transient_detector.cc
user_bundle.cc
utils.cc
version.cc
'''
obj = bld.new_task_gen('cxx', 'shlib')
obj.source = libardour_sources
obj.export_incdirs = ['.']
obj.includes = ['.', '../surfaces/control_protocol']
obj.name = 'libardour'
@@ -249,28 +252,35 @@ def build(bld):
#obj.source += ' st_stretch.cc st_pitch.cc '
#obj.uselib += ' SOUNDTOUCH '
if bld.env['HAVE_SLV2']:
obj.source += ' lv2_plugin.cc lv2_event_buffer.cc uri_map.cc '
obj.source += [ 'lv2_plugin.cc', 'lv2_event_buffer.cc', 'uri_map.cc' ]
obj.uselib += ' SLV2 '
if bld.env['VST']:
obj.source += ' vst_plugin.cc session_vst.cc '
obj.source += [ 'vst_plugin.cc', 'session_vst.cc' ]
if bld.env['HAVE_COREAUDIO'] and bld.env['COREAUDIO']:
obj.sources += ' coreaudio.cc caimportable.cc '
obj.sources += [ 'coreaudio.cc', 'caimportable.cc' ]
if bld.env['HAVE_AUDIOUNITS'] and bld.env['AUDIOUNITS']:
obj.sources += ' audio_unit.cc '
obj.sources += [ 'audio_unit.cc' ]
if bld.env['IS_OSX']:
# this avoids issues with circular dependencies between libardour and libardour_cp.
obj.linkflags += '-undefined suppress -flat_namespace'
if bld.env['FPU_OPTIMIZATION']:
obj.source += ' sse_functions_xmm.cc'
obj.source += [ 'sse_functions_xmm.cc' ]
if bld.env['build_target'] == 'i386' or bld.env['build_target'] == 'i686':
obj.source += ' sse_functions.s'
obj.source += [ 'sse_functions.s' ]
elif bld.env['build_target'] == 'x86_64':
obj.source += ' sse_functions_64bit.s'
obj.source += [ 'sse_functions_64bit.s' ]
# i18n
if bld.env['ENABLE_NLS']:
mo_files = glob.glob (os.path.join (bld.get_curdir(), 'po/*.mo'))
for mo in mo_files:
lang = os.path.basename (mo).replace ('.mo', '')
bld.install_as (os.path.join (bld.env['PREFIX'], 'share', 'locale', lang, 'LC_MESSAGES', APPNAME + '.mo'), mo)
if bld.env['HAVE_CPPUNIT']:
# Unit tests
@@ -289,3 +299,5 @@ def build(bld):
def shutdown():
autowaf.shutdown()
def i18n(bld):
build_i18n (bld, 'libs/ardour', APPNAME, libardour_sources)

View File

@@ -6,7 +6,7 @@ import os
# major increment <=> incompatible changes
# minor increment <=> compatible changes (additions)
# micro increment <=> no interface changes
LIBSURFACES_LIB_VERSION = '4.1.0'
LIBARDOUR_MCP_LIB_VERSION = '4.1.0'
# Mandatory variables
srcdir = '.'
@@ -43,10 +43,10 @@ def build(bld):
obj.export_incdirs = ['./mackie']
obj.cxxflags = '-DPACKAGE="ardour_mackie"'
obj.includes = ['.', './mackie']
obj.name = 'libmackie'
obj.target = 'mackie'
obj.uselib_local = 'libardour libsurfaces'
obj.vnum = LIBSURFACES_LIB_VERSION
obj.name = 'libardour_mcp'
obj.target = 'ardour_mcp'
obj.uselib_local = 'libardour libardour_cp'
obj.vnum = LIBARDOUR_MCP_LIB_VERSION
obj.install_path = os.path.join(bld.env['LIBDIR'], 'ardour3')
def shutdown():

View File

@@ -43,6 +43,7 @@ def configure(conf):
def build(bld):
bld.add_subdirs('control_protocol')
bld.add_subdirs('generic_midi')
bld.add_subdirs('mackie')
if bld.env['BUILD_OSC']:
bld.add_subdirs('osc')
if bld.env['BUILD_POWERMATE']: