kwave
18.07.70
|
#include <RecordPlugin.h>
Classes | |
class | InhibitRecordGuard |
Signals | |
void | sigRecordedSamples (sample_index_t samples_recorded) |
![]() | |
void | sigRunning (Kwave::Plugin *plugin) |
void | sigDone (Kwave::Plugin *plugin) |
void | sigClosed (Kwave::Plugin *p) |
void | sigCommand (const QString &command) |
void | setProgressText (const QString &text) |
Public Member Functions | |
RecordPlugin (QObject *parent, const QVariantList &args) | |
virtual | ~RecordPlugin () Q_DECL_OVERRIDE |
virtual QStringList * | setup (QStringList &previous_params) Q_DECL_OVERRIDE |
![]() | |
Plugin (QObject *parent, const QVariantList &args) | |
virtual | ~Plugin () Q_DECL_OVERRIDE |
virtual QString | name () const |
virtual QString | description () const |
virtual QString | progressText () |
virtual bool | canClose () const |
bool | isRunning () const |
bool | shouldStop () const |
virtual void | load (QStringList ¶ms) |
virtual void | unload () |
virtual int | start (QStringList ¶ms) |
virtual int | stop () |
virtual void | run (QStringList params) |
Kwave::PluginManager & | manager () const |
Kwave::SignalManager & | signalManager () |
QWidget * | parentWidget () const |
QString | signalName () |
virtual sample_index_t | signalLength () |
virtual double | signalRate () |
virtual const QList< unsigned int > | selectedTracks () |
virtual sample_index_t | selection (QList< unsigned int > *tracks=Q_NULLPTR, sample_index_t *left=Q_NULLPTR, sample_index_t *right=Q_NULLPTR, bool expand_if_empty=false) |
virtual void | selectRange (sample_index_t offset, sample_index_t length) |
virtual void | migrateToActiveContext () |
![]() | |
virtual | ~Runnable () |
Protected Slots | |
void | resetRecording (bool &accepted) |
void | startRecording () |
void | recordStopped (int reason) |
void | stateChanged (Kwave::RecordState state) |
Protected Member Functions | |
void | enterInhibit () |
void | leaveInhibit () |
![]() | |
int | execute (QStringList ¶ms) |
void | emitCommand (const QString &command) |
void | use () |
void | setPluginManager (Kwave::PluginManager *new_plugin_manager) |
virtual void | run_wrapper (const QVariant ¶ms) Q_DECL_OVERRIDE |
Private Slots | |
void | setMethod (Kwave::record_method_t method) |
void | setDevice (const QString &device) |
void | changeTracks (unsigned int new_tracks) |
void | changeSampleRate (double new_rate) |
void | changeCompression (Kwave::Compression::Type new_compression) |
void | changeBitsPerSample (unsigned int new_bits) |
void | changeSampleFormat (Kwave::SampleFormat::Format new_format) |
void | processBuffer () |
void | buffersChanged () |
void | prerecordingChanged (bool enable) |
void | retryOpen () |
Private Member Functions | |
void | closeDevice () |
void | notice (QString message) |
void | setupRecordThread () |
void | updateBufferProgressBar () |
bool | checkTrigger (unsigned int track, const Kwave::SampleArray &buffer) |
void | split (QByteArray &raw_data, QByteArray &dest, unsigned int bytes_per_sample, unsigned int track, unsigned int tracks) |
void | enqueuePrerecording (unsigned int track, const Kwave::SampleArray &decoded) |
void | flushPrerecordingQueue () |
bool | paramsValid () |
Private Attributes | |
Kwave::record_method_t | m_method |
QString | m_device_name |
Kwave::RecordController | m_controller |
Kwave::RecordState | m_state |
Kwave::RecordDevice * | m_device |
Kwave::RecordDialog * | m_dialog |
Kwave::RecordThread * | m_thread |
Kwave::SampleDecoder * | m_decoder |
QVector< Kwave::SampleFIFO > | m_prerecording_queue |
Kwave::MultiTrackWriter * | m_writers |
unsigned int | m_buffers_recorded |
unsigned int | m_inhibit_count |
QVector< float > | m_trigger_value |
QTimer | m_retry_timer |
Friends | |
class | InhibitRecordGuard |
Additional Inherited Members | |
![]() | |
virtual void | setProgressDialogEnabled (bool enable) |
virtual void | updateProgress (qreal progress) |
virtual void | cancel () |
virtual void | close () |
void | release () |
Definition at line 51 of file RecordPlugin.h.
Kwave::RecordPlugin::RecordPlugin | ( | QObject * | parent, |
const QVariantList & | args | ||
) |
Constructor
parent | reference to our plugin manager |
args | argument list [unused] |
Definition at line 67 of file RecordPlugin.cpp.
References Kwave::connect(), m_retry_timer, and retryOpen().
|
virtual |
|
privateslot |
restart recorder with new buffer settings
Definition at line 816 of file RecordPlugin.cpp.
Referenced by setup().
|
privateslot |
select a new resolution [bits/sample]
Definition at line 711 of file RecordPlugin.cpp.
References Kwave::RecordDevice::bitsPerSample(), changeSampleFormat(), m_device, m_device_name, m_dialog, notice(), Kwave::RecordDialog::params(), Kwave::RecordParams::sample_format, Kwave::RecordDialog::setBitsPerSample(), Kwave::RecordDevice::setBitsPerSample(), Kwave::RecordDialog::setSupportedBits(), Kwave::RecordDevice::supportedBits(), Kwave::toInt(), and Kwave::SampleFormat::Unknown.
Referenced by changeCompression(), and setup().
|
privateslot |
change compression type
Definition at line 651 of file RecordPlugin.cpp.
References Kwave::RecordParams::bits_per_sample, changeBitsPerSample(), Kwave::RecordDevice::compression(), Kwave::RecordDevice::detectCompressions(), m_device, m_device_name, m_dialog, Kwave::Plugin::name(), Kwave::Compression::NONE, notice(), Kwave::RecordDialog::params(), Kwave::RecordDialog::setCompression(), Kwave::RecordDevice::setCompression(), and Kwave::RecordDialog::setSupportedCompressions().
Referenced by changeSampleRate(), and setup().
|
privateslot |
select a new sample format
Definition at line 763 of file RecordPlugin.cpp.
References Kwave::TypesMap< IDX, DATA >::description(), Kwave::RecordDevice::detectSampleFormats(), Kwave::TypesMap< IDX, DATA >::findFromData(), m_device, m_device_name, m_dialog, notice(), Kwave::RecordDevice::sampleFormat(), Kwave::RecordDialog::setSampleFormat(), Kwave::RecordDevice::setSampleFormat(), Kwave::RecordDialog::setSupportedSampleFormats(), and Kwave::SampleFormat::Unknown.
Referenced by changeBitsPerSample(), and setup().
|
privateslot |
select a new sample rate [samples/second]
Definition at line 590 of file RecordPlugin.cpp.
References changeCompression(), Kwave::RecordParams::compression, Kwave::RecordDevice::detectSampleRates(), Kwave::Compression::INVALID, m_device, m_device_name, m_dialog, notice(), Kwave::RecordDialog::params(), Kwave::RecordDialog::rate2string(), Kwave::RecordDevice::sampleRate(), Kwave::RecordDialog::setSampleRate(), Kwave::RecordDevice::setSampleRate(), Kwave::RecordDialog::setSupportedSampleRates(), and Kwave::toInt().
Referenced by changeTracks(), and setup().
|
privateslot |
select a new number of tracks (channels)
Definition at line 508 of file RecordPlugin.cpp.
References changeSampleRate(), Kwave::RecordDevice::detectTracks(), m_device, m_device_name, m_dialog, notice(), Kwave::RecordDialog::params(), Kwave::RecordParams::sample_rate, Kwave::RecordDialog::setSupportedTracks(), Kwave::RecordDialog::setTracks(), Kwave::RecordDevice::setTracks(), and Kwave::RecordDevice::tracks().
Referenced by setDevice(), and setup().
|
private |
check if the trigger level has been reached
track | index of the track that is checked |
buffer | array with Kwave sample data |
Definition at line 1314 of file RecordPlugin.cpp.
References m_dialog, m_trigger_value, m_writers, Kwave::RecordDialog::params(), Kwave::RecordParams::record_trigger, Kwave::RecordParams::record_trigger_enabled, sample2float(), Kwave::RecordParams::sample_rate, Kwave::SampleArray::size(), Kwave::RecordParams::start_time, Kwave::RecordParams::start_time_enabled, Kwave::toInt(), and Kwave::MultiTrackSink< SINK, INITIALIZE >::tracks().
Referenced by processBuffer().
|
private |
close m_device and delete it
Definition at line 261 of file RecordPlugin.cpp.
References Kwave::RecordDevice::close(), m_device, and m_retry_timer.
|
private |
Enqueue a buffer with decoded samples into a prerecording buffer of the corresponding track.
track | index of the track [0...tracks-1] |
decoded | array with decoded samples, in Kwave's internal format |
Definition at line 1403 of file RecordPlugin.cpp.
References m_dialog, m_prerecording_queue, and Kwave::toInt().
Referenced by processBuffer().
|
protected |
inhibits recording, stopping the recorder if necessary
Definition at line 823 of file RecordPlugin.cpp.
References m_inhibit_count, m_thread, processBuffer(), Kwave::RecordThread::queuedBuffers(), and Kwave::WorkerThread::stop().
Referenced by Kwave::RecordPlugin::InhibitRecordGuard::InhibitRecordGuard().
|
private |
Flush the content of the prerecording queue to the output
Definition at line 1416 of file RecordPlugin.cpp.
References Kwave::StreamObject::blockSize(), Kwave::SampleFIFO::crop(), Kwave::SampleFIFO::flush(), Kwave::SampleFIFO::get(), Kwave::SampleFIFO::length(), m_controller, m_decoder, m_dialog, m_prerecording_queue, m_thread, m_writers, Kwave::RecordDialog::params(), Kwave::RecordController::setEmpty(), Kwave::MultiTrackSink< SINK, INITIALIZE >::tracks(), Kwave::RecordParams::tracks, and Kwave::Writer::write().
Referenced by processBuffer().
|
protected |
leave the area with recording inhibited, restart recorder if needed
Definition at line 841 of file RecordPlugin.cpp.
References m_dialog, m_inhibit_count, m_thread, paramsValid(), setupRecordThread(), and Kwave::WorkerThread::start().
Referenced by Kwave::RecordPlugin::InhibitRecordGuard::~InhibitRecordGuard().
|
private |
show a short notice which disappears automatically, e.g. if something is not supported and has been substituted
message | the notice that should pop up |
Definition at line 254 of file RecordPlugin.cpp.
References m_dialog, and Kwave::RecordDialog::message().
Referenced by changeBitsPerSample(), changeCompression(), changeSampleFormat(), changeSampleRate(), changeTracks(), setDevice(), and setupRecordThread().
|
private |
Returns true if all parameters are valid and the recording (thread) could be started.
Definition at line 870 of file RecordPlugin.cpp.
References Kwave::RecordDevice::bitsPerSample(), Kwave::RecordDevice::endianness(), m_device, m_device_name, m_dialog, m_thread, Kwave::RecordDialog::params(), Kwave::RecordParams::sample_format, Kwave::RecordDevice::sampleFormat(), Kwave::SampleFormat::Signed, Kwave::RecordParams::tracks, Kwave::UnknownEndian, and Kwave::SampleFormat::Unsigned.
Referenced by leaveInhibit(), setDevice(), and setupRecordThread().
|
privateslot |
the prerecording checkbox has changed
Definition at line 1608 of file RecordPlugin.cpp.
Referenced by setup().
|
privateslot |
process a raw audio buffer
Definition at line 1466 of file RecordPlugin.cpp.
References Kwave::RecordController::actionStop(), checkTrigger(), Kwave::SampleDecoder::decode(), Kwave::RecordThread::dequeue(), Kwave::RecordController::deviceBufferFull(), Kwave::RecordController::deviceTriggerReached(), enqueuePrerecording(), flushPrerecordingQueue(), Kwave::MultiWriter::last(), m_buffers_recorded, m_controller, m_decoder, m_dialog, m_prerecording_queue, m_state, m_thread, m_writers, Kwave::RecordDialog::params(), Kwave::RecordThread::queuedBuffers(), Kwave::SampleDecoder::rawBytesPerSample(), Kwave::REC_BUFFERING, Kwave::REC_DONE, Kwave::REC_EMPTY, Kwave::REC_PAUSED, Kwave::REC_PRERECORDING, Kwave::REC_RECORDING, Kwave::REC_UNINITIALIZED, Kwave::REC_WAITING_FOR_TRIGGER, Kwave::RecordParams::record_time, Kwave::RecordParams::record_time_limited, Kwave::RecordParams::record_trigger_enabled, Kwave::RecordParams::sample_rate, Kwave::RecordController::setEmpty(), sigRecordedSamples(), Kwave::SampleArray::size(), split(), Kwave::RecordParams::start_time_enabled, Kwave::toInt(), Kwave::toUint(), Kwave::MultiTrackSink< SINK, INITIALIZE >::tracks(), Kwave::RecordParams::tracks, updateBufferProgressBar(), and Kwave::RecordDialog::updateEffects().
Referenced by enterInhibit(), and setup().
|
protectedslot |
called when the recording stopped (for detecting aborts only)
Definition at line 1086 of file RecordPlugin.cpp.
References Kwave::MessageBox::error(), Kwave::MultiWriter::flush(), Kwave::MultiWriter::last(), m_dialog, m_prerecording_queue, m_writers, Kwave::RecordDialog::params(), Kwave::SignalManager::setFileInfo(), Kwave::FileInfo::setLength(), Kwave::FileInfo::setTracks(), Kwave::Plugin::signalLength(), Kwave::Plugin::signalManager(), and Kwave::RecordParams::tracks.
Referenced by setup().
|
protectedslot |
command for resetting all recorded stuff for starting again
accepted | bool variable that will show if the action was performed or aborted (not accepted) |
Definition at line 892 of file RecordPlugin.cpp.
References _, Kwave::MultiWriter::clear(), Kwave::Plugin::emitCommand(), Kwave::SignalManager::isEmpty(), m_buffers_recorded, m_controller, m_writers, Kwave::Plugin::manager(), Kwave::Plugin::migrateToActiveContext(), Kwave::RecordController::setEmpty(), Kwave::PluginManager::signalManager(), and sigRecordedSamples().
Referenced by setup().
|
privateslot |
try to open the record device, in case it was busy before
Definition at line 377 of file RecordPlugin.cpp.
References m_device_name, and setDevice().
Referenced by RecordPlugin().
|
privateslot |
select a new record device
Definition at line 384 of file RecordPlugin.cpp.
References _, changeTracks(), DBG, m_controller, m_device, m_device_name, m_dialog, m_method, m_retry_timer, Kwave::Plugin::name(), notice(), Kwave::RecordDevice::open(), OPEN_RETRY_TIME, Kwave::RecordDialog::params(), paramsValid(), Kwave::Plugin::parentWidget(), Kwave::RecordDialog::setDevice(), Kwave::RecordController::setInitialized(), Kwave::RecordDialog::showDevicePage(), Kwave::MessageBox::sorry(), Kwave::RecordDevice::supportedDevices(), and Kwave::RecordParams::tracks.
Referenced by retryOpen(), setMethod(), and setup().
|
privateslot |
Change the recording method
method | the new recording method |
Definition at line 273 of file RecordPlugin.cpp.
References _, Kwave::RecordDevice::fileFilter(), m_device, m_device_name, m_dialog, m_method, Kwave::Plugin::name(), Kwave::RECORD_ALSA, Kwave::RECORD_INVALID, Kwave::RECORD_NONE, Kwave::RECORD_OSS, Kwave::RECORD_PULSEAUDIO, Kwave::RECORD_QT, setDevice(), Kwave::RecordDialog::setFileFilter(), Kwave::RecordDialog::setMethod(), Kwave::RecordDialog::setSupportedDevices(), and Kwave::RecordDevice::supportedDevices().
Referenced by setup().
|
virtual |
Reimplemented from Kwave::Plugin.
Definition at line 111 of file RecordPlugin.cpp.
References _, Kwave::RecordController::actionStart(), buffersChanged(), changeBitsPerSample(), changeCompression(), changeSampleFormat(), changeSampleRate(), changeTracks(), Kwave::connect(), DBG, Kwave::PluginManager::defaultParams(), Kwave::RecordController::enablePrerecording(), Kwave::RecordController::enableTrigger(), Kwave::SignalManager::enableUndo(), m_controller, m_decoder, m_dialog, m_prerecording_queue, m_thread, Kwave::Plugin::manager(), Kwave::Plugin::name(), Kwave::Plugin::parentWidget(), prerecordingChanged(), processBuffer(), Kwave::RecordThread::queuedBuffers(), recordStopped(), resetRecording(), setDevice(), setMethod(), Kwave::RecordDialog::SETTINGS_DEFAULT, Kwave::RecordDialog::SETTINGS_FORMAT, Kwave::RecordDialog::SETTINGS_SOURCE, Kwave::Plugin::signalManager(), sigRecordedSamples(), Kwave::RecordDialog::START_RECORDING, startRecording(), stateChanged(), and Kwave::WorkerThread::stop().
|
private |
set up the recorder thread and record device (again)
Definition at line 914 of file RecordPlugin.cpp.
References Kwave::RecordDevice::bitsPerSample(), Kwave::RecordParams::buffer_count, Kwave::RecordParams::buffer_size, Kwave::RecordParams::compression, Kwave::RecordDevice::endianness(), m_decoder, m_device, m_dialog, m_prerecording_queue, m_thread, m_trigger_value, Kwave::Compression::NONE, notice(), Kwave::RecordDialog::params(), paramsValid(), Kwave::RecordParams::pre_record_enabled, Kwave::RecordParams::pre_record_time, Kwave::SampleDecoder::rawBytesPerSample(), Kwave::RecordParams::sample_format, Kwave::RecordParams::sample_rate, Kwave::RecordDevice::sampleFormat(), Kwave::RecordThread::setBuffers(), Kwave::RecordThread::setRecordDevice(), Kwave::SampleFormat::Signed, Kwave::MessageBox::sorry(), Kwave::WorkerThread::stop(), Kwave::toInt(), Kwave::toUint(), Kwave::RecordParams::tracks, and Kwave::SampleFormat::Unsigned.
Referenced by leaveInhibit().
|
signal |
emitted to promote the recording progress to the dialog
Referenced by processBuffer(), resetRecording(), and setup().
|
private |
Split off one track from a raw buffer with multiple tracks into a separate buffer
raw_data | the raw buffer with multiple tracks |
dest | byte array that receives the data of the specified track |
bytes_per_sample | number of bytes for each sample |
track | index of the track to split off [1...n-1] |
tracks | number of total tracks |
Definition at line 1184 of file RecordPlugin.cpp.
References saw().
Referenced by processBuffer().
|
protectedslot |
command for starting the recording, completion is signaled with sigStarted()
Definition at line 997 of file RecordPlugin.cpp.
References _, Kwave::Append, Kwave::SignalManager::bits(), Kwave::RecordParams::bits_per_sample, Kwave::RecordParams::compression, Kwave::RecordController::deviceRecordStarted(), Kwave::SignalManager::disableUndo(), Kwave::Plugin::emitCommand(), Kwave::INF_COMPRESSION, Kwave::INF_CREATION_DATE, Kwave::INF_MIMETYPE, Kwave::INF_SAMPLE_FORMAT, Kwave::INF_SOFTWARE, m_controller, m_decoder, m_device, m_dialog, m_state, m_thread, m_writers, Kwave::Plugin::migrateToActiveContext(), Kwave::RecordDialog::params(), Kwave::SignalManager::rate(), Kwave::FileInfo::rate(), Kwave::REC_PAUSED, Kwave::RecordParams::sample_format, Kwave::RecordParams::sample_rate, Kwave::FileInfo::set(), Kwave::FileInfo::setBits(), Kwave::SignalManager::setFileInfo(), Kwave::FileInfo::setRate(), Kwave::FileInfo::setTracks(), Kwave::Plugin::signalManager(), Kwave::MessageBox::sorry(), Kwave::toInt(), Kwave::MultiTrackSink< SINK, INITIALIZE >::tracks(), Kwave::RecordParams::tracks, and Kwave::SignalManager::tracks().
Referenced by setup().
|
protectedslot |
called when the recording engine has changed it's state
Definition at line 1128 of file RecordPlugin.cpp.
References Kwave::MultiWriter::flush(), m_buffers_recorded, m_dialog, m_state, m_writers, Kwave::REC_DONE, Kwave::REC_EMPTY, Kwave::REC_PAUSED, Kwave::REC_UNINITIALIZED, and Kwave::RecordDialog::updateBufferState().
Referenced by setup().
|
private |
update the buffer progress bar
Definition at line 1151 of file RecordPlugin.cpp.
References Kwave::RecordParams::buffer_count, m_buffers_recorded, m_dialog, m_state, m_thread, Kwave::RecordDialog::params(), Kwave::RecordThread::queuedBuffers(), Kwave::REC_DONE, Kwave::REC_EMPTY, Kwave::REC_PAUSED, Kwave::RecordThread::remainingBuffers(), and Kwave::RecordDialog::updateBufferState().
Referenced by processBuffer().
|
friend |
Definition at line 101 of file RecordPlugin.h.
|
private |
number of recorded buffers since start or continue or the number of buffers in the queue if recording stopped
Definition at line 273 of file RecordPlugin.h.
Referenced by processBuffer(), resetRecording(), stateChanged(), and updateBufferProgressBar().
|
private |
controller for the recording engine
Definition at line 243 of file RecordPlugin.h.
Referenced by flushPrerecordingQueue(), processBuffer(), resetRecording(), setDevice(), setup(), and startRecording().
|
private |
decoder for converting raw data to samples
Definition at line 258 of file RecordPlugin.h.
Referenced by flushPrerecordingQueue(), processBuffer(), setup(), setupRecordThread(), startRecording(), and ~RecordPlugin().
|
private |
device used for recording
Definition at line 249 of file RecordPlugin.h.
Referenced by changeBitsPerSample(), changeCompression(), changeSampleFormat(), changeSampleRate(), changeTracks(), closeDevice(), paramsValid(), setDevice(), setMethod(), setupRecordThread(), startRecording(), and ~RecordPlugin().
|
private |
last record device
Definition at line 240 of file RecordPlugin.h.
Referenced by changeBitsPerSample(), changeCompression(), changeSampleFormat(), changeSampleRate(), changeTracks(), paramsValid(), retryOpen(), setDevice(), and setMethod().
|
private |
setup dialog
Definition at line 252 of file RecordPlugin.h.
Referenced by changeBitsPerSample(), changeCompression(), changeSampleFormat(), changeSampleRate(), changeTracks(), checkTrigger(), enqueuePrerecording(), flushPrerecordingQueue(), leaveInhibit(), notice(), paramsValid(), processBuffer(), recordStopped(), setDevice(), setMethod(), setup(), setupRecordThread(), startRecording(), stateChanged(), updateBufferProgressBar(), and ~RecordPlugin().
|
private |
recursion level for inhibiting recording
Definition at line 276 of file RecordPlugin.h.
Referenced by enterInhibit(), and leaveInhibit().
|
private |
last recording method
Definition at line 237 of file RecordPlugin.h.
Referenced by setDevice(), and setMethod().
|
private |
set of queues for buffering prerecording data, one for each track
Definition at line 264 of file RecordPlugin.h.
Referenced by enqueuePrerecording(), flushPrerecordingQueue(), processBuffer(), recordStopped(), setup(), and setupRecordThread().
|
private |
timer for retrying "open"
Definition at line 282 of file RecordPlugin.h.
Referenced by closeDevice(), RecordPlugin(), and setDevice().
|
private |
global state of the plugin
Definition at line 246 of file RecordPlugin.h.
Referenced by processBuffer(), startRecording(), stateChanged(), and updateBufferProgressBar().
|
private |
the thread for recording
Definition at line 255 of file RecordPlugin.h.
Referenced by enterInhibit(), flushPrerecordingQueue(), leaveInhibit(), paramsValid(), processBuffer(), setup(), setupRecordThread(), startRecording(), updateBufferProgressBar(), and ~RecordPlugin().
|
private |
buffer for trigger values
Definition at line 279 of file RecordPlugin.h.
Referenced by checkTrigger(), and setupRecordThread().
|
private |
sink for the audio data
Definition at line 267 of file RecordPlugin.h.
Referenced by checkTrigger(), flushPrerecordingQueue(), processBuffer(), recordStopped(), resetRecording(), startRecording(), and stateChanged().