Java PCM音频变声
项目中需要用到对PCM人声音频数据进行变声处理。苦苦挣扎了一周终于找到了纯Java实现的一套框架——TarsosDSP。功能非常强大!可以实时音频处理!当然我只用到了对文件处理。实际上逻辑是一样的
TarsosDSP的GitHub地址:https://github.com/JorenSix/T...。将它整合至自己的项目工程。
具体Java工具类代码:
/*** 变声* @param rawPcmInputStream 原始PCM数据输入流* @param speedFactor 变速率 (0,2) 大于1为加快语速,小于1为放慢语速* @param rateFactor 音调变化率 (0,2) 大于1为降低音调(深沉),小于1为提升音调(尖锐)* @return 变声后的PCM数据输入流*/public static InputStream speechPitchShift(final InputStream rawPcmInputStream,double speedFactor,double rateFactor) {// 这里根据自己PCM格式修改对应参数。我们项目里音频格式是固定的,所以写死TarsosDSPAudioFormat format = new TarsosDSPAudioFormat(16000,16,1,true,false);AudioInputStream inputStream = new AudioInputStream(rawPcmInputStream, JVMAudioInputStream.toAudioFormat(format),AudioSystem.NOT_SPECIFIED);JVMAudioInputStream stream = new JVMAudioInputStream(inputStream);WaveformSimilarityBasedOverlapAdd w = new WaveformSimilarityBasedOverlapAdd(WaveformSimilarityBasedOverlapAdd.Parameters.speechDefaults(speedFactor, 16000));int inputBufferSize = w.getInputBufferSize();int overlap = w.getOverlap();AudioDispatcher dispatcher = new AudioDispatcher(stream, inputBufferSize ,overlap);w.setDispatcher(dispatcher);AudioOutputToByteArray out = new AudioOutputToByteArray();dispatcher.addAudioProcessor(w);dispatcher.addAudioProcessor(new RateTransposer(rateFactor));dispatcher.addAudioProcessor(out);dispatcher.run();return new ByteArrayInputStream(out.getData());}
其中数据转录器(AudioOutputToByteArray)代码如下:
public class AudioOutputToByteArray implements AudioProcessor {private boolean isDone = false;private byte[] out = null;private ByteArrayOutputStream bos;public AudioOutputToByteArray() {bos = new ByteArrayOutputStream();}public byte[] getData() {while (!isDone && out == null) {try {Thread.sleep(10);} catch (InterruptedException ignored) {}}return out;}@Overridepublic boolean process(AudioEvent audioEvent) {bos.write(audioEvent.getByteBuffer(),0,audioEvent.getByteBuffer().length);return true;}@Overridepublic void processingFinished() {out = bos.toByteArray().clone();bos = null;isDone = true;}
}
可以通过这个工具方法播放音频:
/*** 播放PCM** 不要在非桌面环境调用。。。鬼知道会发生什么* @param rawPcmInputStream 原始PCM数据输入流* @throws LineUnavailableException*/public static void play(final InputStream rawPcmInputStream) throws LineUnavailableException {// 这里根据自己PCM格式修改对应参数。我们项目里音频格式是固定的,所以写死TarsosDSPAudioFormat format = new TarsosDSPAudioFormat(16000,16,1,true,false);AudioInputStream inputStream = new AudioInputStream(rawPcmInputStream, JVMAudioInputStream.toAudioFormat(format),AudioSystem.NOT_SPECIFIED);JVMAudioInputStream stream = new JVMAudioInputStream(inputStream);AudioDispatcher dispatcher = new AudioDispatcher(stream, 1024 ,0);dispatcher.addAudioProcessor(new AudioPlayer(format,1024));dispatcher.run();}
Java PCM音频变声相关推荐
- 怎样将音频变声?1分钟教你音频变声怎么弄!
大家平常爱不爱刷短视频呢?不知道你们看短视频的时候有没有注意到,一些视频的配音很是搞怪,常常让人捧腹大笑!那么这些声音是怎么制作出来的呢?其实大部分的搞怪配音,都是借助软件对音频进行变音来实现的~今天 ...
- 如何将音频变声?试试这几个方法吧
昨天,我在构思视频素材的时候想到可以在其中添加一个鬼畜片段,以此来提升视频的丰富度和乐趣.那么如果要添加鬼畜片段的话,首先就需要我们将音频进行变声操作,不过由于不知道怎么进行音频变声,于是我就上网搜索 ...
- 这三个音频变声编辑软件教你怎么给音频变声
现如今随着我们生活的节奏越来越快,大家都爱上了短视频,每天也都有大量的短视频被创作出来.在这样的背景下,不知道有没有小伙伴也充满创意的想去尝试,但是却因为不知道怎么调整音频变声而阻挡了创作的步伐呢?其 ...
- 如何在3分钟内实现音频变声和趣味音效?
在泛娱乐社交和互动游戏场景中,用户已不再满足于高清的音质体验和实时的互动效果,他们还想要增加趣味性和沉浸感,让声音变得好玩有趣.拍乐云Pano上线了音频变声接口,开发者可以通过 Pano SDK 设置 ...
- 怎样将音频变声?三分钟教会你
音频变声是一种常见的音频处理方式,可以对人声或音乐进行特殊处理,使其声音产生不同的效果.它的应用广泛,像是音乐制作人可能需要使用音频变声来改变歌手的声音,使其更加独特或与歌曲的风格相匹配.例如,将男歌 ...
- 音频变声的软件叫什么?这些软件值得收藏
在今天这个数字时代,随着人们对于娱乐消费需求的不断增长,很多人开始涉足各种新领域,比如语音包.游戏配音.BGM制作等等.这些领域的共同点是需要一定的音频素材,同时也需要创意性地处理这些素材.这时,音频 ...
- FFmpeg进阶: 音频变声滤镜
声音最重要的两个元素就是语速和语调,改变声音的辨识度主要也是从这两方面入手.我们可以通过对音频数据进行插值或者抽值修改,以达到降低语速和增加语速的目的.同时我们也可以通过对数据进行线性拉伸来调节音调. ...
- ffmpeg 音频 变声
记录一次ffmpeg编码变声的根本原因: 音频源采样率和ffmpeg编码时的采样率不同,音频源在采集是采样率为48000,而编码时用44100,所以播放出来的声音显得宽厚.是真.
- 使用 fmod windows 下实现音频变声 -- 萝莉 大叔 等 特效
将文件拖到窗口内, 点击播放可以看到变声效果. 也可以 点击输出将文件变声输出到文件. 可以在路径 https://download.csdn.net/download/w839687571/16 ...
- 音频算法之小黄人变声 附完整C代码
前面提及到<大话音频变声原理 附简单示例代码>与<声音变调算法PitchShift(模拟汤姆猫) 附完整C++算法实现代码> 都稍微讲过变声的原理和具体实现. 大家都知道,算法 ...
最新文章
- 解密脑机接口:专访CMU生物医学工程系主任贺斌
- 云栖大会变迁史(2009-2017)
- 开源WebGIS实施方案(一):开篇 [转]
- Android studio 查看sha1
- 慢 SQL 诊断优化套路包,套路用的对,速度升百倍
- 微程序控制的计算机涉及的两个层次,1.2 考试知识点分析
- LeetCode 221. 最大正方形(DP)
- javacript 多文件程序
- 欺诈与反欺诈的旷世攻防之战
- 腾讯IDG投资的明星无人车公司Zoox,拿下硅谷第一张载客许可
- Android之SwipeRefreshLayout下拉刷新组件
- Pr 入门教程,如何创建序列?
- mysql now()相减_MySQL 时间函数加减计算
- 导入(excel)+导出(excel)+国际化(i18n)+
- DMP文件的导入,导出
- PowerVR Series5 Architecture Guide for Developers
- 前后端分离,SpringBoot如何实现验证码操作
- 新款宝马MINI钥匙增加!轻松搞定,这MINI看着还可以噢
- win7java浏览器崩溃_浏览器崩溃怎么办,教你win7系统浏览器崩溃的应对办法
- 偏微分方程的特征线法