分类 默认分类 的文章

esp32 中英文语音合成

  • 环境搭建

使用资源

Esp idf https://github.com/espressif/esp-idf.git
中文合成https://github.com/espressif/esp-skainet.git
英文合成https://github.com/s-macke/SAM

WIN 平台下 默认的 语音依赖文件无法通过脚本烧录

整理出一个可以的命令行指令
python.exe G:PRJesp32esp-idfcomponentsesptool_pyesptoolesptool.py --chip esp32 --port COM8 --baud 115200 --before default_reset --after hard_reset write_flash --flash_mode dio --flash_freq 40m --flash_size detect 0x100000 G:PRJesp32esp-skainetcomponentsesp-ttsesp_tts_chineseesp_tts_voice_data_xiaole.dat

4M Flash分区表 partitions.csv

Espressif ESP32 Partition Table

Name, Type, SubType, Offset, Size

factory, app, factory, 0x010000, 0x090000
voice_data, data, fat, 0x100000, 0x300000

中文合成 必须依赖项,具体暂不清楚
中文合成sd_card_mount("/sdcard");

中文合成例子
//初始化中文语音合成
esp_tts_handle_t * zh_init() {

const esp_partition_t* part=esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_FAT, "voice_data");//寻找语音合成所需数据分区
if (part==0) { 
    printf("Couldn't find voice data partition!\n"); 
    return 0;
}
spi_flash_mmap_handle_t mmap;
uint16_t* voicedata;
esp_err_t err=esp_partition_mmap(part, 0, 3*1024*1024, SPI_FLASH_MMAP_DATA, (const void**)&voicedata, &mmap);//根据分区表加载对应数据
if (err != ESP_OK) {
    printf("Couldn't map voice data partition!\n"); 
    return 0;
}
esp_tts_voice_t *voice=esp_tts_voice_set_init(&esp_tts_voice_template, voicedata); //合成语音所需数据初始化
esp_tts_handle_t *tts_handle=esp_tts_create(voice);//创建一个合成语音对象
return tts_handle;

}
//合成并播放中文语音
void play_zh(esp_tts_handle_t tts_handle,char prompt1) {

if (esp_tts_parse_chinese(tts_handle, prompt1)) {
        int len[1]={0};
        do {
            short *pcm_data=esp_tts_stream_play(tts_handle, len, 4);   
            iot_dac_audio_play(pcm_data, len[0]*2, portMAX_DELAY);
            printf("pcm_data=%x\n", pcm_data[0]);
            printf("len=%d\n", len[0]);
        } while(len[0]>0);
        i2s_zero_dma_buffer(0);
}

}
//应用

int app_main() {
    codec_init(); //解码器初始化
    sd_card_mount("/sdcard");//挂载SD卡
    i2s_set_sample_rates(0, 8000);//设置
    esp_tts_handle_t *tts_handle;
    tts_handle=Zh_init();
    play_zh(tts_handle,"欢迎");
    i2s_set_sample_rates(0, 13050);//设置i2s播放速率
    return 0;
}

英文合成例子

void play_en(char *text) {
    sam_main(text);
    int bufferpos = GetBufferLength();
    char *buffer = GetBuffer();
    short pcm_dat[512];
    int len = bufferpos/512/50;
    for(int i=0; i<len; i++)
    {
        
        for(int n=0;n<512;n++)pcm_dat[n]=buffer[n+i*512]*0x60;
        iot_dac_audio_play(pcm_dat, 512*2, portMAX_DELAY);
    }
    i2s_zero_dma_buffer(0);
    free(buffer);
}

应用

int app_main() {
    codec_init(); 
    sd_card_mount("/sdcard");
    i2s_set_sample_rates(0, 13050);
    play_en("hello world");
    return 0;
}

微信截图_20200813105930.png

逆向了一个k210板

1595757186391.jpeg

1595757190304.jpeg

1595757204755.jpeg

广树 / typecho ISLAND 主题 最新版本 支持 主页搜素

最新 git地址 https://github.com/tongjinlv/typecho-ISLAND
2018.8.22更新:

1.修复了文章分类页面的样式问题。


2018.8.23更新:

2.增加了表格的样式。

2018.8.28更新:

3.修正友链点击不是新窗口的问题。

2020.7.22更新:

3.主页添加了搜素框。

typecho 留言显示 qq图像

修改文件:var/Typecho/Common.php

第922行
开始

/**

  • 获取gravatar头像地址
  • @param string $mail
  • @param int $size
  • @param string $rating
  • @param string $default
  • @param bool $isSecure
  • @return string
    */
public static function gravatarUrl($mail, $size, $rating, $default, $isSecure = false)
{
        $reg = "/^\d{5,11}@[qQ][Qq]\.(com)$/";
        if (preg_match($reg, $mail)) {
            $img    = explode("@", $mail);
            $url = "//q2.qlogo.cn/headimg_dl?dst_uin={$img[0]}&spec=240";
        } else {
            if (defined('__TYPECHO_GRAVATAR_PREFIX__')) {
                $url = __TYPECHO_GRAVATAR_PREFIX__;
            } else {
                $url = $isSecure ? 'https://secure.gravatar.com' : 'http://www.gravatar.com';
                $url .= '/avatar/';
            }
            if (!empty($mail)) {
                $url .= md5(strtolower(trim($mail)));
            }
            $url .= '?s=' . $size;
            $url .= '&amp;r=' . $rating;
            $url .= '&amp;d=' . $default;
        }
        return $url;
}

屏幕快照 2020-07-21 下午8.53.21.png

typecho博客系统 Typecho_ISLAND 主题添加搜索框

打开header.php 文件 修改如下

<?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
<!DOCTYPE HTML>
<html class="no-js">
****************************以下为添加********************************************
<script type="text/javascript">
        function button_search(){
            var G=document.getElementById('input_search').value;
            G="http://"+window.location.host+"/index.php/search/"+G+"/";
            window.location.href=G;
        }
        function key_search(e){
          var evt = window.event || e; 
          if (evt.keyCode == 13){
            var G=document.getElementById('input_search').value;
            G="http://"+window.location.host+"/index.php/search/"+G+"/";
            window.location.href=G;
          }
        }
    </script>
******************************************************************************
<head>

<li class="menu-item menu-item-type-post_type menu-item-object-page">
        <a href="<?php $pages->permalink(); ?>">
          <p class="ja"><?php $pages->title(); ?></p>
          <p class="en">
          <?php
          if(isset($pages->fields->en)){
            echo $pages->fields->en;
            }else{
            echo 'page';
            }
            ?>
          </p>
          <div class="line"></div>
        </a>
      </li>
      <?php endwhile; ?>

****************************以下为添加********************************************
      <li class="island_logo_box">
      <div class="search">
            <input type="text" placeholder="请输入..." name="" id="input_search" value="" onkeydown="key_search(event);"/>
            <button onclick="button_search()"><i>搜索</i></button>
        </div>
        </li>
********************************************************************************

打开css/reset.css 文件追加如下

.search{
    width: 200px;            
    display: flex;
    margin: 0 auto;
    /*border: 1px solid red;*/
  }
  .search input{
    float: left;
    flex: 4;
    height: 30px;
    width: 100px;  
    outline: none;
    border: 1px solid red;
    box-sizing: border-box;
    padding-left: 10px;
  }
  .search button{
    float: right;
    flex: 1;
    height: 30px;
    width: 50px;  
    color: lightslategray;
    border-style: none;
    outline: none;
  }
  .search button i{
    font-style: normal;
  }
  .search button:hover{
    font-style: normal;
  }

效果如下
微信截图_20200709182659.png

微信截图_20200709182647.png

树莓派 vim visual mode 中键 无法粘贴 问题解决

禁用Vim中鼠标点击时的虚拟选中模式(visual mode)
Posted on 2007年12月14日
自从升级操作系统后,Vim相应也升级到了当时的最新版7.1。可是这个Vim7.1使用鼠标时会默认进入虚拟选中模式(visual mode),就好像通过v选中的一样。搜索一下,有人碰到过这个问题,原来可以通过下面的方式禁用:
1.命令行
:set mouse-=a
2.添加:set mouse-=a至配置文件~/.vimrc

蓝牙makeymakey

psb.jpg
微信图片_20200709113545.jpg
微信图片_20200709113527.jpg
微信截图_20200629114632.png
微信截图_20200623185339.png
微信截图_20200622170643.png
微信截图_20200622170631.png
微信截图_20200622170119.png


淘宝链接

简单方便的使用datamark 用做 树莓派监控

第一步:
访问http://dm.trtos.com/ 获取id
会跳转到 http://dm.trtos.com/web/datamark/index.php?id=4DRtDABC 后面的4DRtDABC就是id
第二步
http://dm.trtos.com/web/datamark/set.php?id=4DRtDABC&name=这里填入项目&value=这里填入描述
第三步
访问 http://dm.trtos.com/web/datamark/index.php?id=4DRtDABC 就可以直接看到记录,可删除打印等
非常简单
微信截图_20200522104416.png

树莓派python 代码

import requests
url = "http://dm.trtos.com/web/datamark/set.php?id=4DRtDABC&name=这里填入项目&value=这里填入描述"
r = requests.get(url)
print(r)