Je crée des sons dans mon programme Java. Il existe donc un certain nombre de modules d'oscillateurs qui produisent les échantillons dont j'ai besoin pour pouvoir jouer plus d'une tonalité à la fois. Ces échantillons sont ajoutés et joués. Si je sélectionne une faible amplitude, par ex. 100, tout fonctionne très bien (normalisée dans Audacity):Java - Générer des sons avec des amplitudes différentes donne des tons différents
Mais si je sélectionne une amplitude supérieure, dans ce cas Short.MAX_VALUE, le ton créé ressemble et sonne étrange:
Les échantillons sont créés ici (source: http://www.wolinlabs.com/blog/java.sine.wave.html):
short value;
if (type == TYPE_SINE)
{
cycleIncrease = frequency/parent.getSamplingRate();
value = (short) (amplitude * Math.sin(2 * Math.PI * cyclePosition));
cyclePosition += cycleIncrease;
if (cyclePosition > 1)
cyclePosition -= 1;
return value;
}
Avec sa ondes wtooth j'ai le même problème:
else if (type == TYPE_SAW)
{
cycleIncrease = frequency/parent.getSamplingRate();
double doubleValue = cyclePosition - Math.floor(cyclePosition);
cyclePosition += cycleIncrease;
value = (short) (amplitude * doubleValue);
if (cyclePosition > 1)
cyclePosition -= 1;
return value;
}
amplitude
a la valeur je l'ai mentionné ci-dessus, donc dans ces deux cas 100
et Short.MAX_VALUE
.
Les échantillons sont additionnés de cette façon, où sum
est l'échantillon de sortie et value
est l'échantillon calculé (0 si aucune tonalité est jouée):
int n = 0;
int sum = 0;
for (Wire inputWire:inputWires)
{
short value = inputWire.getNextSample();
if (value != 0)
{
n += 1;
}
sum += value;
x++;
}
if (n != 0)
sum = sum/n;
J'ai aussi assuré qu'il ya juste la un échantillon d'un oscillateur si un seul son est joué, donc sum = value
. Mais je ne comprends pas pourquoi différentes tonalités sont créées pour des amplitudes différentes avec le même code, alors pourquoi cela se passe-t-il?
J'ai aussi une deuxième question: Si je termine la lecture d'un sinusoïde avec une faible amplitude, je peux entendre un bruit court, qui ressemble à ceci:
D'où vient et comment puis-je le réparer?
Nous vous remercions de votre aide!