Comment générer une note de guitare

De retour dans une classe de programmation de logiciel de première année, nous devions écrire un programme simulant le son d’une guitare.

Je peux faire des vagues de pur péché toute la journée, mais j’essaie de me rappeler comment faire un son de plume de guitare. Je me souviens qu’il y avait quelque chose à utiliser avec random () et une constante de réduction ajoutée à la sinusite, mais je ne me souviens pas des détails.

Je pense avoir trouvé exactement ce que vous cherchiez: écrivez un programme simulant l’arrachement d’une corde de guitare à l’aide de l’algorithme Karplus-Strong .

Il est très difficile de générer des sons synthétiques qui paraissent naturels. Il existe de nombreuses techniques – certaines simples, d’autres très complexes. Pour obtenir de bons résultats, vous devrez utiliser l’un des algorithmes les plus complexes.

  • Synthèse soustractive
  • Synthèse additive
  • Synthèse granulaire
  • Synthèse par table d’ondes
  • Synthèse de modulation de fréquence
  • Synthèse de distorsion de phase
  • Synthèse de modélisation physique
  • Synthèse à base d’échantillons
  • Synthèse sous-harmonique

Voici quelques méthodes de synthèse tirées de Wikipedia . La modélisation physique peut produire de très bons sons, mais cela se voit dans la complexité de la méthode: l’idée est simple, la mise en œuvre difficile.

Vous devriez probablement commencer par la synthèse additive. Pour cela, ajoutez simplement des ondes sinusoïdales de la fréquence fondamentale et des multiplications entières. Par exemple, 440 Hz, 880 Hz, 1320 Hz, … L’amplitude devrait diminuer de façon exponentielle avec la fréquence. Les informations sur la structure des composants sont mieux connues dans les articles scientifiques sur l’parsing des instruments de musique. Enfin, vous devez moduler l’amplitude du signal avec une enveloppe timevarying. La structure de la guitare se trouve également dans les documents mentionnés.


Les liens de cdonner ( plumer une corde de guitare – algorithme Karplus-Strong ) et Dervin Thunk ( modélisation physique ) semblent prometteurs. Une approximation très simple de la modélisation physique complète avec des équations différentielles. Peut-être assez limité aux cordes de guitare et instruments similaires, mais exactement ce que vous recherchez et sûrement plus simple à faire que d’accorder un modèle additif. Je vais essayer moi-même si je trouve du temps le week-end; vraiment sorti ce que l’on peut sortir de l’algorithme.

La synthèse de la guitare est un problème particulièrement délicat en raison du nombre presque infini de façons de toucher le manche et d’exciter la corde.

Essentiellement, la corde oscillera à sa fréquence de base plus un nombre d’harmoniques avec beaucoup moins d’énergie. Je vous conseillerais de regarder le tracé de Fourier d’un médiator sans frettes.

Vous pouvez obtenir un son assez stable en ajoutant les harmoniques correctes, mais vous devez également vous rappeler de simuler correctement les périodes d’attaque, de maintien et de décroissance: l’amplitude augmentera fortement (et probablement maximale) lorsque la chaîne est choisi. Il va baisser un peu et se maintenir (généralement constant) pendant une courte période et pour finir, pourrir sur une plus longue période. Vous devez obtenir ce droit pour que cela sonne comme une guitare et pas autre chose.

Comme sharepoint départ, vous voudrez peut-être examiner certaines formes d’onde des sons de guitare. Je voudrais vérifier cette publication de Bob Sturm sur le MathWorks File Exchange. On dirait qu’il contient de nombreuses démos de traitement du signal et que certains fichiers .wav sont inclus pour de nombreux instruments, y compris une guitare. Vous pouvez les charger dans MATLAB avec WAVREAD , puis commencer à comprendre comment vous pouvez répliquer le signal (c.-à-d. Quel type de déclin vous allez utiliser, etc.).

Considérant que c’était une classe de programmation de 1ère année (je devais chercher “Freshman”), je suppose qu’ils recherchaient un simple filtre à cordes pincées plutôt qu’une simulation physique obtenez-vous un crédit supplémentaire). Ceci est une tâche courante lors de l’étude du traitement du signal numérique.

Le filtre consiste en une boucle à retard qui passe par un filtre passe-bas et est mélangée à l’entrée. Pour jouer une note, vous envoyez un signal court à large spectre dans l’entrée (par exemple: une rafale de bruit blanc). Cela contourne la boucle à retard, perdant à chaque fois certaines de ses composantes haute fréquence. La longueur de la boucle de délai définit la fréquence de résonance de la chaîne.

C’est une vieille question mais voici une réponse plus pratique pour ceux qui ne veulent pas / n’ont pas besoin de plonger profondément dans la théorie de la synthèse, etc.

Les membres de la CCRMA à Stanford ont créé un ensemble de classes C ++ pour la synthèse audio et les E / S audio.

Sous Windows, utilisez un apis Win32 MM (5 lignes de code).