2009-07-07 9 views
2

Ich habe ein Programm, das PCM-Daten von einem Webserver herunterlädt, den es später verwendet, um über einen Standard-PCM-Player zu spielen. Ich möchte in der Lage sein, Benutzern zu erlauben, die Tonhöhe der PCM-Daten zu ändern, während es gespielt wird.PCM Data Pitch Änderung in C#

Weiß jemand, wie man das macht?

Antwort

1

Ich kenne keine digitale Signalverarbeitungs-Bibliothek für C#, aber dies scheint eine vollständige Quelle Probe für Tonhöhe in .net Verschiebung ist .:
http://sites.google.com/site/mikescoderama/pitch-shifting

+0

Hat jemand diesen Algorithmus mit Erfolg verwendet? Ich kann es nicht funktionieren lassen – John

2

Die einfachste Lösung ist es, den Sound wiedergeben mit einer höheren Sampling-Rate als es aufgezeichnet wurde - das Abspielen einer 22-kHz-Datei bei 44 kHz verdoppelt die Tonhöhe. Sie können dasselbe erreichen, indem Sie nur einige Samples aus dem Sound wegwerfen (schlechte Qualität) oder den Sound neu sampeln (gute Qualität, wenn ein guter Algorithmus wie Sinc-Interpolation verwendet wird).

Aber es gibt eine Abhängigkeit - das Ändern der Tonhöhe durch die Wiedergabe mit verschiedenen Abtastraten ändert nicht nur die Tonhöhe, sondern auch die Länge des Tons. Es ist möglich, die Dauer und die Tonhöhe unabhängig voneinander zu ändern, aber das ist nicht so einfach und beinhaltet eine beträchtliche Menge an Einzelverarbeitung, um eine gute Qualität zu erreichen. Dies geschieht normalerweise im Frequenzbereich unter Verwendung von Fast-Fourier-Transformationen.