使用kivy实现声音播放,看似简单实则有坑, 又是柿子翻阅大量外网资料后刨坑总结。
播放音频可以使用他的SoundLoader组件,简单两行就可以实现声音播放。如果你只是在PC端运行那么照抄以下代码就可以了
PC端播放
from kivy.network.urlrequest import UrlRequest
path="./sound/apple.wav"
b=SoundLoader.load(filename=path)
b.play()
移动端播放本地文件
但是如果你想要在Android上进行本地声音播放,需要注意下面的问题: 1、目前Kivy只支持 wav格式
2、在打包APK的时候需要注意修改相关的参数,在打包环境中输入 buildozer init 生成初始化参数表,不知道怎么用buildozer怎么打包的,请先看buildozer 打包 APK 的教程。找到下面的参数把wav 加进去。 Linux 环境下可以用vim 打开文件进行编辑
3、下面两端都要改不要漏了,这两段不是连着的
source.include_exts = py,png,jpg,kv,atlas,wav
source.include_patterns = assets/*,images/*.png,sound/*.wav
移动端播放网页音频/服务器音频
但是如果你想要在Android上进行网页/服务器后端声音播放,需要注意下面的问题:
Kivy 的播放器不支持流媒体!!!!,所以需要下载后再播放
这里我创建了一个下载按钮一个播放按钮,点击玩下载后等一会儿,再点击播放按钮就可以播放声音了,效果如下
python 主程序代码供参考 这里会看到 Import os 和 from android.permissions import 注意 android 这个包是不需要安装的,在 Buildozer 和 P4a里自带的,只有在android端才能生效。所以需要先判断系统环境
另外同时需要对spec 文件修改
main.py 主程序代码如下,
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.app import App
from kivy.network.urlrequest import UrlRequest
from kivy.core.audio import SoundLoader
from kivy.utils import platform
import os
if platform == "android":
from android.permissions import request_permissions, Permission
request_permissions([Permission.READ_EXTERNAL_STORAGE, Permission.WRITE_EXTERNAL_STORAGE])
url="http://106.14.124.112:8080/download_voice_en/apple.wav"
kv = Builder.load_string("""
#:import utils kivy.utils
<test>:
name:"test"
BoxLayout:
Button:
text: "download"
on_release:root.buttonClicked()
Button:
text: "apple"
on_release:root.sound()
""")
class test(Screen):
def buttonClicked(self):
a= UrlRequest(url, file_path='apple.wav')
print("done download")
def sound(self):
b=SoundLoader.load(filename='./apple.wav')
b.play()
print("done sound")
sm = ScreenManager()
screens = [test(name="test")]
for screen in screens:
sm.add_widget(screen)
class ScreenApp(App):
def build(self):
return sm
ScreenApp().run()
spec 文件中需要修改 permission,获取网络及读写权限
android.permissions = INTERNET,WRITE_EXTERNAL_STORAGE,READ_EXTERNAL_STORAGE
|