Inversion d'un signal numérique en .wav
Bonjour,
Je souhaiterais faire une petite manip avec python : j'aimerais faire de la réduction active du son numériquement, le principe est très simple : il suffit d'acquérir le son dans un fichier wav, ensuite de créer son spectre opposé qui serait inversé et de l'envoyer en sortie pour 'annuler' le premier son. Pour cela j'aurais besoin de manipuler les fichiers wav, j'ai vu qu'il existait un module wave qui permettait de le faire, en revanche j'ai du mal à le maitriser. Sauriez-vous comment ouvrir un tel fichier en python, et l'exploiter (comment se présente la structure d'un tel fichier? Est-ce qu'on a une liste de valeurs qui correspondent au signal comme on pourrait voir sur Audacity...).
Ensuite je pourrais changer les valeurs des différents harmoniques afin de créer mon signal de sortie.
Si quelqu'un peut m'aider ça serait top!
Merci et bonne fin d'après-midi:D.
Réduction active, spectre inutile!
Bonjour,
Alors certes, si on veut faire la réduction active d'un son x(t), il est en effet, possible de calculer son spectre X(f), de prendre l'opposé -X(f), puis de faire la transformation inverse pour l'envoyer dans les enceintes.
Mais pourquoi calculer le spectre??? La transformée de fourier étant linéaire, inutile de l'utiliser pour ça! Il suffis d'envoyer -x(t) sans calculer le spectre!
Néanmoins, il est possible de faire ce que tu veux en quelques lignes grace à cutcutcodec:
Code:
1 2 3 4 5 6 7 8 9
|
from cutcutcodec.core.io import read, write
from cutcutcodec.core.filter.audio.equation import FilterAudioEquation
with read("fichier_audio.wav") as container:
stream = container.out_streams[0]
# stream_inv = FilterAudioEquation([stream], "-fc_0").out_streams[0] # cas mono
# stream_inv = FilterAudioEquation([stream], "-fl_0", "-fr_0").out_streams[0] # cas stéréo
stream_inv = FilterAudioEquation([stream], *(f"-{c}_0" for c, _ in stream.layout.channels)).out_streams[0] # cas général
write([stream_inv], "inv.wav", [{"encodec": "pcm_s16le", "rate": stream.rate}]) |