summaryrefslogtreecommitdiff
path: root/core/applets/vmemo
Side-by-side diff
Diffstat (limited to 'core/applets/vmemo') (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/vmemo/vmemo.cpp108
1 files changed, 56 insertions, 52 deletions
diff --git a/core/applets/vmemo/vmemo.cpp b/core/applets/vmemo/vmemo.cpp
index 7dd5b4b..622b1df 100644
--- a/core/applets/vmemo/vmemo.cpp
+++ b/core/applets/vmemo/vmemo.cpp
@@ -9,12 +9,16 @@
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
************************************************************************************/
// copyright 2002 Jeremy Cowgar <jc@cowgar.com>
// copyright 2002 and 2003 L.J.Potter <ljp@llornkcor.com>
+/* OPIE */
+#include <opie2/odebug.h>
+using namespace Opie::Core;
+
extern "C" {
#include "adpcm.h"
}
#include <unistd.h>
#include <stdio.h>
@@ -26,13 +30,13 @@ extern "C" {
typedef struct _waveheader {
u_long main_chunk; /* 'RIFF' */
u_long length; /* filelen */
u_long chunk_type; /* 'WAVE' */
u_long sub_chunk; /* 'fmt ' */
- u_long sc_len; /* length of sub_chunk, =16
+ u_long sc_len; /* length of sub_chunk, =16
(chunckSize) format len */
u_short format; /* should be 1 for PCM-code (formatTag) */
u_short modus; /* 1 Mono, 2 Stereo (channels) */
u_long sample_fq; /* samples per second (samplesPerSecond) */
u_long byte_p_sec; /* avg bytes per second (avgBytePerSecond) */
@@ -195,27 +199,27 @@ static char * vmemo_xpm[] = {
using namespace Opie::Ui;
VMemo::VMemo( QWidget *parent, const char *_name )
: QWidget( parent, _name ) {
setFixedHeight( 18 );
setFixedWidth( 14 );
-
+
t_timer = new QTimer( this );
connect( t_timer, SIGNAL( timeout() ), SLOT( timerBreak() ) );
-
+
Config vmCfg("Vmemo");
vmCfg.setGroup("Defaults");
int toggleKey = setToggleButton(vmCfg.readNumEntry("toggleKey", -1));
useADPCM = vmCfg.readBoolEntry("use_ADPCM", 0);
- qDebug("toggleKey %d", toggleKey);
+ odebug << "toggleKey " << toggleKey << "" << oendl;
if ( QFile::exists ( "/dev/sharp_buz" ) || QFile::exists ( "/dev/sharp_led" ))
systemZaurus=TRUE;
- else
+ else
systemZaurus=FALSE;
-
+
myChannel = new QCopChannel( "QPE/VMemo", this );
connect( myChannel, SIGNAL(received(const QCString&,const QByteArray&)),
this, SLOT(receive(const QCString&,const QByteArray&)) );
if( toggleKey != -1 ) {
// keyRegister(key, channel, message)
@@ -242,13 +246,13 @@ VMemo::~VMemo() {
int VMemo::position()
{
return 6;
}
void VMemo::receive( const QCString &msg, const QByteArray &data ) {
- qDebug("receive");
+ odebug << "receive" << oendl;
QDataStream stream( data, IO_ReadOnly );
if (msg == "toggleRecord()") {
if (recording) {
fromToggle = TRUE;
stopRecording();
@@ -264,13 +268,13 @@ void VMemo::paintEvent( QPaintEvent* ) {
p.drawPixmap( 0, 1,( const char** ) vmemo_xpm );
}
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();
@@ -290,20 +294,20 @@ bool VMemo::startRecording() {
msgLabel = new QLabel( 0, "alertLabel" );
msgLabel->setText("<B><P><font size=+2>VMemo-Recording</font></B>");
msgLabel->show();
}
- qDebug("Start recording engines");
+ 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(":"),".");
@@ -315,27 +319,27 @@ bool VMemo::startRecording() {
fileName = config.readEntry("RecLocation", fName);
int s;
s=fileName.find(':');
if(s)
fileName=fileName.right(fileName.length()-s-2);
- qDebug("pathname will be "+fileName);
+ odebug << "pathname will be "+fileName << oendl;
if( fileName.left(1).find('/') == -1)
fileName="/"+fileName;
if( fileName.right(1).find('/') == -1)
fileName+="/";
fName = "vm_"+ date+ ".wav";
-
+
fileName+=fName;
- qDebug("filename is "+fileName);
+ odebug << "filename is "+fileName << oendl;
// open tmp file here
char *pointer;
- pointer=tmpnam(NULL);
- qDebug("Opening tmp file %s",pointer);
-
+ pointer=tmpnam(NULL);
+ odebug << "Opening tmp file " << pointer << "" << oendl;
+
if(openWAV(pointer ) == -1) {
QString err("Could not open the temp file\n");
err += fileName;
QMessageBox::critical(0, "vmemo", err, "Abort");
::close(dsp);
@@ -346,35 +350,35 @@ bool VMemo::startRecording() {
QString cmd;
if( fileName.find(".wav",0,TRUE) == -1)
fileName += ".wav";
cmd.sprintf("mv %s "+fileName, pointer);
// move tmp file to regular file here
-
+
system(cmd.latin1());
QArray<int> cats(1);
cats[0] = config.readNumEntry("Category", 0);
-
+
QString dlName("vm_");
dlName += date;
DocLnk l;
l.setFile(fileName);
l.setName(dlName);
l.setType("audio/x-wav");
l.setCategories(cats);
l.writeLink();
return TRUE;
} else
return FALSE;
-
+
}
void VMemo::stopRecording() {
show();
- qDebug("Stopped recording");
+ odebug << "Stopped recording" << oendl;
recording = FALSE;
if(useAlerts) {
msgLabel->close();
msgLabel=0;
delete msgLabel;
}
@@ -385,43 +389,43 @@ void VMemo::stopRecording() {
hide();
}
int VMemo::openDSP() {
Config cfg("Vmemo");
cfg.setGroup("Record");
-
+
speed = cfg.readNumEntry("SampleRate", 22050);
channels = cfg.readNumEntry("Stereo", 1) ? 2 : 1; // 1 = stereo(2), 0 = mono(1)
if (cfg.readNumEntry("SixteenBit", 1)==1) {
format = AFMT_S16_LE;
resolution = 16;
} else {
format = AFMT_U8;
resolution = 8;
}
- qDebug("samplerate: %d, channels %d, resolution %d", speed, channels, resolution);
+ odebug << "samplerate: " << speed << ", channels " << channels << ", resolution " << resolution << "" << oendl;
if(systemZaurus) {
dsp = open("/dev/dsp1", O_RDONLY); //Zaurus needs /dev/dsp1
channels=1; //zaurus has one input channel
} else {
dsp = open("/dev/dsp", O_RDONLY);
}
-
+
if(dsp == -1) {
msgLabel->close();
msgLabel=0;
delete msgLabel;
-
+
perror("open(\"/dev/dsp\")");
errorMsg="open(\"/dev/dsp\")\n "+(QString)strerror(errno);
QMessageBox::critical(0, "vmemo", errorMsg, "Abort");
return -1;
}
-
+
if(ioctl(dsp, SNDCTL_DSP_SETFMT , &format)==-1) {
perror("ioctl(\"SNDCTL_DSP_SETFMT\")");
return -1;
}
if(ioctl(dsp, SNDCTL_DSP_CHANNELS , &channels)==-1) {
perror("ioctl(\"SNDCTL_DSP_CHANNELS\")");
@@ -434,13 +438,13 @@ int VMemo::openDSP() {
if(ioctl(dsp, SOUND_PCM_READ_RATE , &rate)==-1) {
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)) {
@@ -449,55 +453,55 @@ int VMemo::openWAV(const char *filename) {
}
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.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.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.byte_p_spl = channels * (resolution / 8);
wh.bit_p_spl = resolution;
wh.data_chunk = DATA;
- wh.data_length= 0;
+ 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;
QString msg;
msg.sprintf("Recording format %d", format);
- qDebug(msg);
+ 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");
- qDebug(msg);
+ odebug << msg << oendl;
int bufsize=1024;
int bytesWritten=0;
signed short sound[1024], monoBuffer[1024];
char abuf[bufsize/2];
short sbuf[bufsize];
@@ -510,13 +514,13 @@ bool VMemo::record() {
if(useADPCM)
result = read( dsp, sbuf, bufsize); // 8192
else
result = read(dsp, sound, 1024); // 8192
if( result <= 0) {
perror("recording error ");
-// qDebug(currentFileName);
+// odebug << currentFileName << oendl;
QMessageBox::message(tr("Note"),tr("error recording"));
recording=FALSE;
break;
return FALSE;
}
@@ -537,13 +541,13 @@ bool VMemo::record() {
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);
+ // odebug << "" << length << "\r" << oendl;
// fflush(stdout);
qApp->processEvents();
}
// qDebug("file has length of %d lasting %d seconds",
// length, (( length / speed) / channels) / 2 );
// }
@@ -556,41 +560,41 @@ bool VMemo::record() {
write(wav, &value, 4);
lseek(wav, 40, SEEK_SET);
write(wav, &length, 4);
track.close();
- qDebug("Track closed");
-
+ 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 );
- // qDebug("writing config numberOfRecordedSeconds "+time);
+ // odebug << "writing config numberOfRecordedSeconds "+time << oendl;
cfgO.write();
- qDebug("done recording "+fileName);
+ 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
@@ -599,38 +603,38 @@ return TRUE;
int VMemo::setToggleButton(int tog) {
for( int i=0; i < 10;i++) {
switch (tog) {
case 0:
- return -1;
- break;
+ return -1;
+ break;
case 1:
- return 0;
- break;
+ return 0;
+ break;
case 2:
return Key_F24; //was Escape
- break;
+ break;
case 3:
return Key_Space;
- break;
+ break;
case 4:
return Key_F12;
- break;
+ break;
case 5:
return Key_F9;
- break;
+ break;
case 6:
return Key_F10;
- break;
+ break;
case 7:
return Key_F11;
- break;
+ break;
case 8:
return Key_F13;
- break;
+ break;
};
}
return -1;
}
void VMemo::timerBreak() {