Anonymous
Win32 - MCI Looping сокращает первую ноту
Сообщение
Anonymous » 30 сен 2025, 02:46
Минимальный образец: < /p>
Код: Выделить всё
#include
void midiPlay(HWND hwnd, LPSTR midi) {
char s[256];
memset(s, 0, 256);
sprintf(s, "open %s type sequencer alias mus", midi);
mciSendString(s, 0, 0, 0);
mciSendString("play mus notify", 0, 0, hwnd);
};
LRESULT CALLBACK WindowProc(HWND hw, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_CLOSE:
DestroyWindow(hw);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case MM_MCINOTIFY:
mciSendString("play mus from 0 notify", 0, 0, hw);
return 0;
}
return DefWindowProc(hw, uMsg, wParam, lParam);
};
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASS wc = {0};
MSG msg;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = "TEST";
RegisterClass(&wc);
HWND hwnd = CreateWindowEx(WS_EX_TOPMOST, "TEST", "TEST", WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, 0, 0, hInstance, 0);
midiPlay(hwnd, ".\\ancient.mid");
bool running = true;
while (running) {
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT) {
running = false;
}
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
return 0;
};
midi, который я использую:
https://limewire.com/d/ceaoo#qmchl04p0h
Первая нота MIDI пропускается на петлях. Я уже пробовал вручную ищу, останавливаясь и перезапустив миди, ни один из них не работал. Я не знаю, что еще делать. Как это исправить?
Подробнее здесь:
https://stackoverflow.com/questions/797 ... first-note
1759189564
Anonymous
Минимальный образец: < /p> [code]#include void midiPlay(HWND hwnd, LPSTR midi) { char s[256]; memset(s, 0, 256); sprintf(s, "open %s type sequencer alias mus", midi); mciSendString(s, 0, 0, 0); mciSendString("play mus notify", 0, 0, hwnd); }; LRESULT CALLBACK WindowProc(HWND hw, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_CLOSE: DestroyWindow(hw); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; case MM_MCINOTIFY: mciSendString("play mus from 0 notify", 0, 0, hw); return 0; } return DefWindowProc(hw, uMsg, wParam, lParam); }; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASS wc = {0}; MSG msg; wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpfnWndProc = WindowProc; wc.hInstance = hInstance; wc.lpszClassName = "TEST"; RegisterClass(&wc); HWND hwnd = CreateWindowEx(WS_EX_TOPMOST, "TEST", "TEST", WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, 0, 0, hInstance, 0); midiPlay(hwnd, ".\\ancient.mid"); bool running = true; while (running) { if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) { if (msg.message == WM_QUIT) { running = false; } TranslateMessage(&msg); DispatchMessage(&msg); } } return 0; }; [/code] midi, который я использую: https://limewire.com/d/ceaoo#qmchl04p0h Первая нота MIDI пропускается на петлях. Я уже пробовал вручную ищу, останавливаясь и перезапустив миди, ни один из них не работал. Я не знаю, что еще делать. Как это исправить? Подробнее здесь: [url]https://stackoverflow.com/questions/79778603/win32-mci-looping-cuts-off-first-note[/url]