summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-02-15 02:19:03 (UTC)
committer llornkcor <llornkcor>2002-02-15 02:19:03 (UTC)
commit77ea163d796ac330ad688210e049ab3763d9dd11 (patch) (unidiff)
tree397be388960031f19579b2fdd831bc23afa78ff8
parent99a28ff7d9e2e7a913abb6e573a0ae95b50221d7 (diff)
downloadopie-77ea163d796ac330ad688210e049ab3763d9dd11.zip
opie-77ea163d796ac330ad688210e049ab3763d9dd11.tar.gz
opie-77ea163d796ac330ad688210e049ab3763d9dd11.tar.bz2
changed header file, and zaurus mono input
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/vmemo/vmemo.cpp182
1 files changed, 94 insertions, 88 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
@@ -32,6 +32,7 @@ typedef struct _waveheader {
32 u_long chunk_type; /* 'WAVE' */ 32 u_long chunk_type; /* 'WAVE' */
33
34 u_long sub_chunk; /* 'fmt ' */ 33 u_long sub_chunk; /* 'fmt ' */
35 u_long sc_len; /* length of sub_chunk, =16 (chunckSize) */ 34 u_long sc_len; /* length of sub_chunk, =16
35 (chunckSize) format len */
36 u_short format; /* should be 1 for PCM-code (formatTag) */ 36 u_short format; /* should be 1 for PCM-code (formatTag) */
37
37 u_short modus; /* 1 Mono, 2 Stereo (channels) */ 38 u_short modus; /* 1 Mono, 2 Stereo (channels) */
@@ -43,2 +44,3 @@ typedef struct _waveheader {
43 u_long data_chunk; /* 'data' */ 44 u_long data_chunk; /* 'data' */
45
44 u_long data_length;/* samplecount */ 46 u_long data_length;/* samplecount */
@@ -142,13 +144,13 @@ VMemo::VMemo( QWidget *parent, const char *name )
142 struct utsname name; /* check for embedix kernel running on the zaurus, if 144 struct utsname name; /* check for embedix kernel running on the zaurus, if
143 lineo change string, this break 145 lineo change string, this break
144 */ 146 */
145 if (uname(&name) != -1) 147 if (uname(&name) != -1)
146 { 148 {
147 QString release=name.release; 149 QString release=name.release;
148 qWarning("System release: %s\n", name.release); 150 qWarning("System release: %s\n", name.release);
149 if(release.find("embedix",0,TRUE) !=-1) 151 if(release.find("embedix",0,TRUE) !=-1)
150 systemZaurus=TRUE; 152 systemZaurus=TRUE;
151 else 153 else
152 systemZaurus=FALSE; 154 systemZaurus=FALSE;
153 } 155 }
154 156
@@ -170,6 +172,6 @@ void VMemo::mousePressEvent( QMouseEvent * )
170 if (recording) 172 if (recording)
171 { 173 {
172 recording = FALSE; 174 recording = FALSE;
173 return; 175 return;
174 } 176 }
175 177
@@ -181,8 +183,8 @@ void VMemo::mousePressEvent( QMouseEvent * )
181 if (openDSP() == -1) 183 if (openDSP() == -1)
182 { 184 {
183 // ### Display an error box 185 // ### Display an error box
184 QMessageBox::critical(0, "VMemo", "Could not open dsp device.", "Abort"); 186 QMessageBox::critical(0, "VMemo", "Could not open dsp device.", "Abort");
185 recording = FALSE; 187 recording = FALSE;
186 return; 188 return;
187 } 189 }
188 190
@@ -194,5 +196,5 @@ void VMemo::mousePressEvent( QMouseEvent * )
194 if(systemZaurus) 196 if(systemZaurus)
195 fileName=vmCfg.readEntry("Dir", "/mnt/cf/"); // zaurus does not have /mnt/ramfs 197 fileName=vmCfg.readEntry("Dir", "/mnt/cf/"); // zaurus does not have /mnt/ramfs
196 else 198 else
197 fileName=vmCfg.readEntry("Dir", "/mnt/ramfs/"); 199 fileName=vmCfg.readEntry("Dir", "/mnt/ramfs/");
198 200
@@ -209,8 +211,8 @@ void VMemo::mousePressEvent( QMouseEvent * )
209 if(openWAV(fileName.latin1()) == -1) 211 if(openWAV(fileName.latin1()) == -1)
210 { 212 {
211 // ### Display an error box 213 // ### Display an error box
212 qWarning("VMemo::mousePress() -> WAV error"); 214 qWarning("VMemo::mousePress() -> WAV error");
213 close(dsp); 215 close(dsp);
214 return; 216 return;
215 } 217 }
216 218
@@ -244,44 +246,47 @@ int VMemo::openDSP()
244 channels = cfg.readNumEntry("Stereo", 1) ? 2 : 1; // 1 = stereo(2), 0 = mono(1) 246 channels = cfg.readNumEntry("Stereo", 1) ? 2 : 1; // 1 = stereo(2), 0 = mono(1)
245 if (cfg.readNumEntry("SixteenBit", 1)) 247 if (cfg.readNumEntry("SixteenBit", 1)==1)
246 { 248 {
247 format = AFMT_S16_LE; 249 format = AFMT_S16_LE;
248 resolution = 16; 250 resolution = 16;
249 } 251 }
250 else 252 else
251 { 253 {
252 format = AFMT_U8; 254 format = AFMT_U8;
253 resolution = 8; 255 resolution = 8;
254 } 256 }
255 257
256 if(systemZaurus) 258 if(systemZaurus)
257 dsp = open("/dev/dsp1", O_RDWR); //Zaurus needs /dev/dsp1 259 {
260 dsp = open("/dev/dsp1", O_RDWR); //Zaurus needs /dev/dsp1
261 channels=1; //zaurus has one input channel
262 }
258 else 263 else
259 dsp = open("/dev/dsp", O_RDWR); 264 dsp = open("/dev/dsp", O_RDWR);
260 265
261 if(dsp == -1) 266 if(dsp == -1)
262 { 267 {
263 perror("open(\"/dev/dsp\")"); 268 perror("open(\"/dev/dsp\")");
264 return -1; 269 return -1;
265 } 270 }
266 271
267 if(ioctl(dsp, SNDCTL_DSP_SETFMT , &format)==-1) 272 if(ioctl(dsp, SNDCTL_DSP_SETFMT , &format)==-1)
268 { 273 {
269 perror("ioctl(\"SNDCTL_DSP_SETFMT\")"); 274 perror("ioctl(\"SNDCTL_DSP_SETFMT\")");
270 return -1; 275 return -1;
271 } 276 }
272 if(ioctl(dsp, SNDCTL_DSP_CHANNELS , &channels)==-1) 277 if(ioctl(dsp, SNDCTL_DSP_CHANNELS , &channels)==-1)
273 { 278 {
274 perror("ioctl(\"SNDCTL_DSP_CHANNELS\")"); 279 perror("ioctl(\"SNDCTL_DSP_CHANNELS\")");
275 return -1; 280 return -1;
276 } 281 }
277 if(ioctl(dsp, SNDCTL_DSP_SPEED , &speed)==-1) 282 if(ioctl(dsp, SNDCTL_DSP_SPEED , &speed)==-1)
278 { 283 {
279 perror("ioctl(\"SNDCTL_DSP_SPEED\")"); 284 perror("ioctl(\"SNDCTL_DSP_SPEED\")");
280 return -1; 285 return -1;
281 } 286 }
282 if(ioctl(dsp, SOUND_PCM_READ_RATE , &rate)==-1) 287 if(ioctl(dsp, SOUND_PCM_READ_RATE , &rate)==-1)
283 { 288 {
284 perror("ioctl(\"SOUND_PCM_READ_RATE\")"); 289 perror("ioctl(\"SOUND_PCM_READ_RATE\")");
285 return -1; 290 return -1;
286 } 291 }
287 292
@@ -295,6 +300,6 @@ int VMemo::openWAV(const char *filename)
295 if(!track.open(IO_WriteOnly|IO_Truncate|IO_Raw)) 300 if(!track.open(IO_WriteOnly|IO_Truncate|IO_Raw))
296 { 301 {
297 qDebug("Could not open file"); 302 qDebug("Could not open file");
298 return -1; 303 return -1;
299 } 304 }
300 wav=track.handle(); 305 wav=track.handle();
@@ -303,18 +308,16 @@ int VMemo::openWAV(const char *filename)
303 308
304 wh.main_chunk = RIFF; 309 wh.main_chunk = RIFF;// RIFF
305 wh.length = 0; 310 wh.chunk_type = WAVE;//WAVE
306 wh.chunk_type = WAVE; 311 wh.sub_chunk = FMT;// fmt
307 312 wh.sc_len = 16;// format length = 16
308 wh.sub_chunk = FMT; 313 wh.format = PCM_CODE;// PCM
309 wh.sc_len = 16; 314 wh.modus = channels;// channels
310 wh.format = PCM_CODE; 315 wh.sample_fq = speed;//samplerate
311 wh.modus = channels; 316 wh.byte_p_sec = speed * channels * resolution/8;// av bytes per second
312 wh.sample_fq = speed; 317 wh.byte_p_spl = channels * (resolution / 8); //block align
313 wh.bit_p_spl = resolution; 318 wh.bit_p_spl = resolution;//bits per sample 8, or 16
314 wh.byte_p_sec = wh.sample_fq * wh.bit_p_spl;
315 wh.byte_p_spl = channels * (wh.bit_p_spl % 8);
316
317 wh.data_chunk = DATA; 319 wh.data_chunk = DATA;
318 wh.data_length= 0; 320 wh.data_length= 0; // <---
319 321// qDebug("Write header channels %d, speed %d, b/s %d, blockalign %d, bitrate %d"
322// , wh.modus, wh.sample_fq, wh.byte_p_sec, wh.byte_p_spl, wh.bit_p_spl );
320 write (wav, &wh, sizeof(WaveHeader)); 323 write (wav, &wh, sizeof(WaveHeader));
@@ -332,10 +335,12 @@ void VMemo::record(void)
332 while(recording) 335 while(recording)
333 { 336 {
334 result = read(dsp, sound, 512); // 8192 337 result = read(dsp, sound, 512); // 8192
335 qApp->processEvents(); 338 qApp->processEvents();
336 write(wav, sound, result); 339 write(wav, sound, result);
337 qApp->processEvents(); 340 qApp->processEvents();
338 length += result; 341 length += result;
339 qApp->processEvents(); 342 qApp->processEvents();
340 } 343// printf("%d\r",length);
344// fflush(stdout);
345 }
341 346
@@ -349,2 +354,3 @@ void VMemo::record(void)
349 write(wav, &length, 4); 354 write(wav, &length, 4);
355// qDebug("File length %d, samplecount %d", value, length);
350 track.close(); 356 track.close();
@@ -352,3 +358,3 @@ void VMemo::record(void)
352 if( ioctl( dsp, SNDCTL_DSP_RESET,0) == -1)// ); //tell driver to stop for a while 358 if( ioctl( dsp, SNDCTL_DSP_RESET,0) == -1)// ); //tell driver to stop for a while
353 perror("ioctl(\"SNDCTL_DSP_RESET\")"); 359 perror("ioctl(\"SNDCTL_DSP_RESET\")");
354 ::close(dsp); 360 ::close(dsp);