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 EngineShoutcast::process(const CSAMPLE* pBuffer, const int iBufferSize) { //Check to see if Shoutcast is enabled, and pass the samples off to be broadcast if necessary. bool prefEnabled = (m_pConfig->getValueString(ConfigKey(SHOUTCAST_PREF_KEY,"enabled")).toInt() == 1); if (!prefEnabled) { if (isConnected()) { // We are conneced but shoutcast is disabled. Disconnect. serverDisconnect(); infoDialog(tr("Mixxx has successfully disconnected from the shoutcast server"), ""); } return; } // If we are here then the user wants to be connected (shoutcast is enabled // in the preferences). bool connected = isConnected(); // If we aren't connected or the user has changed their preferences, // disconnect, update from prefs, and reconnect. if (!connected || m_pUpdateShoutcastFromPrefs->get() > 0.0f) { if (connected) { serverDisconnect(); } // Initialize/update the encoder and libshout setup. updateFromPreferences(); if (serverConnect()) { infoDialog(tr("Mixxx has successfully connected to the shoutcast server"), ""); } else { errorDialog(tr("Mixxx could not connect to streaming server"), tr("Please check your connection to the Internet and verify that your username and password are correct.")); } } // If we aren't connected, bail. if (m_iShoutStatus != SHOUTERR_CONNECTED) return; // If we are connected, encode the samples. if (iBufferSize > 0 && m_encoder){ m_encoder->encodeBuffer(pBuffer, iBufferSize); } // Check if track metadata has changed and if so, update. if (metaDataHasChanged()) { updateMetaData(); } }
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(); } } } }