このプロジェクトでは、PCM Human Voiceオーディオデータの音声変動処理の使用が必要です。 1週間苦労した後、私はついに純粋なJava実装のフレームワークであるTarsosDSPを見つけました。とても強力!リアルタイムオーディオ処理!もちろん、私はファイル処理のみを使用しました。実際、ロジックは同じです
TarsosDSPのGitHubアドレス:https://github.com/jorensix/tarsosdspは、独自のプロジェクトプロジェクトに統合します。
特定のJavaツールクラスコード:
/ ***音声変更* @param rawpcminputStream raw PCMデータ入力ストリーム* @param speedfactorバリエーションレート(0,2)が1未満の音声速度を加速します。 static inputstream seackepitchshift(final inputstream rawpcminputstream、double speedfactor、double ratefactor){tarsosdspaudioformat形式= new tarsosdspaudioformat(16000,16,1、true、false); AudioInputStream inputStream = new AudioInputStream(RawPCMINPUTSTREAM、jVmaudioInputStream.ToAudioformat(Format)、AudioSystem.NOT_SPEIFIED); jvmaudioinputStream stream = new JVmaudioInputStream(inputstream); waveformsimilaritybasedlapadd w = new waveformsimilaritybasedlapadd(waveformsimilaritybasedlapadd.parameters.speechdefaults(speedfactor、16000)); int inputbufferize = w.getinputbufferize(); int overlap = w.getOverlap(); audioDispatcher dispatcher = new audioDispatcher(stream、inputbufferize、overlap); w.setdispatcher(ディスパッチャー); audiooutputtobytearray out = new audiooutputtobytearray(); dispatcher.addaudioprocessor(w); dispatcher.addaudioprocessor(new RateTransposer(RateFactor)); dispatcher.addaudioprocessor(out); Dispatcher.run();新しいbytearrayinputStream(out.getData())を返します。 }データトランスクリプト(audiooutputtobytearray)コードは次のとおりです。
パブリッククラスのaudiooutputtobytearrayは、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(arturtedexception readored){}} return; } @Override public boolean Process(audioevent audioevent){bos.write(audioevent.getbytebuffer()、0、audioevent.getbytebuffer()。length); trueを返します。 } @Override public void processingFinished(){out = bos.tobytearray()。clone(); bos = null; isdone = true; }}このツールを介してオーディオを再生できます。
/** * play pcm * *非desktop環境を呼び出しないでください。 。 。何が起こるかを知っていますか* @param rawpcminputStream raw pcm data input stream* @throws lineunavailableexception*/ public static void play(final inputstream rawpcminputStream)LineunavailableException {tarsosdspaudioformat format = new tarsosdspaudioformat(16000,16,1、true figas); AudioInputStream inputStream = new AudioInputStream(RawPCMINPUTSTREAM、jVmaudioInputStream.ToAudioformat(Format)、AudioSystem.NOT_SPEIFIED); jvmaudioinputStream stream = new JVmaudioInputStream(inputstream); audioDispatcher dispatcher = new audioDispatcher(stream、1024、0); dispatcher.addaudioprocessor(new Audioplayer(Format、1024)); Dispatcher.run(); }