




Я не знаком с Linux, но вывод символа ascii 0x07, похоже, делает этот трюк из того, что я прочитал с помощью быстрого поиска в Google.
Это не помогает OP. ОП уточнил, что ему нужны разные частоты.
Ознакомьтесь с исходным кодом звукового сигнала, доступным в Ubuntu (и, возможно, в других дистрибутивах), или посмотрите http://www.johnath.com/beep/beep.c для другого источника (я думаю, это тот же код).
Это позволяет вам легко контролировать частоту, длину и повторы (среди прочего).
Я считаю, что вам нужны root-права, чтобы настроить особенности звукового сигнала PC-Speaker, по крайней мере, под X вы это делаете.
Не с этим кодом, я использую его прямо из учетной записи пользователя. Я думаю, что элемент управления предоставляется через стандартный интерфейс драйвера устройства ioctl ().
Предлагаю вам посмотреть исходники утилиты писк. это делает именно то, что вы хотите. (в частности, он открывает "/ dev / console" и использует ioctl для запроса звукового сигнала. Обратите внимание, что это будет работать только на подключенной консоли)
давай нам немного габба, исходящего из аудиоколонок
#!/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,0 и, возможно, перемотать ее, если она больше 2pi, т.е. if (phase> 2 * M_PI) phase - = 2 * M_PI, иначе вы придете к точке, где phase + 0.1f == phase. Я не рассчитал, когда это произойдет, хотя :)
хорошая точка зрения. или фаза может быть целым числом, и я бы взял грех (фаза / 10.0)
В итоге:
Вывод символа BEL на терминал может вызвать звуковой сигнал - в зависимости от того, что это за терминал и какова его конфигурация. Однако контроля над этим нет.
Любой звук, который вам нравится, может быть воспроизведен путем вывода аудиоданных в / dev / dsp или другое звуковое устройство. Это включает в себя звуковой сигнал, но создание звука требует воспроизведения фактического семпла.
Драйвер консоли предоставляет (в некоторых конфигурациях) ioctl для / dev / console, который издает звуковой сигнал с настраиваемой высотой тона (как в NT).
Не работает. Кавычки Unicode немедленно останавливают компиляцию с ошибкой, и я даже не знаю, что вы пытаетесь сделать с
{7,"}(который также вызывает ту же ошибку)