当前位置: 首页 > news >正文

Freeswitch-soundtouch-变声开发

文章目录

  • 一、介绍
  • 二、安装soundtouch
    • 2.1 源码安装方式(推荐)
      • 2.1.1下载源码
      • 2.1.2解压
      • 2.1.3 编译
      • 2.1.4 迁移(可选)
    • 2.2 apt-get 安装
  • 三、使用
    • 3.1 终端使用
    • 3.2 Freeswitch使用
      • 3.2.1编译Freeswitch的mod_soundtouch
      • 3.2.2启用 mod_soundtouch 模块
      • 3.3.3 使用
        • 使用api命令
        • 使用lua
        • 使用拨号计划

一、介绍

相关资料
Freeswitch关于soundtouch介绍

soundtouch下载

mod_soundtouch只有刺啦刺啦声音问题

FreeSWITCH使用soundtouch进行变声

二、安装soundtouch

我这里使用的环境docker是debian。其他环境也可以。

2.1 源码安装方式(推荐)

2.1.1下载源码

https://codeberg.org/soundtouch/soundtouch/tags

在这里插入图片描述
放到合适的位置,进行解压

2.1.2解压

tar -zxvf  soundtouch-2.3.3.tar.gz

在这里插入图片描述

2.1.3 编译

cd soundtouch
./bootstrap 

默认的 debian 版本是用浮点样本编译的。
需要用整数样本重新编译它才能与 freeswitch 兼容。
--enable-integer-samples

./configure --enable-integer-samples
make
make install

2.1.4 迁移(可选)

我这里有两个环境,一个是编译环境,一个是运行环境,所以,我知道要吧这四个编译好的文件放到运行环境相同目录下面就可以。然后执行ldconfig,重新加载一下环境。
在这里插入图片描述

2.2 apt-get 安装

 apt-get install libsoundtouch-dev libsoundtouch1 

三、使用

3.1 终端使用

1)变速不变调

soundstretch original.wav out30.wav -tempo=+30 # 加速,时常变短
soundstretch original.wav out30.wav -tempo=-30 # 减速,时常变长
2) 变调不变速

soundstretch original.wav pitch30.wav -pitch=+5 # 音调调高,可以将男声变成女声
soundstretch pitch30.wav normal.wav -pitch=-5 # 音调调低,可以将女声变成男声
3)变速且变调

soundstretch original.wav rate25.wav -rate=+25
在这里插入图片描述
在这里插入图片描述

3.2 Freeswitch使用

3.2.1编译Freeswitch的mod_soundtouch

首先进入源mod

cd freeswitch1_10_7/src/mod/applications/mod_soundtouchmakemake install

在这里插入图片描述

可以在Freeswitch的生成环境下看到已经编译生成mod了
在这里插入图片描述

3.2.2启用 mod_soundtouch 模块

在编译生成的Freeswitch目录下
/usr/local/freeswitch/conf/autoload_configs/modules.conf.xml
添加内容:
<load module="mod_soundtouch"/>在这里插入图片描述
然后重启

临时添加此mod,在fs_cli 执行load mod_soundtouch

3.3.3 使用

使用api命令

1)soundtouch命令格式

soundtouch <uuid> [start|stop] [send_leg] [hook_dtmf] [-]<X>s [-]<X>o <X>p <X>r <X>t

soundtouch 参数说明:

  • uuid
    必选参数,需要进行变声操作leg的uuid
  • start|stop
    必选参数,使用start时,后面要跟参数,不能连续两次start,可以在同一个命令里面把所有参数都设置好。
    使用stop时,之前必须有start操作。
  • send_leg
    可选参数,
    不指定该参数时,用于该uuid发出去的音频变声(说的声音变声);
    指定该参数时,用于该uuid收到的音频变声(听的声音变声)。
  • hook_dtmf
    可选参数
    指定该参数时,在电话侧可用dtmf按键进行变声操作。如果指定,它将挂钩 DTMF 音调并根据底部的 DTMF 代码修改音高/速率/节奏
  • s
    以半音为单位调整音高,值应在 -14 到 14 之间,默认为 0
  • o
    以八度为单位调整音高,值应介于 -1 和 1 之间,默认为 0
  • p
    直接设置音调,值应> 0,默认1(较低=低音调)
  • r
    设置速率,值应大于 0,默认为 1(越低 = 越慢)
  • t
    设置节奏,值应大于 0,默认为 1(越低 = 越慢)

测试命令:

originate user/1001 &endless_playback(/usr/local/freeswitch/sounds/original.wav)soundtouch uuid start send_leg 4s
soundtouch uuid  stop
soundtouch uuid  start send_leg -4s

在这里插入图片描述

使用lua

例如,要在 Lua 中启动 soundtouch,请使用(这会将音调降低 0.2 个八度):

session:execute("soundtouch", "-0.2o") 

要将音调重置为正常,此方法将不起作用:

session:execute("soundtouch", "+0.2o") 

即使这样也行不通

session:execute("soundtouch", "0o") 

您需要通过以下命令明确“停止”soundtouch

session:execute("soundtouch","stop")

随后,您可以通过发出新的命令再次进行俯仰/速率变换,例如

session:execute("soundtouch","0.8r") 
使用拨号计划
 <action application="soundtouch" data="hook_dtmf -0.3o 0.8r"/>

相关文章:

  • 网络编程(八)
  • 深入了解Java单例模式及其使用场景
  • 工欲善其事必先利其器——IntelliJ IDEA神器使用技巧
  • Starlette
  • 盛夏之约,即将启程,2024中国北京消防展将于6月26举行
  • 数据结构(3)栈、队列、数组
  • 局域网电脑监控软件是如何监控到内网电脑的?
  • 【全开源】Java短剧系统微信小程序+H5+微信公众号+APP 源码
  • Docker面试整理-Docker的网络是如何工作的?
  • Keras深度学习框架实战(5):KerasNLP使用GPT2进行文本生成
  • 【2024年5月备考新增】】 考前篇(34)《必备资料(17) - 论文串讲-项目采购管理》
  • 单例模式(C语言)
  • B端数据看板,其实数据可以更美的。
  • 【人工智能】第六部分:ChatGPT的进一步发展和研究方向
  • 【C++ | 析构函数】类的析构函数详解
  • angular组件开发
  • CNN 在图像分割中的简史:从 R-CNN 到 Mask R-CNN
  • ES6语法详解(一)
  • Objective-C 中关联引用的概念
  • Python 反序列化安全问题(二)
  • Python学习笔记 字符串拼接
  • 前端_面试
  • 数组的操作
  • 一起参Ember.js讨论、问答社区。
  • 用简单代码看卷积组块发展
  • Linux权限管理(week1_day5)--技术流ken
  • 阿里云API、SDK和CLI应用实践方案
  • 仓管云——企业云erp功能有哪些?
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​低代码平台的核心价值与优势
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #{}和${}的区别?
  • #WEB前端(HTML属性)
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (poj1.3.2)1791(构造法模拟)
  • (Redis使用系列) Springboot 在redis中使用BloomFilter布隆过滤器机制 六
  • (WSI分类)WSI分类文献小综述 2024
  • (二)丶RabbitMQ的六大核心
  • (附源码)计算机毕业设计SSM疫情居家隔离服务系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (十一)图像的罗伯特梯度锐化
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (四)React组件、useState、组件样式
  • (五)MySQL的备份及恢复
  • (一)基于IDEA的JAVA基础1
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .bat批处理(六):替换字符串中匹配的子串
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .Net IOC框架入门之一 Unity
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 快速重构概要1
  • .NET 某和OA办公系统全局绕过漏洞分析