Python: Bip sesi çıkarma


104

Programın bana bir bip sesi çıkarmasını sağlamaya çalışıyorum. Windows makinesindeyim. Http://docs.python.org/library/winsound.html adresine baktım.

Ama bunu bir barkod tarayıcıyla nasıl programlayabileceğimi bilmiyorum.

İşte seri barkod tarayıcı için kodum.

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

#for windows
ser.port = 2 #for COM3

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

GÜNCELLEME: İş arkadaşlarımı bip sesiyle rahatsız ettiğim için. Kulaklıkların ses jakından gelmesini sağlayabilir miyim?


4
Barkod tarayıcının gürültüyü veya bağlı olduğu Windows makinesini mi yapmasını istiyorsunuz?
Setheron

Windows makinesi. Sanırım barkod tarayıcısı bunu kendi kendine yapacak
Marc Brigham

11
Yeniden "Güncelleme": Evet, bip seslerinin can sıkıcı olduğu bilinen bir gerçek :)
jforberg

2
@CharlieParker çünkü kazanma sesi pencereler içindir. Bunun yerine "\ a" yazdırın.
noɥʇʎԀʎzɐɹƆ

Yanıtlar:


162

Windows'ta, bilgisayarın yalnızca bir bip sesi çıkarmasını istiyorsanız:

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

winsound.Beep()Eğer bip meydana istediğiniz yere kullanılabilir.


14
Bu harika:def annoy(): for i in range(1, 10): winsound.Beep(i * 100, 200)
Skurmedel

9
Veya 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). Muhtemelen şimdi işe dönmeliyim: D
Skurmedel

1
Windows winsound.Beep pencerelerde Sesler arasında taşınır.
Jakob Bowyer

Mac'teyim, bunu pip deposunda bulamıyor musunuz?
Volatil3

ilginç, benim anaconda ortamımda yok ... bu garip mi?
Charlie Parker

135

Bunu yapmanın çapraz platform yolu print('\a'). Bu ASCII Bell karakterini stdout'a gönderecek ve umarız bir bip sesi çıkaracaktır ('uyarı' için). Birçok modern terminal öykünücüsünün çan karakterlerini yoksayma seçeneği sunduğunu unutmayın.

Windows'ta olduğunuz için, Windows'un kendi (kendinizi destekleyin) bir Bip API'sine sahip olduğunu duymaktan mutluluk duyacaksınız , bu da rastgele uzunlukta ve aralıkta bip sesleri göndermenize olanak tanır. Bunun yalnızca Windows için bir çözüm olduğunu unutmayın, bu nedenle print('\a')Hertz ve milisaniyeleri gerçekten önemsemediğiniz sürece muhtemelen tercih etmelisiniz .

Bip API'sine winsound modülü aracılığıyla erişilir : http://docs.python.org/library/winsound.html


1
Özellikle Windows için istemesine rağmen, WinSound API işletim sisteminden bağımsız olarak \ a'ya dönmedikçe, bunun daha iyi bir çözüm olduğunu düşünüyorum. Çok sayıda ses API'si de var
Setheron

2
Açıkçası, ciddi bir programlama çabasıyla PC hoparlöründen bip sesi çalmaktan tamamen kaçınırdım. Gerçekten Windows kullanıyorsa, muhtemelen bunun yerine sistem temasının varsayılan "uyarı" sinyalini oynatmaya çalışmalıdır. Şansınız varsa, o sinyale, kullandığı GUI paketi aracılığıyla erişilebilir.
jforberg

1
Bir konsol uygulamasında yazdırma kullanıyorsanız, her bip sesinizde yeni bir satır olmasını önlemek için end = "" eklemeyi düşünün.
Tony

2
@jforberg Bunun için api winsound.MessageBeep olup MB_ICONASTERISK, MB_ICONEXCLAMATION, MB_ICONHAND, MB_ICONQUESTION ve MB_OK alabilir.
Peter Wood

2
Python 3 kullanıyorsanız, parantez kullanmayı unutmayın, yoksa bir sözdizimi hatası alırsınız. Print ('\ a') kullan
ZorroDeLaArena

29

Linux.

$ apt-get install beep

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

VEYA

$ 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
İki nedenden dolayı olumsuz oy verildi: Birincisi, GNU / Linux! = Debian ve apt-get evrensel değildir; ikinci olarak, os.system kullanmamalısınız, onun yerine alt süreç modülünü kullanın.
Ben

1
Uzun bir kod bittiğinde basit ve ucuz bir bip sesi almaya çalışan bir linux kullanıcısı olarak, bu şimdiye kadar en kolay çözümdü. Özellikle küçük jingle'ı sevdim! Askubuntu.com/questions/19906/beep-in-shell-script-not-working
John Haberstroh

6
os.systemsorun değil, özellikle kodlanmış bir değerle, herkes bir web sunucusu yazmıyor.
cz

yazım hatası -f 1047-l, olmalı -f 1047 -l, boşluk eksik
bartekbrak

@Ben Eski soru, ama fwiw bunu reddetmek oldukça zor görünüyor. Soru, anladığım kadarıyla çapraz platform çözümü olmayan bir alanla ilgili. 140 beğeni ile kabul edilen cevap Windows'a özgüdür. Ve meşru bir modülün neden "kötü" uygulama olduğunu açıklamıyorsun.
geotheory

17

Ben de aynısını arıyordum ama Linux kabuğu için.

Konu beni bir cevaba getirdi -teşekkürler-

Belki daha pitonik bir şekilde:

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

Notlar:

  • uyku değeri (burada 0.2), varsayılan bip sesinizin uzunluğuna (saniye) bağlıdır
  • Daha os.systemçok subprocess.Popenbasitlik için kullanmayı seçtim (kötü olabilir)
  • için '-n' echoartık görünmemek
  • son ';' sleepsonuç metin dizisi için sonra gereklidir (* x)
  • ayrıca bir X teriminde ssh aracılığıyla test edildi

4
Python'un her ikisinin de echo( print) eşdeğeri vardır ve sleepbu nedenle, özellikle (taşınabilir olmayan) Unix çağrıları olduğunda, harici çağrılardan geçmek aslında pitonik değildir.
Eric O Lebigot

(3) ne anlama geliyor?
bumbumpaw

13

Bir Windows yanıtı ve bir Debian yanıtı var, işte bir Mac yanıtı :

Burada, özellikle Windows'ta aldığınız piezeoelektrik bip sesini değil, özelleştirilebilir bir uyarı sesi çıkarmanın hızlı bir yolunu aradığınızı varsayar:

os.system( "say beep" )

Sorumluluk reddi: Birisinin bip kodunuzu hacklemesinden endişeleniyorsanız os.system, subprocessmodül çağrısıyla değiştirebilirsiniz .

Bkz: Mac OS X 10.6'da donanım bip sesi nasıl yapılır


7

Çapraz platform yolu:

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
Bunun tek önemli kısmısys.stdout.write('\a')
jstrieb

2
@jstrieb - bu küçük, bağımsız bir programdır. Tamlığın kendisinde önemi.
FooBar167

3

Bu amaçla bir paket yaptım .

Bunu şu şekilde kullanabilirsiniz:

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

Bu bağlıdır Sox ve sadece python3 destekler.


1
Pip3 kurulum pybeep'i deneyin.
2016

1
Sadece sox yüklemeniz gerektiğini bilin. run: brew install sox
Jam M. Hernandez S.

3

pygameHerhangi bir platformda kullanmak

Kullanmanın avantajı pygame, herhangi bir işletim sistemi platformunda çalışacak şekilde yapılabilmesidir. Aşağıdaki örnek kod GNU / Linux içindir .

Önce pygamemodülü burada ayrıntılıpython3 olarak açıklandığı gibi kurun .

$ sudo pip3 install pygame

pygameModül oynayabilir .wavve .oggherhangi bir dosya yerden dosyaları. İşte bir örnek:

#!/usr/bin/env python3
import pygame
pygame.mixer.init()
sound = pygame.mixer.Sound('/usr/share/sounds/freedesktop/stereo/phone-incoming-call.oga')
sound.play()


-1
# playsound in cross plate form, just install it with pip
#  first install playsound > pip install playsound
from playsound import playsound
playsound('audio.mp3')

2
Bu, dosyayı oynatabilirken audio.mp3, asıl soruya gerçekten bir cevap vermez.
Steven
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.