La lecture d'un morceau de musique audio à une vitesse plus lente réduirait sa hauteur (fréquence). Existe-t-il un outil et une théorie pour ralentir la lecture du morceau tout en conservant la même fréquence? Je suppose que l'on peut faire une transformée de Fourier fenêtrée ou une transformée en ondelettes. Il semble que l'on doive soit présélectionner la taille de la fenêtre, soit choisir dynamiquement la base d'ondelettes. Existe-t-il une théorie et une application spécifiques et détaillées pour ce faire?
10
Réponses:
Oui, certains d'entre nous peuvent le faire, vous pouvez accélérer ou ralentir sans affecter le pitch, certains gars appellent ces applications de Time Stretch, il existe différentes façons de le faire, vous pouvez le faire dans le domaine fréquentiel ou temporel, vous devrez choisir ce qui vous convient le mieux, vous trouverez quelques avantages et inconvénients de chacun.
Dans le domaine temporel:
Dans Time Domain, vous pouvez essayer certaines techniques comme:
Avantages: est rapide, certains algorithmes sont faciles à comprendre, de bonne qualité dans les sons monophoniques.
Inconvénients: en général, vous aurez besoin d'une très belle piste de pitch pour épisser dans la bonne position, c'est difficile à faire :-(, donc si votre piste de pitch échoue ou ne fonctionne pas dans les sons poliphoniques, ces algorithmes donneront beaucoup de problèmes / artefacts dans le son de sortie.
Domaine de fréquence:
Tous les étirements temporels que je connais dans le domaine des fréquences sont basés sur des techniques de vocodeur de phase .
Avantages: Fonctionne avec des sons polyphoniques ou monophoniques.
Inconvénients: peut être douloureux de comprendre tous les calculs, la mise en œuvre est un peu difficile, n'est pas aussi rapide que les codes de domaine temporel, pour la voix, je préfère les résultats dans le domaine temporel, certaines astuces pour améliorer le résultat du vocodeur de phase standard ne sont pas partagées.
Je peux dire que la fenêtre et la taille du saut sont l'une des clés de la qualité du vocodeur de phase, généralement nous choisissons le
4x
chevauchement pour la resynthèse, une fenêtre hann de taille4096
suffit pour mes oreilles (bien sûr si vous avez une puissance de traitement pour ces tailles) , le vocodeur de phase standard peut ajouter des effets réverbérants, pour essayer d'éviter ce genre de problèmes, vous devrez peut-être verrouiller la phase.Pour les données, jetez un œil dans le papier Miller Puckette et Portnoff
la source
44100 * 60 = 2646000
points à la fois et traiter, alors oubliez toute tentative de traitement en temps réel comme celle-ci ,L'outil / la théorie que vous décrivez est en réalité un vaste domaine de recherche en technologie musicale, généralement appelé modification de l'échelle de temps audio. Une grande partie de ce champ est de savoir comment vous pouvez empêcher les changements audibles de fréquence après étirement du temps. Cela peut être abordé avec des méthodes à la fois fréquentielles et temporelles, en fonction des contraintes ou des objectifs de votre application. L'entrée wikipedia pour la modification de l'échelle de temps / hauteur audio est un bon point de départ.
Si vous souhaitez poursuivre une approche utilisant la base fréquence / ondelettes, la taille de votre fenêtre et le choix de la base affecteront votre capacité à localiser le signal. Pour utiliser le STFT comme exemple, une longue fenêtre fonctionnera bien pour les sinusoïdes stationnaires mais détruira vos transitoires. Une fenêtre plus courte fournira une réponse transitoire préférable au détriment de la localisation dans le domaine fréquentiel. Les performances des autres bases d'ondelettes dépendront de la nature de la projection de votre signal sur la base.
la source
Vous trouverez ci-dessous un lien vers une fonction de didacticiel simple et utile en C ++ (smbPitchShift.cpp) de Stephan M. Bernsee, qui peut ralentir ou accélérer la musique sans changer sa hauteur.
Il a publié ce code sous la licence The Wide Open (WOL). Dans mon application, j'ai pu adapter sa fonction pour ralentir la musique en temps réel - c'est-à-dire tout en lisant un fichier mp3 et en faisant en plus la détection de hauteur sur ce signal mp3 en même temps.
J'ai également inclus un lien vers le site Web de Bernsee qui contient ses descriptions détaillées sur le Time-Stretching et Pitch-Shifting des signaux audio, tels que la musique.
https://github.com/AndyA/BatPhone/blob/master/pitchshift.c
http://blogs.zynaptiq.com/bernsee/time-pitch-overview/
la source
time stretch
, le code d'origine s'appliquePitch Shift
, dans ce cas pour appliquer la modification de l'échelle de temps que vous devrez combinerPitch Shifit + Resample (interpolation)
, le code du Bernsee fonctionne bien en utilisant une fenêtre de taille que4096
vous pourrez changer de hauteur d'une octave (au-dessus ou en dessous) , cela signifie qu'en conséquence, vous ne pourrez faire une échelle de temps avec une bonne qualité qu'en utilisant des facteurs compris entre 2,0x et 0,5x, un vocodeur de phase bien construit peut obtenir de meilleurs résultats en utilisant la même taille de fenêtre, et vous pourrez les extrapoler facteurs avec une meilleure qualité8192
dans les codes de la page de téléchargement, vous devez donc faire 4x plus de points pour le traitement , Je reviens pour dire qu'avec une demi-taille de fenêtre,8192/2=4096
vous pouvez faire la même chose en utilisant certains secrets du vocodeur de phase, le point ici est que vous pouvez garder la qualité avec beaucoup moins de traitement.