29 votes

Comment générer une note de guitare

De retour à un étudiant de première année de programmation de logiciels de classe, nous avons dû écrire un programme qui permettrait de simuler le son d'une guitare arracher.

Je peux faire pur péché vagues tous les jours, mais je suis en train d'essayer de se rappeler comment faire un bruit comme celui d'une guitare arracher. Je me souviens qu'il avait quelque chose avec l'aide de random() et une atténuation constante ajoutée à la péché vague, mais je ne me souviens pas des détails.

21voto

Daniel Brückner Points 36242

C'est vraiment un problème difficile à générer des sons synthétiques que son naturel. Il existe de nombreuses techniques simples, certains vraiment complexe. Pour obtenir de bons résultats, vous devez utiliser l'une de la des algorithmes plus complexes.

  • La synthèse soustractive
  • La synthèse Additive
  • La synthèse granulaire
  • Synthèse par table d'ondes
  • Modulation de la fréquence de synthèse
  • Synthèse par distorsion de Phase
  • Synthèse de modélisation physique
  • Synthèse par échantillonnage
  • Sous-harmoniques de synthèse

Ce sont quelques-synthèse des méthodes provenant de Wikipedia. Modélisation physique peut produire de bons sons, mais cela montre la complexité de la méthode - l'idée est simple, la mise en œuvre difficile.

Vous devriez probablement commencer avec la synthèse additive. Pour cela il suffit d'ajouter des ondes sinusoïdales de fréquence fondamentale et d'entier se multiplie. Par exemple 440 Hz, 880Hz, 1320 Hz, ... L'amplitude devrait diminuer de façon exponentielle avec la fréquence. Des informations sur la structure des composants est mieux trouvés dans des revues scientifiques à propos de la musique instrument d'analyse. Enfin, vous devez moduler l'amplitude du signal avec un timevarying enveloppe. La structure pour une guitare peut être trouvée dans les documents mentionnés, trop.


Les liens à partir de cdonner (Pinçant une Corde de Guitare - Karplus-Strong algorithme) et Dervin Thunk (modélisation Physique) semble prometteur. Vraiment un simple rapprochement de physique complet modélisation à l'aide d'équations différentielles. Peut-être assez limité pour cordes de la guitare et d'autres instruments semblables, mais exactement ce que vous cherchez et sûrement plus simple à faire que le paramétrage d'un modèle additif. Je vais essayer moi-même si je l'ai trouver un peu de temps le week-end; vraiment sorti de ce que l'on peut obtenir de l'algorithme.

17voto

cdonner Points 17403

4voto

Adam Hawes Points 4153

Guitare synthèse est particulièrement épineux problème en raison du nombre presque infini de façons de se doigter la manche, et le plus passionnant de la chaîne.

Essentiellement, la chaîne va osciller à sa fréquence de base plus un certain nombre d'harmoniques avec beaucoup beaucoup moins d'énergie. Je vous recommande de regarder la transformée de Fourier de la parcelle d'un seul onu s'inquiétait de la chaîne de choisir.

Vous pouvez obtenir de l'état d'équilibre sonore de la chaîne d'assez près par l'ajout dans le bon harmoniques, mais vous avez aussi besoin de se rappeler de simuler l'attaque, sustain et de la décadence des périodes correctement: l'amplitude va augmenter fortement (et probablement de pointe) lorsque la chaîne est choisi. Il va descendre un peu et de sustain (maintien pratiquement constante) pour une courte période et, enfin, la carie sur une plus longue période. Vous avez besoin pour obtenir ce droit pour qu'il sonne comme une guitare et pas autre chose.

2voto

gnovice Points 70970

En tant que point de départ, vous pouvez regarder quelques formes d'ondes de sons de guitare. Je voudrais consulter cette publication par Bob Sturm sur le MathWorks l'Échange de Fichier. On dirait qu'il contient un tas de traitement du signal démos, et il y a quelques .les fichiers wav inclus pour de nombreux appareils, y compris une guitare. Vous pouvez les charger dans MATLAB avec WAVREAD, et puis commencer à comprendre comment vous pouvez reproduire la forme d'onde (c'est à dire ce genre de décroissance au cours du temps que vous allez utiliser, etc.).

2voto

geofftnz Points 5844

Considérant qu'il était une 1ère année (j'ai dû chercher "Freshman") de la programmation de la classe, mon hypothèse serait qu'ils étaient à la recherche d'un simple pincées de chaîne de filtre, plutôt que d'un précis de simulation physique d'une guitare (même si cela pourrait probablement que vous obtenez un crédit supplémentaire). C'est une affectation lors de l'étude numérique de traitement du signal.

Le filtre se compose d'une boucle de retard qui se nourrit par l'intermédiaire d'un filtre passe-bas et est mélangé à l'entrée. Pour jouer une note, vous pouvez envoyer un court, large-spectre du signal dans l'entrée (par exemple: une rafale de bruit blanc). Ce voyage autour de la boucle de retard, la perte de certaines de ses composantes haute fréquence à chaque fois. La longueur de la boucle de retard définit la fréquence de résonance de la chaîne.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X