void EngineRecord::process(const CSAMPLE* pBuffer, const int iBufferSize) { // if recording is disabled if (m_recReady->get() == RECORD_OFF) { //qDebug("Setting record flag to: OFF"); if (fileOpen()) { closeFile(); //close file and free encoder emit(isRecording(false)); } } // if we are ready for recording, i.e, the output file has been selected, we // open a new file if (m_recReady->get() == RECORD_READY) { updateFromPreferences(); //update file location from pref if (openFile()) { qDebug("Setting record flag to: ON"); m_recReady->slotSet(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(); if (m_bCueIsEnabled) { openCueFile(); m_cuesamplepos = 0; m_cuetrack = 0; } } else { // Maybe the encoder could not be initialized qDebug("Setting record flag to: OFF"); m_recReady->slotSet(RECORD_OFF); emit(isRecording(false)); } } // If recording is enabled process audio to compressed or uncompressed data. if (m_recReady->get() == RECORD_ON) { if (m_Encoding == ENCODING_WAVE || m_Encoding == ENCODING_AIFF) { if (m_sndfile != NULL) { sf_write_float(m_sndfile, pBuffer, iBufferSize); emit(bytesRecorded(iBufferSize)); } } else { if (m_encoder) { // Compress audio. Encoder will call method 'write()' below to // write a file stream m_encoder->encodeBuffer(pBuffer, iBufferSize); } } if (m_bCueIsEnabled) { if (metaDataHasChanged()) { m_cuetrack++; writeCueLine(); m_cuefile.flush(); } m_cuesamplepos += iBufferSize; } } }
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(); } } } }