} while (hKbdDev[i] != INVALID_HANDLE_VALUE && ++i < MAX_KBDHANDLES);
return hKbdDev[0] != INVALID_HANDLE_VALUE;
}
Это открытие клавиатуры у меня. CreateFile возвращает -1
Private Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByRef lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Private Const OPEN_EXISTING As Long = 3
Private Const GENERIC_WRITE As Long = &H40000000
Private Function OpenKeyboardDevice() As Long
If DefineDosDevice(DDD_RAW_TARGET_PATH, "Kbd", "\\Device\\KeyboardClass0") = 0 Then Exit Function
OpenKeyboardDevice = CreateFile("\\\\.\\Kbd", GENERIC_WRITE, 0, ByVal 0, OPEN_EXISTING, 0, 0)
End Function
Ладно, я все равно сообразил быстрее) Тем не менее, я - идиот. Двойные и 4ные слеши - это тонкости с++, а я и забыл. Ну а бейсике надо писать одинарные и двойные.
А зачем это всё надо? - спросите вы меня. Я подумал, а не приделать ли мне светомузыку к Аудике. Приделать пока не приделал, но работать с лампочками научился. Главное преимущество перед большинством других примеров - состояния клавиш капс, нам и скролл не трогаются.
Просто ради интереса: О чём здесь речь? Ну что есть миранда нашёл - программа для общения через интернет типа ICQ. А причём здесьсветомузыка, девайс и клава? И какими лампочками можно управлять? Аудике - аудиосистема???
Ну какими лампочками на клаве можно управлять под музыку???
GDK на обычных клавах есть Нам Лок, Капс и Скролл Лок, три светодиода и миранда ими управляет.
Винанд подглядел там как это делается и хочет сделать
импровизированную светомузыку для своего плеера.
Обычно лампочки одного цвета поэтому Цветомузыка неполучится , но всёравно весьма оригинально.
Smith, ну блин, если нет ЛЕДов - это железная проблема) мы не при чем)
Кстати я думаю, всё таки можно сделать мигание в такт. Только нужно узнать как это делать
GDK, у Miranda есть плагин, который мигает лампочками на разных событиях. Типа, когда сообщение приходит
Твой спектрограф можно доработать, чтоб получить с него три переменные (низкие, средние и высокие частоты) со значениями 0, 1(~50 и 2(~100% уровня)?
Элементарно совместить это с частотным управлением яркостью и получится ништяк.
Если лампочки достаточно быстро переключаются, можно управлять яркостью, моргая с разными паузами. В такт музыке можно попасть, анализируя низкочастотные гармоники (1-5 Гц).
Дык я вроде уже не раз об этом написал, а если эта графическая дрыгалка будет немного доделана, то и ананизировать ничего не придется, можно будет связать напрямую.
Зацените) и скажите, если что не правильно. Кстати частотное управление - вещь)
'modSpectrum.bas
PrivateFunction freqBrightness(ByVal v AsSingle, ByVal led AsInteger) AsBoolean
Static leds(2) AsInteger
inc leds(led) 'инкремент
If leds(led) * v >= 1 Then
leds(led) = 0
freqBrightness = True
EndIf
EndFunction
'............
'Это в таймере
If LEDControl Then
Dim d(2) AsSingle, z AsInteger, l AsInteger
For z = 1 To 341
d(0) = d(0) + fft(z)
d(1) = d(1) + fft(z + 341)
d(2) = d(2) + fft(z + 682)
Next z
Call setLEDs(freqBrightness(d(2), 2), _
freqBrightness(d(0), 0), _
freqBrightness(d(1), 1))
EndIf
В fft() содержится инфа о частотах
When requesting FFT data, floating-point values ranging from 0 to 1 are returned. Only the first half of the FFT is useful, so that's what BASS returns. For example, with a 2048 sample FFT, it will return 1024 values; the 1st value being the DC component, the 2nd being the amplitude at 1/2048 of the channel's sample rate, then the amplitude at 2/2048, 3/2048, etc...
http://slil.ru/28093821 бинарник и либы
http://slil.ru/28093824 сорсы
Smith, думаю надо перед перелючением ледов проверять не нажаты ли юзером клавиши.
Add files временно сломано, потому что надо юникодную версию открывашки файлов делать. А это муторно)
Типа чейнджлог - http://pastebin.mozilla-russia.org/102156