Шкала громкости в DirectShow

Общие вопросы, не зависящие от языка реализации.

Модераторы: Duncon, Eugie, Romeo, Hawk

Ответить
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

27 июл 2004, 10:30

Мне надо сделать регулятор громкости от 0% до 100%.
Однако DirectShow как-то странно ее считает:

"Full volume is 0, and –10,000 is silence; the scale is logarithmic. Multiply the desired decibel level by 100 (for example –10,000 = –100 dB). "

Если кто-то разбирается в теории звука, напишите мне формулу, в которую можно подставлять значение от 0 до 100, а на выходе иметь значение для DirectShow.
2B OR NOT(2B) = FF
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

27 июл 2004, 12:23

Absurd, это математика, а не теория звука :) Ну и английский. Формула простая: хочешь на выходе звук в 10Дб вводи 100*10 =1000. Хочешь 50Дб - вводи 5000. А из теории звука появилась фраза про логарифмическую шкалу. Обычная формула
А = k*Log(B). B - исходная единица измерения, А - конечная. В нашем случае А - децибелы. Яркость звёзд по аналогичной формуле считается.
Даже самый дурацкий замысел можно воплотить мастерски
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

27 июл 2004, 14:46

Децибеллы - это линейная шкала? То есть 5Дб на слух в два раза тише, чем 10Дб ?
То есть, если -10,000 - это 0%, -7,500 - это 25%, -5,000 - это 50% итд?
2B OR NOT(2B) = FF
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

27 июл 2004, 17:54

Absurd, линейность или нелинейность децибел к твоему вопросу не относится :) Тебе Directshow предоставляет возможность менять громкость звука от 0 до 100Дб с шагом 0.01. По какой-то причине это происходит в целых числах. Таким образом, если ты передашь функции 1, то звук будет иметь громкость 0.01Дб. Если передать 100, то выходная громкость будет 1Дб и если передать 100*100, то громкость будет 100Дб. С точностью до знака.
То есть 5Дб на слух в два раза тише, чем 10Дб ?
Спорный вопрос. Если я правильно понимаю, то логарифмы для того и применяли, чтобы оценивать разницу "на", а не разницу "в". Т.е. если на фоне комнаты в 30Дб ты не услышишь ни 5Дб ни 10Дб то вряд ли ты скажешь, что одно громче другого в 2 раза :) .
Даже самый дурацкий замысел можно воплотить мастерски
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

28 июл 2004, 11:06

Тебе Directshow предоставляет возможность менять громкость звука от 0 до 100Дб с шагом 0.01
Хуже. Он предоставляет возможность прибавлять к звуку от -100.0 Дб до -0.0 Дб.
Если я передам -1, то звук станет тише на 0.01Дб
Из свойств логарифмов имеем, что логарифм произведения равен сумме логарифмов множителей.
Допустим мне надо уменьшить амплитуду в 100 раз:
log10(0.01 * Ampl) = log10(0.01) + log10(Ampl) = log10(Ampl) - 2.0
Итого надо вычесть два децибелла. Чего - то маловато.
2B OR NOT(2B) = FF
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

28 июл 2004, 11:17

Absurd, ты 2 Бела вычитаешь :)
Даже самый дурацкий замысел можно воплотить мастерски
Absurd
Сообщения: 1213
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

28 июл 2004, 11:27

Тогда вообще чего-то совсем мало получается для изменения амлитуды в *100* раз.
В Беллах используется логарифм с основанием 10... Может я чего-то путаю?
2B OR NOT(2B) = FF
Аватара пользователя
AiK
Сообщения: 2271
Зарегистрирован: 13 фев 2004, 18:14
Откуда: СПб
Контактная информация:

28 июл 2004, 11:53

Absurd, в Белах - да. В децибелах коэффициент k=10.
Т.е. Бел - это изменение амплитуды в 10 раз. В 100 раз - 2Бела или 20 децибел.
Даже самый дурацкий замысел можно воплотить мастерски
Ответить