Python: Phát ra tiếng bíp


97

Tôi đang cố làm cho chương trình phát ra một tiếng bíp. Tôi đang sử dụng máy tính cửa sổ. Tôi đã xem http://docs.python.org/library/winsound.html

Nhưng không chắc làm thế nào tôi có thể lập trình điều này với máy quét mã vạch.

Đây là mã của tôi cho máy quét mã vạch nối tiếp.

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

#for windows
ser.port = 2 #for COM3

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

CẬP NHẬT: Vì tôi đang làm phiền đồng nghiệp của mình bằng tiếng bíp. Tôi có thể làm cho nó đi qua giắc cắm âm thanh cho tai nghe không?


4
Bạn muốn máy quét mã vạch phát ra tiếng ồn hoặc máy windows mà nó được kết nối?
Setheron

máy windows. Tôi nghĩ rằng máy quét mã vạch sẽ làm điều đó bằng cách riêng của mình
Marc Brigham

9
Re "Cập nhật": Đúng, đó là một thực tế nổi tiếng mà tiếng bíp là gây phiền nhiễu :)
jforberg

Có cái gì đó hoạt động cho OS X không? Tôi dường như không thể tìm thấy mô-đun hướng tới.
Charlie Parker

2
@CharlieParker vì win sound dành cho windows. Thay vào đó hãy in "\ a".
noɥʇʎԀʎzɐɹƆ

Câu trả lời:


144

Trên Windows, nếu bạn chỉ muốn máy tính phát ra tiếng bíp:

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

winsound.Beep()thể sử dụng bất cứ nơi nào bạn muốn tiếng bíp phát ra.


12
Cái này là gọn gàng:def annoy(): for i in range(1, 10): winsound.Beep(i * 100, 200)
Skurmedel

8
Hoặc 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). Tôi có lẽ nên trở lại làm việc bây giờ: D
Skurmedel

1
Trên cửa sổ winound.Beep được truyền qua các cửa sổ Âm thanh.
Jakob Bowyer

Tôi đang sử dụng Mac, không thể tìm thấy điều này trên pip repo?
Volatil3

thú vị, nó không tồn tại trong môi trường anaconda của tôi ... điều đó thật kỳ lạ phải không?
Charlie Parker

127

Cách đa nền tảng để làm điều này là print '\a'. Điều này sẽ gửi ký tự ASCII Bell đến stdout và hy vọng sẽ tạo ra một tiếng bíp (một cho 'cảnh báo'). Lưu ý rằng nhiều trình giả lập đầu cuối hiện đại cung cấp tùy chọn bỏ qua các ký tự chuông.

Vì bạn đang sử dụng Windows, bạn sẽ rất vui khi biết rằng Windows có API tiếng bíp của riêng mình , cho phép bạn gửi các tiếng bíp có độ dài và cao độ tùy ý. Lưu ý rằng đây là giải pháp chỉ dành cho Windows, vì vậy bạn có thể nên thích hơn print '\a'trừ khi bạn thực sự quan tâm đến Hertz và mili giây.

API Beep được truy cập thông qua mô-đun winound : http://docs.python.org/library/winsound.html


1
Mặc dù anh ấy đã hỏi cụ thể về Windows, nhưng tôi nghĩ rằng đây là giải pháp tốt hơn, trừ khi WinSound API sẽ hoàn nguyên về \ a cho hệ điều hành độc lập. Có rất nhiều các API âm thanh cũng
Setheron

2
Thành thật mà nói, tôi sẽ tránh phát toàn bộ tiếng bíp của loa PC trong một nỗ lực lập trình nghiêm túc. Nếu thực sự đang sử dụng Windows, có lẽ anh ấy nên thử phát tín hiệu "cảnh báo" mặc định của chủ đề hệ thống. Với bất kỳ sự may mắn nào, tín hiệu đó có thể truy cập được thông qua bất kỳ gói GUI nào anh ta đang sử dụng.
jforberg

1
Nếu bạn sử dụng print trong ứng dụng bảng điều khiển, hãy cân nhắc thêm end = "" để ngăn dòng mới mỗi khi bạn phát ra tiếng bíp.
Tony

1
@jforberg Api cho điều đó là winound.MessageBeep có thể lấy MB_ICONASTERISK, MB_ICONEXCLAMATION, MB_ICONHAND, MB_ICONQUESTION và MB_OK.
Peter Wood

1
Nếu bạn đang sử dụng Python 3, đừng quên sử dụng dấu ngoặc đơn, nếu không bạn sẽ gặp lỗi cú pháp. Sử dụng print ('\ a')
ZorroDeLaArena

27

Linux.

$ apt-get install beep

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

HOẶC LÀ

$ 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
Bị từ chối vì hai lý do: thứ nhất, GNU / Linux! = Debian và apt-get không phổ biến; thứ hai, bạn không nên sử dụng os.system, thay vào đó hãy sử dụng mô-đun quy trình con.
Ben

1
Là một người dùng linux cố gắng phát ra tiếng bíp đơn giản và rẻ tiền khi một đoạn mã dài kết thúc, đây là giải pháp dễ dàng nhất. Tôi đặc biệt yêu thích tiếng leng keng nhỏ! Lưu ý rằng bạn có thể phải gọi "sudo modprobe pcspkr" và cài đặt tiếng bíp trước khi tùy chọn này hoạt động, theo askubuntu.com/questions/19906/beep-in-shell-script-not-working
John Haberstroh

4
os.systemlà tốt, đặc biệt là với giá trị mã hóa cứng, không phải ai cũng viết một máy chủ web.
cz

lỗi đánh máy -f 1047-l, nên có -f 1047 -l, thiếu dấu cách
bartekbrak

@Ben Câu hỏi cũ, nhưng fwiw nó có vẻ khá khắc nghiệt để từ chối điều này. Câu hỏi liên quan đến một lĩnh vực không có giải pháp đa nền tảng như tôi hiểu. Câu trả lời được chấp nhận với 140 lượt thích là dành riêng cho Windows. Và bạn không giải thích tại sao một mô-đun hợp pháp là thực hành "xấu".
geotheory

17

Tôi đã tìm kiếm tương tự nhưng cho Linux shell.

Chủ đề đã đưa tôi đến một câu trả lời, -cảm ơn-

Có thể nhiều cách khác của trăn:

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

Ghi chú:

  • giá trị ngủ (ở đây là 0,2), phụ thuộc vào độ dài (giây) của tiếng bíp mặc định của bạn
  • Tôi đã chọn để sử dụng os.systemthay subprocess.Popenvì đơn giản hơn (nó có thể là xấu)
  • '-n' echolà không còn hiển thị nữa
  • cuối cùng ';' sau sleeplà cần thiết cho chuỗi văn bản kết quả (* x)
  • cũng được kiểm tra thông qua ssh trên một thuật ngữ X

3
Python có một hàm tương đương với cả hai echo( print) và sleep, vì vậy thực sự không khó khi thực hiện các lệnh gọi bên ngoài, đặc biệt khi chúng là các lệnh gọi Unix (không di động).
Eric O Lebigot

(3) có nghĩa là gì?
bumbumpaw

9

Có một câu trả lời Windows và một câu trả lời Debian, vì vậy đây là một câu trả lời dành cho Mac :

Điều này giả định rằng bạn đang ở đây để tìm kiếm một cách nhanh chóng để tạo ra âm thanh cảnh báo có thể tùy chỉnh, chứ không phải cụ thể là tiếng bíp áp điện mà bạn nhận được trên Windows:

os.system( "say beep" )

Tuyên bố từ chối trách nhiệm: Bạn có thể thay thế os.systembằng một cuộc gọi tới subprocessmô-đun nếu bạn lo lắng về việc ai đó hack mã bíp của bạn.

Xem: Cách tạo tiếng bíp phần cứng trong Mac OS X 10.6


6

Cách đa nền tảng:

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
Phần quan trọng duy nhất của điều này làsys.stdout.write('\a')
jstrieb

1
@jstrieb - đây là một chương trình độc lập nhỏ. Tầm quan trọng của nó trong sự hoàn chỉnh của chính nó.
FooBar167,

4

Tôi đã thực hiện một gói cho mục đích đó.

Bạn có thể sử dụng nó như thế này:

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

Nó phụ thuộc vào sox và chỉ hỗ trợ python3.


1
Thử cài đặt pip3 pybeep.
qed

1
Chỉ cần biết rằng bạn phải cài đặt sox. run: brew install sox
Jam M. Hernandez Q.

3

Sử dụng pygametrên mọi nền tảng

Lợi thế của việc sử dụng pygamelà nó có thể được thực hiện để hoạt động trên bất kỳ nền tảng hệ điều hành nào. Mã ví dụ dưới đây là dành cho GNU / Linux .

Đầu tiên hãy cài đặt pygamemô-đun python3như được giải thích chi tiết tại đây .

$ sudo pip3 install pygame

Các pygamemô-đun có thể chơi .wav.oggtập tin từ bất kỳ vị trí tập tin. Đây là một ví dụ:

#!/usr/bin/env python3
import pygame
pygame.mixer.init()
sound = pygame.mixer.Sound('/usr/share/sounds/freedesktop/stereo/phone-incoming-call.oga')
sound.play()
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.