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利用BeautifulSoup解析Html的方法示例
Jul 30 Python
Python操作MySQL模拟银行转账
Mar 12 Python
详谈套接字中SO_REUSEPORT和SO_REUSEADDR的区别
Apr 28 Python
Pycharm 创建 Django admin 用户名和密码的实例
May 30 Python
Python使用一行代码获取上个月是几月
Aug 30 Python
python 读取dicom文件,生成info.txt和raw文件的方法
Jan 24 Python
Python面向对象程序设计类的封装与继承用法示例
Apr 12 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
python 实现PIL模块在图片画线写字
May 16 Python
python 使用三引号时容易犯的小错误
Oct 21 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
Python语言中的数据类型-序列
Feb 24 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 file_exists问题杂谈
2012/05/07 PHP
ThinkPHP中RBAC类的四种用法分析
2014/11/24 PHP
PHP数学运算函数大汇总(经典值得收藏)
2016/04/01 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
PHP如何使用array_unshift()在数组开头插入元素
2020/09/01 PHP
IE/FireFox具备兼容性的拖动代码
2007/08/13 Javascript
js操作时间(年-月-日 时-分-秒 星期几)
2010/06/20 Javascript
jquery ajax 调用失败的原因示例介绍
2013/09/27 Javascript
jQuery实现可收缩展开的级联菜单实例代码
2013/11/27 Javascript
node.js中的querystring.stringify方法使用说明
2014/12/10 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
JavaScript操作XML文件之XML读取方法
2015/06/09 Javascript
javascript动态添加删除tabs标签的方法
2015/07/06 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
2016/07/14 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
js实现产品缩略图效果
2017/03/10 Javascript
详解基于vue-cli优化的webpack配置
2017/11/06 Javascript
Vue.js与 ASP.NET Core 服务端渲染功能整合
2017/11/16 Javascript
Vue代码分割懒加载的实现方法
2017/11/23 Javascript
js使用swiper实现层叠轮播效果实例代码
2018/12/12 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
Python数据结构与算法之字典树实现方法示例
2017/12/13 Python
python计算两个数的百分比方法
2018/06/29 Python
python实现几种归一化方法(Normalization Method)
2019/07/31 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
飞利浦美国官网:Philips美国
2020/02/28 全球购物
abstract是什么意思
2012/02/12 面试题
自我评价格式
2014/01/06 职场文书
人事专员岗位说明书
2014/07/29 职场文书
公路施工安全责任书
2015/05/08 职场文书
孙振耀退休感言
2015/08/01 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
2019年新郎保证书3篇
2019/10/17 职场文书