DlgRecording::DlgRecording(QWidget* parent, UserSettingsPointer pConfig, Library* pLibrary, TrackCollection* pTrackCollection, RecordingManager* pRecordingManager, KeyboardEventFilter* pKeyboard) : QWidget(parent), m_pConfig(pConfig), m_pTrackCollection(pTrackCollection), m_browseModel(this, m_pTrackCollection, pRecordingManager), m_proxyModel(&m_browseModel), m_bytesRecordedStr("--"), m_durationRecordedStr("--:--"), m_pRecordingManager(pRecordingManager) { setupUi(this); m_pTrackTableView = new WTrackTableView(this, pConfig, m_pTrackCollection, true); m_pTrackTableView->installEventFilter(pKeyboard); connect(m_pTrackTableView, SIGNAL(loadTrack(TrackPointer)), this, SIGNAL(loadTrack(TrackPointer))); connect(m_pTrackTableView, SIGNAL(loadTrackToPlayer(TrackPointer, QString, bool)), this, SIGNAL(loadTrackToPlayer(TrackPointer, QString, bool))); connect(pLibrary, SIGNAL(setTrackTableFont(QFont)), m_pTrackTableView, SLOT(setTrackTableFont(QFont))); connect(pLibrary, SIGNAL(setTrackTableRowHeight(int)), m_pTrackTableView, SLOT(setTrackTableRowHeight(int))); connect(m_pRecordingManager, SIGNAL(isRecording(bool)), this, SLOT(slotRecordingEnabled(bool))); connect(m_pRecordingManager, SIGNAL(bytesRecorded(int)), this, SLOT(slotBytesRecorded(int))); connect(m_pRecordingManager, SIGNAL(durationRecorded(QString)), this, SLOT(slotDurationRecorded(QString))); QBoxLayout* box = dynamic_cast<QBoxLayout*>(layout()); VERIFY_OR_DEBUG_ASSERT(box) { //Assumes the form layout is a QVBox/QHBoxLayout! } else {
void WRecordingDuration::setup(const QDomNode& node, const SkinContext& context) { WLabel::setup(node, context); connect(m_pRecordingManager, SIGNAL(durationRecorded(QString)), this, SLOT(refreshLabel(QString))); connect(m_pRecordingManager, SIGNAL(isRecording(bool)), this, SLOT(slotRecordingInactive(bool))); // When we're recording show text from "InactiveText" node QString inactiveText; if (context.hasNodeSelectString(node, "InactiveText", &inactiveText)) { m_inactiveText = inactiveText; } else { m_inactiveText = QString("--:--"); } // Set inactiveText here already because slotRecordingInactive // is refreshed first when we start recording setText(m_inactiveText); }
void EngineRecord::process(const CSAMPLE* pBuffer, const int iBufferSize) { float recordingStatus = m_pRecReady->get(); if (recordingStatus == RECORD_OFF) { //qDebug("Setting record flag to: OFF"); if (fileOpen()) { Event::end("EngineRecord recording"); closeFile(); // Close file and free encoder. if (m_bCueIsEnabled) { closeCueFile(); } emit(isRecording(false, false)); } } else if (recordingStatus == RECORD_READY) { // If we are ready for recording, i.e, the output file has been selected, we // open a new file. updateFromPreferences(); // Update file location from preferences. if (openFile()) { Event::start("EngineRecord recording"); qDebug("Setting record flag to: ON"); m_pRecReady->set(RECORD_ON); emit(isRecording(true, false)); // will notify the RecordingManager // Since we just started recording, timeout and clear the metadata. m_iMetaDataLife = kMetaDataLifeTimeout; m_pCurrentTrack.reset(); // clean frames couting and get current sample rate. m_frames = 0; m_sampleRate = m_pSamplerate->get(); if (m_bCueIsEnabled) { openCueFile(); m_cueTrack = 0; } } else { // Maybe the encoder could not be initialized qDebug() << "Could not open" << m_fileName << "for writing."; qDebug("Setting record flag to: OFF"); m_pRecReady->slotSet(RECORD_OFF); // An error occurred. emit(isRecording(false, true)); } } else if (recordingStatus == RECORD_SPLIT_CONTINUE) { if (fileOpen()) { closeFile(); // Close file and free encoder. if (m_bCueIsEnabled) { closeCueFile(); } } updateFromPreferences(); // Update file location from preferences. if (openFile()) { qDebug() << "Splitting to a new file: "<< m_fileName; m_pRecReady->set(RECORD_ON); emit(isRecording(true, false)); // will notify the RecordingManager // Since we just started recording, timeout and clear the metadata. m_iMetaDataLife = kMetaDataLifeTimeout; m_pCurrentTrack.reset(); // clean frames counting and get current sample rate. m_frames = 0; m_sampleRate = m_pSamplerate->get(); m_recordedDuration = 0; if (m_bCueIsEnabled) { openCueFile(); m_cueTrack = 0; } } else { // Maybe the encoder could not be initialized qDebug() << "Could not open" << m_fileName << "for writing."; Event::end("EngineRecord recording"); qDebug("Setting record flag to: OFF"); m_pRecReady->slotSet(RECORD_OFF); // An error occurred. emit(isRecording(false, true)); } } // Checking again from m_pRecReady since its status might have changed // in the previous "if" blocks. if (m_pRecReady->get() == RECORD_ON) { // Compress audio. Encoder will call method 'write()' below to // write a file stream and emit bytesRecorded. m_pEncoder->encodeBuffer(pBuffer, iBufferSize); //Writing cueLine before updating the time counter since we preffer to be ahead //rather than late. if (m_bCueIsEnabled && metaDataHasChanged()) { m_cueTrack++; writeCueLine(); m_cueFile.flush(); } // update frames counting and recorded duration (seconds) m_frames += iBufferSize / 2; unsigned long lastDuration = m_recordedDuration; m_recordedDuration = m_frames / m_sampleRate; // gets recorded duration and emit signal that will be used // by RecordingManager to update the label besides start/stop button if (lastDuration != m_recordedDuration) { emit(durationRecorded(m_recordedDuration)); } } }
void EngineRecord::process(const CSAMPLE* pBuffer, const int iBufferSize) { float recordingStatus = m_pRecReady->get(); if (recordingStatus == RECORD_OFF) { //qDebug("Setting record flag to: OFF"); if (fileOpen()) { Event::end("EngineRecord recording"); closeFile(); // Close file and free encoder. emit(isRecording(false)); } } else if (recordingStatus == RECORD_READY) { // If we are ready for recording, i.e, the output file has been selected, we // open a new file. updateFromPreferences(); // Update file location from preferences. if (openFile()) { Event::start("EngineRecord recording"); qDebug("Setting record flag to: ON"); m_pRecReady->set(RECORD_ON); emit(isRecording(true)); // will notify the RecordingManager // Since we just started recording, timeout and clear the metadata. m_iMetaDataLife = kMetaDataLifeTimeout; m_pCurrentTrack = TrackPointer(); // clean frames couting and get current sample rate. m_frames = 0; m_sampleRate = m_pSamplerate->get(); if (m_bCueIsEnabled) { openCueFile(); m_cueTrack = 0; } } else { // Maybe the encoder could not be initialized qDebug("Setting record flag to: OFF"); m_pRecReady->slotSet(RECORD_OFF); emit(isRecording(false)); } } else if (recordingStatus == RECORD_ON) { // If recording is enabled process audio to compressed or uncompressed data. if (m_encoding == ENCODING_WAVE || m_encoding == ENCODING_AIFF) { if (m_pSndfile != NULL) { sf_write_float(m_pSndfile, pBuffer, iBufferSize); emit(bytesRecorded(iBufferSize * 2)); } } else { if (m_pEncoder) { // Compress audio. Encoder will call method 'write()' below to // write a file stream m_pEncoder->encodeBuffer(pBuffer, iBufferSize); } } // update frames counting and recorded duration (seconds) m_frames += iBufferSize / 2; unsigned long lastDuration = m_recordedDuration; m_recordedDuration = m_frames / m_sampleRate; // gets recorded duration and emit signal that will be used // by RecordingManager to update the label besides start/stop button if (lastDuration != m_recordedDuration) { emit(durationRecorded(getRecordedDurationStr())); } if (m_bCueIsEnabled) { if (metaDataHasChanged()) { m_cueTrack++; writeCueLine(); m_cueFile.flush(); } } } }