summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (show whitespace changes)
-rw-r--r--core/applets/vmemo/vmemo.cpp66
1 files changed, 35 insertions, 31 deletions
diff --git a/core/applets/vmemo/vmemo.cpp b/core/applets/vmemo/vmemo.cpp
index 1ead4dd..835f63a 100644
--- a/core/applets/vmemo/vmemo.cpp
+++ b/core/applets/vmemo/vmemo.cpp
@@ -224,97 +224,97 @@ VMemo::VMemo( QWidget *parent, const char *_name )
if( toggleKey != -1 ) {
qDebug("Register key %d", toggleKey);
QCopEnvelope e("QPE/Launcher", "keyRegister(int,QCString,QCString)");
// e << 4096; // Key_Escape
// e << Key_F5; //4148
e << toggleKey;
e << QString("QPE/VMemo");
e << QString("toggleRecord()");
}
if(toggleKey == 1)
usingIcon = TRUE;
else
usingIcon = FALSE;
// if( vmCfg.readNumEntry("hideIcon",0) == 1)
// hide();
recording = FALSE;
// }
}
VMemo::~VMemo() {
}
int VMemo::position()
{
return 6;
}
void VMemo::receive( const QCString &msg, const QByteArray &data ) {
odebug << "Vmemo receive" << oendl;
QDataStream stream( data, IO_ReadOnly );
if (msg == "toggleRecord()") {
if (recording) {
fromToggle = TRUE;
stopRecording();
} else {
fromToggle = TRUE;
startRecording();
}
}
}
void VMemo::paintEvent( QPaintEvent* ) {
QPainter p(this);
p.drawPixmap( 0, 1,( const char** ) vmemo_xpm );
}
-void VMemo::mousePressEvent( QMouseEvent * me) {
+void VMemo::mousePressEvent( QMouseEvent * /*me*/) {
/* No mousePress/mouseRelease recording on the iPAQ. The REC button on the iPAQ calls these functions
mousePressEvent and mouseReleaseEvent with a NULL parameter. */
// if (!systemZaurus && me != NULL)
// return;
// }
if(!recording)
startRecording();
else
stopRecording();
}
void VMemo::mouseReleaseEvent( QMouseEvent * ) {
}
bool VMemo::startRecording() {
Config config( "Vmemo" );
config.setGroup( "System" );
useAlerts = config.readBoolEntry("Alert",1);
if(useAlerts) {
msgLabel = new QLabel( 0, "alertLabel" );
msgLabel->setText("<B><P><font size=+2>VMemo-Recording</font></B>");
msgLabel->show();
}
odebug << "Start recording engines" << oendl;
recording = TRUE;
if (openDSP() == -1) {
recording = FALSE;
return FALSE;
}
config.setGroup("Defaults");
date = TimeString::dateString( QDateTime::currentDateTime(),false,true);
date.replace(QRegExp("'"),"");
date.replace(QRegExp(" "),"_");
date.replace(QRegExp(":"),".");
date.replace(QRegExp(","),"");
QString fName;
config.setGroup( "System" );
fName = QPEApplication::documentDir() ;
fileName = config.readEntry("RecLocation", fName);
@@ -440,168 +440,172 @@ int VMemo::openDSP() {
perror("ioctl(\"SOUND_PCM_READ_RATE\")");
return -1;
}
QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << FALSE; //mute
return 1;
}
int VMemo::openWAV(const char *filename) {
track.setName(filename);
if(!track.open(IO_WriteOnly|IO_Truncate|IO_Raw)) {
errorMsg=filename;
return -1;
}
wav=track.handle();
Config vmCfg("Vmemo");
vmCfg.setGroup("Defaults");
useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0);
WaveHeader wh;
wh.main_chunk = RIFF;
wh.length=0;
wh.chunk_type = WAVE;
wh.sub_chunk = FMT;
wh.sc_len = 16;
if(useADPCM)
wh.format = WAVE_FORMAT_DVI_ADPCM;//PCM_CODE;
else
wh.format = PCM_CODE;
wh.modus = channels;
wh.sample_fq = speed;
wh.byte_p_sec = speed * channels * resolution/8;
wh.byte_p_spl = channels * (resolution / 8);
wh.bit_p_spl = resolution;
wh.data_chunk = DATA;
wh.data_length= 0;
// qDebug("Write header channels %d, speed %d, b/s %d, blockalign %d, bitrate %d"
// , wh.modus, wh.sample_fq, wh.byte_p_sec, wh.byte_p_spl, wh.bit_p_spl );
write (wav, &wh, sizeof(WaveHeader));
return 1;
}
bool VMemo::record() {
length = 0;
- int result, value;
+ int bytesWritten = 0;
+ int result = 0;
+ int value = 0;
QString msg;
msg.sprintf("Recording format %d", format);
odebug << msg << oendl;
Config config("Vmemo");
config.setGroup("Record");
int sRate=config.readNumEntry("SizeLimit", 30);
if(sRate > 0)
t_timer->start( sRate * 1000+1000, TRUE);
-// if(systemZaurus) {
-// } else { // 16 bit only capabilities
-
msg.sprintf("Recording format other");
odebug << msg << oendl;
+ config.setGroup("Defaults");
+ useADPCM = config.readBoolEntry("use_ADPCM", 0);
- int bytesWritten = 0;
-
- Config vmCfg("Vmemo");
- vmCfg.setGroup("Defaults");
- useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0);
-
- int bufsize = vmCfg.readNumEntry("BufferSize",1024);
- signed short sound[bufsize], monoBuffer[bufsize];
+ int bufsize = config.readNumEntry("BufferSize",1024);
+ unsigned short sound[bufsize]; //, monoBuffer[bufsize];
char abuf[bufsize / 2];
short sbuf[bufsize];
+ if(useADPCM) {
while(recording) {
-
- if(useADPCM)
- result = ::read(dsp, sbuf, bufsize); // 8192
- else
- result = ::read(dsp, sound, bufsize); // 8192
+ result = ::read(dsp, sbuf, bufsize); // adpcm read
if( result <= 0) {
perror("recording error ");
-// odebug << currentFileName << oendl;
QMessageBox::message(tr("Note"),tr("error recording"));
recording = FALSE;
break;
return FALSE;
}
-
- if(useADPCM) {
adpcm_coder( sbuf, abuf, result/2, &encoder_state);
- bytesWritten = ::write(wav, abuf, result/4);
+ bytesWritten = ::write(wav, abuf, result/4); // adpcm write
+ length += bytesWritten;
+ if(length < 0) {
+ recording = false;
+ perror("dev/dsp's is a lookin' messy");
+ QMessageBox::message("Vmemo","Error writing to file\n"+ fileName);
+ break;
+ return FALSE;
+ }
+ // printf("%d\r", length);
+ // fflush(stdout);
+ qApp->processEvents();
+ }
} else {
-// for (int i = 0; i < result; i++) { //since Z is mono do normally
-// monoBuffer[i] = sound[i];
-// }
+ while(recording) {
+ result = ::read(dsp, sound, bufsize); // read
+ if( result <= 0) {
+ perror("recording error ");
+ QMessageBox::message(tr("Note"),tr("error recording"));
+ recording = FALSE;
+ break;
+ return FALSE;
- length += write(wav, sound, result);
- }
+ bytesWritten = ::write(wav, sound, result); // write
length += bytesWritten;
if(length<0) {
recording = false;
perror("dev/dsp's is a lookin' messy");
QMessageBox::message("Vmemo","Error writing to file\n"+ fileName);
break;
return FALSE;
}
- // odebug << "" << length << "\r" << oendl;
+ // printf("%d\r", length);
// fflush(stdout);
qApp->processEvents();
}
+ }
+ }
// qDebug("file has length of %d lasting %d seconds",
// length, (( length / speed) / channels) / 2 );
- // }
-
- //>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<<<<<<<<<<//
value = length + 36;
lseek(wav, 4, SEEK_SET);
write(wav, &value, 4);
lseek(wav, 40, SEEK_SET);
write(wav, &length, 4);
track.close();
odebug << "Track closed" << oendl;
if( ioctl( dsp, SNDCTL_DSP_RESET,0) == -1)
perror("ioctl(\"SNDCTL_DSP_RESET\")");
::close(dsp);
Config cfgO("OpieRec");
cfgO.setGroup("Sounds");
int nFiles = cfgO.readNumEntry( "NumberofFiles",0);
QString currentFileName = fileName;
QString currentFile = "vm_"+ date;
float numberOfRecordedSeconds=(float) length / (float)speed * (float)2;
cfgO.writeEntry( "NumberofFiles", nFiles + 1);
cfgO.writeEntry( QString::number( nFiles + 1), currentFile);
cfgO.writeEntry( currentFile, currentFileName);
QString time;
time.sprintf("%.2f", numberOfRecordedSeconds);
cfgO.writeEntry( currentFileName, time );
// odebug << "writing config numberOfRecordedSeconds "+time << oendl;
cfgO.write();
odebug << "done recording "+fileName << oendl;
Config cfg("qpe");
cfg.setGroup("Volume");
QString foo = cfg.readEntry("Mute","TRUE");
if(foo.find("TRUE",0,TRUE) != -1)
QCopEnvelope( "QPE/System", "volumeChange(bool)" ) << TRUE; //mute
return TRUE;
}