J'essaie d'effectuer une mise à l'échelle linéaire d'une entrée audio, avec la même mise à l'échelle sur chaque canal.Mise à l'échelle du son Java
L'effet global est que le flux d'entrée diminue graduellement en amplitude jusqu'à ce qu'il soit silencieux. Donc, mon premier échantillon restera le même et mon dernier échantillon sera égal à 0 en termes d'amplitude. Je me demandais comment vous implémentez cela. Jusqu'ici, voici ce que j'ai du code de mise à l'échelle et je me demandais si vous deviez encore mettre à l'échelle l'échantillon de façon à ce qu'il se situe entre les 16 chiffres de la gamme de complément à deux chiffres.
for (int i=0; i<data.length; ++i){ // data[i] is sample in intger form
data[i] = (int) (data[i]*(something/something));
}
Il serait utile si la mise à l'échelle d'un facteur spécifique pouvait être expliquée?
Merci!
Quelle est votre véritable question? Si vous avez correctement fait la mise à l'échelle et que vous réduisez seulement l'amplitude, elle sera automatiquement dans une plage de 16 bits. Cependant, votre code est incorrect - pourquoi avez-vous besoin de multiplier l'échantillon par la valeur maximale - ce qui en fait une plage de 32 bits et beaucoup plus fort? Et que se passe-t-il si vous divisez par zéro dans la première itération de votre boucle? Avez-vous même exécuté le code? –
@erwin bolwidt ma question est de savoir comment vous mettre à l'échelle linéairement à 0. Est-ce que je juste diviser chaque échantillon par 0? – Hawwa