各位老师,C++代码如何检测音频文件有没有正在播放呢?用C++写一个监控程序,当监控检测到1.wav的文件发出声音时(确定为wav格式),监控程序马上把1写入文件a.csv。下面的代码不管用,该如何改呢?[C++] 纯文本查看 复制代码 #include <iostream>
#include <fstream>
#include <Windows.h>
#include <sstream>
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")
int main() {
std::string wavFile = "D:\\1.wav";
std::string csvFile = "a.csv";
while (true) {
// 监控文件
HANDLE hFile = CreateFile(wavFile.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE) {
std::cerr << "无法打开文件 " << wavFile << std::endl;
return 1;
}
// 创建CSV文件
std::ofstream csv(csvFile);
if (!csv) {
std::cerr << "无法创建文件 " << csvFile << std::endl;
CloseHandle(hFile);
return 1;
}
// 监控文件声音
DWORD bytesRead;
BYTE buffer[44]; // WAV文件头部大小为44字节
if (ReadFile(hFile, buffer, sizeof(buffer), &bytesRead, NULL)) {
// 检查是否为WAV文件
if (bytesRead == sizeof(buffer) && buffer[0] == 'R' && buffer[1] == 'I' && buffer[2] == 'F' && buffer[3] == 'F' && buffer[8] == 'W' && buffer[9] == 'A' && buffer[10] == 'V' && buffer[11] == 'E') {
// 检查是否有声音
if (buffer[22] != 0 || buffer[23] != 0) {
// 检查文件是否正在播放声音
if (waveOutGetNumDevs() > 0) {
csv << "1" << std::endl;
csv.flush();
std::cout << "有声音" << std::endl;
}
}
else {
std::cout << "无声音" << std::endl;
}
}
}
// 关闭文件和句柄
csv.close();
CloseHandle(hFile);
Sleep(1000); // 每隔0.1秒检查一次文件
}
system("pause");
return 0;
} |