国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java PCM音頻變聲

linkFly / 3200人閱讀

摘要:項目中需要用到對人聲音頻數據進行變聲處理。具體工具類代碼變聲原始數據輸入流變速率大于為加快語速,小于為放慢語速音調變化率大于為降低音調深沉,小于為提升音調尖銳變聲后的數據輸入流這里根據自己格式修改對應參數。

項目中需要用到對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;
    }

    @Override
    public boolean process(AudioEvent audioEvent) {
        bos.write(audioEvent.getByteBuffer(),0,audioEvent.getByteBuffer().length);
        return true;
    }

    @Override
    public 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();
    }

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/68217.html

相關文章

  • 努力翻譯一篇中文最友好的,Web Audio API的使用相關的文章

    摘要:前言本文翻譯自上的利用,這是中的的一個入門教程。原文是英文,但有日本同志翻譯的日文版。這是為了提供一個基本的低音増幅效果在這個例子中可以設定過濾器的種類,周波數,甚至的值。如果是過濾器的話,可以提供一個比指定周波數低的低音増幅。 前言 本文翻譯自MDN上的《Web Audio APIの利用》,這是HTML5中的Web Audio API的一個入門教程。原文是英文,但有日本同志翻譯的日文...

    caikeal 評論0 收藏0
  • 如何在瀏覽器中播放pcm音頻

    摘要:格式文件中不包含頭部信息,播放器無法知道采樣率,聲道數,采樣位數,音頻數據大小等信息,導致無法播放。 本文記錄一點工作經歷,探討音頻文件的格式更多訪問我的博客 前言 最近在整理音視頻編程的知識,回憶起半年多,有一次需求是在后臺播放某來源的 pcm 文件,當時處理方法用了點技巧,記錄下來 背景:業務需求,在web后臺里播放 pcm 文件,文件不大(約300KB,已知 pcm 的參數采樣...

    zxhaaa 評論0 收藏0
  • javaMP3轉pcm 百度語音識別

    摘要:不多說直接貼代碼獲取文件的音頻流,的格式將音頻轉化為的格式保存下來代碼忘記借鑒了哪位大神的不好意思好像是綜合了部分代碼下面的是依賴小程序錄音格式上傳服務器轉化為格式后通過百度語音識別結果 不多說直接貼代碼 import com.baidu.aip.speech.AipSpeech; import javazoom.spi.mpeg.sampled.file.MpegAudioFileR...

    afishhhhh 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<