Προς το περιεχόμενο

saa7134 και συγχρονισμός ήχου


capthookb

Προτεινόμενες αναρτήσεις

Έχω μια Asus p7131 Hybrid (pci) που έχει ένα saa7133 και tuner tda8290+75a.

Η κάρτα τηλεόρασης δεν έχει έξοδο ήχου για να συνδεθεί με καρφί στην είσοδο (linein) της κάρτας ήχου. Αντίθετα έχει recording device (δημιουργούνται φορτώνοντας στον πυρήνα το saa7134_alsa) και για να έχω ήχο πρέπει να κάνω record από την κάρτα ήχου και να κάνω pipe στην κάρτα ήχου, κάπως έτσι:

>
sox -c 1 -s -w -r 32000 -t alsa hw:1,0 -t alsa -w -r 32000 default  | aplay -

>
arecord -D hw:1,0 -r 32000 -c 2 -f S16_LE  | aplay - 

Το πρόβλημα είναι πως ο ήχος μετά από λίγο χάνει το συγχρονισμό του με την εικόνα. Το module saa7134 έχει κάποιες επιλογές σχετικές με τον ήχο:

>
parm:           audio_debug:enable debug messages [tv audio] (int)
parm:           audio_ddep:audio ddep overwrite (int)
parm:           audio_clock_override:int
parm:           audio_clock_tweak:Audio clock tick fine tuning for cards with audio crystal that's slightly off (range [-1024 .. 1024]) (int)

 

Προσπάθησα να φορτώσω το module με διαφορετικές τιμές του audio_clock_tweak, αλλά δεν κατάφερα να συγχρονίσω τον ήχο. Βέβαια είναι και μεγάλο το έυρος τιμών και δεν τις δοκίμασα όλες.

 

Έχει κανείς καμιά ιδέα για το τι μπορεί να φταίει;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Στον mixer που χρησιμοποιείς δεν υπάρχει η συσκευή αυτή; Αφού είναι σαν audio input device θα υπάρχει λογικά σε κάποιον mixer. Ίσως στον alsa mixer και περιμένει να το δυναμώσεις. Όπως το μικρόφωνο. Αν δεν το δυναμώσεις δεν ακούγεται. Επίσης δώσε και ένα alsaconf μήπως σου εντοπίσει κάτι...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Ναι, ίσως η καθυστέρηση να προκαλείτε από την χρήση πολλαπλών εντολών και του pipeline. Και όσο περνά ο χρόνος το φαινόμενο να γίνεται ποιο έντονο. Ενώ αν παίξει κατευθείαν από τον alsa...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Για να μην υπάρχει πρόβλημα συγχρονισμού πρέπει να προσέξεις 2 πράγματα:

 

1) Να μην υπάρχει αλλοίωση του framerate του video (π.χ. dropped frames)

 

2) Να μην υπάρχει πρόχειρη (ή και καθόλου) αλλαγή του ρυθμού δειγματοληψίας (sample rate) του ήχου.

 

Το γεγονός ότι ο ήχος χάνει σταδιακά το συγχρονισμό του όλο και περισσότερο κατά πάσα πιθανότητα παραπέμπει σε κάτι από τα δύο παραπάνω.

 

Στο παράδειγμα που παρέθεσες κάνεις το source resample στα 32000hz, γιατί; Δοκίμασε να μην κάνεις καθόλου resample (να μη χρησιμοποιήσεις την -r παράμετρο).

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχω δοκιμάσει και διαφορετικά sampling rates αλλά δεν είδα διαφορά. Μάλιστα ο default ρυθμός είναι τα 32000 Hz, όπως βρήκα και στο google. Στο saa7134-alsa.c

γράφει:

>
/*
* ALSA hardware capabilities definition
*/

static struct snd_pcm_hardware snd_card_saa7134_capture =
{
.info =                 (SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_INTERLEAVED |
			 SNDRV_PCM_INFO_BLOCK_TRANSFER |
			 SNDRV_PCM_INFO_MMAP_VALID),
.formats =		SNDRV_PCM_FMTBIT_S16_LE | \
			SNDRV_PCM_FMTBIT_S16_BE | \
			SNDRV_PCM_FMTBIT_S8 | \
			SNDRV_PCM_FMTBIT_U8 | \
			SNDRV_PCM_FMTBIT_U16_LE | \
			SNDRV_PCM_FMTBIT_U16_BE,
.rates =		SNDRV_PCM_RATE_32000 | SNDRV_PCM_RATE_48000,
.rate_min =		32000,
.rate_max =		48000,
.channels_min =		1,
.channels_max =		2,
.buffer_bytes_max =	(256*1024),
.period_bytes_min =	64,
.period_bytes_max =	(256*1024),
.periods_min =		2,
.periods_max =		1024,
};

Έχω δοκιμάσει και χωρίς το -r 32000. Δες:

>
arecord -D hw:1,0 -c 2 -f S16_LE  | aplay -
Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 8000 Hz, Stereo
Warning: rate is not accurate (requested = 8000Hz, got = 32000Hz)
        please, try the plug plugin
Playing WAVE 'stdin' : Signed 16 bit Little Endian, Rate 32000 Hz, Stereo

 

Όσο για το αν έχω frame drops στα στατιστικά του tvtime εμφανίζει γύρω στα 10frames σε διάστημα 5 λεπτών...

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Άρα το video είναι εντάξει.

 

Το εξής:

 

>arecord -Dplug:hw:1,0 -t raw -r 32000 -c 2 -f S16_LE -M  | aplay -t raw -r 32000 -c 2 -f S16_LE -M -
ή
arecord -Dplug:hw:1,0 -t raw -c 2 -f S16_LE -M  | aplay -t raw -c 2 -f S16_LE -M -

 

μήπως κάνει κάποια διαφορά;

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Η διαφορά είναι οτι δεν δουλεύουν καθόλου

>
[dimitris@domatio ~]$ arecord -Dplug:hw:1,0 -t raw -r 32000 -c 2 -f S16_LE -M  | aplay -t raw -r 32000 -c 2 -f S16_LE -M -
ALSA lib conf.c:3840:(parse_args) Unknown parameter 1
ALSA lib conf.c:3966:(snd_config_expand) Parse arguments error: No such file or directory
ALSA lib pcm.c:2145:(snd_pcm_open_noupdate) Unknown PCM plug:hw:1,0
arecord: main:546: audio open error: No such file or directory
aplay: playback:2019: read error
[dimitris@domatio ~]$ arecord -Dplug:hw:1,0 -t raw -c 2 -f S16_LE -M  | aplay -t raw -c 2 -f S16_LE -M -
ALSA lib conf.c:3840:(parse_args) Unknown parameter 1
ALSA lib conf.c:3966:(snd_config_expand) Parse arguments error: No such file or directory
ALSA lib pcm.c:2145:(snd_pcm_open_noupdate) Unknown PCM plug:hw:1,0
arecord: main:546: audio open error: No such file or directory
aplay: playback:2019: read error

Γιατί προφανώς δεν υπάρχει το plug:hw:1,0. Χωρίς το plug παίρνω αυτά:

>
[dimitris@domatio ~]$ arecord -D hw:1,0 -t raw -r 32000 -c 2 -f S16_LE -M  | aplay -t raw -r 32000 -c 2 -f S16_LE -M -
Recording raw data 'stdin' : Signed 16 bit Little Endian, Rate 32000 Hz, Stereo
ALSA lib pcm_mmap.c:369:(snd_pcm_mmap) mmap failed: Invalid argument
arecord: set_params:962: Unable to install hw params:
ACCESS:  MMAP_INTERLEAVED
FORMAT:  S16_LE
SUBFORMAT:  STD
SAMPLE_BITS: 16
FRAME_BITS: 32
CHANNELS: 2
RATE: 32000
PERIOD_TIME: 125000
PERIOD_SIZE: 4000
PERIOD_BYTES: 16000
PERIODS: 4
BUFFER_TIME: 500000
BUFFER_SIZE: 16000
BUFFER_BYTES: 64000
TICK_TIME: 1000
aplay: playback:2019: read error
[dimitris@domatio ~]$ arecord -D hw:1,0 -t raw -c 2 -f S16_LE -M  | aplay -t raw -c 2 -f S16_LE -M -
Recording raw data 'stdin' : Signed 16 bit Little Endian, Rate 8000 Hz, Stereo
Warning: rate is not accurate (requested = 8000Hz, got = 32000Hz)
        please, try the plug plugin
ALSA lib pcm_mmap.c:369:(snd_pcm_mmap) mmap failed: Invalid argument
arecord: set_params:962: Unable to install hw params:
ACCESS:  MMAP_INTERLEAVED
FORMAT:  S16_LE
SUBFORMAT:  STD
SAMPLE_BITS: 16
FRAME_BITS: 32
CHANNELS: 2
RATE: 32000
PERIOD_TIME: 125000
PERIOD_SIZE: 4000
PERIOD_BYTES: 16000
PERIODS: 4
BUFFER_TIME: 500000
BUFFER_SIZE: 16000
BUFFER_BYTES: 64000
TICK_TIME: 1000
aplay: playback:2019: read error

 

firewalker, σου ξαναλέω πως δεν τίθεται θέμα χαμηλής ή μηδενικής έντασης. Ότι σχετικό στον mixer υπάρχει το έχω δυναμώσει και είναι unmuted. Αυτό θα συνέβαινε στην περίπτωση που είχα συνδέσει με κάποιο καλώδιο την κάρτα τηλεόρασης με την κάρτα ήχου. Τώρα έχω ήχο, και αυξομειώνω την έντασή του από το κανάλι που ελέγχει τα δυο μπροστινά ηχεία (είναι σαν να παίζω ένα αρχείο ήχου δηλαδή)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αυτό το έχει δει;

 

ALSA audio with other applications

 

To hear the audio through ALSA using tvtime (or other programs that don't support it directly), run the following command after starting tvtime:

 

arecord -D hw:1,0 -r 32000 -c 2 -f S16_LE | aplay -

 

It basically records at 32kHz Stereo from the SAA7134 ALSA source (hw:1,0 or change accordingly), and plays it through your default ALSA output. Look at the options from aplay to change your output.

 

There might be a delay between the video and the audio. To avoid it, specify a device for aplay (not the 'default' device):

 

arecord -D hw:1,0 -r 32000 -c 2 -f S16_LE | aplay -D surround41

 

In order to get full surround sound from the stereo TV audio output, edit your /etc/asound.conf or ~/.asoundrc file as described in ALSA FAQ028 (http://alsa.opensrc.org/FAQ028) and use this device:

 

arecord -D hw:1,0 -r 32000 -c 2 -f S16_LE | aplay -D ch51dup

 

I don't know how to use ALSA directly with xawtv, motv, kdtv, tvtime, or zapping; if you do, please add it in here!

 

If using arecord still causes a delay between the video and the audio, try using sox:

 

sox -r 32000 -w -t alsa hw:1,0 -t alsa hw:0,0

 

Sox might get you mono sound, while all the alsa solutions cause delays. A combination has been known to work:

 

arecord -D hw:1,0 -r 32000 -c 2 -f S16_LE | sox -q -c 2 -r 32000 -w -t wav - -t alsa hw:0,0

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Λοιπόν, αφού είδα και απόειδα με το delay, παρατήρησα πως πάνω στην κάρτα υπήρχε 4πινη υποδοχή, μικρή άσπρη, για καλώδιο ήχου (ουσιαστικά line-out). Βρήκα ένα καλώδιο audio (από αυτά που συνδέεται ένα dvd drive με την κάρτα ήχου) ταίριαξα τα pins και το σύνδεσα με το line-in της κάρτας ήχου (εσωτερικά πάλι).

Τώρα έχω πλέον ήχο, χωρίς να τρέχω τα sox/arecord και μάλιστα είναι συγχρονισμένος με το βίντεο ότι και να γίνει. Έπειτα σέταρα το mythtv με την κάρτα και προς έκπληξή μου, είδα πως το mythtv καταφέρνει να εγγράφει βίντεο (άρα και να παίζει) σε απόλυτο συγχρονισμό με τον ήχο, κάνοντας capture από τη συσκευή εγγραφής της τηλεόρασης και όχι από το line-in κανάλι της κάρτας ήχου (δηλαδή δε χρησιμοποιεί το καλώδιο που έβαλα).

 

Και κάτι άλλο που ίσως χρησιμεύσει και σε άλλους, όσον αφορά την ρύθμιση ήχου από τα xawtv, tvtime. Αυτά τα προγράμματα υποστηρίζουν μόνο oss mixers, στη μορφή /dev/mixerΧ:device

 

Αν χρησιμοποιούμε alsa, και επομένως oss emulation, πρέπει να βρούμε δυο πράγματα, το Χ και το device:

  1. X: Είναι ένας αριθμός που δείχνει την κάρτα ήχου. Π.χ στο δικό μου σύστημα που έχω μια κάρτα ήχου και την κάρτα ήχου της τηλεόρασης, έχω /dev/mixer0 και /dev/mixer1
  2. device: Εκτελούμε στην κονσόλα (0 ή 1, ανάλογα ποιος αριθμός δείχνει την κάρτα ήχου μας)
    >$cat /proc/asound/card0ή1/oss_mixer

    και παίρνουμε κάτι τέτοιο:

    >
    VOLUME "" 0
    BASS "" 0
    TREBLE "" 0
    SYNTH "" 0
    PCM "" 0
    SPEAKER "" 0
    LINE "" 0
    MIC "Mic" 0
    CD "" 0
    IMIX "" 0
    ALTPCM "" 0
    RECLEV "" 0
    IGAIN "" 0
    OGAIN "" 0
    LINE1 "" 0
    LINE2 "" 0
    LINE3 "" 0
    DIGITAL1 "IEC958" 0
    DIGITAL2 "" 0
    DIGITAL3 "" 0
    PHONEIN "Phone" 0
    PHONEOUT "Phone" 0
    VIDEO "" 0
    RADIO "" 0
    MONITOR "" 0
    


    Το παραπάνω αρχείο αποτελείται από 3 στήλες. Μας ενδιαφέρουν οι δυο πρώτες οι οποίες "συνδέουν" ένα κανάλι του oss mixer (πρώτη στήλη) με ένα κανάλι alsa mixer (δεύτερη στήλη). Το device που απαιτείται να βάλουμε στις ρυθμίσεις των tvtime, xawtv για να δουλεύει η αυξομοίωση του ήχου είναι η πρώτη στήλη. Αυτό που μένει είναι να αντιστοιχήσουμε ένα από αυτά με το κανάλι στο οποίο έχουμε συνδέσει το καλώδιο. Σε εμένα όταν ανοίγω τον μείκτη του kde (kmixer) το κανάλι αυτό λέγεται CAPTURE feedback (ονομασία alsa). Σαν root εκτελώ:

    >
    #echo 'LINE1 "CAPTURE feedback" 0' > /proc/asound/card0/oss_mixer
    


     
    και ρυθμίζω τα xawtv, tvtime να χρησιμοποιούν ως μείκτη το εξής: /dev/mixerΧ:LINE1 όπου Χ είπαμε τι είναι (ο αριθμός 0 ή 1 ή.... που αντιστοιχεί στην κάρτα ήχου μας)

:-)

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Συνήθως όταν χρησιμοποιείς ALSA υπάρχει κάποια καθυστέρηση. Όταν χρησιμοποιείς

OSS δεν υπάρχει αλλά δεν μπορείς να ακούσεις κάτι άλλο εκτός από αυτό.

 

Σε μένα λειτούργησαν οι 3 παρακάτω μέθοδοι:

 

1) η μέθοδος που περιγράφει ο firewalker δηλαδή να χρησιμοποιήσω το surround

 

2) Χρησιμοποιώντας OSS

sox -w -s -r 32000 -c 2 -t ossdsp /dev/dsp1 -t ossdsp /dev/dsp

 

3) Χρησιμοποιώντας ALSA

sox -r 32000 -w -t alsa hw:1 -t alsa default

 

Η καλύτερη μέθοδος είναι η 3 γιατι μπορείς να έχεις ταυτόχρονα ήχο και από άλλα

προγράμματα. Δοκίμασε πρώτα αυτήν.

 

Στο μήνυμα από το wiki που έδωσε ο firewalker αναφέρει την παρακάτω.

sox -r 32000 -w -t alsa hw:1,0 -t alsa hw:0,0

 

Η εντολή μοιάζει ολόιδια με την δική μου 3 γιατί θεωρητικά η default είναι η hw:0,0

παρόλα αυτά με hw:0,0 δεν μου έπαιξε ενώ με default μου λειτουργεί άψογα.

 

Δοκίμασε την 3) και πες μας.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχεις υποστήριξη oss στον kernel ή oss emulation (alsa δηλαδή; )

Όντως με την 3 μέθοδο που αναφέρεις δεν υπάρχει delay, αλλά το στερεοφωνικό (αν προσθέσω -c 2 δηλαδή) κάνει διακοπές ο ήχος.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Έχεις υποστήριξη oss στον kernel ή oss emulation (alsa δηλαδή; )

Όντως με την 3 μέθοδο που αναφέρεις δεν υπάρχει delay, αλλά το στερεοφωνικό (αν προσθέσω -c 2 δηλαδή) κάνει διακοπές ο ήχος.

 

Έχω emulation της alsa για oss.

Νομίζω ότι και σε μένα έκανε διακοπές με στερεοφωνικό ήχο, αλλά δεν με πειράζει

γιατί αυτό το χρησιμοποιώ μόνο όταν βλέπω που δεν με πειράζει να είναι μονοφωνικό.

Όταν γράφω κάτι και το mencoder και το xdtv δουλεύουν κανονικά με στερεοφωνικό.

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...