Python: ส่งเสียงบี๊บ


104

ฉันกำลังพยายามให้โปรแกรมส่งเสียงบี๊บ ฉันใช้เครื่อง 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()

UPDATE: เนื่องจากฉันทำให้เพื่อนร่วมงานรำคาญด้วยเสียงบี๊บ ฉันสามารถเอามันมาผ่านแจ็คเสียงสำหรับหูฟังได้หรือไม่?


4
คุณต้องการให้เครื่องสแกนบาร์โค้ดส่งเสียงดังหรือเครื่อง windows เชื่อมต่อด้วยหรือไม่?
Setheron

เครื่อง windows ฉันคิดว่าเครื่องสแกนบาร์โค้ดจะทำด้วยตัวเอง
Marc Brigham

11
Re "Update": ใช่มันเป็นความจริงที่ทราบกันดีว่าเสียงบี๊บนั้นน่ารำคาญ :)
jforberg

2
@CharlieParker เพราะ win sound สำหรับ windows พิมพ์ "\ a" แทน
noɥʇʎԀʎzɐɹƆ

คำตอบ:


162

ใน 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()สามารถนำมาใช้ในทุกที่ที่คุณต้องการเสียงเตือนจะเกิดขึ้น


14
อันนี้เรียบร้อย:def annoy(): for i in range(1, 10): winsound.Beep(i * 100, 200)
Skurmedel

9
หรือ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

1
บน windows winsound เสียงบี๊บถูกส่งไปทั่วหน้าต่างเสียง
Jakob Bowyer

ฉันใช้ Mac ไม่พบสิ่งนี้ใน pip repo?
Volatil3

น่าสนใจไม่มีอยู่ในสภาพแวดล้อมงูใหญ่ของฉัน ... แปลกมั้ย?
Charlie Parker

135

print('\a')วิธีข้ามแพลตฟอร์มการทำเช่นนี้คือการ สิ่งนี้จะส่งอักขระ ASCII Bell ไปยัง stdout และหวังว่าจะสร้างเสียงบี๊บ (a สำหรับ 'alert') โปรดทราบว่าตัวเลียนแบบเทอร์มินัลสมัยใหม่จำนวนมากมีตัวเลือกในการละเว้นอักขระระฆัง

เนื่องจากคุณใช้ Windows คุณยินดีที่จะทราบว่า Windows มีBeep API (รั้งตัวเอง) เป็นของตัวเองซึ่งช่วยให้คุณสามารถส่งเสียงบี๊บตามความยาวและระดับเสียงโดยพลการ โปรดทราบว่านี่เป็นโซลูชันสำหรับ Windows เท่านั้นดังนั้นคุณควรเลือกprint('\a')เว้นแต่คุณจะสนใจเรื่องเฮิรตซ์และมิลลิวินาทีจริงๆ

Beep API สามารถเข้าถึงได้ผ่านโมดูลwinsound : http://docs.python.org/library/winsound.html


1
แม้ว่าเขาจะถามเฉพาะสำหรับ Windows แต่ฉันคิดว่านี่เป็นวิธีแก้ปัญหาที่ดีกว่าเว้นแต่ WinSound API จะเปลี่ยนกลับเป็น \ a สำหรับ OS ที่เป็นอิสระ มี API เสียงมากมายเช่นกัน
Setheron

2
ตรงไปตรงมาฉันจะหลีกเลี่ยงการเล่นเสียงบี๊บจากลำโพง PC โดยสิ้นเชิงในการเขียนโปรแกรมอย่างจริงจัง ถ้าเขาใช้ Windows จริงๆเขาน่าจะลองเล่นสัญญาณ "แจ้งเตือน" เริ่มต้นของธีมระบบแทน ด้วยความโชคดีสัญญาณนั้นสามารถเข้าถึงได้ผ่านแพ็คเกจ GUI ที่เขาใช้อยู่
jforberg

1
หากคุณใช้การพิมพ์ในแอปคอนโซลให้ลองเพิ่ม end = "" เพื่อป้องกันการขึ้นบรรทัดใหม่ทุกครั้งที่คุณส่งเสียงบี๊บ
Tony

2
@jforberg API สำหรับสิ่งนั้นคือwinsound.MessageBeepซึ่งสามารถใช้ MB_ICONASTERISK, MB_ICONEXCLAMATION, MB_ICONHAND, MB_ICONQUESTION และ MB_OK
Peter Wood

2
หากคุณใช้ Python 3 อย่าลืมใช้วงเล็บมิฉะนั้นคุณจะได้รับข้อผิดพลาดทางไวยากรณ์ ใช้การพิมพ์ ('\ a')
ZorroDeLaArena

29

ลินุกซ์

$ 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
โหวตลงด้วยเหตุผลสองประการประการแรก GNU / Linux! = Debian และ apt-get ไม่เป็นสากล ประการที่สองคุณไม่ควรใช้ os.system ให้ใช้โมดูลกระบวนการย่อยแทน
เบ็น

1
ในฐานะผู้ใช้ลินุกซ์ที่พยายามขอเสียงบี๊บที่เรียบง่ายและราคาถูกเมื่อโค้ดยาวเสร็จสิ้นนี่เป็นวิธีที่ง่ายที่สุด ฉันชอบกริ๊งเล็ก ๆ เป็นพิเศษ! โปรดทราบว่าคุณอาจต้องเรียก "sudo modprobe pcspkr" และติดตั้งเสียงบี๊บก่อนที่ตัวเลือกนี้จะใช้งานได้ตามaskubuntu.com/questions/19906/beep-in-shell-script-not-working
John Haberstroh

6
os.systemเป็นเรื่องปกติโดยเฉพาะค่าฮาร์ดโค้ดไม่ใช่ทุกคนที่เขียนเว็บเซิร์ฟเวอร์
cz

พิมพ์ผิด-f 1047-lควร-f 1047 -lเว้นวรรค
bartekbrak

@ เบ็นคำถามเก่า แต่ fwiw ดูเหมือนจะค่อนข้างรุนแรงที่จะลงคะแนนนี้ คำถามเกี่ยวข้องกับพื้นที่ที่ไม่มีโซลูชันข้ามแพลตฟอร์มอย่างที่ฉันเข้าใจ คำตอบที่ยอมรับ 140 ไลค์เป็นเฉพาะ Windows และคุณไม่ได้อธิบายว่าเหตุใดโมดูลที่ถูกต้องจึง "ไม่ดี"
geotheory

17

ฉันกำลังค้นหาสิ่งเดียวกัน แต่สำหรับ Linux shell

หัวข้อนี้นำฉันไปสู่คำตอบ - ขอบคุณ -

อาจมีลักษณะ 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คือไม่มีการแสดงผลอีกต่อไป
  • สุดท้าย ';' after sleepเป็นสิ่งที่จำเป็นสำหรับลำดับข้อความผลลัพธ์ (* x)
  • ยังทดสอบผ่าน ssh ในระยะ X

4
Python มีคุณสมบัติเทียบเท่ากับทั้งสองecho( print) และsleepดังนั้นจึงไม่ใช่ pythonic ที่จะโทรผ่านภายนอกโดยเฉพาะอย่างยิ่งเมื่อเป็นการโทร Unix (ไม่พกพา)
Eric O Lebigot

(3) หมายถึงอะไร?
bumbumpaw

13

มีคำตอบของ Windows และคำตอบ Debian ดังนั้นนี่คือMacหนึ่ง:

นี่ถือว่าคุณอยู่ที่นี่กำลังมองหาวิธีที่รวดเร็วในการสร้างเสียงเตือนที่ปรับแต่งได้และไม่ใช่เฉพาะเสียงบี๊บเพียโซอิเล็กทริกที่คุณได้รับบน Windows:

os.system( "say beep" )

คำเตือน: คุณสามารถแทนที่os.systemด้วยการโทรไปยังsubprocessโมดูลได้หากคุณกังวลว่าจะมีคนแฮ็กรหัสเสียงบี๊บของคุณ

ดู: วิธีทำให้ฮาร์ดแวร์มีเสียงบี๊บใน Mac OS X 10.6


7

วิธีข้ามแพลตฟอร์ม:

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

2
@jstrieb - นี่คือโปรแกรมแบบสแตนด์อโลนขนาดเล็ก ความสำคัญในความสมบูรณ์ของมันเอง
FooBar167

3

ฉันได้ทำแพ็คเกจเพื่อการนั้น

คุณสามารถใช้มันได้ดังนี้:

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

ขึ้นอยู่กับsoxและรองรับเฉพาะ python3


1
ลองติดตั้ง pip3 pybeep
qed

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()


-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
แม้ว่าจะสามารถเล่นไฟล์ได้audio.mp3แต่ก็ไม่ได้ให้คำตอบสำหรับคำถามเดิม
Steven
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.