【问题标题】:make sounds (beep) with c++用 C++ 发出声音(哔)
【发布时间】:2011-05-02 21:57:53
【问题描述】:

如何用c++使硬件发出哔哔声?

【问题讨论】:

标签: c++


【解决方案1】:

这是一种方法:

cout << '\a';

来自C++ Character Constants

警报:\a

【讨论】:

    【解决方案2】:

    最简单的方法可能只是打印一个 ^G ascii 铃声

    【讨论】:

    • stdout,也许? namespace std 中没有名为 out 的对象。
    【解决方案3】:
    std::cout << '\7';
    

    【讨论】:

      【解决方案4】:

      打印特殊字符 ASCII BEL(代码7)

      cout << '\a';
      

      Source

      【讨论】:

      • 这来自扬声器。如何让内部主板发出哔声而不是扬声器?
      • 这取决于操作系统。旧的 MS-DOS 触发了主板声音。如果您运行的是最新的操作系统,我希望内核从扬声器触发音频信号,而不是使用硬件
      • 这不行我试了全卷,我的g++版本是g++ (Ubuntu 9.3.0-10ubuntu2) 9.3.0
      【解决方案5】:

      如果您使用的是 Windows 操作系统,则有一个名为 Beep() 的函数

      #include <iostream> 
      #include <windows.h> // WinApi header 
      
      using namespace std;
      
      int main() 
      { 
          Beep(523,500); // 523 hertz (C5) for 500 milliseconds     
          cin.get(); // wait 
          return 0; 
      }
      

      来源:http://www.daniweb.com/forums/thread15252.html

      对于基于 Linux 的操作系统,有:

      echo -e "\007" >/dev/tty10
      

      如果你不想在 Windows 中使用Beep(),你可以这样做:

      echo "^G"
      

      来源:http://www.frank-buss.de/beep/index.html

      【讨论】:

      • 这不是标准的 C++。我们甚至不知道他是否在使用 Windows。
      • 操作系统从未在问题或标签中提及
      • 我不是 C++ 程序员,主要是 C#,但认为该资源会有所帮助,不认为值得投反对票,但这是您的特权
      • +1 考虑到这个问题“甚至没有错”,这是一个很好的答案。
      • 对于最后一个,当我输入^G 时,这不起作用。它仅在按下Ctrl+G 时有效。尽管输入时字符串看起来相同,但它们是不同的,并且打印方式也不同。
      【解决方案6】:

      ASCII 响铃字符可能就是您要找的。 this 表中的第 7 位。

      【讨论】:

        【解决方案7】:

        有一些特定于操作系统的例程用于发出哔哔声。

        • 在类 Unix 操作系统上,尝试the (n)curses beep() function。这可能比其他人建议的写 '\a' 更便携,尽管对于大多数终端仿真器来说这可能会起作用。

        • 在某些 *BSD 中有一个 PC speaker device。阅读驱动程序源代码,SPKRTONE ioctl 似乎对应于原始硬件接口,但似乎还有一种围绕驱动程序的write()-ing 字符串构建的高级语言,如手册页中所述。

        • 看起来 Linux 也有类似的驱动程序(例如,请参阅 this article;如果向下滚动一点,this page 上还有一些示例代码。)。

        • 在 Windows 中有一个名为 Beep() 的函数。

        【讨论】:

        • '\a' 由 C++ 标准定义,具有极强的可移植性。当然,如果您使用的是损坏的终端软件,所有的赌注都没有了,但是 Win32 控制台子系统和大多数 xterm 克隆所有进程 '\a' 都正确。
        • @Ben Voigt:如果我错了,请纠正我,但 C++ 标准只指定 '\a' 将表示一个 ASCII BEL 字符;但它从未指定将此类字符发送到标准输出时程序的行为应该是什么。正如您所说,ASCII BEL == '\a' 的部分非常便携,但哔哔声部分是完全未定义的行为。
        • @Ben:就我而言,如果终端软件没有有关闭铃声的方法,它就会损坏。
        • @Steve:我同意,但我不明白这个问题是“当用户明确关闭声音时,你如何发出哔声?”
        【解决方案8】:
        cout << "\a";
        

        在 Xcode 中,编译后,你必须手动运行可执行文件才能听到哔声。

        【讨论】:

          【解决方案9】:

          在包含 stdio.h 之后也可以在 c 或 c++ 中使用

          char d=(char)(7);
          printf("%c\n",d);
          

          (char)7 称为铃符。

          【讨论】:

            【解决方案10】:
            #include<iostream>
            #include<conio.h>
            #include<windows.h>
            using namespace std;
            
            int main()
            {
            
                Beep(1568, 200);
                Beep(1568, 200);
                Beep(1568, 200);
                Beep(1245, 1000);
                Beep(1397, 200);
                Beep(1397, 200);
                Beep(1397, 200);
                Beep(1175, 1000);
            
            cout<<endl;
            _getch()
            
            return 0
            }
            

            【讨论】:

              【解决方案11】:

              你可以使用条件编译:

              #ifdef WINDOWS
              #include <Windows.h>
              void beep() {
                Beep(440, 1000);
              }
              #elif LINUX
              #include <stdio.h>
              void beep() {
                system("echo -e "\007" >/dev/tty10");
              }
              #else
              #include <stdio.h>
              void beep() {
                cout << "\a" << flush;
              }
              #endif
              

              【讨论】:

              【解决方案12】:

              我在这里尝试了大多数东西,但在我的 Ubuntu 虚拟机上都没有。

              这是一个快速的 hack(学分去here):

              #include <iostream>
              int main() {
                system("(speaker-test -t sine -f 1000)& pid=$!; sleep 1.0s; kill -9 $pid");
              }
              

              它基本上会使用系统的speaker-test 来产生声音。不过这不会很快终止,因此该命令在后台运行它(&amp; 部分),然后捕获它的进程 ID(pid=$1 部分),休眠一定量,您可以更改(sleep 1.0s 部分) 然后它会终止该进程(kill -9 $pid 部分)。

              sine 是产生的声音。您可以将其更改为 pinkwav 文件。

              【讨论】:

                猜你喜欢
                • 2012-04-21
                • 1970-01-01
                • 1970-01-01
                • 2020-09-03
                • 1970-01-01
                • 2018-08-11
                • 2018-08-30
                • 1970-01-01
                相关资源
                最近更新 更多