diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2009-07-22 13:51:16 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2009-07-22 13:51:16 +0000 |
commit | 3b7230552d8aa6c36fd2fbc3ccc1cfb9109fc843 (patch) | |
tree | 9d838960d1cad7fca14957b5e5de3215cf938185 /libs/ardour | |
parent | 272c1a40db7c965664b256f7f5487dd224bfd413 (diff) |
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
Diffstat (limited to 'libs/ardour')
-rw-r--r-- | libs/ardour/amp.cc | 20 | ||||
-rw-r--r-- | libs/ardour/ardour/buffer_set.h | 19 | ||||
-rw-r--r-- | libs/ardour/ardour/midi_buffer.h | 9 | ||||
-rw-r--r-- | libs/ardour/delivery.cc | 2 | ||||
-rw-r--r-- | libs/ardour/internal_send.cc | 2 | ||||
-rw-r--r-- | libs/ardour/route.cc | 7 | ||||
-rw-r--r-- | libs/ardour/route_group.cc | 11 | ||||
-rw-r--r-- | libs/ardour/send.cc | 8 | ||||
-rw-r--r-- | libs/ardour/wscript | 334 |
9 files changed, 243 insertions, 169 deletions
diff --git a/libs/ardour/amp.cc b/libs/ardour/amp.cc index c5183eb3db..0efaaa3535 100644 --- a/libs/ardour/amp.cc +++ b/libs/ardour/amp.cc @@ -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) { diff --git a/libs/ardour/ardour/buffer_set.h b/libs/ardour/ardour/buffer_set.h index 1c77918789..284609a988 100644 --- a/libs/ardour/ardour/buffer_set.h +++ b/libs/ardour/ardour/buffer_set.h @@ -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: diff --git a/libs/ardour/ardour/midi_buffer.h b/libs/ardour/ardour/midi_buffer.h index 4e27e33235..d5f15fb621 100644 --- a/libs/ardour/ardour/midi_buffer.h +++ b/libs/ardour/ardour/midi_buffer.h @@ -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); diff --git a/libs/ardour/delivery.cc b/libs/ardour/delivery.cc index 5a7365df96..01ff226b5e 100644 --- a/libs/ardour/delivery.cc +++ b/libs/ardour/delivery.cc @@ -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 diff --git a/libs/ardour/internal_send.cc b/libs/ardour/internal_send.cc index 7c2c384276..f11c6037b3 100644 --- a/libs/ardour/internal_send.cc +++ b/libs/ardour/internal_send.cc @@ -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) { diff --git a/libs/ardour/route.cc b/libs/ardour/route.cc index 73323b4aca..56311c975d 100644 --- a/libs/ardour/route.cc +++ b/libs/ardour/route.cc @@ -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) { diff --git a/libs/ardour/route_group.cc b/libs/ardour/route_group.cc index f88df5c86a..26612226a7 100644 --- a/libs/ardour/route_group.cc +++ b/libs/ardour/route_group.cc @@ -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()); } diff --git a/libs/ardour/send.cc b/libs/ardour/send.cc index 1728dc52d9..a90f31c2cf 100644 --- a/libs/ardour/send.cc +++ b/libs/ardour/send.cc @@ -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. diff --git a/libs/ardour/wscript b/libs/ardour/wscript index c58d74384e..58e22cca27 100644 --- a/libs/ardour/wscript +++ b/libs/ardour/wscript @@ -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) |