科大讯飞语音识别技术实(yuan)战(ma)小结

 

1.准备工作

1.1 开通讯飞开放平台账号

https://www.xfyun.cn/

可以领取免费套餐:https://www.xfyun.cn/free

1.2 下载语音处理类库TarsosDSP

https://0110.be/releases/TarsosDSP/TarsosDSP-2.4/TarsosDSP-2.4.jar

建议发布到maven仓库,便于集成。参考命令(本地安装):

mvn install:install-file -Dfile=F:\tarsosdsp\TarsosDSP-2.4.jar -DgroupId=be.tarsos -DartifactId=dsp -Dversion=2.4 -Dpackaging=jar

POM文件添加依赖:

        <dependency>
            <groupId>be.tarsos</groupId>
            <artifactId>dsp</artifactId>
            <version>2.4</version>
        </dependency>

1.3 下载媒体处理软件ffmpeg

科大讯飞的接口不支持AMR等格式的音频文件,需要转换为PCM格式,因此需要使用功能强大的ffmpeg进行转码。为简化ffmpeg的使用,我们将利用TarsosDSP类库。TarsosDSP类库会在指定位置启动ffmpeg命令,我们预先下载好,可以避免TarsosDSP类库动态下载ffmpeg导致的长时间等待。

ffmpeg下载地址:

https://0110.be/releases/TarsosDSP/TarsosDSP-static-ffmpeg/linux_64_bits_ffmpeg

https://0110.be/releases/TarsosDSP/TarsosDSP-static-ffmpeg/windows_64_bits_ffmpeg.exe

win7下的存储路径:

C:\Users\<你的用户名>\AppData\Local\Temp\windows_64_bits_ffmpeg.exe

linux下的存储路径:

/tmp/linux_64_bits_ffmpeg

 

--------------------------------------------------------        华丽的分割线    ------------------------------------------------------------

下面都是干(yuan)货(ma)。

 

2. 定义一个音频转换处理工具类

我们首先定义一个音频转换处理的工具类,用于将任意格式的音频文件转换为科大讯飞接口支持的PCM格式。

工具类主体代码:

@Slf4j
public class AudioTransformUtil {
    /**
     * 将任意的音频文件转换为PCM格式的文件
     */
    public static void convertAudioFileToPCM(String originalFile, String targetFile) {
        try {
            double speedFactor = 1; // 变速率 (0,2) 大于1为加快语速,小于1为放慢语速
            double rateFactor = 1; // 音调变化率 (0,2) 大于1为降低音调(深沉),小于1为提升音调(尖锐)
            // 变声处理器(似乎不是必要的功能,但具有令人惊奇的效果)
            WaveformSimilarityBasedOverlapAdd waveformSimilarityBasedOverlapAdd = new WaveformSimilarityBasedOverlapAdd(
                    WaveformSimilarityBasedOverlapAdd.Parameters.speechDefaults(speedFactor, 8000));  // 8000是采样率,不懂啥意思,但也没影响
            AudioDispatcher dispatcher = AudioDispatcherFactory.fromPipe(originalFile, 8000,   // fromPipe是关键。这里会启动ffmpeg命令进行转码,并使用管道(pipe)与ffmpeg命令通信
                    waveformSimilarityBasedOverlapAdd.getInputBufferSize(),
                    waveformSimilarityBasedOverlapAdd.getOverlap());

            waveformSimilarityBasedOverlapAdd.setDispatcher(dispatcher);

            AudioOutputToFile out = new AudioOutputToFile(targetFile);   // AudioOutputToFile是我们自定义的文件输出工具类,代码在后面

            dispatcher.addAudioProcessor(waveformSimilarityBasedOverlapAdd);
            dispatcher.addAudioProcessor(new RateTransposer(rateFactor));   // 变声处理器(似乎不是必要的功能,但具有令人惊奇的效果)
            dispatcher.addAudioProcessor(out);
            dispatcher.run();   // TarsosDSP类库会启动一个线程异步处理音频文件

            // 等待文件输出结束
            out.waitUntilDone();
            if (log.isDebugEnabled()) {
                log.debug(
                        "[convertAudioFileToPCM] ok. originalFile : " + originalFile + ", targetFile : " + targetFile);
            }
        } catch (Exception e) {
            String errMsg = "convertAudioFileToPCM failed. originalFile : " + originalFile;
            log.error(errMsg, e);
        }
    }
文件输出工具类代码:
public class AudioOutputToFile implements AudioProcessor {
        FileOutputStream target;
        String targetFile;
        boolean isDone = false;

        AudioOutputToFile(String targetFile) {
            try {
                this.targetFile = targetFile;
                target = new FileOut
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hibernate是一个开源的Java对象持久化框架,它提供了一种方便的方式来将Java对象映射到数据库中的表,从而现对象的持久化。下面是对Hibernate进行详细解释。 首先,Hibernate是基于ORM(对象关系映射)的技术。ORM是一种编程技术,它允许开发人员将Java对象与数据库表进行映射。通过Hibernate,开发人员只需要在Java类的注解或XML配置文件中定义对象的映射关系,就能够现对象与数据库之间的转换。 其次,Hibernate提供了丰富的查询语言。Hibernate提供了一种称为HQL(Hibernate Query Language)的查询语言,它类似于SQL,但更加面向对象。开发人员可以利用HQL进行复杂的查询操作,而不需要直接编写SQL语句。 此外,Hibernate还支持事务管理。在Hibernate中,开发人员可以通过事务来管理数据库操作的一致性和原子性。通过使用Hibernate的事务管理,开发人员能够确保多个数据库操作在一个事务中执行,避免了数据不一致的问题。 另外,Hibernate还具有缓存功能。Hibernate提供了一级缓存和二级缓存,开发人员可以利用这些缓存来提高数据访问的性能。一级缓存是Hibernate默认的缓存机制,它将查询操作的结果缓存到Session对象中,减少了与数据库的交互次数。二级缓存是可选的,它将查询操作的结果缓存到SessionFactory中,用于多个Session之间的共享。 最后,Hibernate还具备透明的数据库操作功能。通过Hibernate,开发人员可以使用面向对象的方式进行数据库操作,而不需要关心底层数据库的细节。Hibernate会自动处理数据库连接、SQL语句的生成和执行等操作,极大地简化了数据库操作的过程。 综上所述,Hibernate作为一种Java对象持久化技术,提供了方便的对象与数据库之间的映射方式,丰富的查询语言,事务管理,缓存机制和透明的数据库操作功能。它的出现极大地简化了开发人员对数据库的操作,提高了开发效率和代码的可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值