【发布时间】:2010-09-29 14:13:52
【问题描述】:
我正在 Windows 上尝试 Beep 功能:
#include <windows.h>
...
Beep(frequency, duration);
然后计算机会在一段时间内以某种频率发出哔哔声。我将如何在 Linux 计算机上执行此操作?
编辑:输出不同的频率很重要。
【问题讨论】:
我正在 Windows 上尝试 Beep 功能:
#include <windows.h>
...
Beep(frequency, duration);
然后计算机会在一段时间内以某种频率发出哔哔声。我将如何在 Linux 计算机上执行此操作?
编辑:输出不同的频率很重要。
【问题讨论】:
查看 Ubuntu(可能还有其他发行版)提供的 beep 源代码,或者查看 http://www.johnath.com/beep/beep.c 以获取其他源代码(我相信它是相同的代码)。
它可以让您轻松控制频率、长度和重复次数(除其他外)。
【讨论】:
让我们有一些来自音频扬声器的 gabba
#!/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);
}
【讨论】:
我不熟悉 Linux,但输出 ascii 字符 0x07 似乎可以解决我通过快速谷歌搜索阅读的内容。
【讨论】:
我建议您查看beep 实用程序的源代码。这正是你想要的。 (具体来说,它会打开“/dev/console”并使用 ioctl 请求哔声。请注意,这仅适用于附加的控制台)
【讨论】:
总结:
将 BEL 字符输出到终端可能会发出哔声 - 取决于终端的类型和配置。然而,这无法控制。
您喜欢的任何声音都可以通过将音频数据输出到 /dev/dsp 或其他声音设备来产生。这包括哔声,但发出声音涉及播放实际样本。
控制台驱动程序(在某些配置中)为 /dev/console 提供了一个 ioctl,它以可配置的音高发出哔哔声(很像 NT 那个)
【讨论】:
【讨论】:
{7,"} 做什么(这也会产生相同的错误)