BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #87282同步于 2015/5/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

c++关于PlaySound的问题

chaojibing
2015/5/29镜像同步4 回复
最近大二不是在编程序设计嘛,其中的俄罗斯方块,想加上背景音乐。 开始我在主函数的最前面写: PlaySound("C:\\Users\\ydl\\Desktop\\Tetris\\canon.wav", NULL, SND_FILENAME | SND_ASYNC); 运行的时候就是win8调音量的时候蹦出来的声音。 然后我想可能是文件太大(50多M的卡农) 换了个小的(20k的下落声音): PlaySound("C:\\Users\\ydl\\Desktop\\Tetris\\DOWN.wav", NULL, SND_FILENAME | SND_ASYNC); 然而并没有什么用!!依然是那个Windows自己的声音(可能是报错什么的,咚咚咚的) 好吧我还有一个没试过(50k的满行消除的声音): PlaySound("C:\\Users\\ydl\\Desktop\\Tetris\\FULL.wav", NULL, SND_FILENAME | SND_ASYNC); 然而这个是可以的!! 于是我就问老师为什么 老师想了一会怀疑是我开了线程的原因(双人的) 但是我是放在主函数最前面的... 百度过PlaySound,各种不明觉厉的格式都用了一些,文件的位置也换过,然并娈.. 求大神解答!! void main() { //PlaySound(TEXT("E:\\canon.wav"), NULL, SND_ASYNC | SND_NODEFAULT);用这个时候就没有声音了 //PlaySound(TEXT("E:\\canon.wav"),NULL,SND_ASYNC); //PlaySound(TEXT("E:\\canon.wav"), NULL, SND_ALIAS | SND_ASYNC); //PlaySound(TEXT("E:\\canon.wav"), NULL, SND_ALIAS); PlaySound("C:\\Users\\ydl\\Desktop\\Tetris\\FULL.wav", NULL, SND_FILENAME | SND_ASYNC); . . . . } -------------------------------------------------------------------------------------------- 另外如果有好心人看了整个代码,还有一个问题: 最下面的那个线程: DWORD WINAPI WriteThread3(LPVOID lpParam3) { char string3[5]; while (1) { Sleep(1000); EnterCriticalSection(&cs3); timeleft--; if (timeleft == -1) timeleft = 0; textout(handle, dx - 7, 17 + dy, wColors, 1, " "); textout(handle, dx - 7, 17 + dy, wColors, 1, itoa(timeleft, string3, 10)); textout(handle, 2 * MAPW + 6 + dx, 17 + dy, wColors, 1, " "); textout(handle, 2 * MAPW + 6 + dx, 17 + dy, wColors, 1, itoa(timeleft, string3, 10)); LeaveCriticalSection(&cs3); Sleep(1000); } } 目的是为了设计一个一秒减一的计数器,模式<一分钟跑>里面于左右下角显示 然而运行的时候跳一次减了二 ( 一个sleep(1000) 是一秒减二,我又加了一个sleep(1000),变成两秒减二了 ) 请问怎么弄成一秒减一啊?! 谢谢大家!! -------------------------------------------------------------------------------------------- 不知道这些文件有什么用 选一些小的上传了
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
iFadeToBlack机器人#1 · 2015/5/29
画个倒计时?没必要开个线程专门做渲染。(而且Windows下多线程同时渲染到一个HDC里不会出问题吗?) 最简单的做法是 ``` while (i_am_in_painting_loop) { // Your other rendering logic cur_time = get_wtime(); elapsed = cur_time - start_time; render(total_time - elapsed); } ``` 另外PlaySound是不是只支持特定类型的WAV格式?你提供的音乐文件是不是披着WAV外皮的MP3?这个先确认一下
chaojibing机器人#2 · 2015/5/29
看不懂怎么办 您是说调用系统时间吗 另外线程的东西 我是看着《程序设计与实践》这本书上的一个小例子用的 【 在 iFadeToBlack 的大作中提到: 】 : 画个倒计时?没必要开个线程专门做渲染。(而且Windows下多线程同时渲染到一个HDC里不会出问题吗?) : 最简单的做法是 : ``` : ...................
chaojibing机器人#3 · 2015/5/29
我用格式工厂试了一下 可以了 谢谢学长 【 在 iFadeToBlack 的大作中提到: 】 : 画个倒计时?没必要开个线程专门做渲染。(而且Windows下多线程同时渲染到一个HDC里不会出问题吗?) : 最简单的做法是 : ``` : ...................
iFadeToBlack机器人#4 · 2015/5/29
我写的是伪代码 double get_wtime() 意思是 get wall time,也就是获取墙上钟表显示的时间,单位是秒 【 在 chaojibing 的大作中提到: 】 : 看不懂怎么办 您是说调用系统时间吗 : 另外线程的东西 我是看着《程序设计与实践》这本书上的一个小例子用的