ส่งเสียงเตือนเมื่อรหัสเสร็จสิ้น


143

ฉันอยู่ในสถานการณ์ที่รหัสของฉันใช้เวลานานมากในการรันและฉันไม่ต้องการที่จะจ้องมองที่มันตลอดเวลา แต่ต้องการที่จะรู้ว่าเมื่อมันทำ

ฉันจะทำให้การเรียงลำดับรหัส (Python) ของเสียงเป็น "สัญญาณเตือน" เมื่อมันเสร็จสิ้นได้อย่างไร ฉันใคร่ครวญทำให้มันเล่นไฟล์. wav เมื่อมันมาถึงจุดสิ้นสุดของรหัส ...

นี่เป็นความคิดที่เป็นไปได้หรือไม่? ถ้าเป็นเช่นนั้นฉันจะทำอย่างไร


คุณใช้ระบบปฏิบัติการอะไร
โทมัส Fenzl

Ubuntu 12.04 และรหัสอยู่ในหลาม
mtigger

4
ฉันสนใจที่จะทราบวิธีการทำเช่นนี้ใน Windows เช่นกัน
Jared Nielsen


คำตอบ:


235

บน Windows

import winsound
duration = 1000  # milliseconds
freq = 440  # Hz
winsound.Beep(freq, duration)

โดยที่ freq คือความถี่ใน Hz และระยะเวลาเป็นมิลลิวินาที

บน Linux และ Mac

import os
duration = 1  # seconds
freq = 440  # Hz
os.system('play -nq -t alsa synth {} sine {}'.format(duration, freq))

soxเพื่อที่จะใช้ตัวอย่างนี้คุณต้องติดตั้ง

บน Debian / Ubuntu / Linux Mint ให้รันสิ่งนี้ในเทอร์มินัลของคุณ:

sudo apt install sox

สำหรับ Mac ให้รันสิ่งนี้ในเทอร์มินัลของคุณ (โดยใช้ macports):

sudo port install sox

Speech บน Mac

import os
os.system('say "your program has finished"')

คำพูดบน Linux

import os
os.system('spd-say "your program has finished"')

คุณต้องติดตั้งspeech-dispatcherแพ็กเกจใน Ubuntu (หรือแพ็คเกจที่เกี่ยวข้องในดิสทริบิวชันอื่น):

sudo apt install speech-dispatcher

1
ขวาคุณต้องดาวน์โหลดมันฉันจะให้ลิงค์ให้ฉันหามัน ... ฉันเพิ่งโพสต์ใหม่สำหรับแม็คที่จะพูดกับคุณดังนั้นมันจะบอกคุณเมื่อเสร็จแล้ว
Ryan Saxe

ขอบคุณ! คุณรู้หรือไม่ว่า linux มีสิ่งหนึ่งที่จะพูดกับคุณเช่นกัน?
mtigger

2
Mine บอกว่าไม่พบการพูดแม้ว่าฉันได้ติดตั้ง sox และ play แล้วก็ตาม แต่ฉันได้พบทางเลือกอื่นแล้ว import os os.system ('espeak "โปรแกรมของคุณเสร็จสิ้น"')
mtigger

ไม่พบ winsound ไม่สามารถใช้กับ OS X ได้หรือไม่
Charlie Parker

1
@CharlieParker หากคุณดูคำตอบทั้งหมดตัวเลือกแรกสำหรับผู้ใช้ windows เท่านั้น คนอื่น ๆ ระบุวิธีการในสภาพแวดล้อมอื่น ๆ ซึ่งรวมถึง OSX
Ryan Saxe


26

ดูเหมือนว่านี่จะใช้ได้ทั้งกับ Windows และ Linux * ( จากคำถามนี้ ):

def beep():
    print("\a")

beep()

ใน Windows สามารถใส่ท้าย:

import winsound
winsound.Beep(500, 1000)

where 500 is the frequency in Herz
      1000 is the duration in miliseconds

ในการทำงานกับ Linux คุณอาจต้องทำสิ่งต่อไปนี้ (จากความคิดเห็นของ QO):

  • ในเทอร์มินัลพิมพ์ 'cd /etc/modprobe.d' จากนั้น 'gksudo gedit blacklist.conf'
  • แสดงความคิดเห็นบรรทัดที่ระบุว่า 'บัญชีดำ pcspkr' แล้วรีบูต
  • ตรวจสอบด้วยว่าการตั้งค่าเครื่องเทอร์มินัลมีการตรวจสอบ 'เทอร์มินัลเบลล์'

1
ขอบคุณ! เพียงแค่เพิ่มอาจต้องเปิดเสียงเทอร์มินัลระฆังใน Ubuntu gnome เพื่อให้ทำงานได้
mtigger

@mtigger คุณช่วยอธิบายวิธีการได้ไหมเพื่อที่เราจะได้อัพเดตคำตอบ ... (หรือคุณสามารถอัปเดตได้)
Saullo GP Castro

1
ในเทอร์มินัลพิมพ์ 'cd /etc/modprobe.d' จากนั้น 'gksudo gedit blacklist.conf' ยกเลิกหมายเหตุบรรทัดที่ระบุว่า 'บัญชีดำ pcspkr' จากนั้นรีบูต ตรวจสอบด้วยว่าการตั้งค่าเครื่องนั้นได้ทำการเลือก
mtigger

วิธีการตรวจสอบ "ว่าการตั้งค่าเทอร์มินัลมีการ" ตรวจสอบเทอร์มินัลเบลล์ "ใน ubuntu 13?
user2384994

"\ a" ใช้ได้กับฉันในระบบย่อย Ubuntu สำหรับ Windows ขอบคุณ !!
Ryan

17

อูบุนตูสามารถใช้คำสั่งตัวแจกจ่าย:

import subprocess
subprocess.call(['speech-dispatcher'])        #start speech dispatcher
subprocess.call(['spd-say', '"your process has finished"'])

แต่เริ่มเล่นเมื่อกระบวนการเสร็จสิ้น
cengizkrbck

นั่นคือพฤติกรรมที่ตั้งใจไว้คุณต้องการเสียงเมื่อกระบวนการเสร็จสิ้น
Ishan Khare

คุณสามารถเพิ่ม-wอาร์กิวเมนต์เพื่อรอในขณะที่ spd-say พูดจบวลี
ruX

8

ฉันสมมติว่าคุณต้องการระฆังระบบมาตรฐานและไม่ต้องการกังวลกับความถี่และระยะเวลาอื่น ๆ คุณเพียงต้องการระฆังหน้าต่างมาตรฐาน

import winsound
winsound.MessageBeep()

8

คำตอบของ Kuchiไม่ได้ผลสำหรับฉันใน OS X Yosemite (10.10.1) ฉันค้นหาafplayคำสั่ง ( ที่นี่ ) ซึ่งคุณสามารถโทรจาก Python วิธีนี้ใช้งานได้ไม่ว่าจะเปิดใช้งานเสียงออดของเทอร์มินัลหรือไม่และไม่มีห้องสมุดของบุคคลที่สาม

import os
os.system('afplay /System/Library/Sounds/Sosumi.aiff')

6

ดู: Python Sound ("Bell")
สิ่งนี้ช่วยฉันเมื่อฉันต้องการทำสิ่งเดียวกัน
เครดิตทั้งหมดไปที่gbc

อ้างถึง:

คุณเคยลองไหม:

import sys
sys.stdout.write('\a')
sys.stdout.flush()

ใช้งานได้กับฉันที่นี่ใน Mac OS 10.5

ที่จริงแล้วฉันคิดว่าความพยายามเริ่มแรกของคุณใช้ได้ผลเช่นเดียวกันกับการดัดแปลงเล็กน้อย:

print('\a')

(คุณเพียงแค่ต้องใส่เครื่องหมายอัญประกาศล้อมรอบอักขระ)


6

ทำไมต้องใช้หลามเลย? คุณอาจลืมที่จะลบมันและตรวจสอบมันลงในพื้นที่เก็บข้อมูล เพียงเรียกใช้คำสั่ง python ของคุณด้วย && และคำสั่งอื่นเพื่อเรียกใช้การแจ้งเตือน

python myscript.py && 
    notify-send 'Alert' 'Your task is complete' && 
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga

หรือวางฟังก์ชั่นลงใน. bashrc ของคุณ ฉันใช้ apython ที่นี่ แต่คุณสามารถแทนที่ 'python' ได้

function apython() {
    /usr/bin/python $*
    notify-send 'Alert' "python $* is complete"
    paplay /usr/share/sounds/freedesktop/stereo/suspend-error.oga
}

มันใช้งานได้ดี ด้วยos.system("paplay sound-alarm.oga")
fsevenm


2
import subprocess

subprocess.call(['D:\greensoft\TTPlayer\TTPlayer.exe', "E:\stridevampaclip.mp3"])

2
คุณควรเพิ่มความคิดเห็นหรือคำอธิบายอื่น ๆ สำหรับรหัสนี้เพื่ออธิบายวิธีการทำงานและสาเหตุที่ตอบคำถาม
skrrgwasme
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.