Como alterar a freqüência do bipe do terminal padrão do alto-falante do PC?

0

Eu quero alterar a freqüência de som padrão de SND_BELL (que é usada quando \a ou BEL ou ^ G é impresso na tela) para valores mais altos (o atual o padrão é em torno de 750Hz) .
Claro que este turno precisa de uma solução completa de programação.

O problema é que não entendo como int value em pcspkr_event() é convertido de uma determinada frequência para um valor adequado quando usado com SND_TONE . Então eu não entendo como value=1000 renderiza um bip de 750Hz.

switch (code) {
    case SND_BELL: if (value) value = 1000; // changing this line would change the default beep frequency, but why 1000 does 750Hz tone????
    case SND_TONE: break; // with SND_TONE the value variable is already computed, so do nothing
    default: return -1;
}

Porque a mesma função implementa SND_TONE Achei que era uma boa ideia obter o que chamava, Então, eu seria capaz de encontrar a função que converte a frequência. No entanto, o backtrace não informa o nome da função que chama pcspkr_event e parece que a conversão ainda não foi feita na função que chama ( ìnput_handle_event() ) .
Também não consegui encontrar nenhuma documentação sobre como usar o alto-falante quando não há sistema operacional.

Então, qual é a frequência da relação entre a frequência e o valor da variável value '?

    
por user2284570 13.04.2015 / 16:43

1 resposta

0

O sinal sonoro do PC tem uma história longínqua. Para entender o uso, você tem que saber de onde vem. Todos os PCs possuem um cristal (que originalmente era usado para derivar o clock da CPU e a freqüência de cor para a saída de vídeo). Este valor foi de 14,318 MHz (e alteração) ... Dividido por 3, este deu a freqüência da CPU (4,77 MHz no PC original), e dividido por 4, deu a portadora colorida (NTSC) de 3,58 MHz.

O 4.77 foi então dividido por 4 para dar 1,19 MHz ... Este foi dividido por 65536 para dar o sinal de relógio original (18 Hz), e dividido por outro valor variável para dar o sinal sonoro. Este é o valor int que você tem que programar!

Assim, 14,31818 MHz / 12 = 1,193182 MHz (1193182 Hz). 1193182/1000 = 1193 lhe dará um tom de 1000Hz.

O código que você faz referência chama PIT_TICK_RATE (consulte link ), que é definido neste:

* The clock frequency of the i8253/i8254 PIT */
#define PIT_TICK_RATE 1193182ul

Claro que tudo isso funciona apenas como administrador root ...

    
por 13.04.2015 / 21:42