2010-05-28 5 views
2

Vous vous demandez simplement s'il est possible de parcourir un fichier flac, mp3, wav, etc et d'éditer des parties, ou le fichier entier en supprimant des sections basées sur une plage de fréquences spécifique? Par exemple, j'ai un enregistrement d'un ami récitant un poème avec quelques instruments de percussion en arrière-plan. Est-ce que je peux écrire un programme C qui traverse tout le fichier et supprime tout sauf les voix (la fréquence de la voix humaine varie de 85 à 255 Hz, d'après ce que j'ai lu)?Est-il possible de modifier par programme un fichier son en fonction de la fréquence?

Merci d'avance pour vos idées!

+0

Je n'ai pas une bonne réponse pour vous, mais vous cherchez probablement quelque chose qui fera une transformation rapide de Fourier. –

+0

Je ne sais pas exactement comment fonctionne la programmation audio sur la forme d'onde, mais c'est quelque chose que j'aimerais étudier un jour. En attendant, si vous avez besoin de modifier un tel fichier, je vous recommande d'utiliser un ** filtre notch ** dans votre application d'édition audio préférée comme SoundForge (http://www.sonycreativesoftware.com/soundforgesoftware) ou Audacity (http: //audacity.sourceforge.net/). – JYelton

+0

J'ai presque fermé ceci comme appartient sur le super-utilisateur jusqu'à ce que je l'a relu et ai trouvé "écrivez un programme de C" – Earlz

Répondre

4

Cela est certainement possible, sinon le logiciel de mixage numérique n'existe pas.

Ce que vous demandez en réalité, c'est d'atténuer les plages de fréquence sur un fichier entier. En mode analogique, vous devez appliquer un filtre passe-bas et un filtre passe-haut (ou une autre combinaison de filtres) pour atténuer les fréquences. Dans le logiciel, vous résoudriez ce problème en écrivant un filtre numérique de sortes qui réduirait la sortie de diverses fréquences. Les fréquences seraient identifiées via un calcul FFT. Le plus rapide à faire serait d'utiliser une application d'édition audio et d'y appliquer les changements.

Il existe une bibliothèque audio appelée PortAudio qui peut fournir un support pour l'édition d'un flux audio au niveau numérique. Il est écrit en C, et a une API C.

+2

Vous n'avez pas besoin de FFT pour filtrer en fonction de la fréquence, bien que vous puissiez l'utiliser si vous le souhaitez. Les filtres passe-bas, passe-haut et passe-bande ont souvent des implémentations extrêmement simples n'exigeant que quelques ajouts et multiplications pour chaque échantillon. Voici un filtre simple [passe-haut] (http://en.wikipedia.org/wiki/High-pass_filter#Algorithmic_implementation). – sigfpe

1

SciPy peut faire toutes sortes de signal processing.

+0

Y at-il quelque chose dans Java ou C qui peut faire cela? –

+0

Dunno. Je n'y vais pas assez profondément. –

2

Si vous voulez tester des algorithmes de traitement audio, je suggère fortement Supercollider. C'est gratuit et a beaucoup de genres de filtre audio intégré. Mais l'élimination de la voix pourrait nécessiter des ajustements considérables. Supercollider vous permettra d'écrire du code piloté par divers paramètres, puis de raccorder ces paramètres à une interface graphique que vous pourrez modifier tout en fournissant des données en direct (ou enregistrées).

Même si vous voulez écrire du code C, vous apprendrez beaucoup en utilisant d'abord Supercollider. La plupart des filtres sont étonnamment faciles à implémenter en C, mais vous devrez écrire une certaine quantité de code d'infrastructure avant de pouvoir commencer.

En outre, j'ai appris beaucoup sur l'écriture de filtres audio numériques de this livre. Entre autres, il discute certaines des caractéristiques de human speech, ainsi que la façon de construire des filtres pour améliorer ou supprimer sélectivement certaines fréquences. Il fournit également le code C fonctionnel.

5

Pour répondre à l'exemple spécifique de l'OP: Je pense que votre compréhension de la fréquence de la voix humaine est fausse. Peut-être la fréquence fondamentale de la voix parlée masculine reste dans cette gamme (pour le chant de ténor, ou le discours ou le chant féminin, ou les cris, même le fondamental ira beaucoup plus haut, peut-être 500-1000 Hz). Mais cela n'a pas d'importance, car même si le fondamental est bas, les harmoniques qui créent les différents sons de voyelle iront jusqu'à 2000-4000 Hz ou plus. Et les fréquences qui définissent les consonnes "bruit" comme "t" et "s" vont tout le chemin vers le haut de la gamme audio, disons 5000-10000 Hz. La percussion remplit cette même plage audio, donc je doute que vous puissiez séparer la voix et les percussions en filtrant certaines fréquences à l'intérieur ou à l'extérieur.

1

Vous pouvez également utiliser MAX/MSP (mais c'est payé) ou PureData (c'est gratuit) pour travailler avec des algorithmes de musique, ils sont la base à partir de laquelle supercollider a été créé.Et sont d'excellents logiciels si vous voulez faire cela sur des environnements en temps réel.

Questions connexes