写了点python程序,希望在手机端跑,这样能随时使用,然后发现了Termux这么好用的东西。
这个安装使用Python非常简单,期间为了折腾用Python播放音频,还试过在Termux中装kali,Python的pygame执行依旧提示找不到声卡。
然后删了kali还是直接用Termux+Python。
虽然最后间接实现了Python中声音播放,这里首先先说一下如何安装Termux。
如果需要电脑SSH连Termux,参照下面执行一下就行了
在手机上想要执行的Python代码,其实原本是在win上写的,涉及到声音播放。
要播放的声音其实是对英文的朗读。
试了一些语音合成最后发现还是微软的urlapi = 'http://api.microsofttranslator.com/V2/Http.svc/Speak?language=en-us&format=audio/wav&options=MaxQuality'返回的音频文件,英文朗读声音听起来最自然(还有一个原因是这个是免费的,其他tts语音合成有些比较好的效果音是收费的)。
在win上跑的时候,为了声音不影响其他代码执行,选择用pygame模块播放声音的。结果放到手机上执行,发现即使通过pip成功装上了pygame模块,pygame.mixer.init()还是会报错找不到声卡。找了一些地方没有找到直接解决方法,只能间接解决。
在Termux中安装play-audio,pkg install play-audio
这样在Termux中执行执行play-audio test.wav,就能播放声音了。
而且可以play-audio test1.wav test2.wav直接连续播放多个。
在Python中,则是subprocess.call('play-audio '+audiopath, shell=True)的方式实现声音播放
在我的代码中,因为需要后台播放的同时要做一些input输入操作,还要做到停止可控,所以用了多进程的方法
import subprocess
import signal
p = subprocess.Popen('play-audio '+wp,close_fds=True, stdout=subprocess.PIPE,preexec_fn=os.setsid, shell=True) # 播放不影响其他代码操作
os.killpg(p.pid,signal.SIGUSR1) # 关闭
因为声音是对文字的朗读,termux-api有tts所以也想试试。
然后发现效果并不好
termux-tts-engines看了一下手机默认的tts引擎,发现是讯飞的。
这个tts虽然能离线使用,但是效果肯定是远不及在线合成的。
不过我这手机也有点老了,
不知道tts这玩意怎么更新或替换,就没再研究。
之前测试朗读效果的时候,讯飞语音合成有的收费音源也是不错的,只不过我要朗读的是英文,量也不大,最后就用了微软的(看bing词典相关的时候,觉得声音效果不错,抓取了一下,发现调用了api.microsofttranslator.com这个接口实现的)
termux-api还有一个termux-media-player,也是能播放的
测试了一下termux-media-player play test.wav,就能播放了
termux-media-player stop就能停止播放,因为之前已经选择别的方法了,就没有用这个。
总而言之,
在Termux想通过Python播放音频,
没有找到能直接能播放的方法,
实际上都是通过subprocess间接实现播放,不过效果还可以的。
以下是装pygame的记录, 因为被问到所以发出来, 实际上我也只是装上就删了,可以用于参考吧
2020-03-03Termux上装kali
https://www.kali.org/docs/nethunter/nethunter-rootless/
#中科大
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
#阿里云
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
#清华大学
deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
deb-src https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib non-free
#浙大
deb http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
deb-src http://mirrors.zju.edu.cn/kali kali-rolling main contrib non-free
#东软大学
deb http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
deb-src http://mirrors.neusoft.edu.cn/kali kali-rolling/main non-free contrib
#官方源
deb http://http.kali.org/kali kali-rolling main non-free contrib
deb-src http://http.kali.org/kali kali-rolling main non-free contrib
安装pygame装不上
Hunting dependencies…
WARNING: “sdl-config” failed!
WARNING: “pkg-config freetype2” failed!
WARNING: “freetype-config” failed!
Unable to run “sdl-config”. Please make sure a development version of SDL is installed.
开始野蛮安装
#install dependencies
sudo apt-get install freetype freetype-dev mercurial python3-dev python3-numpy ffmpeg \
libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev libsmpeg-dev \
libsdl1.2-devlibportmidi-dev libswscale-dev libavformat-dev libavcodec-dev
继续报错
Hunting dependencies…
WARNING: “pkg-config freetype2” failed!
WARNING: “freetype-config” failed!
SDL : found 1.2.15
FONT: found
IMAGE : found
MIXER : found
PNG : found
JPEG: found
SCRAP : found
PORTMIDI: found
PORTTIME: found
FREETYPE: not found
Missing dependencies
apt search freetype的时候发现有一个python3-freetype存在,于是安装sudo apt-get install python3-freetype
还是不好使
继续找,发现有建议安装依赖sudo apt-get build-dep python-pygame的,试试看
好像还是有点报错,但是毕竟还是装上了