叫床器大概功能就是实现在网页端远程给我发送摩斯电码或者语音,我家的树莓派收到后会大声播放出来。体验地址:https://aoaoao.me/rasp

网页部分截图如下:

实际执行效果我拍成视频传到秒拍了:http://www.miaopai.com/show/aEiPEgybaIkkK6-6~4Uf3zaaPmzKtCnv.htm

硬件部分

硬件部分非常简单,只是一个树莓派接了一个扬声器:

软件部分

语音播报

语音播报使用的是百度翻译的TTS api,效果还不错,接口URL为:http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=3&text= 树莓派获取到用户输入的文字后,使用此API转换为音频,保存后播放出。这里我使用pygame库来播放MP3,可能是因为采样率还是什么的没设置好,所以播放出来的音频是加快的,也就是视频中那个滑稽的声音。
此部分代码:

# -*- coding: UTF-8 -*-
import sys
import pygame
import time
import requests
s = time.time()
r = requests.get("http://tts.baidu.com/text2audio?lan=zh&ie=UTF-8&spd=3&text="+str(sys.$
with open(str(s)+".mp3", "wb") as code:
    code.write(r.content)
pygame.mixer.init()
pygame.mixer.music.load(str(s)+".mp3")
pygame.mixer.music.play()
while pygame.mixer.music.get_busy():
        i=1
`</pre>

### 摩斯电码播报

原本打算使用Python直接发出特定频率的声音,在Windows下试验成功但在Linux下在发现winsound这个发声库只能在win下工作。所以我采用了一种笨拙的方式:生成一段600Hz的音频,使用pygame播放这段音频,通过调整音量来实现“滴答”的效果。似乎是因为Python本身的执行速率问题,如果将发生间隔设置太短,人的主观感受就是一直在响,所以最终的播报还是比较缓慢的,不太像正宗的发报机的声音。
代码如下:
<pre class="language-python">`import pygame
import time
import sys
pygame.mixer.init()
pygame.mixer.music.load("/home/dot.mp3")
time.sleep(2)
pygame.mixer.music.play()
pygame.mixer.music.set_volume(0)
t=str(sys.argv[1])
for letter in t:
        if letter == ".":
                pygame.mixer.music.set_volume(1)
                time.sleep(0.2)
                pygame.mixer.music.set_volume(0)
                time.sleep(0.3)
        elif letter == "-":
                pygame.mixer.music.set_volume(1)
                time.sleep(0.4)
                pygame.mixer.music.set_volume(0)
                time.sleep(0.2)
        else:
                time.sleep(1)

收到的内容

如果我闲的话,会把收到的内容在这更新(~ ̄▽ ̄)~

  • 苟利国家生死以
  • 所以,这是啥
  • 好好学习
  • 哈哈哈哈哈哈