Python:ビープ音を鳴らす


97

私はビープ音を出すようにプログラムを取得しようとしています。私はWindowsマシンを使っています。私はhttp://docs.python.org/library/winsound.htmlを見てきました

しかし、バーコードスキャナーでこれをどのようにプログラムできるかわかりません。

これがシリアルバーコードスキャナーの私のコードです。

ser = serial.Serial()
ser.baudrate = 9600

#for windows
ser.port = 2 #for COM3

ser.open()
ser.write('hello')
ser.close()

更新:私は同僚にビープ音で迷惑を掛けているので。ヘッドフォンのオーディオジャックから取得できますか?


4
バーコードスキャナーで異音を発生させたいですか、それとも接続されているWindowsマシンでもそうですか?
Setheron、2011年

Windowsマシン。バーコードスキャナーはそれ自体で機能すると思います
Marc Brigham '30

9
「更新」について:
うん

OS Xで動作するものはありますか?winsoundモジュールが見つからないようです。
チャーリーパーカー

2
勝つためのサウンドはWindows用であるため、@ CharlieParker。代わりに「\ a」を出力します。
noɥʇʎԀʎzɐɹƆ

回答:


144

Windowsで、コンピューターにビープ音を鳴らしたいだけの場合:

import winsound
frequency = 2500  # Set Frequency To 2500 Hertz
duration = 1000  # Set Duration To 1000 ms == 1 second
winsound.Beep(frequency, duration)

winsound.Beep()あなたはビープ音が発生したいところはどこでも使用することができます。


12
これはきちんとしています:def annoy(): for i in range(1, 10): winsound.Beep(i * 100, 200)
Skurmedel

8
またはdef sos(): for i in range(0, 3): winsound.Beep(2000, 100) for i in range(0, 3): winsound.Beep(2000, 400) for i in range(0, 3): winsound.Beep(2000, 100)。たぶん今は仕事に戻るべきだろう:D
Skurmedel '30

1
Windowsの場合、winsound.BeepはWindowsのサウンド全体で使用されます。
Jakob Bowyer

私はMacを使用していますが、pipリポジトリでこれを見つけることができませんか?
Volatil3 2016

興味深い、それは私のアナコンダ環境には存在しません...それは変ですか?
チャーリーパーカー

127

これを行うためのクロスプラットフォームの方法はprint '\a'です。これにより、ASCIIベル文字が標準出力に送信され、ビープ音(警告音)が生成されます。最近の多くの端末エミュレータには、ベル文字を無視するオプションがあることに注意してください。

Windowsを使用しているので、Windowsには独自の(自分をサポートするBeep APIがあり、任意の長さとピッチのビープ音を送信できることをうれしく思います。これはWindowsのみのソリューションであるため、print '\a'ヘルツとミリ秒を本当に気にしない限り、おそらく好むはずです。

ビープ音のAPIを介してアクセスされるwinsoundのモジュール:http://docs.python.org/library/winsound.html


1
彼は特にWindowsを求めましたが、WinSound APIがOSに依存しないために\ aに戻らない限り、これは全体的に優れたソリューションだと思います。オーディオAPIもたくさんあります
Setheron

2
率直に言って、私は真面目なプログラミングの努力でPCスピーカーのビープ音をまったく鳴らさないようにしました。彼が本当にWindowsを使用している場合は、代わりにシステムテーマのデフォルトの「アラート」信号を再生してみてください。運が良ければ、その信号は彼が使用しているGUIパッケージからアクセスできます。
jforberg

1
コンソールアプリで印刷を使用する場合は、ビープ音が鳴るたびに改行が入らないように、end = ""を追加することを検討してください。
トニー・

1
@jforbergそのためのAPIがあるwinsound.MessageBeep MB_ICONASTERISK、MB_ICONEXCLAMATION、MB_ICONHAND、MB_ICONQUESTION、およびMB_OKを取ることができました。
Peter Wood

1
Python 3を使用している場合は、括弧を使用することを忘れないでください。そうしないと、構文エラーが発生します。print( '\ a')を使用
ZorroDeLaArena

27

Linux。

$ apt-get install beep

$ python
>>> os.system("beep -f 555 -l 460")

または

$ beep -f 659 -l 460 -n -f 784 -l 340 -n -f 659 -l 230 -n -f 659 -l 110 -n -f 880 -l 230 -n -f 659 -l 230 -n -f 587 -l 230 -n -f 659 -l 460 -n -f 988 -l 340 -n -f 659 -l 230 -n -f 659 -l 110 -n -f 1047-l 230 -n -f 988 -l 230 -n -f 784 -l 230 -n -f 659 -l 230 -n -f 988 -l 230 -n -f 1318 -l 230 -n -f 659 -l 110 -n -f 587 -l 230 -n -f 587 -l 110 -n -f 494 -l 230 -n -f 740 -l 230 -n -f 659 -l 460

12
2つの理由で反対票を投じました:まず、GNU / Linux!= Debianとapt-getは普遍的ではありません。次に、os.systemを使用するのではなく、代わりにsubprocessモジュールを使用してください。
ベン

1
Linuxユーザーは、長いコードが終了したときにシンプルで安価なビープ音を鳴らそうとしているため、これがはるかに簡単な解決策でした。私は特に小さなジングルが大好きでした!askubuntu.com/questions/19906/beep-in-shell-script-not-working
John Haberstroh

4
os.system特にハードコードされた値では問題ありませんが、誰もがウェブサーバーを書いているわけではありません。
2018

typo -f 1047-l、する必要があります-f 1047 -l、スペースがありません
bartekbrak

@ベン古い質問ですが、これを否定するのはかなり厳しいようです。問題は、私が理解しているように、クロスプラットフォームソリューションがない領域に関係しています。140のいいね!で受け入れられた回答はWindows固有です。そして、正当なモジュールが「悪い」習慣である理由を説明しません。
地球理論

17

私は同じことを探していましたが、Linuxシェルを探していました。

トピックは私に答えをもたらしました-thanks-

多分もっとpythonicな方法:

import os
beep = lambda x: os.system("echo -n '\a';sleep 0.2;" * x)
beep(3)

ノート :

  • スリープ値(ここでは0.2)は、デフォルトのビープ音の長さ(秒)に依存します
  • 私は単純化のためにos.systemではなく使用することを選択しましたsubprocess.Popen(それは悪いかもしれません)
  • 「-n」echoは、これ以上表示しないことです
  • 最後 ';' 後にsleep得られたテキスト列のために必要である(* X)
  • X用語でsshを介してもテストされました

3
Pythonにはechoprint)との両方に相当するものがあるsleepため、特に(移植性のない)Unix呼び出しの場合、外部呼び出しを通過することは実際にはpythonicではありません。
Eric O Lebigot 2017

(3)はどういう意味ですか?
bumbumpaw

9

Windowsの回答とDebianの回答があるので、Macの回答を次に示します。

これは、カスタマイズ可能なアラート音を鳴らすための簡単な方法を探しているだけで、特にWindowsで発生する圧電ビープ音を探しているわけではありません。

os.system( "say beep" )

免責事項:誰かがあなたのビープコードをハッキングすることを心配している場合はos.systemsubprocessモジュールの呼び出しに置き換えることができます。

参照:Mac OS X 10.6でハードウェアビープ音を鳴らす方法


6

クロスプラットフォームの方法:

import time
import sys
for i in range(1,6):
    sys.stdout.write('\r\a{i}'.format(i=i))
    sys.stdout.flush()
    time.sleep(1)
sys.stdout.write('\n')

5
これの唯一の重要な部分はsys.stdout.write('\a')
jstrieb

1
@jstrieb-これは小さなスタンドアロンプ​​ログラムです。完全性自体におけるその重要性。
FooBar167 2018年

4

そのためのパッケージを作りました。

次のように使用できます。

from pybeep.pybeep import PyVibrate, PyBeep
PyVibrate().beep()
PyVibrate().beepn(3)
PyBeep().beep()
PyBeep().beepn(3)

それはsoxに依存し、python3のみをサポートします。


1
pip3 install pybeepを試してください。
16

1
soxをインストールしなければならないことを知ってください。run:brew install sox
Jam M. Hernandez Q.

3

pygame任意のプラットフォームで使用

を使用する利点はpygame、どのOSプラットフォームでも動作するようにできることです。以下のサンプルコードは、GNU / Linux用ですが。

まず、インストールpygame用のモジュールpython3として、ここでは詳細に説明します

$ sudo pip3 install pygame

pygameモジュールは、再生することができます.wavし、.ogg任意のファイルの場所からのファイル。次に例を示します。

#!/usr/bin/env python3
import pygame
pygame.mixer.init()
sound = pygame.mixer.Sound('/usr/share/sounds/freedesktop/stereo/phone-incoming-call.oga')
sound.play()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.