level 3
laull
楼主
附源码,其他方法正常。
问题就是创建类后调用set_process(10),
再调用play(),结果还是从0秒开始播放
#ifndef _MUSICER_
#define _MUSICER_
#include <windows.h>
#include <mmsystem.h>
#include <dsound.h>
#include <stdio.h>
#pragma comment(lib, "WINMM.LIB")
class Musicer {
private:
char* path;
public:
// 输入音频路径 char* 或 const char*
template<typename arg>
Musicer(arg path_in) {
path = (char*)path_in;
char command1[400];
sprintf_s(command1, "open %s alias %s", path, path);
}
// 播放 patten: 0-正常放一遍(默认) 1-阻塞,直到播完 2-循环播放
void play(int patten = 0) {
char command2[200];
sprintf_s(command2, "play %s ", path);
if (patten == 1) strcat_s(command2, " wait");
else if (patten == 2) strcat_s(command2, " repeat");
mciSendString(command2, 0, 0, 0);//播放音乐
}
// 更改音频进度条至
void set_process(float set_to) {
char command[200];
sprintf_s(command, "seek %s to %d", path, (long)(set_to * 1000));
mciSendString(command, 0, 0, 0);//这里表示把music从 set_to 秒处
}
// 获得现在进度条(秒)
float get_process() {
char command[200], a[100];
float out;
sprintf_s(command, "status %s position", path);
mciSendString(command, a, 100, 0);
out = atoi(a) / static_cast<float>(1000);
return out;
}
// 关闭
void close() {
char command[200];
sprintf_s(command, "close %s", path);
mciSendString(command, 0, 0, 0);
}
};
#endif // !_MUSICER_




