1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
|
Hi dear cdrom drive users,
This README describes hardware related matters as well as the installation of
icedax, the sampling utility.
This icedax utility comes with the Cdrkit project. Cdrkit is a spinoff from
cdrtools. However, the cdrtools developers are not involved in the
development of this spinoff and therefore shall not be made responsible for
any problem caused by it. Please do not try to get support for this program by
contacting the original authors.
Requirements
============
For SCSI cdroms and CD-writers, as well as SCSI-emulated ATAPIS and parallel
port drives
1s. kernel support for SCSI, the host adapter, SCSI cdroms and the
generic SCSI interface (if under Linux). You need to have the proper device
descriptors (get them under Linux with the MAKEDEV script from /dev).
For ATAPI cdroms under Linux
1a. kernel support for the ATAPI cdrom driver or alternatively ide-scsi
emulation. You need to have the proper device descriptors (get them
with the MAKEDEV script from /dev).
For parallel port cdroms under Linux
With newer kernels icedax uses the same parallel port access
as does wodim. Please refer additionally to the wodim documentation.
There are generally two drivers to access the cdrom through the parallel
port: the ATAPI cd emulation (called pcd), and the SCSI device emulation
(called pg). The pcd driver does NOT support cdda reading (kernel 2.2.12),
while the pg driver has no restriction. So you have to use pg for that.
For cdrom drives with proprietary busses under Linux
1p. Please check the CDROM-HOWTO for features of the respective
drivers. The sbpcd driver is very demanding due to the lack of
interrupts.
optionally currently for Solaris and all platforms running 4fronts
OpenSoundSystems:
2. kernel sound card support.
Recommendations for higher throughput on Linux SCSI systems
===========================================================
Higher throughput will give better chances for non-interrupted
sampling. This should avoid typical interruption errors (cracklings
at buffer boundaries).
1. Increase SG_BIG_BUFF to (128*1024) in /usr/src/linux/include/scsi/sg.h
(and recompile your kernel and boot it :-).
NOTE: Some kernel configurations will lead to 'out of kernel memory' errors.
If you encounter this message regularly, better leave SG_BIG_BUFF at
32768.
1a.There is a patch for multiple sg device access under Linux. It uses
up to 128 K buffer for each device. See here:
ftp://ftp.fokus.gmd.de/pub/unix/cdrecord/alpha/sg*
2. Ensure your harddisk has write cache enabled (For SCSI hard disks I
switched it on with the scsiinfo program from tsx-11.mit.edu), but
enable this only if it is correctly working ;-)
This has boosted the throughput of icedax considerably.
Supported interfaces
====================
Non SCSI drives (Linux only):
ATAPI:
The greatest group nowadays are ATAPI (EIDE) cdrom drives.
Support is only limited by the drive. Kernel and icedax
are ready for them (unless the drive uses a very uncommon method).
Newer kernels can do an scsi emulation for ATAPI devices.
This interface is supported.
Parallel port interface:
There is a driver that maps the parallel port driver to an generic
scsi like driver. Should work with newer kernels.
Proprietary interfaces:
Older drives with proprietary interfaces are supported only
if the kernel driver allows reading cdda audio data via ioctl().
Currently only Eberhard Moenkeberg's sbpcd and Corey Minyard's
cdu31a driver do allow this. The sbpcd driver of kernels earlier than
2.0.30 and 2.1.57 needs a patch before satisfying output can be
obtained (see README.sbpcd).
SCSI drives:
For these drives the SCSI library from Joerg Schilling is used.
Thus we need kernel support (compiled-in or as a module) for it.
The generic SCSI interface allows multi sector transfers (max. 128 KB)
which lowers cpu load considerably.
** NEW **
I added a script 'scsi_scan.linux' to find the generic devices for all
SCSI CDROM- or WORM-type drives.
Configuration
=============
There are some adjustable parameters in the beginning of the Makefile
(which is called local.cnf.in) . They describe default settings of icedax:
INTERFACE: How the cdrom is accessed. Choose one method for INTERFACE.
DEVICE: The default cdrom device is set in DEF_DEVICE.
SOUND FILE FORMAT DEFAULTS:
The default format can be 'wav', 'sun pcm au', 'aiff', 'aifc', or
'raw bigendian samples'.
It is determined by the Makefile variable DEF_TYPE.
AUDIO FILENAME:
The default filename is given by DEF_FILE. Unless 'cdr' format is being used,
this name is appended with '.wav', '.au', '.aiff' or '.aifc'.
RATE: the default rate is given by setting DEF_UNDERSAMPLING to the divisor
for the audio cd sampling frequency (44100 Hz).
RATE = 44100 Hz / DEF_UNDERSAMPLING
DEF_UNDERSAMPLING can be any multiple of a half greater than one half.
DYNAMIC: The default dynamic range of one sample in one channel is defined in
DEF_BITS which can be one of 8, 12 or 16.
CHANNELS: set DEF_CHANNELS to 1 for mono and 2 for stereo.
RECORDING TIME: set DEF_TIME to the amount of seconds to record (or 0 for
the whole track).
SOUND DEVICE: set SOUND_DEVICE to the device name of your sound card.
The line containing HAVESOUND should be
uncommented also, if you want the option to hear
what you record.
All of those values can be overridden by command line parameters.
Compiling icedax
==================
Adjust the Makefile (named local.cnf.in) for your cdrom interface and
device setting first.
Then type
make
and as root
make install
This will compile icedax and copy the binary to /usr/local/bin and the
man page to /usr/local/man/man1 (defaults).
Privileges
==========
You can setgid the binary, if you want to allow access to a CDROM's
scsi_generic interface for icedax but not for arbitrary programs.
Giving away permissions to send SCSI commands directly to a device is
not something you want to do lightly on a multi-user server system.
The setgid privileges will only be used to access the scsi generic
interface; for cooked_ioctl, the setgid privileges are not necessary
and they are simply dropped.
Previous versions of icedax had to be setuid to root. Such privileges
are no longer necessary and will be dropped if present.
Select device
=============
By default icedax uses the generic SCSI interface and a device tripel for
SCSI bus, id, and lun.
This setting can be overridden by specifying '-Iinterface' and
'-D cdromdevice'.
The following command line example uses the generic_scsi interface and the
SCSI device with bus 1, id 2 and lun 3:
icedax -Igeneric_scsi -D1,2,3
The shell script 'scan_scsi.linux' will report the generic devices for
all SCSI cdrom drives.
If you need to use another interface, check the device setting also as they
need to fit together.
Here is an example for an ATAPI cdrom using the cooked_ioctl interface and
the cdrom device /dev/hdb:
icedax -Icooked_ioctl -D/dev/hdb
Features
========
I added an optional on-the-fly correction for pre-emphasized samples
(available for original CDDA format only).
If the -T option is given, the samples will be filtered before they
are written to disk. The samples then have a linear frequency response again.
When recording in mono, both channels are summed with halved amplitude.
Undersampling is done by summing several samples with reduced amplitude to
prevent overflows. This damps higher freqencies as well. Compared to
exact resampling icedax does not use a very sophisticated (expensive)
filter algorithm. It currently uses quadratic interpolation for
noninteger subsampling factors.
Sampling can be aborted by pressing the Interrupt-Key (eg control-C)
at anytime. Unless streaming to a pipe, the wav header will be updated
to contain the actual length of the sample. The same will happen, if
disk space becomes exhausted.
Fast options
============
The options can also influence the performance greatly.
The fastest case is given when the samples don't need to be changed from
their original form or analysed, that is the output format uses the same
parameters as the drive: 16-bit samples, stereo at 44100 Hz sample rate
AND with the same endianess (-Cbig and -Ebig, or -Clittle and -Elittle).
To be sure all parameters can be given explicitly on the command line.
This avoids an analysis of icedax.
icedax -P0 -q -S<maximum speed>
run as root will read with maximum speed and copy its output into the
wav file, taking advantage of realtime scheduling as well.
For throughput testing the additional option -N can be used. Write
operations will be suppressed then.
Options that slow down initially
================================
-v<level> needs some time for analysis before the actual sampling starts
Options that slow down during sampling
======================================
-P1 causes overlap reading, the slowdown depends on the amount of jitter
-e synchronous output to a sound card slows down to onefold speed
Options that need more cpu power
================================
-p<rate> resamples the output send to the sound card
-M<count> calculates checksums
-T on-the-fly preemphasis filtering
-F checking for extremal samples
-G checking for differences in both channels
-C<endianess> if a conversion is required (see below)
-E<endianess> if a conversion is required (see below)
-Oaudiotype if a conversion is required (see below)
-c 1
-c s
-m
-b 8
-b 12
-a <not 1>
-r <not 44100>
When are one or two endianess (byte order) conversions required?
================================================================
There are three stages where the endianess matters:
1.) on the input side the cd drive can deliver in two flavors (called F1).
When the flavor is unknown, icedax needs to find out the endianess.
A simple voting method is used. Successive samples are compared in both
flavors and the flavor with the statistically smaller changes is taken.
The flavor can be defined with the -C option, avoiding the analysis.
2.) For any calculation with samples (and echoing to the sound card),
the samples are needed in the byte order of the machine (in this case
I set 'need_host_order' to yes). The flavor of the machine endianess
is called F2.
3.) Finally, there are two flavors of output sound formats (called F3):
wav uses little endian samples
cdr and au use big endian samples
If the samples currently in memory have the wrong endianess a
(possibly second) conversion is required.
This gives the following table:
F1 F2 need_host_order F3 conversions
little little no little 0
little little yes little 0
little little no big 1
little little yes big 1
little big no little 0
little big yes little 2
little big no big 1
little big yes big 1
big little no little 1
big little yes little 1
big little no big 0
big little yes big 2
big big no little 1
big big yes little 1
big big no big 0
big big yes big 0
Known problems
==============
1. Sound quality
Audible errors caused by hesitations:
When recording the same audio track twice, recordings can slightly differ.
Furthermore depending on the firmware in the cdrom drive, positioning
errors can be so severe that they cannot be easily corrected by icedax.
This will unfortunately lead to audible errors.
In this case some overlap or even underlap between successive portions
is introduced from the cdrom drive.
Here is this case demonstrated graphically:
Sec 1 ... Sec n
|----------------------| first read delivered
|------------------------| second read wanted
|------------------------| second read delivered
|-| extra bogus bytes
|-| missing bytes
This is due to synchronisation problems between sectors inside the cdrom
drive. When the drive has been forced to wait, these problems arise.
Audio cds are lacking sector headers, so it's a difficult job to do the
positioning right (in the firmware). The frequency of these errors is
reduced when the reading process can continue undisturbed for longer periods.
So, a high throughput is essential.
You may want to fine-tune your update daemon to use shorter intervals
(see 'man 8 update'). Shorter intervals are better because the update
interruptions are shorter when not so much write requests can pile up.
The plextor 4plexplus drive (PX-4XCE) and newer models, newer pioneer
models as well as CD-writers with large buffers don't suffer from this
errors. Here the default is to switch off overlap reading.
If you cannot get good samples from your drives you might consider an
alternative program. Monty's cdparanoia program goes to great lengths
in order to seperate the good bits from the bad ones.
2. The index scanner has caused timeouts on my toshiba 3401 due to fast
random accesses.
3. Retrieval of media catalog numbers and International Standard Recording
Codes may fail due to firmware bugs.
Audio Format Conversion
=======================
Currently wav, sun (au-pcm), Apple/SGI aiff/aifc, and raw formats are supported.
I try to write correct wav files (little endian samples), but some
cd-writers might swap them, which would result in sort of white noise
instead of the original sounds. icedax has an endianness detector
for these cases, but as for all automatics, it might fail on bizarre samples.
Hint: icedax can be forced to use a given input endianness with the
-C option (arguments are 'little', 'big' or 'guess').
The sun format is a pcm variant, and uses big endian samples.
The other more common sun format with logarithmically scaled samples (au)
is not supported but can be obtained from sox's conversion.
The raw format is like the sun format except it has no header. I
changed the endianness to big endian samples in order to comply
with popular cd burning software like the wodim program.
The sound converter 'sox' can be used to obtain other sound formats.
(Note however, that the current sox player and a newer sound driver do not
harmonize well, use the player from the wavplay package instead (available
at sunsite)).
Feedback
========
Tested patches, any hardware information regarding drives as well as success/
failure reports are always welcome at heiko@colossus.escape.de.
known cdda capable drives
=========================
Check out these web pages for uptodate information:
<http://www.tardis.ed.ac.uk/~psyche/pc/cdrom/CDDA.html>
and
<http://www.anime.net/~goemon/linux-cd/cdda-list.html>
From a news posting from Björn Wiberg
> The following table was generated using the CDROM.CFG file from Nero
> v3.0.4.2.
>
> It shows different CD-ROM models and what speeds they can do DAE at. I
> guess the values are "safe ones"; i.e. the speeds at which each drive
> can perform DAE reliably.
>
> A value of "0x" means the drive doesn't support DAE.
>
> For your convenience, the maximum data transfer speed of the drives
> (for reading conventional files and data from the CD-ROM) are also
> included.
>
> Hopefully, this will help some of you who are looking for a good
> CD-ROM drive to choose a model which seems fast enough both for data
> and DAE.
>
> The models which support DAE:
> (Sorted by DAE speed, data speed and model)
>
> CD-ROM model DAE Data Interface
> ---------------------------------------------------------
> PLEXTOR CD-ROM PX-32TS 16x 16x SCSI
> TEAC CD-524E 14x 24x IDE
> CREATIVE CD620E 12x 5x IDE
> MITSUMI CD-ROM FX320S !B 12x 32x IDE
> TEAC CD-532E 12x 32x IDE
> HITACHI CDR-8335 12x 24x IDE
> PIONEER CD-ROM DR-A02S 12x 24x IDE
> TEAC CD-ROM CD-532S 12x 14x SCSI
> PIONEER CD-ROM DR-A12X 12x 12x IDE
> PIONEER CD-ROM DR-U06S 12x 12x SCSI
> PLEXTOR CD-ROM PX-20TS 12x 12x SCSI
> MITSUMI CD-ROM FX120T !B 11x 12x IDE
> PIONEER CD-ROM DR-A04S 11x 32x IDE
> PIONEER CD-ROM DR-U12X 10x 12x SCSI
> HITACHI CDR-8330 9x 24x IDE
> SONY CD-ROM CDU711 9x 14x IDE
> MATSHITA CD-ROM CR-584 9x 12x IDE
> MATSHITA CD-ROM CR-586 8x 32x IDE
> CDM-T531 Ver1.041 8x 18x IDE
> TEAC CD-516E 8x 16x IDE
> TOSHIBA CD-ROM XM-6201TA 8x 16x SCSI
> PLEXTOR CD-ROM PX-12CS 8x 12x SCSI
> PLEXTOR CD-ROM PX-12TS 8x 12x SCSI
> PIONEER CD-ROM DR-U10X 8x 10x SCSI
> SONY CD-ROM CDU611 8x 10x IDE
> FUNAI E285X 8x 8x IDE
> MITSUMI CD-ROM FX810T4!B 8x 8x IDE
> SONY CD-ROM CDU511 8x 8x IDE
> SONY CD-ROM CDU571-Q 8x 8x IDE
> TEAC CD-C68E 8x 8x IDE
> MITSUMI CD-ROM FX400E !B 8x 4x IDE
> HITACHI CDR-8130 7x 16x IDE
> MATSHITA CD-ROM CR-585 6x 24x IDE
> CREATIVE CD2422E MC102 6x 12x IDE
> MATSHITA CD-ROM CR-508 6x 12x SCSI
> IBM PD-1 LF-1195 6x 6x IDE
> PLEXTOR CD-ROM PX-6XCS 6x 6x SCSI
> LITEON CD-ROM LTN301 5x 32x IDE
> LITEON CD-ROM LTN242F 5x 24x IDE
> HITACHI CDR-7930 5x 8x IDE
> ASUS CD-S340 4x 34x IDE
> E-IDE CD-ROM 32X/AKU 4x 32x IDE
> ATAPI CDROM 4x 24x IDE
> LITEON CD-ROM LTN244 4x 24x IDE
> PHILIPS PCA248CD 4x 24x IDE
> TEAC CD-524EA 4x 24x IDE
> LITEON CD-ROM LTN202 4x 21x IDE
> ATAPI CD-ROM DRIVE-24X 4x 20x IDE
> CREATIVE CD2423E NC101 4x 20x IDE
> SAMSUNG CD-ROM SCR-2431 4x 20x IDE
> TAE IL CD-ROM CDD-7240J 4x 20x IDE
> TEAC CD-220E 4x 20x IDE
> CREATIVE CD1620E SL970404 4x 16x IDE
> LITEON CD-ROM LTN262 4x 16x IDE
> TEAC CD-ROM CD-516S 4x 16x SCSI
> ATAPI CD-ROM DRIVE 4x 15x IDE
> BCD 16XA CD-ROM 4x 10x IDE
> MATSHITA CD-ROM CR-506 4x 8x SCSI
> SONY CD-ROM CDU311 4x 8x IDE
> MATSHITA CD-ROM CR-504-J 4x 4x SCSI
> MITSBISH CDRW226 4x 4x SCSI
> SONY CD-ROM CDU625-S 4x 4x SCSI
> SONY CD-ROM CDU-76S 4x 4x SCSI
> SONY CD-ROM CDU77E 4x 4x IDE
> PLEXTOR CD-ROM PX-4XCE 4x 4x SCSI
> SONY CD-ROM CDU55E 4x 2x IDE
> PIONEER CD-ROM DR-U24X 3x 24x SCSI
> LITEON CD-ROM LTN204 3x 21x IDE
> PIONEER CD-ROM DR-A01S 3x 20x IDE
> PIONEER CD-ROM DR-A24X 3x 20x IDE
> FUNAI E295X 3x 16x IDE
> PIONEER CD-ROM DR-U03S 3x 12x SCSI
> BTC 24X CD-ROM SLL24 3x 10x IDE
> PLEXTOR CD-ROM PX-8XCS 3x 4x SCSI
> CyberDrv CD-ROM TW240S 3x 3x SCSI
> COMPAQ CRD-8320B 2x 32x IDE
> LG CD-ROM CRD-8320B 2x 32x IDE
> TOSHIBA CD-ROM XM-6202B 2x 32x IDE
> CREATIVE DVD-ROM DVD2240E 2x 24x IDE
> TOSHIBA CD-ROM XM-6102D 2x 24x IDE
> BTC 16X CD-ROM SLL16 1x 10x IDE
> NEC CD-ROM DRIVE:282 2x 8x IDE
> HITACHI GD-2000 2x 4x IDE
> MATSHITA CD-ROM CR-581 2x 4x IDE
> NEC CD-ROM DRIVE:222 2x 4x SCSI
> MATSHITA CD-ROM CR-8004 2x 2x SCSI
> GoldStar CD-ROM CRD-8240B 1x 24x IDE
> TOSHIBA CD-ROM XM-6102B 1x 24x IDE
> CyberDrv IDE CD-ROM 120D 1x 12x IDE
> I DE CD-ROM TW120D 1x 12x IDE
> NEC CD-ROM DRIVE:464 1x 12x SCSI
> TORiSAN CD-ROM CDR_U112 1x 12x IDE
> TOSHIBA CD-ROM XM-5701TA 1x 12x SCSI
> TOSHIBA CD-ROM XM-5702B 1x 12x IDE
> CyberDrv SCSI CD-ROM 120S 1x 10x IDE
> NEC CD-ROM DRIVE:463 1x 10x SCSI
> COMPAQ DVD-ROM SD-M1002 1x 8x IDE
> MATSHITA CD-ROM CR-583 1x 8x IDE
> NEC CD-ROM DRIVE:462 1x 8x SCSI
> TEAC CD-58E 1x 8x IDE
> OPTICS_S 8622 SCSI 1x 8x SCSI
> TOSHIBA CD-ROM XM-5602B 1x 8x IDE
> TOSHIBA CD-ROM XM-3801TA 1x 7x SCSI
> NEC CD-ROM DRIVE:461 1x 6x SCSI
> IBM CDRM00203 1x 6x SCSI
> TEAC CD-46E 1x 6x IDE
> TEAC CD-56E 1x 6x IDE
> TEAC CD-ROM CD-56S 1x 6x SCSI
> TOSHIBA CD-ROM XM-5502TA 1x 6x IDE
> TOSHIBA CD-ROM XM-3701TA 1x 6x SCSI
> NEC CD-ROM DRIVE:502 1x 4x SCSI
> TOSHIBA CD-ROM XM-1502BN 1x 4x IDE
> TOSHIBA CD-ROM XM-5302TA 1x 4x IDE
> TOSHIBA CD-ROM XM-5401TA 1x 4x SCSI
> TOSHIBA CD-ROM XM-5402TA 1x 4x IDE
> TOSHIBA CD-ROM XM-1502B 1x 4x IDE
> TOSHIBA CD-ROM XM-3501TA 1x 4x SCSI
> TOSHIBA CD-ROM XM-5301TA 1x 4x SCSI
> TOSHIBA CD-ROM XM-5201TA 1x 2x SCSI
known cdda uncapable drives
===========================
Pioneer DRM-602X, DRM-604X
Teac CD-55A (panasonic bus)
Philips CM206/10 serial RS-422
CM207
CM226/10 serial RS-422
CDD462/01 serial RS-422
Orchid CDS3110
Additions to the tables above are welcome.
and now catch your sounds,
Heiko heiko@colossus.escape.de (Original author)
Changes for the Cdrkit project by Christian Fromme <kaner@strace.org>, Eduard Bloch
|