2010-12-15 3 views
12

c/C++ 프로그래밍을 위해 linux에서 PC 스피커를 사용하는 방법은 무엇입니까? 경고음과 주파수를 제어 할 수 있습니까?linux에서 PC 스피커를 사용하는 방법은 무엇입니까?

+0

ALSA-LIB http://www.alsa-project.org/alsa-doc/ alsa-lib/ –

+5

$ 10 미만의 사운드 카드를 사용할 수 있습니다. 더 이상 PC 스피커 근처에는 아무런 비즈니스가 없습니다. –

+4

12 개의 질문과 대답이 없습니다. 앞으로 더 많은 질문을 정말로하고 싶다면 ** 수정하십시오. – ereOn

답변

3

당신은 정말는 이렇게 경고음 명령의 소스 코드를 체크 아웃 할 경우 여전히 스피커에 가까운 무언가에 연결된 칩셋과 동등한 8253가 있다면 아마도 http://www.johnath.com/beep/beep.c

2

, 당신은에 액세스 할 수 있습니다 커널 모듈이나 ioperm()을 루트로 호출 한 후 데이터 시트 레지스터 또는 고대 PC 가이드 (필자는 더 이상 내 머리 속에이 정보가 없다는 것을 안심하게 받아 들였다)에 따르면.

또한 PC 스피커 용 커널 PWM "아날로그"오디오 드라이버가 한 번 있습니다. 커널을 컴파일 한 것은 이것이 처음이라고 생각합니다. 이것은 커널 모듈 이전 또는 적어도 인기있는 배포판을 만들기 전이었습니다.

+1

실제로 표준 커널에이 장치 드라이버가 있습니다 (로드되지 않았을 수 있음). 왜 그것을 사용하지 않습니까? – MarkR

+0

예 가능하거나 사용 가능할 경우 사용하는 것이 좋습니다. –

3

예, 콘솔 장치 (예 :/dev/console 또는/dev/tty0)를 연 다음 console_ioctl (4) 매뉴얼 페이지에 설명 된대로 KIOCSOUND ioctl을 실행하십시오.

그것은 유쾌하고 리눅스에 특화된 것이지만 나는 당신의 질문에 답한다고 생각합니다.


편집 : Unbelivably는 당신에게 PC 스피커에 디지털 사운드 재생을 제공 ALSA에 대한 커널의 PC 스피커 드라이버가 있습니다. 자사의 사운드 품질이 좋지되며 그것은 here에서 촬영 :

9

하지만 CPU를 많이 사용합니다 :

#include <sys/ioctl.h> 
#include <unistd.h> 
#include <linux/kd.h> 
int main(void) 
{ 
    int freq[] = { /* C D E F G A B C */ 
        523, 587, 659, 698, 784, 880, 988, 1046 }; 
    int i; 

    for (i=0; i<8; i++) 
    { 
      ioctl(STDOUT_FILENO, KIOCSOUND, 1193180/freq[i]); 
      usleep(500000); 
    } 
    ioctl(STDOUT_FILENO, KIOCSOUND, 0); /*Stop silly sound*/ 
    return 0; 
} 
관련 문제