J'essaie de développer une méthode statique en Java pour générer une tonalité pure.
Dans le début, il semblait facile, mais quand j'ai essayé d'écrire le double tableau vers les haut-parleurs que j'apprécie trop de harmoniques. p>
Je le teste avec un analyseur de spectre (Sonomètre), puis j'ai également dessiné dans un graphique la matrice résultante. Quand je l'ai fait, j'ai vu le problème: p>
Il s'agit de la forme de vague, elle est abrupte. Je veux lisser ce tableau, mais je ne sais pas comment le faire. P>
Ceci est le code: p>
4 Réponses :
Vous devez calculer l'angle et le sinus pour chaque valeur de 'BufferLength', pas de chaque deuxième valeur. Ce que vous faites est essentiellement sous-échantillonnage avec l'interpolation. Je ne vois aucune "symétrie" à ce sujet. P>
Peut-être est aussi simple que ceci: pour (int i = 0; i
Je ne suis pas vraiment sûr, mais je pense que je suis confus à propos de @ejp parlait de: j'avais besoin d'obtenir chaque valeur étape par étape. Symétrie C'était une méthode rapide mais pire sur la qualité du signal.
Ceci est le nouveau code: p>
Cette mise en œuvre est correcte, mais, d'autre part, je vois le gros problème à ce sujet. Les harmoniques que j'obtiens sont plus liées sur la phase de forme d'onde. Il est tout à fait nécessaire à l'aide de fréquences centrales divisibles par samplate pour le premier échantillon dans un tampon était le prochain exemple de dernier échantillon dans le tampon précédent. Je pense que c'est plus ou moins une explication compréhensible, n'est-ce pas?
Finalement, je l'ai trouvé! F0 doit être un multiple de (fs / tampersize). À propos, F0 ne sera pas un entier plutôt un double ou presque meilleur un flotteur pour gagner un peu de vitesse.
F0 doit seulement être un double. Si ce serait un flotteur, nous perdons parfois des informations.
Écrire la même valeur à deux emplacements consécutifs introduit une étape dans la forme d'onde. Toute déviation d'une courbe sine lisse ajoute des harmoniques. Si vous voulez une tonalité pure, ne faites pas cela. Si vous voulez faire cela, ne vous attendez pas à une tonalité pure. P>
Ceci est le code définitif: un principal () pour le tester: p>
Cela ne ressemble pas à un problème de programmation Java; Je ne vois rien de mal avec le code Java. Il faut probablement répondre aux personnes plus familiarisées avec la génération de son. Peut-être que la "forme d'onde" et les étiquettes "sonore-synthèse" seraient plus utiles, bien qu'il n'y ait qu'une poignée de suiveurs.