summaryrefslogtreecommitdiff
path: root/core/applets
authorllornkcor <llornkcor>2002-02-15 02:19:03 (UTC)
committer llornkcor <llornkcor>2002-02-15 02:19:03 (UTC)
commit77ea163d796ac330ad688210e049ab3763d9dd11 (patch) (side-by-side diff)
tree397be388960031f19579b2fdd831bc23afa78ff8 /core/applets
parent99a28ff7d9e2e7a913abb6e573a0ae95b50221d7 (diff)
downloadopie-77ea163d796ac330ad688210e049ab3763d9dd11.zip
opie-77ea163d796ac330ad688210e049ab3763d9dd11.tar.gz
opie-77ea163d796ac330ad688210e049ab3763d9dd11.tar.bz2
changed header file, and zaurus mono input
Diffstat (limited to 'core/applets') (more/less context) (show whitespace changes)
-rw-r--r--core/applets/vmemo/vmemo.cpp42
1 files changed, 24 insertions, 18 deletions
diff --git a/core/applets/vmemo/vmemo.cpp b/core/applets/vmemo/vmemo.cpp
index 73bd996..83f19f5 100644
--- a/core/applets/vmemo/vmemo.cpp
+++ b/core/applets/vmemo/vmemo.cpp
@@ -27,23 +27,25 @@
#include <stdlib.h>
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 (chunckSize) */
+ 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) */
u_short byte_p_spl; /* samplesize; 1 or 2 bytes (blockAlign) */
u_short bit_p_spl; /* 8, 12 or 16 bit (bitsPerSample) */
u_long data_chunk; /* 'data' */
+
u_long data_length;/* samplecount */
} WaveHeader;
#define RIFF 0x46464952
#define WAVE 0x45564157
#define FMT 0x20746D66
@@ -239,25 +241,28 @@ int VMemo::openDSP()
{
Config cfg("Sound");
cfg.setGroup("Record");
speed = cfg.readNumEntry("SampleRate", 11025);
channels = cfg.readNumEntry("Stereo", 1) ? 2 : 1; // 1 = stereo(2), 0 = mono(1)
- if (cfg.readNumEntry("SixteenBit", 1))
+ if (cfg.readNumEntry("SixteenBit", 1)==1)
{
format = AFMT_S16_LE;
resolution = 16;
}
else
{
format = AFMT_U8;
resolution = 8;
}
if(systemZaurus)
+ {
dsp = open("/dev/dsp1", O_RDWR); //Zaurus needs /dev/dsp1
+ channels=1; //zaurus has one input channel
+ }
else
dsp = open("/dev/dsp", O_RDWR);
if(dsp == -1)
{
perror("open(\"/dev/dsp\")");
@@ -298,28 +303,26 @@ int VMemo::openWAV(const char *filename)
return -1;
}
wav=track.handle();
WaveHeader wh;
- wh.main_chunk = RIFF;
- wh.length = 0;
- wh.chunk_type = WAVE;
-
- wh.sub_chunk = FMT;
- wh.sc_len = 16;
- wh.format = PCM_CODE;
- wh.modus = channels;
- wh.sample_fq = speed;
- wh.bit_p_spl = resolution;
- wh.byte_p_sec = wh.sample_fq * wh.bit_p_spl;
- wh.byte_p_spl = channels * (wh.bit_p_spl % 8);
-
+ wh.main_chunk = RIFF;// RIFF
+ wh.chunk_type = WAVE;//WAVE
+ wh.sub_chunk = FMT;// fmt
+ wh.sc_len = 16;// format length = 16
+ wh.format = PCM_CODE;// PCM
+ wh.modus = channels;// channels
+ wh.sample_fq = speed;//samplerate
+ wh.byte_p_sec = speed * channels * resolution/8;// av bytes per second
+ wh.byte_p_spl = channels * (resolution / 8); //block align
+ wh.bit_p_spl = resolution;//bits per sample 8, or 16
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;
}
void VMemo::record(void)
@@ -334,22 +337,25 @@ void VMemo::record(void)
result = read(dsp, sound, 512); // 8192
qApp->processEvents();
write(wav, sound, result);
qApp->processEvents();
length += result;
qApp->processEvents();
+// printf("%d\r",length);
+// fflush(stdout);
}
qWarning("VMemo::record() -> Done recording");
qWarning("VMemo::record() -> Closing dsp");
value = length+36;
lseek(wav, 4, SEEK_SET);
write(wav, &value, 4);
lseek(wav, 40, SEEK_SET);
write(wav, &length, 4);
+// qDebug("File length %d, samplecount %d", value, length);
track.close();
if( ioctl( dsp, SNDCTL_DSP_RESET,0) == -1)// ); //tell driver to stop for a while
perror("ioctl(\"SNDCTL_DSP_RESET\")");
::close(dsp);