mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-08 06:35:46 +01:00
new files added
git-svn-id: svn://localhost/ardour2/trunk@2580 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
8ab17e9631
commit
1059b3f48e
4 changed files with 327 additions and 0 deletions
106
libs/ardour/ardour/base_audio_port.h
Normal file
106
libs/ardour/ardour/base_audio_port.h
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
Copyright (C) 2002 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: port.h 712 2006-07-28 01:08:57Z drobilla $
|
||||
*/
|
||||
|
||||
#ifndef __ardour_base_audio_port_h__
|
||||
#define __ardour_base_audio_port_h__
|
||||
|
||||
#include <string>
|
||||
|
||||
#include <sigc++/signal.h>
|
||||
|
||||
#include <pbd/failed_constructor.h>
|
||||
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/port.h>
|
||||
#include <ardour/audio_buffer.h>
|
||||
|
||||
namespace ARDOUR {
|
||||
|
||||
class AudioEngine;
|
||||
|
||||
class BaseAudioPort : public virtual Port {
|
||||
public:
|
||||
virtual ~BaseAudioPort();
|
||||
|
||||
DataType type() const { return DataType::AUDIO; }
|
||||
|
||||
virtual Buffer& get_buffer () {
|
||||
assert (_buffer);
|
||||
return *_buffer;
|
||||
}
|
||||
|
||||
virtual AudioBuffer& get_audio_buffer() {
|
||||
assert (_buffer);
|
||||
return *_buffer;
|
||||
}
|
||||
|
||||
void reset ();
|
||||
|
||||
void reset_overs () {
|
||||
/* XXX NOT THREAD SAFE */
|
||||
_short_overs = 0;
|
||||
_long_overs = 0;
|
||||
_overlen = 0;
|
||||
}
|
||||
|
||||
void reset_peak_meter () {
|
||||
/* XXX NOT THREAD SAFE */
|
||||
_peak = 0;
|
||||
}
|
||||
|
||||
void reset_meters () {
|
||||
/* XXX NOT THREAD SAFE */
|
||||
reset_peak_meter ();
|
||||
reset_overs ();
|
||||
}
|
||||
|
||||
float peak_db() const { return _peak_db; }
|
||||
Sample peak() const { return _peak; }
|
||||
|
||||
uint32_t short_overs () const { return _short_overs; }
|
||||
uint32_t long_overs () const { return _long_overs; }
|
||||
|
||||
static void set_short_over_length (nframes_t);
|
||||
static void set_long_over_length (nframes_t);
|
||||
|
||||
void set_mixdown_function (void (*func)(const std::set<Port*>&, AudioBuffer*, nframes_t, nframes_t, bool));
|
||||
|
||||
protected:
|
||||
BaseAudioPort (const std::string& name, Flags flags);
|
||||
|
||||
AudioBuffer* _buffer;
|
||||
nframes_t _overlen;
|
||||
Sample _peak;
|
||||
float _peak_db;
|
||||
uint32_t _short_overs;
|
||||
uint32_t _long_overs;
|
||||
bool _own_buffer;
|
||||
|
||||
void (*_mixdown)(const std::set<Port*>&, AudioBuffer*, nframes_t, nframes_t, bool);
|
||||
|
||||
static void default_mixdown (const std::set<Port*>&, AudioBuffer*, nframes_t, nframes_t, bool);
|
||||
|
||||
static nframes_t _long_over_length;
|
||||
static nframes_t _short_over_length;
|
||||
};
|
||||
|
||||
} // namespace ARDOUR
|
||||
|
||||
#endif /* __ardour_base_audio_port_h__ */
|
||||
67
libs/ardour/ardour/base_midi_port.h
Normal file
67
libs/ardour/ardour/base_midi_port.h
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
/*
|
||||
Copyright (C) 2002 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id: port.h 712 2006-07-28 01:08:57Z drobilla $
|
||||
*/
|
||||
|
||||
#ifndef __ardour_base_midi_port_h__
|
||||
#define __ardour_base_midi_port_h__
|
||||
|
||||
#include <sigc++/signal.h>
|
||||
#include <pbd/failed_constructor.h>
|
||||
#include <ardour/ardour.h>
|
||||
#include <ardour/port.h>
|
||||
#include <ardour/midi_buffer.h>
|
||||
|
||||
namespace ARDOUR {
|
||||
|
||||
class MidiEngine;
|
||||
|
||||
class BaseMidiPort : public virtual Port {
|
||||
public:
|
||||
virtual ~BaseMidiPort();
|
||||
|
||||
DataType type() const { return DataType::MIDI; }
|
||||
|
||||
Buffer& get_buffer() {
|
||||
assert (_buffer);
|
||||
return *_buffer;
|
||||
}
|
||||
|
||||
MidiBuffer& get_midi_buffer() {
|
||||
assert (_buffer);
|
||||
return *_buffer;
|
||||
}
|
||||
|
||||
size_t capacity() { return _buffer->capacity(); }
|
||||
size_t size() { return _buffer->size(); }
|
||||
|
||||
void set_mixdown_function (void (*func)(const std::set<Port*>&, MidiBuffer*, nframes_t, nframes_t, bool));
|
||||
|
||||
protected:
|
||||
BaseMidiPort (const std::string& name, Flags);
|
||||
|
||||
MidiBuffer* _buffer;
|
||||
bool _own_buffer;
|
||||
|
||||
void (*_mixdown)(const std::set<Port*>&, MidiBuffer*, nframes_t, nframes_t, bool);
|
||||
static void default_mixdown (const std::set<Port*>&, MidiBuffer*, nframes_t, nframes_t, bool);
|
||||
};
|
||||
|
||||
} // namespace ARDOUR
|
||||
|
||||
#endif /* __ardour_base_midi_port_h__ */
|
||||
85
libs/ardour/base_audio_port.cc
Normal file
85
libs/ardour/base_audio_port.cc
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
/*
|
||||
Copyright (C) 2006 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <cassert>
|
||||
#include <ardour/base_audio_port.h>
|
||||
#include <ardour/audioengine.h>
|
||||
#include <ardour/data_type.h>
|
||||
|
||||
using namespace ARDOUR;
|
||||
using namespace std;
|
||||
|
||||
nframes_t BaseAudioPort::_short_over_length = 2;
|
||||
nframes_t BaseAudioPort::_long_over_length = 10;
|
||||
|
||||
BaseAudioPort::BaseAudioPort (const std::string& name, Flags flgs)
|
||||
: Port (name, flgs)
|
||||
, _buffer (0)
|
||||
, _own_buffer (false)
|
||||
{
|
||||
_type = DataType::AUDIO;
|
||||
_mixdown = default_mixdown;
|
||||
}
|
||||
|
||||
BaseAudioPort::~BaseAudioPort ()
|
||||
{
|
||||
if (_own_buffer && _buffer) {
|
||||
delete _buffer;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BaseAudioPort::reset()
|
||||
{
|
||||
Port::reset();
|
||||
|
||||
if (_own_buffer && _buffer) {
|
||||
_buffer->resize (engine->frames_per_cycle());
|
||||
_buffer->clear ();
|
||||
}
|
||||
|
||||
_metering = 0;
|
||||
reset_meters ();
|
||||
}
|
||||
|
||||
void
|
||||
BaseAudioPort::default_mixdown (const set<Port*>& ports, AudioBuffer* dest, nframes_t cnt, nframes_t offset, bool first_overwrite)
|
||||
{
|
||||
set<Port*>::const_iterator p = ports.begin();
|
||||
|
||||
if (first_overwrite) {
|
||||
dest->read_from ((dynamic_cast<BaseAudioPort*>(*p))->get_audio_buffer(), cnt, offset);
|
||||
p++;
|
||||
}
|
||||
|
||||
for (; p != ports.end(); ++p) {
|
||||
dest->accumulate_from ((dynamic_cast<BaseAudioPort*>(*p))->get_audio_buffer(), cnt, offset);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BaseAudioPort::set_mixdown_function (void (*func)(const set<Port*>&, AudioBuffer*, nframes_t, nframes_t, bool))
|
||||
{
|
||||
/* caller should (but not must) hold process lock since this is an atomic operation on most platforms
|
||||
and even if its not, it doesn't really matter.
|
||||
*/
|
||||
|
||||
_mixdown = func;
|
||||
}
|
||||
|
||||
|
||||
69
libs/ardour/base_midi_port.cc
Normal file
69
libs/ardour/base_midi_port.cc
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
/*
|
||||
Copyright (C) 2006 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <cassert>
|
||||
#include <iostream>
|
||||
|
||||
#include <ardour/base_midi_port.h>
|
||||
#include <ardour/data_type.h>
|
||||
|
||||
using namespace ARDOUR;
|
||||
using namespace std;
|
||||
|
||||
BaseMidiPort::BaseMidiPort (const std::string& name, Flags flags)
|
||||
: Port (name, flags)
|
||||
, _buffer (0)
|
||||
, _own_buffer (false)
|
||||
{
|
||||
_type = DataType::MIDI;
|
||||
reset();
|
||||
}
|
||||
|
||||
BaseMidiPort::~BaseMidiPort()
|
||||
{
|
||||
if (_own_buffer && _buffer) {
|
||||
delete _buffer;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BaseMidiPort::default_mixdown (const set<Port*>& ports, MidiBuffer* dest, nframes_t cnt, nframes_t offset, bool first_overwrite)
|
||||
{
|
||||
set<Port*>::const_iterator p = ports.begin();
|
||||
|
||||
if (first_overwrite) {
|
||||
dest->read_from ((dynamic_cast<BaseMidiPort*>(*p))->get_midi_buffer(), cnt, offset);
|
||||
p++;
|
||||
}
|
||||
|
||||
// XXX DAVE: this is just a guess
|
||||
|
||||
for (; p != ports.end(); ++p) {
|
||||
dest->merge (*dest, (dynamic_cast<BaseMidiPort*>(*p))->get_midi_buffer());
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
BaseMidiPort::set_mixdown_function (void (*func)(const set<Port*>&, MidiBuffer*, nframes_t, nframes_t, bool))
|
||||
{
|
||||
/* caller should (but not must) hold process lock since this is an atomic operation on most platforms
|
||||
and even if its not, it doesn't really matter.
|
||||
*/
|
||||
|
||||
_mixdown = func;
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue