【问题标题】:Jython: Making a simple beep on WindowsJython:在 Windows 上发出简单的哔声
【发布时间】:2011-05-03 23:39:11
【问题描述】:

我正在与 Sikuli 合作,它(我认为)是基于 Jython 构建的。我想制作一个脚本,发出轻微的哔哔声以吸引用户的注意力。 (这是在 Windows 上。)

我该怎么做?我看到 winsound 模块在 Jython 上不可用。

(注意我要使用声卡,而不是内置蜂鸣器。)

【问题讨论】:

  • 仅供参考,在 Windows 中引起用户注意的标准方法是刷新任务栏;播放声音很烦人。
  • 谢谢。客户要求发出哔哔声。
  • 声音绝非简单,无论操作系统或语言环境如何。在 Jython 中,您使用的是 Java 环境,因此您应该在其中寻找任何不同寻常的东西。
  • 查看仅使用 python 的解决方案:stackoverflow.com/questions/4467240/…

标签: python windows audio jython sikuli


【解决方案1】:

由于您要求一个简单的 Sikuli/Python 脚本,我自己在 Windows 10 上测试了这个:

import java.awt.Toolkit 

class Main():
    def __init__(self):
        # Ask user input. 
        nValue = input('Please enter a value:')
        # Run the beep definition. 
        self.beepAway(nValue)

    def beepAway(self, nValue):
        # Beep nValue number of times, after each beep wait 2 seconds. 
        for i in range(int(nValue)):
            java.awt.Toolkit.getDefaultToolkit().beep()
            wait(2)

# Run class 
Main()

【讨论】:

    【解决方案2】:

    如果您从命令行而不是通过 IDE 运行 Sikuli 脚本,那么您只需将 BEL 字符写入控制台,它就会发出哔哔声。这也适用于 RDP。

    编辑:在 Windows 7 上,这将按照您的要求通过声卡发出哔哔声。在 Windows XP 上,它会向内置扬声器(如果有)发出哔哔声。

    例如以下哔哔声两次:

    print("\007\007")
    

    【讨论】:

      【解决方案3】:

      由于我们可以访问 Sikuli 中的 Java 级别(感谢 Jython),这应该主要工作:

      import java.awt.Toolkit # only once per script
      java.awt.Toolkit.getDefaultToolkit().beep()
      

      在 Windows 7 上通过了测试。 你可能会得到一些详细的解释here

      【讨论】:

        【解决方案4】:

        您可以使用命令行进行以下操作:

        执行“复制 con beep.txt” 输入 [ctrl+G] 作为输入,然后 [ctrl+Z] 然后按 [Enter] 退出

        然后运行 “输入 beep.txt” 你会听到哔哔声。

        您可以将“type beep.txt”放在批处理文件中,也可以直接批处理使用Ctrl+G(这会在命令行中产生带声音的错误)

        【讨论】:

          【解决方案5】:

          由于您使用的是Sikuli,您可以进行以下操作。

          在 Windows 机器的桌面上添加任何媒体文件,例如任何 .mp3,将文件关联到媒体播放器。捕获图像并包括:

          点击(模式(desktopnoiseicon.png)

          您也可以使用 openApp(C:\noise.mp3) 执行相同的任务

          Sikuli 提供了找到多种解决方法的能力

          在 SikuluXrc2 中,您甚至可以从代码中指向 URL,而无需设置捆绑路径

          【讨论】:

            【解决方案6】:

            如果是 Jython,那么只需使用任何播放声音的 Java 类。有很多。

            从java导入网 从 java.applet.Applet 导入 newAudioClip 从java导入io url = io.File("fileName").toURL() 音频 = newAudioClip(url) 音频播放()

            import sun.audio
            import java.io
            inputStream = java.io.FileInputStream("test.wav")
            audioStream = sun.audio.AudioStream(inputStream)
            sun.audio.AudioPlayer.player.start(audioStream)
            

            【讨论】:

            • 有什么方法可以在不处理文件的情况下做到这一点?比如,做一个正弦波之类的?我对Java完全一无所知。
            • 当然,循环遍历:幅值 * (math.sin(frequency * 2 * math.pi * count) 以产生正弦波,其中 count 是时间步长。在迭代时,保存结果,并且您将拥有一组原始声音数据。随心所欲地使用它。
            • 该死的,上面写着cannot import name newAudioClip。可能它不包含在 Sikuli 中。知道该怎么做吗?
            • 嗯,试试看第二个例子。让我知道这是否有效。
            猜你喜欢
            • 1970-01-01
            • 2012-04-21
            • 2015-06-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-09-03
            • 2016-02-22
            • 1970-01-01
            相关资源
            最近更新 更多