----------------
播放声音
--------------------
应のBlog
这里我们需要使用的模块是 audio 模块,在 system\\libs 文件夹你可以找到它. pys60 api 中关于 audio 的说明是: audio 模块可以播放和录制声音,还可以使用机带的朗读文本引擎(部分手机可能没有这个功能).此模块支持所有本机支持的音频格式,包括: .wav、.amr、.midi、.mp3、.aac 和 Real Audio.
现在我们来看一个小脚本,是个简单的播放器.(注:每行开头的+代表一个空格) (编者注:该问题已经解决,空格均可正常显示)
import appuifw
import audio
import powlite_fm
def cn(x):return x.decode("utf-8")
appuifw.app.body=sp=appuifw.Text(cn("按选项选择歌曲播放\nthx."))
def playsound():
global soundfile
appuifw.app.menu=[(cn("停止"),stop)]
soundfile=powlite_fm.manager().AskUser("e:\\sounds\\",ext=[".mp3",".wav",".amr",".wma"])
S=audio.Sound.open(soundfile)
run=1
sp.set(cn("正在播放: ")+soundfile)
while run:
S.play()
def playagain():
appuifw.app.menu=[(cn("停止"),stop)]
S=audio.Sound.open(soundfile)
run=1
while run:
S.play()
def stop():
global run
appuifw.app.menu=[(cn("播放"),playagain<),(cn("重新选曲"),playsound)]
sp.set(cn("停止播放")+soundfile)
run=0
S.stop()
appuifw.app.menu=[(cn("选曲播放"),playsound)]
点击下载代码
讲解:
首先我们看 import 进来两个陌生的模块: audio 模块负责音频处理,后面这个 powlite_fm 是俄罗斯高手写的一个文件管理器类似的东西,使用它我们可以选择文件之后得到文件的路径以便打开用.
然后来看 playsound() 这个函数,首先这个 global soundfile 是说明之后我们定义的 soundfile 值是全局的(也就是说在每个单独的函数里都可以用).
后面 soundfile=powlite_fm.manager().AskUser("e:\\sounds\\",ext=[".mp3",".wav",".amr",".wma"]) 这里我们定义了 soundfile 等于什么.我们看这里首先有 powlite_fm.manager().AskUser() 这样,这说明我们用的是 powlite_fm 里的 manager 函数里的 AskUser .不知道在说什么吧?不知道无所谓,反正记住这段代码就可以,一定要记住哦,以后可是会经常用到.注意括号里面的格式:(默认读取路径,ext=["需要的文件后缀"]).如果你不需要自动到默认读取路径可以这样写: powlite_fm.manager().AskUser(ext=[".mp3"]) 这样就不会打开默认到 sounds 文件夹了.现在我们定义了 soundfile 等于使用者选择的文件路径.假如你在 sounds 文件夹选择了“国际歌.mp3”这首歌,那么就是:soundfile="e:\\sounds\\国际歌.mp3"
然后下面我们定义 S 等于 audio.Sound.open(soundfile) ,就是说打开这个声音文件,但是现在还不会播放.要播放的话就需要 S.play() ,要停止就是 S.stop()
我们看后面为什么要加上 while 语句呢?这个问题我很困惑,在我的 6600 上面播放声音直接 S.play() 就可以,但是在 6670 上面直接用S.play() 的话就会出现只播放几秒或者根本无声,所以我只能在这里加个循环,就是说在没有选择停止之前一直播放,下下策,希望哪位知情人士提示在下.
后面我们看定义 playagain() .这是定义的继续播放上次选择的歌曲.由于 soundfile 是被全局定义过,因此直接拿来用就可以.不用再提示选择文件了.
下面我们定义了停止的函数:
def stop():
直接加个 S.stop()就可以了.我为了让大家多了解点知识,所以在里面加上了 set 到文本界面的功能.对了,还定义了那个循环为 0 ,就是让循环停止,不过好像没什么作用.不加也可以.
最后的这个 munu 其实也可以放在前面,知道放在哪里吧?就是放在 appuifw.app.body=sp=appuifw.Text(cn("按选项选择歌曲播放\nthx."))这个的下一行...应该是这样 你试试看哦.
好,讲完了,但是大家要注意一下这段代码里面各个函数里 menu 的用法,在不同的环境下有相应的选项,很实用.
之后我们会慢慢的把这个做成一个很好玩的播放器,呵呵.呆着没事你自己也研究研究哦.希望能给未来的天才程序员一点启蒙的作用,那在下将倍感荣幸