Wenn Sie ein Musikstück mit einer langsameren Geschwindigkeit abspielen, wird die Tonhöhe (Frequenz) verringert. Gibt es ein Werkzeug und eine Theorie, um das Abspielen von Songs zu verlangsamen, während die Frequenz gleich bleibt? Ich nehme an, man kann eine Fourier-Transformation mit Fenster oder eine Wavelet-Transformation durchführen. Es scheint, dass man entweder die Fenstergröße vorab auswählen oder die Wavelet-Basis dynamisch auswählen muss. Gibt es dafür eine spezifische und detaillierte Theorie und Anwendung?
10
Antworten:
Ja, einige von uns können es tun, Sie können beschleunigen oder verlangsamen, ohne die Tonhöhe zu beeinflussen, einige Leute nennen diese Anwendungen von Time Stretch, es gibt verschiedene Möglichkeiten, dies zu tun, Sie können es im Frequenzbereich oder im Zeitbereich tun, Sie müssen wählen Was für Sie am besten ist, finden Sie einige Vor- und Nachteile von jedem.
Zeitbereich:
Im Zeitbereich können Sie einige Techniken ausprobieren wie:
Vorteile: Ist schnell, einige Algorithmen sind leicht zu verstehen, gute Qualität in monophonen Klängen.
Nachteile: Im Allgemeinen benötigen Sie eine sehr schöne Tonhöhenspur, um an der richtigen Position zu spleißen. Dies ist schwierig :-( Wenn Ihre Tonhöhenspur in Poliphonic-Sounds ausfällt oder nicht funktioniert, verursachen diese Algorithmen viele Störungen / Artefakte im Ausgangston.
Frequenzbereich:
Alle Zeitspannen, die ich im Frequenzbereich kenne, basieren auf Phasenvocodertechniken .
Vorteile: Funktioniert in polyphonen oder monophonen Klängen.
Nachteile: Kann schmerzhaft sein, die ganze Mathematik zu verstehen, die Implementierung ist ein bisschen schwierig, ist nicht so schnell wie Zeitbereichscodes, für Sprache bevorzuge ich Zeitbereichsergebnisse, einige Tricks zur Verbesserung des Ergebnisses des Standardphasen-Vocoders werden nicht geteilt.
Ich kann sagen, dass das Fenster und die Hopfengröße einer der Schlüssel für die Qualität des Phasenvocoders sind. Im Allgemeinen wählen wir eine
4x
Überlappung zur Resynthese. Ein Hann-Fenster4096
reicht für meine Ohren aus (natürlich, wenn Sie Rechenleistung für diese Größen haben). Der Standard-Phasenvocoder kann einige Nachhalleffekte hinzufügen. Um diese Art von Problemen zu vermeiden, müssen Sie möglicherweise die Phase sperren.Daten finden Sie in der Zeitung Miller Puckette and Portnoff
quelle
44100 * 60 = 2646000
vergessen Punkte auf einmal und zu verarbeiten, wenn man so jeden Versuch der Echtzeit - Verarbeitung , wie dieses ,Das Werkzeug / die Theorie, die Sie beschreiben, ist wirklich ein großes Forschungsgebiet in der Musiktechnologie, das allgemein als Audio-Zeitskalenmodifikation bezeichnet wird. Eine große Komponente dieses Feldes besteht darin, wie Sie hörbare Änderungen der Frequenz nach dem Dehnen der Zeit verhindern können. Dies kann je nach den Einschränkungen oder Zielen Ihrer Anwendung sowohl mit Frequenz- als auch mit Zeitbereichsmethoden angegangen werden. Der Wikipedia-Eintrag für Audio-Zeitskalen- / Tonhöhenänderung ist ein guter Ausgangspunkt.
Wenn Sie einen Ansatz auf Frequenz- / Wavelet-Basis verfolgen möchten, wirken sich Ihre Fenstergröße und die Wahl der Basis darauf aus, wie gut Sie das Signal lokalisieren können. Um die STFT als Beispiel zu verwenden, funktioniert ein langes Fenster gut für stationäre Sinuskurven, zerstört jedoch Ihre Transienten. Ein kürzeres Fenster bietet ein bevorzugtes Einschwingverhalten auf Kosten der Lokalisierung im Frequenzbereich. Die Leistung anderer Wavelet-Basen hängt von der Art der Projektion Ihres Signals auf die Basis ab.
quelle
Unten finden Sie einen Link zu einer einfachen und wertvollen Tutorial-Funktion in C ++ (smbPitchShift.cpp) von Stephan M. Bernsee, mit der Sie Musik verlangsamen oder beschleunigen können, ohne ihre Tonhöhe zu ändern.
Er hat diesen Code unter der The Wide Open License (WOL) veröffentlicht. In meiner Anwendung konnte ich seine Funktion anpassen, um Musik in Echtzeit zu verlangsamen - das heißt, während ich eine MP3-Datei abspielte und gleichzeitig die Tonhöhenerkennung für dieses MP3-Signal durchführte.
Ich habe auch einen Link zu Bernsees Website eingefügt, der seine detaillierten Beschreibungen zum Time-Stretching und Pitch-Shifting von Audiosignalen wie Musik enthält.
https://github.com/AndyA/BatPhone/blob/master/pitchshift.c
http://blogs.zynaptiq.com/bernsee/time-pitch-overview/
quelle
time stretch
, der ursprüngliche Code giltPitch Shift
. In diesem Fall müssen Sie die Zeitskalenänderung anwenden, die Sie kombinierenPitch Shifit + Resample (interpolation)
müssen. Der Bernsee-Code funktioniert gut mit einem Fenster mit einer Größe, mit der4096
Sie eine Oktave (oben oder unten) verschieben können. Dies bedeutet, dass Sie dementsprechend nur mit Faktoren zwischen 2,0x und 0,5x eine Zeitskala mit einer guten Qualität erstellen können. Ein gut gebauter Phasenvocoder kann bei gleicher Fenstergröße bessere Ergebnisse erzielen und diese extrapolieren Faktoren mit besserer Qualität8192
in den Codes von der Download-Seite. Sie müssen also 4x mehr Punkte für die Verarbeitung tun Ich komme zurück, um zu sagen, dass Sie mit einer halben Fenstergröße8192/2=4096
dasselbe mit einigen Geheimnissen des Phasenvocoders tun können. Der Punkt hier ist, dass Sie die Qualität mit viel weniger Verarbeitung beibehalten können.