Nếu tôi muốn giảm biên độ một tập tin WAV bằng 25%, tôi sẽ viết một cái gì đó như thế này:Làm cách nào để giảm bớt một tệp WAV bằng một giá trị decibel đã cho?
for (int i = 0; i < data.Length; i++)
{
data[i] *= 0.75;
}
Rất nhiều các bài báo tôi đọc về kỹ thuật âm thanh, tuy nhiên, thảo luận về biên độ về decibel. Tôi hiểu bản chất logarit của các đơn vị decibel về nguyên tắc, nhưng không quá nhiều về mặt mã thực tế.
Câu hỏi của tôi là: nếu tôi muốn giảm bớt âm lượng của tệp WAV, ví dụ, 20 decibel, tôi sẽ làm như thế nào trong mã như ví dụ trên?
Cập nhật: Công thức (dựa trên câu trả lời Nils Pipenbrinck của) cho tình tiết giảm nhẹ bởi một số lượng nhất định của decibel (nhập như một số dương ví dụ như 10, 20, vv):
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;
}
}
Vì vậy, nếu tôi muốn để giảm bớt bởi decibel, hệ số tăng là .1.
@sth: sao bạn dám chỉnh sửa câu hỏi của mình? Chỉ vì điều đó, tôi cho bạn một mớ phù hiệu và chữ "k" sau đại diện của bạn. – MusiGenesis
':)' – sth