17-04-17, 11:38 PM
بالإضافة للكود الذي كتبه لك الأخوة الأفاضل
هذا حل أخر ......
الاستخدام
ملحوظة الدالة سوف تعود بقيمة مهما كانت المدخلات لأنني قمت بعمل Clamp لكل من Key و Index
هذا حل أخر ......
PHP كود :
Private Function CalculateTone(key As Integer, index As Integer) As Double
' لو ان البيانات المراد قرائتها مهمة
' من الأفضل قراءة هذه البيانات من ملف
' بحيث أن الأرقام لا تظهر داخل الكود الخاص بك
Dim bucket As Dictionary(Of Integer, Integer()) = New Dictionary(Of Integer, Integer())() From {
{1, {1500, 1520, 1540, 0, 0}},
{2, {1560, 1580, 1600, 0, 0}},
{3, {1620, 1640, 1660, 0, 0}},
{4, {1680, 1700, 1745, 0, 0}},
{5, {1790, 1850, 1910, 0, 0}},
{6, {1970, 2040, 2100, 0, 0}},
{7, {2170, 2240, 2300, 0, 0}},
{8, {2380, 2460, 2530, 0, 0}},
{9, {2610, 2700, 2780, 0, 0}},
{10, {2850, 2920, 2990, 3060, 0}},
{11, {3070, 3130, 3190, 3250, 0}},
{12, {3320, 3380, 3450, 3530, 0}},
{13, {3540, 3640, 3730, 3830, 0}},
{14, {3920, 4000, 4080, 4160, 4240}},
{15, {4340, 4430, 4520, 4620, 4720}},
{16, {4820, 4920, 5020, 5120, 5220}},
{17, {5340, 5450, 5560, 5690, 5810}},
{18, {5930, 6060, 6190, 6320, 6450}},
{19, {6580, 6720, 6860, 7000, 7140}},
{20, {7300, 7460, 7620, 7780, 7940}}}
Dim tones As Integer() = Nothing
bucket.TryGetValue(CInt(Math.Truncate(If(key > 20, 20, (If(key < 1, 1, key))))), tones)
Dim tone As Integer = tones(CInt(Math.Truncate(If(index > 4, 4, (If(index < 0, 0, index))))))
Return tone * 35 / 100
End Function
الاستخدام
ملحوظة الدالة سوف تعود بقيمة مهما كانت المدخلات لأنني قمت بعمل Clamp لكل من Key و Index
PHP كود :
Dim tone As Double = CalculateTone(2, 0)

