Windows Beep () эквивалент для Linux - PullRequest
7 голосов
/ 05 января 2009

Я экспериментирую с функцией Beep в Windows:

#include <windows.h>
...
Beep(frequency, duration);

Компьютер подает звуковой сигнал с определенной частотой в течение некоторого времени. Как бы я это сделал на компьютере с Linux?

Редактировать: важно выводить разные частоты.

Ответы [ 6 ]

9 голосов
/ 05 января 2009

Проверьте исходный код звукового сигнала, доступного в Ubuntu (и, возможно, других дистрибутивах), или посмотрите на http://www.johnath.com/beep/beep.c для другого источника (это тот же код, я считаю).

Позволяет легко контролировать частоту, длину и повторения (среди прочего).

4 голосов
/ 05 января 2009

давайте послушаем габбу из звуковых колонок

#!/usr/bin/ruby

$audio = File.open("/dev/audio", "w+")
def snd char
    $audio.print char.chr
end

def evil z
    0.step(100, 4.0 / z) { |i|
        (i / z).to_i.times { snd 0 }
        (i / z).to_i.times { snd 255 }
    }
end

loop {
    evil 1 
    evil 1
    evil 1
    evil 4
}

более серьезно, хотя:

//g++ -o pa pa.cpp -lportaudio
#include <portaudio.h>
#include <cmath>

int callback(void*, void* outputBuffer, unsigned long framesPerBuffer, PaTimestamp, void*) {
    float *out = (float*)outputBuffer;
    static float phase;
    for(int i = 0; i < framesPerBuffer; ++i) {
        out[i] = std::sin(phase);
        phase += 0.1f;
    }
    return 0;
}

int main() {
    Pa_Initialize();
    PaStream* stream;
    Pa_OpenDefaultStream(&stream, 0, 1, paFloat32, 44100, 256, 1, callback, NULL);
    Pa_StartStream(stream);
    Pa_Sleep(4000);
}
0 голосов
/ 06 января 2009

В итоге:

  1. Вывод символа BEL на терминал может издать звуковой сигнал - в зависимости от того, какой это терминал и какова его конфигурация. Однако это не контролируется.

  2. Любой звук, который вам нравится, может быть получен путем вывода аудиоданных в / dev / dsp или другое звуковое устройство. Это включает звуковой сигнал, но для создания звука необходимо воспроизвести реальный семпл.

  3. Драйвер консоли обеспечивает (в некоторых конфигурациях) ioctl для / dev / console, который подает звуковой сигнал с настраиваемой высотой (во многом аналогично NT)

0 голосов
/ 05 января 2009

Я бы посоветовал вам взглянуть на источник утилиты beep . это именно то, что вы хотите. (в частности, он открывает «/ dev / console» и использует ioctl для запроса звукового сигнала. обратите внимание, это будет работать только на подключенной консоли)

0 голосов
/ 05 января 2009

Я не знаком с Linux, но вывод символа ascii 0x07, кажется, делает этот трюк из того, что я прочитал с помощью быстрого поиска в Google.

0 голосов
/ 05 января 2009

этот сайт показывает два способа:

char beep[] = {7, ”};
printf(“%c”, beep);

и

Beep(587,500);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...