/ Forside / Teknologi / Operativsystemer / Linux / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Linux
#NavnPoint
o.v.n. 11177
peque 7911
dk 4814
e.c 2359
Uranus 1334
emesen 1334
stone47 1307
linuxrules 1214
Octon 1100
10  BjarneD 875
Afspilning af audio-CD
Fra : Jonas Møller Larsen


Dato : 19-06-04 20:03

Hej,

Jeg vil være svært taknemmelig, hvis nogen kan hjælpe med at gennemskue,
hvorfor afspilning af musik-CDer fra CDROM-drevet ikke rigtigt virker
med min Redhat 7.3-installation.

Typisk kan jeg godt afspille ét eller to spor fra en CD. Men så stopper
CDen. Her er en typisk track list fra programmet cdp (en tekstbaseret
afspiller)

1 0:02 6:40
2 6:42 -6:-40
3 0:02 0:00
4 0:02 0:00
5 0:02 0:00
6 0:02 0:00
7 0:02 84:23
8 0:02 -84:23
9 0:02 0:00

Altså, kun det første spor bliver genkendt rigtigt. Hele CDen kan så
spilles ved at vælge spor 7(!). Men for de fleste CDers vedkommende er
det kun muligt at høre (en del af) det første spor. Øv.

Problemet er det samme med "alle" CDer og "alle" afspilningsprogrammer
(f.eks. giver GNOME CD player (gtcd) samme track list som ovenfor), så
det er vel et øh... driver-problem?

Jeg kan godt spille musik-CDer under Windows98, så hardwaren skulle virke.


Her er noget måske relevant(?) output:

> ls -l /dev/cdrom
lrwxrwxrwx 1 root root 8 Jun 19 19:44 /dev/cdrom ->
/dev/hdc

> cat /var/log/dmesg
[...]
hdc: GCD-R520B, ATAPI CD/DVD-ROM drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: 12500460 sectors (6400 MB) w/256KiB Cache, CHS=778/255/63, UDMA(33)
hdb: 832288 sectors (426 MB) w/64KiB Cache, CHS=839/16/62, DMA
[...]

> lsmod
Module Size Used by
sr_mod 14784 0 (autoclean) (unused)
scsi_mod 92208 1 (autoclean) [sr_mod]
ide-cd 26592 0 (autoclean)
cdrom 29504 0 (autoclean) [sr_mod ide-cd]
r128 90304 1
agpgart 26272 3
3c59x 25216 1
nls_iso8859-1 2800 1 (autoclean)
nls_cp437 4320 1 (autoclean)
msdos 5104 1 (autoclean)
fat 31392 0 (autoclean) [msdos]
sb 7760 0
sb_lib 33680 0 [sb]
uart401 6384 0 [sb_lib]
sound 58624 0 [sb_lib uart401]
soundcore 4208 4 [sb_lib sound]
ext3 61936 2
jbd 38976 2 [ext3]

--
Jonas Møller Larsen

 
 
Michael Rasmussen (19-06-2004)
Kommentar
Fra : Michael Rasmussen


Dato : 19-06-04 22:01

Jonas Møller Larsen <nospam@nospam.invalid> wrote:

>Jeg vil være svært taknemmelig, hvis nogen kan hjælpe med at gennemskue,
>hvorfor afspilning af musik-CDer fra CDROM-drevet ikke rigtigt virker
>med min Redhat 7.3-installation.

Hvorfor spilde tiden på et forældet system som RedHat 7.3 - Opgrader til noget nyere, f.eks Fedora Core 2 når du nu er startet i
RedHat gaden.

<mlr>



Mikael Hansen (19-06-2004)
Kommentar
Fra : Mikael Hansen


Dato : 19-06-04 22:22

Jonas Møller Larsen wrote:
> Hej,
>
> Jeg vil være svært taknemmelig, hvis nogen kan hjælpe med at gennemskue,
> hvorfor afspilning af musik-CDer fra CDROM-drevet ikke rigtigt virker
> med min Redhat 7.3-installation.
>
> Typisk kan jeg godt afspille ét eller to spor fra en CD. Men så stopper
> CDen.
> Altså, kun det første spor bliver genkendt rigtigt. Hele CDen kan så
> spilles ved at vælge spor 7(!). Men for de fleste CDers vedkommende er
> det kun muligt at høre (en del af) det første spor. Øv.
>
> Problemet er det samme med "alle" CDer og "alle" afspilningsprogrammer
> (f.eks. giver GNOME CD player (gtcd) samme track list som ovenfor), så
> det er vel et øh... driver-problem?
>
> Jeg kan godt spille musik-CDer under Windows98, så hardwaren skulle virke.

Det lyder godtnok mystisk, jeg køre selv RH 7.3 (opgraderet med en
2.4.19 kernel) og har ikke det problem.
Mit drev er et LG CDRW/DVD combo, derfor køre det med SCSI emulering,
men det burde vist ikke gøre nogen forskel.

>
> Her er noget måske relevant(?) output:
>
> > ls -l /dev/cdrom
> lrwxrwxrwx 1 root root 8 Jun 19 19:44 /dev/cdrom ->
> /dev/hdc

Det ser rigtigt ud
Hvis der er en playknap på dit drev kan du jo prøve ikke at bruge et
program til at afspille med.

Hvis du har cdda2wav kan du prøve med det, det er en del af cdrecord,
kan bruges til at lagre en CD eller enkelte spor hearf som wav filer på
harddisken. man kan også slå skrivning fra og få den til at sende
datastrømmen til lydkortet.

fra man cdda2wav:
Enable echo to soundcard
-e copies audio data to the sound card while
recording, so you hear it nearly simultaneously.
The soundcard gets the same data that is recorded.
This is time critical, so it works best with the -q
option. To use cdda2wav as a pseudo CD player
without recording in a file you could use cdda2wav
-q -e -t2 -d0 -N to play the whole second track.
This feature reduces the recording speed to at most
onefold speed. You cannot make better recordings
than your sound card can play (since the same data
is used).

m.v.h. Mikael


Jonas Møller Larsen (20-06-2004)
Kommentar
Fra : Jonas Møller Larsen


Dato : 20-06-04 00:11

Mikael Hansen wrote:
> Det lyder godtnok mystisk, jeg køre selv RH 7.3 (opgraderet med en
> 2.4.19 kernel) og har ikke det problem.

Aha... så er der altså håb. Det lyder godt.

> Mit drev er et LG CDRW/DVD combo, derfor køre det med SCSI emulering,
> men det burde vist ikke gøre nogen forskel.

Det aner jeg ikke, om det gør. Peger /dev/cdrom ikke på /dev/hdc, kun
fordi mit drev er et IDE-drev?

>> > ls -l /dev/cdrom
>> lrwxrwxrwx 1 root root 8 Jun 19 19:44 /dev/cdrom ->
>> /dev/hdc
>
>
> Det ser rigtigt ud
> Hvis der er en playknap på dit drev kan du jo prøve ikke at bruge et
> program til at afspille med.

Mit drev har kun en volumenkontrol, et stik til hovedtlf. og en eject-knap.

> fra man cdda2wav:
> To use cdda2wav as a pseudo CD player
> without recording in a file you could use cdda2wav
> -q -e -t2 -d0 -N to play the whole second track.

Nu prøvede jeg så at installere og køre cdda2wav med dén besværgelse.

>cdda2wav -q -e -t2 -d0 -N -D /dev/cdrom
cdrom device (/dev/cdrom) is not of type generic SCSI. Setting interface
to cooked_ioctl.
W Sector offset 0 exceeds track size (ignored)
Sorry, this driver and/or drive does not support cdda reading.
cooked: Read cdda : Invalid argument
sector 10682 + 4294956614, buffer 4015A000 + 15000
Segmentation fault

Hmm... segmentation fault. Hvis jeg manuelt sætter interface til
cooked_ioctl (hvad det så end betyder; 'man cdda2wav' gjorde mig ikke
klogere), får jeg samme resultat bare uden den første fejlmeddelelse:

>cdda2wav -q -e -t2 -d0 -N -D /dev/cdrom -I cooked_ioctl
W Sector offset 0 exceeds track size (ignored)
Sorry, this driver and/or drive does not support cdda reading.
cooked: Read cdda : Invalid argument
sector 10682 + 4294956614, buffer 4015A000 + 15000
request defined buff:: Permission denied
parent writer sem request failed
Segmentation fault


Jeg kan få cdda2wav til at give information om disken med -J.
man cdda2wav:
" -J --info-only
does not write to a file, it just gives information about the
disc."

> cdda2wav -D /dev/cdrom -J
cdrom device (/dev/cdrom) is not of type generic SCSI. Setting interface
to cooked_ioctl.
86016 bytes buffer memory requested, 4 buffers, 8 sectors
#Cdda2wav version 1.10_linux_2.4.17-0.13smp_i686_i686 real time sched.
soundcard support
AUDIOtrack pre-emphasis copy-permitted tracktype channels
1- 2 no no audio 2
AUDIOtrack pre-emphasis copy-permitted tracktype channels
3-24 no no audio 2
Table of Contents: total tracks:24, (total time 0:02.00)
1.( 2:22.32), 2.(954434:48.14), 3.( 0:00.00), 4.( 0:00.00), 5.(
0:00.00)
6.( 0:00.00), 7.( 0:00.00), 8.( 0:00.00), 9.( 0:00.00), 10.( 0:00.00)
11.( 0:00.00), 12.( 0:00.00), 13.( 0:00.00), 14.( 0:00.00), 15.( 0:00.00)
16.( 0:00.00), 17.( 0:00.00), 18.( 0:00.00), 19.( 0:00.00), 20.( 0:00.00)
21.( 0:00.00), 22.( 0:00.00), 23.( 0:00.00), 24.( 0:00.00),
Table of Contents: starting sectors
1.( 0), 2.( 10682), 3.( 0), 4.( 0), 5.( 0)
6.( 0), 7.( 0), 8.( 0), 9.( 0), 10.( 0)
11.( 0), 12.( 0), 13.( 0), 14.( 0), 15.( 0)
16.( 0), 17.( 0), 18.( 0), 19.( 0), 20.( 0)
21.( 0), 22.( 0), 23.( 0), 24.( 0), lead-out(
0)
CDINDEX discid: giLdIK8d8UZ5bNmkY0PIZyd.cCw-
CDDB discid: 0x37000018
CD-Text: not detected
CD-Extra: not detected
No media catalog number present.
scanning for ISRCs: 24 ...
index scan: 24...
Time interval is too short. Choose a duration greater than 0.00 secs!
Please use -h or consult the man page for help.


Ud for det første "Table of Contents" står det rigtige antal spor for
den aktuelle CD, nemlig 24. Længden af det første spor stemmer også, men
derefter går det grueligt galt. Det er den samme forkerte Table of
Contents, som de andre programmer ser.

Hvor mon så fejlen ligger; i kernen vel? Eller måske i et af de moduler,
som indlæses med insmod-kommandoen (hvilket)?

Jeg kører i øvrigt RedHat version 7.2 (ikke 7.3; jeg huskede forkert),
og kernen er 2.4.7-10.

--
Jonas Møller Larsen

Mikael Hansen (20-06-2004)
Kommentar
Fra : Mikael Hansen


Dato : 20-06-04 10:52

Jonas Møller Larsen wrote:
> Mikael Hansen wrote:
>
>> Det lyder godtnok mystisk, jeg køre selv RH 7.3 (opgraderet med en
>> 2.4.19 kernel) og har ikke det problem.
>
>
> Aha... så er der altså håb. Det lyder godt.
>
>> Mit drev er et LG CDRW/DVD combo, derfor køre det med SCSI emulering,
>> men det burde vist ikke gøre nogen forskel.
>
>
> Det aner jeg ikke, om det gør. Peger /dev/cdrom ikke på /dev/hdc, kun
> fordi mit drev er et IDE-drev?

SCSI emulering skal bruges af cdrecord, fordi det er beregnet til
SCSI-drev, mit er også et ATAPI-drev (IDE).

$ ls -al /dev/cdrom
lrwxrwxrwx 1 root root 9 okt 25 2002 /dev/cdrom ->
/dev/scd0

og sådan ser den aktive del af /etc/lilo.conf ud:
prompt
timeout=80
default=2.4.19.USB
boot=/dev/hde
map=/boot/map
install=/boot/boot.b
message=/boot/message
linear

image=/boot/vmlinuz-2.4.19.USB
   label=2.4.19.USB
   read-only
   root=/dev/hde2
   append="hda=ide-scsi"

du kan evt. prøve at aktivere SCSI-emulering ved at tilføje følgende
linie i din /etc/lilo.conf

      append="hdc=ide-scsi"

måske gerne lave en ny section, med samme indhold som din aktuelle med
overstående tilføjelse, husk blot at ændre label navnet (tilføj f.eks.
SCSI). Du skal efterfølgende sandsyneligvis bruge /dev/scd0 istedet for
/dev/cdrom


> Nu prøvede jeg så at installere og køre cdda2wav med dén besværgelse.
>
> >cdda2wav -q -e -t2 -d0 -N -D /dev/cdrom
> cdrom device (/dev/cdrom) is not of type generic SCSI. Setting interface
> to cooked_ioctl.
> W Sector offset 0 exceeds track size (ignored)
> Sorry, this driver and/or drive does not support cdda reading.
> cooked: Read cdda : Invalid argument
> sector 10682 + 4294956614, buffer 4015A000 + 15000
> Segmentation fault

giver hos mig følgende output:
$ cdda2wav -q -e -t2 -d0 -N -D /dev/cdrom
cdrom device (/dev/cdrom) is not of type generic SCSI. Setting interface
to cooked_ioctl.

og den begynder at afspille track 2, og afslutter med:

cooked: Read cdda : Invalid argument
sector 34679 + 4294967292, buffer 4001A000 + 15000

Hvis du erstatter -t2 med -B spiller den hele cd'en

> Hmm... segmentation fault.

Hmm, Jeg så lidt tidligere her at segmentation fault kunne være noget
med dårligt RAM, måske du burde køre en memtest. Jeg har lige oplevet at
det også kan lave en kernel panic under opstart. (dog ikke på min egen
maskine)

>
> Jeg kan få cdda2wav til at give information om disken med -J.
> man cdda2wav:
> " -J --info-only
> does not write to a file, it just gives information about the
> disc."
>
>> cdda2wav -D /dev/cdrom -J
>
> cdrom device (/dev/cdrom) is not of type generic SCSI. Setting interface
> to cooked_ioctl.
> 86016 bytes buffer memory requested, 4 buffers, 8 sectors
> #Cdda2wav version 1.10_linux_2.4.17-0.13smp_i686_i686 real time sched.
> soundcard support
> AUDIOtrack pre-emphasis copy-permitted tracktype channels
> 1- 2 no no audio 2
> AUDIOtrack pre-emphasis copy-permitted tracktype channels
> 3-24 no no audio 2
> Table of Contents: total tracks:24, (total time 0:02.00)
> 1.( 2:22.32), 2.(954434:48.14), 3.( 0:00.00), 4.( 0:00.00), 5.(
> 0:00.00)
> 6.( 0:00.00), 7.( 0:00.00), 8.( 0:00.00), 9.( 0:00.00), 10.( 0:00.00)
> 11.( 0:00.00), 12.( 0:00.00), 13.( 0:00.00), 14.( 0:00.00), 15.( 0:00.00)
> 16.( 0:00.00), 17.( 0:00.00), 18.( 0:00.00), 19.( 0:00.00), 20.( 0:00.00)
> 21.( 0:00.00), 22.( 0:00.00), 23.( 0:00.00), 24.( 0:00.00),
> Table of Contents: starting sectors
> 1.( 0), 2.( 10682), 3.( 0), 4.( 0), 5.( 0)
> 6.( 0), 7.( 0), 8.( 0), 9.( 0), 10.( 0)
> 11.( 0), 12.( 0), 13.( 0), 14.( 0), 15.( 0)
> 16.( 0), 17.( 0), 18.( 0), 19.( 0), 20.( 0)
> 21.( 0), 22.( 0), 23.( 0), 24.( 0), lead-out(
> 0)
> CDINDEX discid: giLdIK8d8UZ5bNmkY0PIZyd.cCw-
> CDDB discid: 0x37000018
> CD-Text: not detected
> CD-Extra: not detected
> No media catalog number present.
> scanning for ISRCs: 24 ...
> index scan: 24...
> Time interval is too short. Choose a duration greater than 0.00 secs!
> Please use -h or consult the man page for help.
>
>
> Ud for det første "Table of Contents" står det rigtige antal spor for
> den aktuelle CD, nemlig 24. Længden af det første spor stemmer også, men
> derefter går det grueligt galt. Det er den samme forkerte Table of
> Contents, som de andre programmer ser.
>

Jeg får følgende output fra nyeste Michael Learns To Rock CD, som er med
noget Copy Control technology:

]$ cdda2wav -D /dev/cdrom -J
cdrom device (/dev/cdrom) is not of type generic SCSI. Setting interface
to cooked_ioctl.
86016 bytes buffer memory requested, 4 buffers, 8 sectors
#Cdda2wav version 1.10_linux_2.4.17-0.13smp_i686_i686 real time sched.
soundcard support
AUDIOtrack pre-emphasis copy-permitted tracktype channels
1-10 no no audio 2
Table of Contents: total tracks:10, (total time 38:40.07)
1.( 4:20.62), 2.( 3:21.38), 3.( 3:58.67), 4.( 3:41.50), 5.( 4:00.18)
6.( 4:19.70), 7.( 4:15.70), 8.( 3:45.42), 9.( 3:37.58), 10.( 3:15.57)


Table of Contents: starting sectors
1.( 0), 2.( 19562), 3.( 34675), 4.( 52592), 5.( 69217)
6.( 87235), 7.( 106730), 8.( 125925), 9.( 142842), 10.( 159175)
lead-out( 173857)
CDINDEX discid: .5JnhO72tpZqzg45zkXz9LkJP5w-
CDDB discid: 0x75090e0a
CD-Text: not detected
CD-Extra: not detected
No media catalog number present.
scanning for ISRCs: 10 ...
index scan: 10...


> Hvor mon så fejlen ligger; i kernen vel? Eller måske i et af de moduler,
> som indlæses med insmod-kommandoen (hvilket)?

Som nævt overfor var det måske en ide at tæste din RAM som det første

> Jeg kører i øvrigt RedHat version 7.2 (ikke 7.3; jeg huskede forkert),
> og kernen er 2.4.7-10.

kender jeg ikke, men forskællen er næppe så stor. Jeg kunne dog ikke
indstalere 7.1
på min dengang nyanskaffede P4, så blev det til 7.3

m.v.h. Mikael



Jonas Møller Larsen (20-06-2004)
Kommentar
Fra : Jonas Møller Larsen


Dato : 20-06-04 14:27

Mikael Hansen wrote:
> du kan evt. prøve at aktivere SCSI-emulering ved at tilføje følgende
> linie i din /etc/lilo.conf
>
> append="hdc=ide-scsi"

Det prøvede jeg så (ved at tilføje 'hdc=ide-scsi' til min grub.conf og
linke /dev/cdrom til /dev/scd0), og nu virker '(ioctl(cd_fd,
CDROMREADTOCENTRY, &entry)' samt diverse cd-afspillere helt normalt (kan
læse alle spor). Tak for hjælpen.

> cdda2wav -J -D /dev/cdrom
cdrom device (/dev/cdrom) is not of type generic SCSI. Setting interface
to cooked_ioctl.
86016 bytes buffer memory requested, 4 buffers, 8 sectors
#Cdda2wav version 1.10_linux_2.4.17-0.13smp_i686_i686 real time sched.
soundcard support
AUDIOtrack pre-emphasis copy-permitted tracktype channels
1-24 no no audio 2
Table of Contents: total tracks:24, (total time 71:24.35)
1.( 2:22.32), 2.( 4:15.15), 3.( 2:26.05), 4.( 2:58.00), 5.( 4:45.23)
6.( 2:54.60), 7.( 2:23.47), 8.( 2:53.13), 9.( 2:48.57), 10.( 4:12.65)
11.( 2:56.18), 12.( 2:29.27), 13.( 3:03.13), 14.( 2:40.15), 15.( 2:23.55)
16.( 2:35.67), 17.( 2:52.30), 18.( 2:43.68), 19.( 2:18.07), 20.( 2:08.13)
21.( 5:07.47), 22.( 2:33.20), 23.( 2:28.23), 24.( 3:01.65),
Table of Contents: starting sectors
1.( 0), 2.( 10682), 3.( 29822), 4.( 40777), 5.( 54127)
6.( 75525), 7.( 88635), 8.( 99407), 9.( 112395), 10.( 125052)
11.( 144017), 12.( 157235), 13.( 168437), 14.( 182175), 15.( 194190)
16.( 204970), 17.( 216662), 18.( 229592), 19.( 241885), 20.( 252242)
21.( 261855), 22.( 284927), 23.( 296422), 24.( 307545), lead-out(
321185)
CDINDEX discid: hlvHEjRbhJcC0r2tdDT6.wrS2vY-
CDDB discid: 0x4f10ba18
CD-Text: not detected
CD-Extra: not detected
Media catalog number: 3
scanning for ISRCs: 24 ...
index scan: 24...
Partial length copy for track 24, no info file will be generated for
this track!

> Hmm, Jeg så lidt tidligere her at segmentation fault kunne være noget
> med dårligt RAM, måske du burde køre en memtest.

Eller også var det bare de obskure header-informationer (såsom negativ
track-længde), der gjorde cdda2wav forvirret.

--
Jonas Møller Larsen

Mikael Hansen (20-06-2004)
Kommentar
Fra : Mikael Hansen


Dato : 20-06-04 15:48

Jonas Møller Larsen wrote:
> Mikael Hansen wrote:
>
>> du kan evt. prøve at aktivere SCSI-emulering ved at tilføje følgende
>> linie i din /etc/lilo.conf
>>
>> append="hdc=ide-scsi"
>
>
> Det prøvede jeg så (ved at tilføje 'hdc=ide-scsi' til min grub.conf og
> linke /dev/cdrom til /dev/scd0), og nu virker '(ioctl(cd_fd,
> CDROMREADTOCENTRY, &entry)' samt diverse cd-afspillere helt normalt (kan
> læse alle spor). Tak for hjælpen.

>
>> Hmm, Jeg så lidt tidligere her at segmentation fault kunne være noget
>> med dårligt RAM, måske du burde køre en memtest.
>
>
> Eller også var det bare de obskure header-informationer (såsom negativ
> track-længde), der gjorde cdda2wav forvirret.
>

Det var da godt du fik løst problemet, så er det åbenbart ikke kun
CD-brænding men også afspilning der har brug for at kunne tilgå drevene
som SCSI.

men overvej alligevælg at køre en memtest, en defekt RAM kan medfører at
der går rod i filsystemet

m.v.h. Mikael


Jonas Møller Larsen (20-06-2004)
Kommentar
Fra : Jonas Møller Larsen


Dato : 20-06-04 10:36

Nu virker det endelig. Det er systemkaldet 'ioctl(cd_fd,
CDROMREADTOCENTRY, &entry)', der burde returnere table-of-contents-data,
men som af uransagelige årsager giver mærkelige oplysninger på mit system.

En CD kan afspilles fra ende til anden med denne lille cd-player:
(beskrevet f.eks. her: http://leapster.org/linux/cdrom/ )

#include <fcntl.h>
#include <sys/ioctl.h>
#include <linux/cdrom.h>
#include <stdlib.h>

int main()
{
struct cdrom_msf region;
region.cdmsf_min0 = 0; //start minute
region.cdmsf_sec0 = 0; //start second
region.cdmsf_frame0 = 1; //start frame
region.cdmsf_min1 = -1; //end minute
region.cdmsf_sec1 = 0; //end second
region.cdmsf_frame1 = 0; //end frame

exit(ioctl(open("/dev/cdrom", O_RDONLY | O_NONBLOCK), CDROMPLAYMSF,
&region));
}

--
Jonas Møller Larsen

Søg
Reklame
Statistik
Spørgsmål : 177552
Tips : 31968
Nyheder : 719565
Indlæg : 6408849
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste