小编Mid*_*das的帖子

低级音频编程

我想知道; 像Cubase和Audacity这样的音频软件是否使用PlaySound调用?

我在哪里可以了解低级音频编程?至于我在网上找到的信息,MCI似乎是Windows中最低级别的音频API ...

谢谢

编辑:我不要求仅针对Windows的信息.

audio low-level

1
推荐指数
1
解决办法
3952
查看次数

随机malloc崩溃?

我正在尝试读取一个二进制文件,该文件具有以标识符开头的块(如3DS文件).我遍历文件并使用开关,程序确定块具有什么标识符,然后将数据读入文件结构.有时我需要使用malloc为动态大小的数据分配内存.在读取时,交换机经常会分配内存的相同情况,但是在文件中的特定点,它会在同一个malloc上崩溃.我想读的文件大约是1MB.但是当我用另一个大约10kB的文件和相同的结构来尝试该程序时,它会成功地读取它.

什么可能导致这个问题?


我在调试时得到的错误代码是:

Heap corruption detected at 0441F080
HEAP[prog.exe]: HEAP: Free Heap block 441f078 modified at 441f088 after it was freed
Run Code Online (Sandbox Code Playgroud)

此外,当我在调试模式下执行它时,由于某种原因,我可以从文件中读取更多数据.程序在崩溃之前会持续更长时间.


这是代码崩溃的代码:

switch (id) {
    case 0x62:
    case 0x63:
    // ...
        {
            char n_vertices = id - 0x60 + 1;// just how I calculate the n_vertices from the block ID
            fread(&mem.blocks[i].data.attr_6n.height, 2, 1, f);
            mem.blocks[i].data.attr_6n.vertices = malloc(2 * n_vertices);// crash
            for (short k = 0; k < n_vertices; k++) {
                fread(&mem.blocks[i].data.attr_6n.vertices[k], 2, 1, f);// read shorts
            }
        }
        break; …
Run Code Online (Sandbox Code Playgroud)

c dynamic-memory-allocation data-structures

1
推荐指数
1
解决办法
4825
查看次数

完整桌面的WinAPI鼠标移动通知

在WinAPI中是否有完整桌面(全屏)的鼠标移动通知,而不仅仅是一个窗口?

我想在我的主窗口程序中接收鼠标屏幕坐标.

编辑:

我尝试做的是从窗口中的按钮拖动到窗口外部时从鼠标获取坐标.

c winapi

1
推荐指数
1
解决办法
1519
查看次数

如何重用HBITMAP句柄?

我必须多次绘制一个位图.它是从文件加载的.每次我必须以SelectObject下列方式使用它时我可以重新加载它:

void drawBitmap(HWND hWnd, int xPos, int yPos) {
    HBITMAP hBmp = (HBITMAP) LoadImage(NULL, "image.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    HDC hDC = GetDC(hWnd);
    HDC hdcMem = CreateCompatibleDC(hDC);
    SelectObject(hdcMem, hBmp);
    BitBlt(hDC, xPos, yPos, 7, 7, hdcMem, 0, 0, SRCCOPY);
}
drawBitmap(hMainWnd, 0, 0);
drawBitmap(hMainWnd, 14, 0);
drawBitmap(hMainWnd, 28, 0);
Run Code Online (Sandbox Code Playgroud)

但也可以这样做吗?

HBITMAP hBmp = (HBITMAP) LoadImage(NULL, "image.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
void drawBitmap(HWND hWnd, int xPos, int yPos) {
    HBITMAP hBmp2 = hBmp;
    HDC hDC = GetDC(hWnd);
    HDC hdcMem = …
Run Code Online (Sandbox Code Playgroud)

c winapi

1
推荐指数
1
解决办法
1204
查看次数

在 C++ 中从 MIDI 设备获取 ID

我是一名音乐家和程序员,想创建自己的程序来制作音乐。在制作 GUI 之前,我将从 C++ 中的控制台应用程序开始。

我对 C/C++ 很陌生,知道如何制作基本的控制台应用程序,并阅读了有关 Win32 API 的内容。

我在 MSDN 上查找 Win32 应用程序中的多媒体,发现了很多 MIDI 函数:http://msdn.microsoft.com/en-us/library/dd798495 (VS.85).aspx

我可以通过这种方式接收有多少个 MIDI 设备插入:

#include <windows.h>
#include <iostream>
using namespace std;
int main() {
    cout << midiInGetNumDevs();
    cout << " MIDI devices connected" << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但现在我想找出这些设备是如何调用的,有midiInGetID我认为的功能和while循环。有人可以帮我解决这个问题吗?该函数需要一个HMIDIIN参数,但我不知道如何获得一个参数,因为几乎所有 MIDI 函数都使用该参数。

我知道这不是最明显的主题,但如果有人可以帮助我,那就太好了。

谢谢 :)

c++ midi winapi

0
推荐指数
1
解决办法
2850
查看次数

0
推荐指数
3
解决办法
565
查看次数