pvsdemix — Séparation spectrale de sources stéréo basée sur l'azimut.
Séparation spectrale de sources stéréo basée sur l'azimut, avec pour résultat l'annulation d'une spatialisation. Cet opcode implémente l'algorithme de Discrimination Azimutale et Resynthèse (ADRess) développé par Dan Barry (Barry et Al. "Sound Source Separation Azimuth Discrimination and Resynthesis". DAFx'04, Univ. de Naples). La séparation de sources, ou démixage, est contrôlée par deux paramètres : une position d'azimut (kpos) et une largeur de sous-espace (kwidth). Le premier est utilisé pour localiser les crêtes spectrales des sources individuelles dans un mélange stéréo, tandis que le second élargit l'espace de recherche en incluant/excluant les crêtes autour de kpos. Ces deux paramètres peuvent être utilisés interactivement pour extraire les sources sonores d'un mélange stéréo. L'algorithme est particulièrement efficace avec les enregistrements de studio dans lesquels des instruments différents occupent des positions spatiales différentes ; c'est en fait un algorithme de d'annulation de spatialisation.
Avertissement | |
---|---|
Il est dangereux d'utiliser la même variable-f à la fois comme entrée et comme sortie des opcodes pvs. Ceci peut produire un comportement indéfini de certains de ces opcodes. Utilisez une variable différente à gauche et à droite de l'opcode. |
fsig -- flot pv de sortie
fleft -- flot pv d'entrée du canal de gauche.
fright -- flot pv d'entrée du canal de droite.
kpos -- la position centrale de la cible d'azimut qui sera démixée, de gauche à droite (-1 <= kpos <= 1). C'est l'inverse d'un contrôleur de pan-pot.
kwidth -- la largeur du sous-espace d'azimut qui détermine le nombre de points autour de kpos qui seront utilisés dans le traitement de démixage. (1 <= kwidth <= ipoints)
ipoints -- nombre total de points discrets qui vont diviser chaque côté de l'image stéréo. Ceci affecte au final la résolution du traitement.
L'exemple ci-dessous prend une entrée stéréo et la passe dans un traitement de démixage qui révèle une source située à ipos +/- iwidth points. On peut contrôler ces paramètres en temps réel (par exemple en utilisant des widgets FLTK ou le MIDI) pour une recherche interactive de sources sonores.
Note | |
---|---|
En ce qui concerne l'azimut kpos, il y a une image isolée près de l'azimut 0 qui, lorsque la source a une bonne intensité, peut être masquée. |
Exemple 823. Exemples
ifftsize = 1024 iwtype = 1 /* cleaner with hanning window */ ipos = -0.8 /* to the left of the stereo image */ iwidth = 20 /* use peaks of 20 points around it */ al,ar soundin "sinput.wav" flc pvsanal al, ifftsize, ifftsize/4, ifftsize, iwtype frc pvsanal ar, ifftsize, ifftsize/4, ifftsize, iwtype fdm pvsdemix flc, frc, kpos, kwidth, 100 adm pvsynth fdm outs adm, adm
Voici un exemple complet de l'opcode pvsdemix. Il utilise le fichier pvsdemix.csd.
Exemple 824. Exemple de l'opcode pvsdemix.
<CsoundSynthesizer> <CsOptions> ; Select audio/midi flags here according to platform -odac ;;;realtime audio out ;-iadc ;;;uncomment -iadc if realtime audio input is needed too ; For Non-realtime ouput leave only the line below: ;-o pvsdemix.wav -W ;;; for file output any platform </CsOptions> <CsInstruments> sr = 44100 ksmps = 32 nchnls = 2 0dbfs = 1 instr 1 ifftsize = 2048 iwtype = 1 kpos = p4 asig1 diskin2 "fox.wav",1,0,1 asig2 diskin2 "beats.wav",1,0,1 aL, aR pan2 asig1,0.25 aL1, aR1 pan2 asig2,0.75 if p5 == 0 then outs aL1+aL, aR1+aR else flc pvsanal aL1+aL, ifftsize, ifftsize/4, ifftsize, iwtype frc pvsanal aR1+aR, ifftsize, ifftsize/4, ifftsize, iwtype fdm pvsdemix flc, frc,kpos,20,100 adm pvsynth fdm adm *= 0.5 outs adm, adm endif endin </CsInstruments> <CsScore> ; pan choice i 1 0 5 0 0 ; bypass i 1 5 5 -0.5 1 ; fox i 1 10 5 0.5 1 ; beats e </CsScore> </CsoundSynthesizer>