컴퓨터 엑셀 워드 포토샵 구글어스 WINDOWS JAVASCRIPT JAVA C++

 
Previous Post [Chess/체스 규칙] 앙 파상(En passant)이란?[Chess/체스 기초] 스테일메이트(Stalemate)라는 이상한 규칙[HTML-CSS] 이미지(img) 위에서, 마우스 커서를 십자가(플러스 기호)로 변경웹스터 영영사전의 '오늘의 단어; Word of the Day' 가 RSS 2.0 피드로 ...[QnA] 견명조 폰트 있는 곳? 견명조 글꼴이란?[MIDI/프리웨어 미디 플레이어] vanBasco's Karaoke Player[QnA] 확장자 .lit (.LIT) 를 읽는 프로그램은? LIT 란 무슨 파일입니까?[배치 파일] echo 명령에서, 쌍따옴표, 꺾은 괄호(부등호) 등 특수문자 표현하기배치 파일 (Batch File) 실행시에, 인수(파라미터; 옵션; 매개변수) 주기도스(DOS)/윈도우의, 배치 파일에서 echo off 란?

[C언어] printf() 함수로, PC스피커에서, 비프음(Beep; 삑 하는 소리) 내기

Thursday, June 01, 2006
스폰서 링크

옛날의 프로그램들은, 심각한 에러가 발생했을 때, PC스피커로 하는 소리를 내었습니다. 이것을 비프음이라고 합니다.

음악용 스피커는 비상시에 작동하지 않을 가능성이 높기 때문에, 최악의 경우에도 잘 작동하는 PC스피커로 에러를 알리는 것입니다. 물론 옛날에는 음악용 스피커나 사운드카드가 없는 PC도 아주 많았습니다. 사무용 PC는 대부분 그랬습니다.



비프음 내기



하드웨어를 직접 제어할 필요는 없습니다. 십육진수로 07 에 해당하는 아스키 문자를, 표준출력으로, 쉽게 말해서 '명령 프롬프트 화면'으로 출력하면 삑 하는 비프음이 나게 됩니다.

C언어에서는, 십육진수로 07 에 해당하는 아스키 문자를 \a 라고 정의해 놓았습니다.

따라서 printf() 함수나 puts() 함수 등으로 \a 를 화면에 출력하면 삑 하는 소리가 나게 됩니다. 그러나 소리만 나고 화면에는 아무것도 출력되지 않습니다. '소리 문자'인 것입니다.

다만 puts() 함수는 개행문자인 \n을 자동으로 붙이기 때문에, 삑 소리만 내려는 경우에는 printf() 함수가 좋겠지요.


#include <stdio.h>


void main(void) {

  printf("\a");

}



위의 코드를 beep.c 등의 이름으로 저장하고 C컴파일러로 컴파일하면 beep.exe 라는 파일이 만들어집니다. 이제 명령 프롬프트 화면에서 beep 라고 치면 삑 소리가 납니다.





beep() 함수를 따로 만들어서 분리하려면 다음과 같이 하면 됩니다:

#include <stdio.h>

void beep(void);


void main(void) {
  beep();
}


void beep(void) {
  printf("\a");
}





그렇지만 비프음은 되도록 사용하지 않는 것이 좋습니다. 사용자가 깜짝깜짝 놀라게 되고 스트레스가 쌓이게 됩니다: [리눅스/Linux] 레드햇 9.0에서, 삑삑거리는 비프음(Beep) 끄기




관련 게시물: 배치 파일에서, PC스피커로, 비프음(Beep; 삑 하는 소리) 내기




더 읽기:
C언어 | C/C++ (Visual C++)

2 Comments:
At March 30, 2016 at 11:03 AM, Blogger acornriver said...

int 대신에 void를 이용해도 돼는건가요?

 
At March 30, 2016 at 11:17 AM, Blogger mwultong said...

위의 소스의 함수는 아무것도 반환하지 않고, 아무런 인수도 입력받지 않기에 void 를 사용했습니다. int 반환값이 있을 경우에만 int 를 사용합니다.

 

Post a Comment

<< Home RSS 2.0 feed

구글 Google 에서 제공하는 무료 블로그 서비스인 블로거 Blogger 의 인터넷 주소는 www.blogger.com 입니다. Blogger 에 블로그를 만들면, blogspot.com 이라는 주소에 블로그가 생성됩니다.
블로그를 직접 방문하지 않고도 최신 게시물을 구독하려면 RSS 2.0 feed 주소를 리더기에 등록하시면 됩니다.
Categories
Previous Posts
Monthly Archives
Top