C++[SFML]实现鼠标点击播放点击音效

我最近面对着需要使用降噪耳机来隔绝周围的噪声,但是长时间使用电脑时听不见自己的鼠标和键盘声,没有声音的反馈而感到难受。所以,我就想鼠标点击在耳机中播放相应音效(示例是.wav文件)是否会有一些帮助。以下是一种可用的代码,(本代码使用了SFML库,需要自己安装,这个库大概有10M,用来处理音频的,可以自行选择其他适合的处理方式并编写相应代码

#include <SFML/Audio.hpp>
#include <iostream>
#include <Windows.h>
#include <thread>
#include <mutex>

std::mutex mtx;
sf::SoundBuffer buffer;
sf::Sound sound;

void playSound() {
    mtx.lock();
    mtx.unlock();

    sound.stop(); // 停止当前正在播放的音频
    sound.setPlayingOffset(sf::Time::Zero); // 重置播放位置
    sound.play(); // 播放音频
}

LRESULT CALLBACK MouseHookCallback(int nCode, WPARAM wParam, LPARAM lParam) {
    if (nCode >= 0) {
        if (wParam == WM_LBUTTONDOWN) {
            std::thread soundThread(playSound);
            soundThread.detach();
        }
    }

    return CallNextHookEx(NULL, nCode, wParam, lParam);
}

int main() {
    HINSTANCE hInstance = GetModuleHandle(NULL);
    HHOOK mouseHook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookCallback, hInstance, 0);

    if (!buffer.loadFromFile("split.wav")) {
        std::cout << "Failed to load sound file" << std::endl;
        return -1;
    }

    sound.setBuffer(buffer);

    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0) > 0) {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    UnhookWindowsHookEx(mouseHook);

    return 0;
}

核心就是使用SetWindowsHookEx函数与操作系统进行交互,来获取鼠标的信息。

音效的话,wav格式和mp3格式都行,只要把相应地方换成自己的路径就行了。

作者声明,本文为一篇烂文,仅仅分享一个工具。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值