2009-07-07 6 views
2

J'ai un programme qui télécharge des données PCM à partir d'un serveur Web, qu'il utilise plus tard pour jouer à travers un lecteur PCM standard. Je veux être en mesure de permettre aux utilisateurs de changer la hauteur des données PCM pendant qu'elles sont jouées.Changement de hauteur de données PCM en C#

Est-ce que quelqu'un sait comment faire cela?

Répondre

1

Je ne sais pas la bibliothèque de traitement de signal numérique pour C#, mais cela semble être un échantillon source complet pour pitch shifting en .net .:
http://sites.google.com/site/mikescoderama/pitch-shifting

+0

Quelqu'un a utilisé cet algorithme avec succès? Je suis incapable de le faire fonctionner – John

2

La solution la plus simple est de lire le son à un taux d'échantillonnage plus élevé que celui enregistré - la lecture d'un fichier de 22 kHz à 44 kHz doublera la hauteur. Vous pouvez obtenir la même chose en jetant juste quelques échantillons du son (mauvaise qualité) ou en rééchantillonnant le son (de bonne qualité si un bon algorithme comme l'interpolation sinc est utilisé).

Mais il y a une dépendance - changer la hauteur en jouant à différents taux d'échantillonnage ne changera pas seulement la hauteur, mais aussi la longueur du son. Il est possible de changer la durée et la hauteur de manière indépendante, mais ce n'est pas si simple et implique une bonne quantité de traitement pour obtenir une bonne qualité. Il est généralement effectué dans le domaine fréquentiel à l'aide de transformations rapides de Fourier.