Проект требует использования голосовой обработки голосовых аудиодантеров PCM . После того, как я боролся за неделю, я наконец нашел основу для внедрения Pure Java - Tarsosdsp. Очень мощно! Обработка звука в реальном времени! Конечно, я использовал только обработку файлов. На самом деле, логика такая же
Адрес Github's Tarsosdsp: https://github.com/jorensix/tarsosdsp интегрирует его в свои собственные проекты.
Конкретный код класса инструмента Java:
/ *** Изменение голоса* @param rawpcminptream raw pcm входной поток данных* @param speedfactor Скорость вариации (0,2) больше 1 ускоряет скорость речи, меньше 1 - замедление скорости речи* @param скорость изменения тона. Статический inputStream SpeechPitchShift (конечный inputStream rawpcminptstream, двойной скорость, двойной ровный фактор) {tarsosspaudioformat format = new Tarsospaudioformat (16000,16,1, true, false); AudioinputStream inputStream = new AudioinputStream (rawpcminputstream, jvmaudioinputstream.toaudioformat (format), audiosystem.not_specified); Jvmaudioinputstream = new jvmaudioinputstream (inputstream); WABEFORMSIMilalityBasedOverlapadd W = new WaveFormSimiLaityBasedOverlapadd (WabeformSimiLaityBasedOverlapadd.parameters.seechDefaults (SpeedFactor, 16000)); int inputBuffersize = w.getInputBuffersize (); int overse = w.getoverlap (); AudioDispatcher Dispatcher = новый AudioDispatcher (Stream, InputBuffersize, перекрытие); W.SetDispatcher (диспетчер); Audiooutputtobytearray out = new audiooutputtobytearray (); Dispatcher.addaudioprocessor (W); Dispatcher.AddaudioProcessor (новый RateTransposer (rateFactor)); Dispatcher.addaudioprocessor (Out); dispatcher.run (); вернуть новый BytearRayinputStream (out.getData ()); }Код транскрипта данных (audiooutputtobytearray) заключается в следующем:
открытый класс AudioOutputTobyTearRay реализует AudioProcessor {Private Boolean Isdone = false; частный байт [] out = null; Частный BytearrayOutputStream Bos; public audiooutputtobytearray () {bos = new BytearrayOutputStream (); } public byte [] getData () {while (! Isdone && out == null) {try {thread.sleep (10); } catch (прерывание, игнорируемое) {}} return Out; } @Override public boolean process (audioevent audioevent) {bos.write (audioevent.getbytebuffer (), 0, audioevent.getbytebuffer (). Length); вернуть истину; } @Override public void -обработкафинал () {out = bos.tobytearray (). Clone (); bos = null; isdone = true; }}Вы можете воспроизводить Audio через этот инструмент:
/** * Воспроизвести pcm * * не звоните в не дисктоп. Полем Полем Что вы знаете, что произойдет* @param rawpcminptstream raw pcm data data stream* @throws lineunavailableexception*/ public static void play (final inputstream rawpcminptstream) бросает линейный разум. AudioinputStream inputStream = new AudioinputStream (rawpcminputstream, jvmaudioinputstream.toaudioformat (format), audiosystem.not_specified); Jvmaudioinputstream = new jvmaudioinputstream (inputstream); AudioDispatcher Dispatcher = новый AudioDispatcher (поток, 1024, 0); Dispatcher.addaudioprocessor (новый аудиопластир (формат, 1024)); dispatcher.run (); }