首页 - 教程专区 - PyS60教程 - 米饭教程    

----------------
播放声音
--------------------

应のBlog

这里我们需要使用的模块是 audio 模块,在 system\\libs 文件夹你可以找到它. pys60 api 中关于 audio 的说明是: audio 模块可以播放和录制声音,还可以使用机带的朗读文本引擎(部分手机可能没有这个功能).此模块支持所有本机支持的音频格式,包括: .wav、.amr、.midi、.mp3、.aacReal 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 的用法,在不同的环境下有相应的选项,很实用.
之后我们会慢慢的把这个做成一个很好玩的播放器,呵呵.呆着没事你自己也研究研究哦.希望能给未来的天才程序员一点启蒙的作用,那在下将倍感荣幸

下一编
上一编

首页 - 教程专区 - PyS60教程 - 米饭教程