Clojure [语音识别] 讯飞语音 SDK 封装, 实现语音识别 / 语音朗读 / 语音提醒

steve-chan-clojure · 发布于 2017年07月13日 · 最后由 yfractal 回复于 2017年07月19日 · 836 次阅读
30806

xunfei-clj源码链接

Clojure封装讯飞语音SDK, 可提供给Emacs/Vim编辑器使用,或者命令行, 实现语音朗读提醒/语音识别/语音转为命令等

目前只支持Linux和Windows系统,因为讯飞官方SDK暂未支持Mac

Usage: 查看使用示例hello-xunfei

;; 1. add to project.clj.
[xunfei-clj "0.1.4-SNAPSHOT"]

;; 2. add Msc.jar to project's lib path, then add `:resource-paths` option.
:resource-paths ["lib/Msc.jar"]

;; 3. copy libmsc64.so(windows: msc64.dll) & libmsc32.so(windows: msc32.dll) to your project root path.

;; 4. core.clj:
(ns hello-xunfei.core
  (:require [xunfei-clj.core :as xunfei]))

;; 讯飞初始化
(xunfei/app-init "your-xunfei-appid") ;; 可以自行到讯飞开放平台注册一个appid

;; 语音朗读
(defn xunfei-say-hi
  [text]
  (xunfei/text-to-player text))

;; 语音识别
(def regcog-res (atom (list)))
(xunfei/record-voice-to-text (fn [] (xunfei/m-reco-listener #(swap! regcog-res conj %))) )

Develop

$ lein repl 
;; 讯飞初始化
xunfei-clj.core> (xunfei/app-init "your-xunfei-appid")
;; 语音朗读
xunfei-clj.core> (text-to-player "什么语音文学驱动编程?")

;; 语音识别
xunfei-clj.core> (def regcog-res (atom (list)))
xunfei-clj.core> (record-voice-to-text (fn [] (m-reco-listener #(swap! regcog-res conj %))) )

共收到 16 条回复
310

牛逼哦,能语音写代码吗?

30806
310kaka 回复

可以语音写Todos, 写代码注释, 还有读代码注释, 我 还把它用在单元测试里面, 读单元测试结果报告. 写代码还要, 过段时间更新才行, 结合机器学习修正错误 . 😝 😍 目前我只是集成到了Emacs,去调用它,我打算把它做成语音插件,可以支持很多种编辑器, 实现 语音驱动编程 😝

30806

@chenge 这个是函数式编程写的呀 😝

A5aa80

可以用话筒写helloworld

4215

clojure我折腾过几个月,不太适应。现在转Elixir了。 比如那个require为什么要带个冒号呢?

7072

同样的帖子,http://clojure-china.org/t/clojure-sdk/691 ruby-china 的热度更高啊!

30806
7072yfractal 回复

clojure-china 的 国内外 函数式高手太多了, 太多都是 SICP 火炼出来的, 其次 是 Clisp/Elisp/Haskell/Racket 磨炼过来的 😍 , 大部分人都是 高手潜水呀

30806
A5aa80zaqmjuop 回复

不容置疑的是, 讯飞的语音识别是中文界做得最好的. 可以试试, 识别很精确, 语音朗读很人性化 , 可以感受到 机器学习 的巨大威力. 我还用Clojure写了个App去调用讯飞SDK, 随时随地读网页文章, 做语音标记 ,目前 还未开源. 写hello world肯定没问题, 通过Clojure强大的宏能力 结合 机器学习&深度学习, 生成代码不是不可能的. 😍

30806
4215chenge 回复

因为 ns 是个宏, ns宏里面代码 把 require 函数 当成 数据来处理了, 所以写成 (:require ...)区分了. 不在ns里面使用require是这样写的:

(require '(clojure.java.io))
 lein repl
user=> (source ns)
(defmacro ns
  "Sets *ns* to the namespace named by name (unevaluated), creating it
  if needed.  references can be zero or more of: (:refer-clojure ...)
  (:require ...) (:use ...) (:import ...) (:load ...) (:gen-class)
  with the syntax of refer-clojure/require/use/import/load/gen-class
  respectively, except the arguments are unevaluated and need not be
  quoted. 
  ... )

当初Clojure打动我的是, ClojureScript函数式 可以 轻易写出很复杂的单页面(如单页面游戏, 网页编辑器lighttable), 甚至 连编辑器都不用离开.

4215

谢谢,不知道你接触Elixir没有?我最近在看elm,感觉也不错。

上次看个演讲说lisp是外星人语言,我感觉还不是外星人暂时就不用吧。

30806
4215chenge 回复

Matz说过Emacs改变了他的人生, 准确说应该是ELisp改变了他的人生. http://www.slideshare.net/yukihiro_matz/how-emacs-changed-my-life 那你肯定认为Matz也是外星人啦 😝 我接触过Elixir呀,他也是受Lisp影响的函数式语言呀, 很不错. Elm是Haskell的子集, 第一个实现了FRP, 学好得先搞好Haskell. 大部分函数式编程语言的开发效率都是超高的, 但是用于生产的并不多. Clojure是开发效率超高加上用途极广(不只是限制于做网站和后端), 用于生产的性能又刚刚的, 写Clojure后端API, ClojureScript前端单页面, 还有大数据分析, 数据挖掘, 机器学习, 写安卓APP , ClojureCLR写微软软件 等等 都非常棒, 几乎没有它做不了的事情.

7072

高手潜水呀

ruby-china 也有人潜水。但国内有很多牛人都不潜水,有管理论坛的的,有回答新手问题的、有分享撕逼的。至少看起来,是团结、热闹的。

3873

想问下,讯飞的api主要能干些啥?语音识别输入?

30806
3873cqcn1991 回复

可以 语音识别输入, 语音朗读, 分词等功能, 具体看讯飞开放平台: http://www.xfyun.cn/index.php/sdk/dispatcher 😝 欢迎来一起玩讯飞呀

30806
7072yfractal 回复

这一点是clojure-china要学习的, 因为大部分clojure开发者的解决问题的能力都很强, 几乎说很少遇到自己很难解决的问题.

因为函数式的思想简单直接, 直击问题的算法本质, 不会像面向对象一样对象继承等那么复杂, 为了找个问题, 看了几十个底层类的方法. 但是不可否认的是, 面向对象对于GUI编程是友好的, 但是 即使这样, 几乎没有函数式做不了的事情, 我用Clojure函数式写安卓应用的GUI 也是一样写好的, 很简单干净. 我用ClojureScript函数式 写前端单页面游戏,也是轻易写好, 开发效率不知有多高.

而且Lisp的开发效率和经验成正比的, 几乎没有上限的限制. 最难的跨 领域问题, 也可以快速 写个解释器 或者是 编译器出来. ... 面向对象是底层操作, 函数式才是上层操作, 这个才是合适的, 不要为了解决一个简单问题, 还没解决问题, 就被一堆的对象搞死了.

以前我觉得Ruby是最好的语言, 但是 Ruby的大师 Jim Weirich, 这个视频改变了我, 让我重新审视 函数式编程, 重新看待Lisp函数式的鼻祖, 重新看待邱奇 和 图灵 , 我认为邱奇 的伟大 应该是 高于 图灵的 👏

7072

没人会否认 Lisp/Clojure 的价值。语言有自己的特点,也有自己的适用范围。

有很多人从 Ruby 转向 clojure,也有很多人在用 ruby 做函数式的尝试。

Ruby / Rails 本身都在函数式编程上学习了很多。比如 rails 的 ActiveRecord::Relation User.wher(xx: xx).find(xx) 。每一个方法都返回一个 ActiveRecord::Relation 的实例,而且是 lazy evaluation 的。

Clojure 也在做解决状态的尝试,比如 https://github.com/stuartsierra/component

面向对象,会带来复杂度,但也能解决问题,比如被很多 rails 程序员诟病的 https://github.com/josevalim/inherited_resources ,也可以极大程度上提高生产力。开发效率和能力成正比。这种东西所带来的好处就是,大多数情况下,隐藏了细节,团队开发就变成了有经验的+经验少的这种组合。而不是所有人都要有经验。

有些问题,需要通过 提供抽象、提供解决方案来解决。 比如创建数据,需要用到 factory,需要实现的就是 factory_girl 的那些方法,无论是 ruby 还是 clojure。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册