Μίκτης μικροφώνου για Linux

Πολλές φορές αράζουμε με παρέα και παίζουμε παιχνιδάκια και θέλω να τους βάζω μουσική να ακούγεται στην κλήση. Στα Windows ( :face_vomiting: :face_vomiting:) χρησιμοποιούσα μία εφαρμογή το ManyCam που έβγαζε δικό του virtual μικρόφωνο μέσα στο οποίο έκανες μείξη τα streams που ήθελες.

Το βασικό που θέλω να κάνω είναι να στέλνω τον ήχο ενός προγράμματος π.χ. Firefox μαζί με τη φωνή μου στο ίδιο stream. Έχω δει τις επιλογές που δίνει το pulse audio control και δεν έχω καταφέρω να το στήσω σωστά μέχρι στιγμής, ενώ το να γράφω εντολές κάθε φορά δεν είναι ο βέλτιστος τρόπος που θα ήθελα να το κάνω.

Γνωρίζεται κάποιο πρόγραμμα που να μπορεί να κάνει αυτή τη δουλειά? Η αν δεν υπάρχει σχετικό πρόγραμμα, υπάρχει κάποιο καλό documentation για να με βοηθήσει να αντιληφθώ του πως λειτουργεί το κομμάτι του ήχου στο Linux με σκοπό να γράψω εγώ το πρόγραμμα?

Φαντάζομαι θα πρέπει να φτιάξεις ένα sinc και να στείλεις δυο πηγές με μίξη και να στείλεις την μίξη μετά σε μια φυσική συσκευή η υπολογιστήή. Ναι μπορείς με το Pulse audio αλλά δείχνει μια δουλεία για το Jack. Η για το WirePlumber του Καγιαδάκη που παίρνει Lua.

Εδώ νομίζω περιγράφει αυτό που θέλεις (με μια γρήγορη αναζήτηση αν ξέρεις τις λέξεις)

https://wiki.archlinux.org/title/PulseAudio/Examples#Mixing_additional_audio_into_the_microphone’s_audio

Κάποια πράγματα κάτω από το καπάκι, θα σε βοηθήσουν να καταλάβεις τα παραπάνω

Ίσως βρεις και αυτό το παλιό μου σημείωμα χρήσιμο.

2 «Μου αρέσει»

Αν φτάσεις στο σημείο να φτιάξεις το δικό σου πρόγραμμα, θα έλεγα να ρίξεις μια ματιά στη εντολή sox, νομίζω κάνει…

Ναι προγραμματισμό κάνεις. Απλά ακολουθείς μια μάλλον παραπεταμένη μεθοδολογία. Για να βγάλεις μια άκρη έχε υπόψιν σου τα παρακάτω,

Αυτό που κάνεις είναι να κάνεις σωληνώσεις ανάμεσα σε πηγές (προγράμματα, ροές, μικρόφωνα, συσκευές midi) και δέκτες (κάρτα ήχου, δίκτυο, equalizers κλπ). Κάπως σαν ένα φυσικό ηχοσύστημα. Δυστυχώς το PulseAudio δεν έχει κάποιο γραφικό τρόπο . Αν είχε θα έμοιαζε κάπως έτσι.


QjAck Control (Jack)

Ένα άλλο σύστημα να φτιάξεις τέτοιες σωληνώσεις είναι μέσα απο το gstreamer. Μερικά παραδείγματα

Οπότε κάνεις ουσιαστικά workflow programming.

Τώρα με αυτά δεν έχω παίξει, καθώς δεν είναι ο τομέας μου. Το κομμάτι ήχος και Linux είναι μια πονεμένη ιστορία για επαγγελματίες, αλλά όπως βλέπεις θέλει κάτι παραπάνω από ένα απλό “τι το θέλουμε το pulseaudio έχουμε το alsa”.

Αν καταφέρεις να το κάνεις ή αν ξέρει κανένας άλλος θα χαρώ να δώ ένα οδηγό :slight_smile:

1 «Μου αρέσει»

Βρήκα αυτό για PulseAudio
https://github.com/futpib/pagraphcontr

Κατάφερα να το τρέξω (δεν υπάρχει έτοιμο αρχείο deb) και ίσως φανεί χρήσιμο στο να φτιάξεις/δεις το pipeline

1 «Μου αρέσει»

@Asfodelus
Σου ξεφυγαν δυο γραμματακια :slight_smile:

2 «Μου αρέσει»

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

Από όταν πρωτοείδα το pavucontrol ήξερα πως είναι μία πολύ δυνατή βάση που όμοια της δεν υπάρχει στα Windows. Ο έλεγχος που έχεις στον ήχο είναι εξαιρετικός. Ενώ αυτό περί διαδικτυακού ήχου που το βλέπω για πρώτη φορά σήμερα, είναι απλά επικό και όποιος το σκέφτηκε είναι πολύ μεγάλος μάστορας.

Τελικά και με τη βοήθεια του παραπάνω documentation ψιλοκατάφερα να κάνω τη φάση να παίξει για λίγο, αλλά μετά κάπως σταμάτησε ή οι φίλοι μου δεν καταλάβαιναν τι άκουγαν οπότε δεν μπορούσα να καταλάβω και εγώ αν συνεχίζει να λειτουργεί η φάση που έστησα.

Πάντως τα βήματα συμπυκνώνονται σε αυτές τις εντολές:

pacmd load-module module-null-sink sink_name=sink1
pacmd load-module module-combine-sink sink_name=combined sink_properties=device.description=combined slaves=sink1,[alsa.outpute device π.χ. ακουστικά]
pacmd load-module module-loopback source=[alsa input device π.χ. μικρόφωνο] sink=sink1

Επίσης η εντολή: pacmd list | egrep '^\s+name: .*' βοηθάει να βρούμε τα ονόματα των συσκευών alsa για τις παραπάνω εντολές.

Ουσιαστικά:

  1. Φτιάχνεις ένα Null sink.
  2. Φτιάχνεις ένα combined output όπου συνδυάζεις το Null sink από το προηγούμενο βήμα με το output device που θες να μιξάρεις
  3. Φτιάχνεις ένα Loopback από το μικρόφωνο στο Null sink.
  4. Ρυθμίζεις τις εφαρμογές που θες να ακούγονται ,π.χ. το Firefox, να βγάζουν τον ήχο τους στο Combined.
  5. Μετά βάζεις ως μικρόφωνο ή το combined ή το monitor του alsa output ή το alsa output δεν θυμάμάμαι πιο δούλεψε σωστά. Νομίζω το combined.

Υ.Γ. αν και μαρκάρω αυτή την απάντηση ως λύση στην πραγματικότητα τα άρθρα που μοιράστηκε παραπάνω ο @Asfodelus είναι αυτά που βοήθησαν στο να βρεθεί, οπότε τον ευχαριστώ ιδιαιτέρως.

1 «Μου αρέσει»

Στην πραγματικότητα είναι μια τεχνολογία ποιο παλιά απο την SoundBlaster και το mp3. Ακριβώς επειδή μια κάρτα ήχου (η μια κάρτα γραφικών) ήταν πανάκριβη ήθελες να την χρησιμοποιήσεις δικτυακά. Θυμάμαι μόνο ένα από τα Sun είχε δυνατότητα να παίξει ήχο, και έστελνες εκεί.

Μπράβο σου που κατάφερες και έβγαλες μια άκρη από τα παραπάνω μπερδεμένα.

1 «Μου αρέσει»

Αυτό το νήμα έκλεισε αυτόματα 2 ημέρες μετά την τελευταία απάντηση. Δεν επιτρέπονται πλέον νέες απαντήσεις.