J'écris un script qui utilise sox pour m'enregistrer en train de parler. Maintenant, j'ai besoin de sox pour attendre qu'il détecte le son avant de commencer l'enregistrement, et je l'ai compris. Mais j'ai aussi besoin de sox pour sortir une fois qu'il y a eu un silence pendant au moins 3 secondes. Comme c'est le cas maintenant, je dois tuer manuellement sox une fois que j'ai fini de parler, sinon sox attend juste à nouveau que je parle un peu plus, en ajoutant au fichier de sortie (ce n'est pas ce que je veux). Voici la commande d'enregistrement que j'utilise maintenant:
rec /tmp/recording.flac rate 32k silence 1 0.1 3% -1 3.0 3%
Encore une fois, juste pour être clair, Sox devrait attendre que je commence à parler, puis enregistrer jusqu'à ce que j'arrête de parler, puis le programme sox devrait quitter.
J'ai encore modifié les idées ci-dessus. Il enregistre pour toujours, enregistre tout le bruit jusqu'à ce que (grossièrement) une seconde de silence soit rencontrée. Alors:
(Fait pour un petit répéteur d'écho UHF / 2 mètres très pratique)
la source
J'ai trouvé une sorte de méthode fragile qui résout en quelque sorte ce problème.
J'ai remarqué que lorsqu'un silence est détecté, sox n'ajoutera naturellement rien de plus au fichier jusqu'à ce qu'il entende plus de son. J'ai donc décidé que je pouvais essayer de profiter de ce fait.
Tout d'abord, je démarre l'enregistreur de son de sox en arrière-plan:
Ensuite, j'obtiens le PID du processus d'enregistrement avec:
p=$!
Ensuite, je donne au processus d'enregistrement une seconde pour terminer le démarrage, puis j'attends que le fichier commence à se développer.
Après la rupture de cette boucle, cela signifie que le son a été détecté. Alors maintenant, je crée une autre boucle pour attendre que les données cessent d'être ajoutées au fichier (cela se produira une fois que sox détectera à nouveau le silence).
Maintenant, je dois juste quitter
rec
:Et c'est tout. Voici le script terminé:
Maintenant, je préférerais une façon meilleure et plus stable de le faire, mais cela devra fonctionner pour l'instant.
la source
Celui-ci écoute pour toujours, enregistre uniquement les derniers sons jusqu'à ce qu'il entende une seconde de silence, puis écrit le fichier, l'estampille et redémarre:
la source
while true
boucles