python实现闹钟定时播放音乐功能


Posted in Python onJanuary 25, 2018

自己写的闹钟,只可以播放wav格式的音频,供大家参考,具体内容如下

Python代码:

import time 
import sys 
 
soundFile = 'sound.wav' 
not_executed = 1 
 
def soundStart(): 
 if sys.platform[:5] == 'linux': 
  import os 
  os.popen2('aplay -q' + soundFile) 
 else: 
  import winsound 
  winsound.PlaySound(soundFile, winsound.SND_FILENAME) 
   
while(not_executed): 
 dt = list(time.localtime()) 
 hour = dt[3] 
 minute = dt[4] 
 if hour == 17 and minute == 38: # 下午5点33分的时候开始提示 
  soundStart() 
  not_executed = 0

winsound 模块提供访问由 Windows 平台提供的基本的声音播放设备。它包含函数和数个常量。 

Beep(frequency, duration)
    蜂鸣PC的喇叭。 frequency 参数指定声音的频率,以赫兹,并且必须是在 37 到 32,767
的范围之中。duration 参数指定声音应该持续的毫秒数。如果系统不能蜂鸣喇叭,挂起 RuntimeError。注意:Windows 95 和 98下,Windows Beep() 函数存在但是无效的(它忽略它的参数)。这种情况下Python通过直接的端口操作模拟它(2.1版本中增加的)。不知道是否在所有的系统上都工作。 1.6版本中的新特性。 

PlaySound(sound, flags)
    从平台 API 中调用 PlaySound() 函数。sound 参数必须是一个文件名,音频数据作为字符串,或为 None。它的解释依赖于 flags 的值,该值可以是一个位方式或下面描述的变量的组合。如果系统显示一个错误,挂起 RuntimeError 。 

MessageBeep([type=MB_OK])
    从平台 API 中调用 MessageBeep() 函数。播放一个在注册表中指定的声音。type 参数指定播放哪一个声音;可能的值是 -1,MB_ICONASTERISK,MB_ICONEXCLAMATION,MB_ICONHAND,MB_ICONQUESTION,和 MB_OK,所有的描述如下。值 -1 产生一个``简单的蜂鸣'';换句话说这是如果声音不能被播放的后备计划。2.3版本中的新特性。 

SND_FILENAME
    sound 参数是一个 WAV 文件的名称。不使用 SND_ALIAS。 

SND_ALIAS
    sound 参数是注册表中一个声音组合的名称。如果注册表没有包含这样的名称,播放系统缺省的声音除非 SND_NODEFAULT 也被指定。如果没有缺省的声音被注册,挂起 RuntimeError。不使用 SND_FILENAME。
    所有的 Win32 系统至少支持下列,大多数系统支持的更多:
    PlaySound() 名称         对应的控制面板声音名称
    'SystemAsterisk'                      Asterisk
    'SystemExclamation'              Exclamation
    'SystemExit'                              Exit Windows
    'SystemHand'                      Critical Stop
    'SystemQuestion'              Question

例子:

import winsound 
 
# Play Windows exit sound. 
winsound.PlaySound("SystemExit", winsound.SND_ALIAS) 
 
# Probably play Windows default sound, if any is registered (because 
# "*" probably isn't the registered name of any sound). 
winsound.PlaySound("*", winsound.SND_ALIAS)

SND_LOOP
    重复地播放声音。SND_ASYNC标识也必须被用来避免堵塞。不能用 SND_MEMORY。 

SND_MEMORY
    提供给PlaySound()的 sound 参数是一个 WAV 文件的内存映像(memory image),作为一个字符串。
    注意:这个模块不支持从内存映像中异步播放,因此这个标识和 SND_ASYNC 的组合将挂起 RuntimeError。 

SND_PURGE
    停止播放所有指定声音的实例。 

SND_ASYNC
    立即返回,允许声音异步播放。 

SND_NODEFAULT
    不过指定的声音没有找到,不播放系统缺省的声音。 

SND_NOSTOP
    不中断当前播放的声音。 

SND_NOWAIT
    如果声音驱动忙立即返回。 

MB_ICONASTERISK
    播放 SystemDefault 声音。 

MB_ICONEXCLAMATION
    播放 SystemExclamation 声音。 

MB_ICONHAND
    播放 SystemHand 声音。 

MB_ICONQUESTION
    播放 SystemQuestion 声音。

MB_OK
    播放 SystemDefault 声音。 

实例一

import wx 
from wx.lib.filebrowsebutton import FileBrowseButton 
 
class MyFrame(wx.Frame): 
 def __init__(self): 
  wx.Frame.__init__(self, None, title="wx.Sound",size=(500,100)) 
  p = wx.Panel(self) 
 
  self.fbb = FileBrowseButton(p,labelText="Select WAV file:",fileMask="*.wav") 
  btn = wx.Button(p, -1, "Play") 
  self.Bind(wx.EVT_BUTTON, self.OnPlaySound, btn) 
   
  sizer = wx.BoxSizer(wx.HORIZONTAL) 
  sizer.Add(self.fbb, 1, wx.ALIGN_CENTER_VERTICAL) 
  sizer.Add(btn, 0, wx.ALIGN_CENTER_VERTICAL) 
  border = wx.BoxSizer(wx.VERTICAL) 
  border.Add(sizer, 0, wx.EXPAND|wx.ALL, 15) 
  p.SetSizer(border) 
 
 
 def OnPlaySound(self, evt): 
  filename = self.fbb.GetValue() 
  self.sound = wx.Sound(filename) 
  if self.sound.IsOk(): 
   self.sound.Play(wx.SOUND_ASYNC) 
  else: 
   wx.MessageBox("Invalid sound file", "Error") 
  
 
app = wx.PySimpleApp() 
frm = MyFrame() 
frm.Show() 
app.MainLoop()

实例二

import wx 
import wx.media 
import os 
 
class Panel1(wx.Panel): 
 def __init__(self, parent, id): 
  #self.log = log 
  wx.Panel.__init__(self, parent, -1, style=wx.TAB_TRAVERSAL|wx.CLIP_CHILDREN) 
 
  # Create some controls 
  try: 
   self.mc = wx.media.MediaCtrl(self, style=wx.SIMPLE_BORDER) 
  except NotImplementedError: 
   self.Destroy() 
   raise 
 
  loadButton = wx.Button(self, -1, "Load File") 
  self.Bind(wx.EVT_BUTTON, self.onLoadFile, loadButton) 
   
  playButton = wx.Button(self, -1, "Play") 
  self.Bind(wx.EVT_BUTTON, self.onPlay, playButton) 
   
  pauseButton = wx.Button(self, -1, "Pause") 
  self.Bind(wx.EVT_BUTTON, self.onPause, pauseButton) 
   
  stopButton = wx.Button(self, -1, "Stop") 
  self.Bind(wx.EVT_BUTTON, self.onStop, stopButton) 
 
  slider = wx.Slider(self, -1, 0, 0, 0, size=wx.Size(300, -1)) 
  self.slider = slider 
  self.Bind(wx.EVT_SLIDER, self.onSeek, slider) 
   
  self.st_file = wx.StaticText(self, -1, ".mid .mp3 .wav .au .avi .mpg", size=(200,-1)) 
  self.st_size = wx.StaticText(self, -1, size=(100,-1)) 
  self.st_len = wx.StaticText(self, -1, size=(100,-1)) 
  self.st_pos = wx.StaticText(self, -1, size=(100,-1)) 
   
  # setup the button/label layout using a sizer 
  sizer = wx.GridBagSizer(5,5) 
  sizer.Add(loadButton, (1,1)) 
  sizer.Add(playButton, (2,1)) 
  sizer.Add(pauseButton, (3,1)) 
  sizer.Add(stopButton, (4,1)) 
  sizer.Add(self.st_file, (1, 2)) 
  sizer.Add(self.st_size, (2, 2)) 
  sizer.Add(self.st_len, (3, 2)) 
  sizer.Add(self.st_pos, (4, 2)) 
  sizer.Add(self.mc, (5,1), span=(5,1)) # for .avi .mpg video files 
  self.SetSizer(sizer) 
 
  self.timer = wx.Timer(self) 
  self.Bind(wx.EVT_TIMER, self.onTimer) 
  self.timer.Start(100) 
   
 def onLoadFile(self, evt): 
  dlg = wx.FileDialog(self, message="Choose a media file", 
       defaultDir=os.getcwd(), defaultFile="", 
       style=wx.OPEN | wx.CHANGE_DIR ) 
  if dlg.ShowModal() == wx.ID_OK: 
   path = dlg.GetPath() 
   self.doLoadFile(path) 
  dlg.Destroy() 
   
 def doLoadFile(self, path): 
  if not self.mc.Load(path): 
   wx.MessageBox("Unable to load %s: Unsupported format?" % path, "ERROR", wx.ICON_ERROR | wx.OK) 
  else: 
   folder, filename = os.path.split(path) 
   self.st_file.SetLabel('%s' % filename) 
   self.mc.SetBestFittingSize() 
   self.GetSizer().Layout() 
   self.slider.SetRange(0, self.mc.Length()) 
   self.mc.Play() 
   
 def onPlay(self, evt): 
  self.mc.Play() 
  
 def onPause(self, evt): 
  self.mc.Pause() 
  
 def onStop(self, evt): 
  self.mc.Stop() 
  
 def onSeek(self, evt): 
  offset = self.slider.GetValue() 
  self.mc.Seek(offset) 
 
 def onTimer(self, evt): 
  offset = self.mc.Tell() 
  self.slider.SetValue(offset) 
  self.st_size.SetLabel('size: %s ms' % self.mc.Length()) 
  self.st_len.SetLabel('( %d seconds )' % (self.mc.Length()/1000)) 
  self.st_pos.SetLabel('position: %d ms' % offset) 
 
 
app = wx.PySimpleApp() 
# create a window/frame, no parent, -1 is default ID 
frame = wx.Frame(None, -1, "play audio and video files", size = (320, 350)) 
# call the derived class 
Panel1(frame, -1) 
frame.Show(1) 
app.MainLoop()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现3行代码解简单的一元一次方程
Aug 18 Python
python 一个figure上显示多个图像的实例
Jul 08 Python
python如何实现从视频中提取每秒图片
Oct 22 Python
numpy np.newaxis 的实用分享
Nov 30 Python
python实现替换word中的关键文字(使用通配符)
Feb 13 Python
Python如何在DataFrame增加数值
Feb 14 Python
python数据库编程 Mysql实现通讯录
Mar 27 Python
Python直接赋值及深浅拷贝原理详解
Sep 05 Python
利用python绘制中国地图(含省界、河流等)
Sep 21 Python
Python3使用 GitLab API 进行批量合并分支
Oct 15 Python
python hmac模块验证客户端的合法性
Nov 07 Python
教你使用Pandas直接核算Excel中快递费用
May 12 Python
python实现壁纸批量下载代码实例
Jan 25 #Python
python命令行解析之parse_known_args()函数和parse_args()使用区别介绍
Jan 24 #Python
Python动刷新抢12306火车票的代码(附源码)
Jan 24 #Python
python中的set实现不重复的排序原理
Jan 24 #Python
详解Python之unittest单元测试代码
Jan 24 #Python
python爬取拉勾网职位数据的方法
Jan 24 #Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 #Python
You might like
PHP Pear 安装及使用
2009/03/19 PHP
一篇有意思的技术文章php介绍篇
2010/10/26 PHP
如何使用php判断所处服务器操作系统的类型
2013/06/20 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
Yii 2.0中场景的使用教程
2017/06/02 PHP
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
Jquery chosen动态设置值实例介绍
2013/08/08 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
JavaScript兼容性总结之获取非行间样式案例
2016/08/07 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
requirejs按需加载angularjs文件实例
2017/06/08 Javascript
利用vscode编写vue的简单配置详解
2017/06/17 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
详解JS模块导入导出
2017/12/20 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
微信小程序canvas.drawImage完全显示图片问题的解决
2018/11/30 Javascript
python中sys.argv参数用法实例分析
2015/05/20 Python
在Python中调用Ping命令,批量IP的方法
2019/01/26 Python
对pyqt5之menu和action的使用详解
2019/06/20 Python
python如何通过pyqt5实现进度条
2020/01/20 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
Python常用GUI框架原理解析汇总
2020/12/07 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
HTML5的结构和语义(5):内嵌媒体
2008/10/17 HTML / CSS
个人找工作的自我评价
2013/10/17 职场文书
小饰品店的创业计划书范文
2013/12/28 职场文书
物业管理工作方案
2014/05/10 职场文书
2014年安全管理工作总结
2014/12/01 职场文书
辞职信格式范文
2015/05/13 职场文书
《三国志》赏析
2019/08/27 职场文书
Mysql基础知识点汇总
2021/05/26 MySQL
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL