Se avessi voluto per ridurre l'ampiezza di un file WAV del 25%, vorrei scrivere qualcosa di simile:Come faccio ad attenuare un file WAV con un dato valore di decibel?
for (int i = 0; i < data.Length; i++)
{
data[i] *= 0.75;
}
Un sacco di articoli che ho letto sulle tecniche audio, tuttavia, discutere l'ampiezza in termini di decibel. Capisco la natura logaritmica delle unità di decibel in linea di principio, ma non tanto in termini di codice reale.
La mia domanda è: se volessi attenuare il volume di un file WAV, diciamo, 20 decibel, come dovrei farlo in codice come nell'esempio sopra riportato?
Aggiornamento: formula (in base alla risposta di Nils Pipenbrinck) per attenuare per un determinato numero di decibel (inserito come un numero ad esempio positiva 10, 20 etc.):
public void AttenuateAudio(float[] data, int decibels)
{
float gain = (float)Math.Pow(10, (double)-decibels/20.0);
for (int i = 0; i < data.Length; i++)
{
data[i] *= gain;
}
}
Quindi, se voglio per attenuare di decibel, il fattore di guadagno è .1.
@sth: come ti permetti di modificare la mia domanda? Solo per quello, ti sto dando un casino di badge e una "k" dopo il tuo rappresentante. – MusiGenesis
':)' – sth