void bs1770_add_sample(bs1770_t *bs1770, double fs, int channels, bs1770_sample_t sample) { biquad_t *pre=&bs1770->pre; biquad_t *rlb=&bs1770->rlb; double wssqs=0.0; double *g=BS1770_G; int offs, size, i; int get_tmp; double den_tmp; if (bs1770->fs!=fs) bs1770_set_fs(bs1770, fs, channels); offs=bs1770->ring.offs; size=bs1770->ring.size; for (i=0;i<MIN(channels,BS1770_MAX_CHANNELS);++i) { double *buf=bs1770->ring.buf[i]; double x=GETX(buf,offs,0)=DEN(sample[i]); if (1<size) { double y=GETY(buf,offs,0)=DEN(pre->b0*x +pre->b1*GETX(buf,offs,-1)+pre->b2*GETX(buf,offs,-2) -pre->a1*GETY(buf,offs,-1)-pre->a2*GETY(buf,offs,-2)) ; double z=GETZ(buf,offs,0)=DEN(rlb->b0*y +rlb->b1*GETY(buf,offs,-1)+rlb->b2*GETY(buf,offs,-2) -rlb->a1*GETZ(buf,offs,-1)-rlb->a2*GETZ(buf,offs,-2)) ; wssqs+=(*g++)*z*z; ++buf; } } if (NULL!=bs1770->lufs) bs1770_aggr_add_sqs(bs1770->lufs,fs,wssqs); if (NULL!=bs1770->lra) bs1770_aggr_add_sqs(bs1770->lra,fs,wssqs); if (size<2) ++bs1770->ring.size; if (++bs1770->ring.offs==BS1770_BUF_SIZE) bs1770->ring.offs=0; }
void bs1770_set_fs(bs1770_t *bs1770, double fs, int channels) { int i; bs1770->fs=fs; bs1770->channels=channels; bs1770->pre.fs=fs; biquad_requantize(&pre48000, &bs1770->pre); bs1770->rlb.fs=fs; biquad_requantize(&rlb48000, &bs1770->rlb); for (i=0;i<MIN(channels,BS1770_MAX_CHANNELS);++i) { double *buf=bs1770->ring.buf[i]; int get_tmp; GETX(buf,0,0)=0.0; } bs1770->ring.size=bs1770->ring.offs=1; }
LRESULT D3D11App::ProcessMessage(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; switch (message) { case WM_PAINT: hdc = BeginPaint(hwnd, &ps); EndPaint(hwnd, &ps); break; case WM_MOUSEMOVE: OnMouseMove(hwnd, GETX(lParam), GETY(lParam), (wParam & MK_LBUTTON) != 0, (wParam & MK_MBUTTON) != 0, (wParam & MK_RBUTTON) != 0); break; case WM_KEYDOWN: if (wParam == VK_ESCAPE) { if (m_mouseCapture) { // Release mouse capture on escape if there is one ... CaptureMouse(false); } else { // ... otherwise exit the application PostMessage(hwnd, WM_CLOSE, 0, 0); } } else { OnKeyPress(hwnd, (unsigned int) wParam, true); } break; case WM_KEYUP: OnKeyPress(hwnd, (unsigned int) wParam, false); break; case WM_SYSKEYDOWN: // Toggle fullscreen on Alt-Enter if ((lParam & (1 << 29)) && wParam == VK_RETURN) { m_context->ToggleFullscreen(); } break; case WM_LBUTTONDOWN: OnMouseClick(hwnd, GETX(lParam), GETY(lParam), MOUSE_LEFT, true); break; case WM_LBUTTONUP: OnMouseClick(hwnd, GETX(lParam), GETY(lParam), MOUSE_LEFT, false); break; case WM_RBUTTONDOWN: OnMouseClick(hwnd, GETX(lParam), GETY(lParam), MOUSE_RIGHT, true); break; case WM_RBUTTONUP: OnMouseClick(hwnd, GETX(lParam), GETY(lParam), MOUSE_RIGHT, false); break; case WM_MBUTTONDOWN: OnMouseClick(hwnd, GETX(lParam), GETY(lParam), MOUSE_MIDDLE, true); break; case WM_MBUTTONUP: OnMouseClick(hwnd, GETX(lParam), GETY(lParam), MOUSE_MIDDLE, false); break; case WM_WINDOWPOSCHANGED: WINDOWPOS *p; p = (WINDOWPOS *) lParam; // Ignore events with SWP_NOSENDCHANGING flag if (p->flags & SWP_NOSENDCHANGING) break; if ((p->flags & SWP_NOMOVE) == 0) { OnPosition(hwnd, p->x, p->y); } if ((p->flags & SWP_NOSIZE) == 0) { RECT rect; GetClientRect(hwnd, &rect); OnSize(hwnd, rect.right - rect.left, rect.bottom - rect.top); } break; case WM_CREATE: ShowWindow(hwnd, SW_SHOW); break; case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }
// Window event handler - Use as less as possible LRESULT CALLBACK WinProc(HWND _hwnd, UINT _id, WPARAM wParam, LPARAM lParam) { WindowsDesc* gCurrentWindow = NULL; tinystl::unordered_hash_node<void*, WindowsDesc*>* pNode = gHWNDMap.find(_hwnd).node; if (pNode) gCurrentWindow = pNode->second; else return DefWindowProcW(_hwnd, _id, wParam, lParam); switch (_id) { case WM_ACTIVATE: if (LOWORD(wParam) == WA_INACTIVE) { captureMouse(_hwnd, false); } break; case WM_DISPLAYCHANGE: { if (gCurrentWindow) { if (gCurrentWindow->fullScreen) { adjustWindow(gCurrentWindow); } else { adjustWindow(gCurrentWindow); } } break; } case WM_SIZE: if (gCurrentWindow) { RectDesc rect = { 0 }; if (gCurrentWindow->fullScreen) { gCurrentWindow->fullscreenRect = { 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN) }; rect = gCurrentWindow->fullscreenRect; } else { if (IsIconic(_hwnd)) return 0; RECT windowRect; GetClientRect(_hwnd, &windowRect); rect = { (int)windowRect.left, (int)windowRect.top, (int)windowRect.right, (int)windowRect.bottom }; gCurrentWindow->windowedRect = rect; } WindowResizeEventData eventData = { rect, gCurrentWindow }; PlatformEvents::onWindowResize(&eventData); } break; case WM_CLOSE: case WM_QUIT: gAppRunning = false; break; case WM_CHAR: { KeyboardCharEventData eventData; eventData.unicode = (unsigned)wParam; PlatformEvents::onKeyboardChar(&eventData); break; } case WM_MOUSEMOVE: { static int lastX = 0, lastY = 0; int x, y; x = GETX(lParam); y = GETY(lParam); MouseMoveEventData eventData; eventData.x = x; eventData.y = y; eventData.deltaX = x - lastX; eventData.deltaY = y - lastY; eventData.captured = isCaptured; PlatformEvents::onMouseMove(&eventData); lastX = x; lastY = y; break; } case WM_INPUT: { UINT dwSize; static BYTE lpb[128] = {}; GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER)); RAWINPUT* raw = (RAWINPUT*)lpb; if (raw->header.dwType == RIM_TYPEMOUSE) { static int lastX = 0, lastY = 0; int xPosRelative = raw->data.mouse.lLastX; int yPosRelative = raw->data.mouse.lLastY; RawMouseMoveEventData eventData; eventData.x = xPosRelative; eventData.y = yPosRelative; eventData.captured = isCaptured; PlatformEvents::onRawMouseMove(&eventData); lastX = xPosRelative; lastY = yPosRelative; } return 0; } case WM_LBUTTONDOWN: { MouseButtonEventData eventData; eventData.button = MOUSE_LEFT; eventData.pressed = true; eventData.x = GETX(lParam); eventData.y = GETY(lParam); if (PlatformEvents::wantsMouseCapture && !PlatformEvents::skipMouseCapture && !isCaptured) { captureMouse(_hwnd, true); } PlatformEvents::onMouseButton(&eventData); break; } case WM_LBUTTONUP: { MouseButtonEventData eventData; eventData.button = MOUSE_LEFT; eventData.pressed = false; eventData.x = GETX(lParam); eventData.y = GETY(lParam); PlatformEvents::onMouseButton(&eventData); break; } case WM_RBUTTONDOWN: { MouseButtonEventData eventData; eventData.button = MOUSE_RIGHT; eventData.pressed = true; eventData.x = GETX(lParam); eventData.y = GETY(lParam); PlatformEvents::onMouseButton(&eventData); break; } case WM_RBUTTONUP: { MouseButtonEventData eventData; eventData.button = MOUSE_RIGHT; eventData.pressed = false; eventData.x = GETX(lParam); eventData.y = GETY(lParam); PlatformEvents::onMouseButton(&eventData); break; } case WM_MBUTTONDOWN: { MouseButtonEventData eventData; eventData.button = MOUSE_MIDDLE; eventData.pressed = true; eventData.x = GETX(lParam); eventData.y = GETY(lParam); PlatformEvents::onMouseButton(&eventData); break; } case WM_MBUTTONUP: { MouseButtonEventData eventData; eventData.button = MOUSE_MIDDLE; eventData.pressed = false; eventData.x = GETX(lParam); eventData.y = GETY(lParam); PlatformEvents::onMouseButton(&eventData); break; } case WM_MOUSEWHEEL: { static int scroll; int s; scroll += GET_WHEEL_DELTA_WPARAM(wParam); s = scroll / WHEEL_DELTA; scroll %= WHEEL_DELTA; POINT point; point.x = GETX(lParam); point.y = GETY(lParam); ScreenToClient(_hwnd, &point); if (s != 0) { MouseWheelEventData eventData; eventData.scroll = s; eventData.x = point.x; eventData.y = point.y; PlatformEvents::onMouseWheel(&eventData); } break; } case WM_SYSKEYDOWN: if ((lParam & (1 << 29)) && (wParam == KEY_ENTER)) { toggleFullscreen(gCurrentWindow); } updateKeyArray(_id, (unsigned)wParam); break; case WM_SYSKEYUP: updateKeyArray(_id, (unsigned)wParam); break; case WM_KEYUP: if (wParam == KEY_ESCAPE) { if (!isCaptured) { gAppRunning = false; } else { captureMouse(_hwnd, false); } } updateKeyArray(_id, (unsigned)wParam); break; case WM_KEYDOWN: updateKeyArray(_id, (unsigned)wParam); break; default: return DefWindowProcW(_hwnd, _id, wParam, lParam); break; } return 0; }
STATIC float_num near_score(board_t *b, index_t pos, index_t pos2) { index_t a = abs(GETX(b, pos) - GETX(b, pos2)) + abs(GETY(b, pos) - GETY(b, pos2)); return a <= 1 ? 4.0 : a == 2 ? 2.0 : 1.0; }