친구들한테 이거 우주선 발사 소리 내는 거라고 하고 보낸 적 있음 ㅋㅋ
#include <windows.h>
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
for(unsigned i = 0; ; i++) Beep(i, 10U);
return 0;
}
친구들한테 이거 우주선 발사 소리 내는 거라고 하고 보낸 적 있음 ㅋㅋ
#include <windows.h>
int __stdcall WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
for(unsigned i = 0; ; i++) Beep(i, 10U);
return 0;
}
ㅋㅋㅋㅋㅋㅋㅋㅋ - DCW
유우머.. 시무룩..
ㅋㅋ 저 Beep 함수 요즘은 애물단지
요새는 playsound함수 쓰냐?
요새는 Beep 함수가 컴퓨터 본체 내장 스피커에 직접 사운드 출력하는 게 아니라 스피커로 비스무리하게 흉내만 내는 거라 느리기만 하고 별로 안 좋음. 차라리 waveOutWrite() 함수로 주파수를 스피커에다가 직접 쏴 주는 게 성능은 더 나을 듯. PlaySound()는 사운드 파일 재생시키는 거고...
응 것도 필요한 파일 없는 경우가 많아 : ) OS 에 포함안되어있음. 무슨 파일이었던가는 까먹.
waveOutWrite() 함수는 winmm.dll API인데 winmm.dll이 없는 시스템도 있다고요? 사운드 드라이버가 안 잡힌 거라면 모를까 저 함수는 모든 컴퓨터에서 다 될텐데요.
아니 Beep
그 옛날 Beep API 때는 Beep Device(\\Device\\Beep)를 열어서 DeviceIoControl()로 메시지 날리던데 그 Device의 Driver 파일이 없다는 말씀이신가요? 아니면 요즘의 Beep API에서 Beep음을 에뮬레이션하는 모듈 파일이 없다는 말인가요? 요즘의 Beep API는 내부를 리버싱해 보지 않아서 어떤 외부 파일을 쓰는 진 잘 모르겠네요. 옛날 Beep API는 디바이스 드라이버 beep.sys 썼던 거 같은데...
응 맞아 beep.sys 인가가 없어.
그게 XP 때까진 기본으로 다 있었던 거 같은데(코세 성님 말씀대로라면 없는 PC도 있었던 모양?) 비스타 이후론 그 파일 완전히 없어졌고 Beep API 방식도 beep.sys 드라이버에 DeviceIoControl()로 메시지 보내서 내장 스피커로 사운드 출력하는 방식에서 방식이 바뀌었죠. 스피커를 통해서 출력하는 방식으로...
비스타 이후에서 내장 스피커 이용해서 출력하려면 최선은 TCB 권한 얻어서 직접 포트 출력하는 거일 듯.
SeTcbPrivilege 특권 얻으면 Ring3 프로세스도 포트 입출력 명령어 쓸 수 있죠. :p
아니다, 요즘 beep.sys 는 사운드 카드로 출력이 나와서 안되었던거다.
전에 어떤 동생이 물어왔었는데 PC 스피커로 비프가 안나온다고 ㅋㄷㅋㄷ
근데 그 장비가 계측장비라 사운드카드가 없었걸랑.
아 요새 Beep API는 리버싱을 안 해 봐서 몰랐는데 Beep.sys를 여전히 쓰는데 Beep.sys 내부에서 내장 스피커가 아니라 스피커를 통한 출력을 하는 거군요. 그럴 거면 뭐하러 디바이스 집어 넣은 거지 ㅡㅡ;
그래서 예전 beep 로 돌려보려고 잠시 낑낑대다. 사운드 카드 사 써 =_= 이러고 딴거함. ㅋ
http://blogs.msdn.com/b/larryosterman/archive/2010/01/04/what-s-up-with-the-beep-driver-in-windows-7.aspx
SeTcbPrivilege 특권만 얻으면 돼요. 그러면 Ring3 프로세스도 인라인 어셈에서 OUT 명령어로 직접 포트 출력 가능.
흠 뭔가 이유가 있어서였던것 같은뎅
8254칩 때문이었던가.
뭐 암튼~
한번 내장 스피커로 소리 출력하는 코드 짜 봐야 겠다~
http://dblack.tk
커뮤니티 사이트 입니다 많은 이용 부탁 드립니다.