Python:winsound.Beep最接近的Linux和OSX版本是什么?

如果有人希望在Windows上发言,Python 2显然提供了一个有用的函数: winsound.Beep() 。 这个函数的精妙之处在于它需要指定嘟嘟声的确切频率和持续时间的参数。 这正是我想要做的,除了我不使用Windows。 所以…

winsound.Beep()适用于Linux和OSX的最接近的等价物是什么,引入尽可能less的依赖关系?

请注意,我希望能够直接发言,而不是播放声音文件。 此外,我需要能够控制嘟嘟声的频率和持续时间,所以curses.beep()print '\a'不会。 最后,我知道PyGame提供了广泛的声音function,但是由于我不需要任何PyGame的其他function,就好像使用大锤来破解一个坚果(无论如何,我试图消除依赖关系越远越好)。

Solutions Collecting From Web of "Python:winsound.Beep最接近的Linux和OSX版本是什么?"

我在这里找到了一个潜在的解决方案: http : //bytes.com/topic/python/answers/25217-beeping-under-linux

它涉及直接写入/ dev / audio。 不知道它是多么便携,或者它甚至可以工作 – 我不在Linux机器上。

 def beep(frequency, amplitude, duration): sample = 8000 half_period = int(sample/frequency/2) beep = chr(amplitude)*half_period+chr(0)*half_period beep *= int(duration*frequency) audio = file('/dev/audio', 'wb') audio.write(beep) audio.close() 

winsound只适用于windows,除了打印“/ a”之外,我找不到任何跨平台的方法来做到这一点。 但是,您无法通过此设置频率和持续时间。

但是,可以尝试使用os.system命令对系统命令beep执行相同的操作。 这里是一个片段,它以独立于平台的方式定义函数播放

 try: import winsound except ImportError: import os def playsound(frequency,duration): #apt-get install beep os.system('beep -f %s -l %s' % (frequency,duration)) else: def playsound(frequency,duration): winsound.Beep(frequency,duration) 

欲了解更多信息,请看这个博客

编辑:您将需要安装在Linux上的哔声包运行哔声命令。 你可以通过发出命令来安装

 sudo apt-get install beep 

我能看到的最轻量级的跨平台层是“PortAudio”。 这被R用在他们的软件包中,将平台特定的驱动程序调用打包成数组化的简单播放/记录数字化波形。 MIT的好人为此产生了一个Python绑定,但是你需要包含编译后的.dll / .so才能正常工作。 http://people.csail.mit.edu/hubert/pyaudio/

(libao与Ogg / Vorbis的制作者Xiph类似,包装pyao存在,但这似乎不太广泛使用)

SoX是一套优秀的跨平台工具,具有更多的格式转换和读取文件等功能。

使用ctypes从Python调用驱动程序是可行的,但非常混乱,即使是最简单的传统WinMM。

我发现了3种Linux的方法:

  • 使用Linux evdev API的新方法,可以与input组中的任何用户( 例如源代码 )
  • 旧的方法使用fcntl/dev/console (需要root权限)( 示例源代码 )
  • 直接使用subprocess os.systemos.system调用beep命令(较慢且必须安装在系统中)。

在这里可以看到我的tone()函数 。