Как напечатать слово в аудиофайле

Я сделал небольшое приложение, которое может записывать звуки с моего компьютера. Простой процесс системы заключается в том, что когда я проигрываю музыкальный файл, он записывает голос, а когда я проигрываю захваченный материал, он воспроизводится. Полностью все работает нормально. Теперь, что я хочу сделать, я хочу распечатать воспроизведение. Просто предположим, что я улавливаю голос типа «Привет, доброе утро», теперь, когда я нажимаю кнопку воспроизведения, он должен распечатать записанное в тексте. Кодирование захвата и воспроизведения, как показано ниже.

private void captureAudio() {
    try {
        final AudioFormat format = getFormat();
        DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
        final TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
        line.open(format);

        line.start();
        Runnable runner = new Runnable() {
            int bufferSize = (int) format.getSampleRate() * format.getFrameSize();
            byte buffer[] = new byte[bufferSize];

            public void run() {

                out = new ByteArrayOutputStream();
                running = true;
                try {
                    while (running) {
                        int count = line.read(buffer, 0, buffer.length);
                        if (count > 0) {
                            out.write(buffer, 0, count);
                        }                            
                    }
                    out.close();
                } catch (IOException e) {
                    System.err.println("I/O problems: " + e);
                    System.exit(-1);
                }
            }
        };
        Thread captureThread = new Thread(runner);
        captureThread.start();
    } catch (LineUnavailableException e) {
        System.err.println("Line unavailable: " + e);
        System.exit(-2);
    }
}  


private void playAudio() {
    try {
        byte audio[] = out.toByteArray();

        InputStream input = new ByteArrayInputStream(audio);
        final AudioFormat format = getFormat();
        final AudioInputStream ais = new AudioInputStream(input, format, audio.length / format.getFrameSize());
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
        final SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
        line.open(format);
        line.start();
        Runnable runner = new Runnable() {
            int bufferSize = (int) format.getSampleRate() * format.getFrameSize();
            byte buffer[] = new byte[bufferSize];

            public void run() {

                try {
                    int count;
                    while ((count = ais.read(buffer, 0, buffer.length)) != -1) {
                        if (count > 0) {
                            line.write(buffer, 0, (char)count);
                            System.out.print((char)count);

                        }
                    }
                    line.drain();
                    line.close();
                } catch (IOException e) {
                    System.err.println("I/O problems: " + e);
                    System.exit(-3);
                }
            }
        };
        Thread playThread = new Thread(runner);
        playThread.start();
    } catch (LineUnavailableException e) {
        System.err.println("Line unavailable: " + e);
        System.exit(-4);
    }
}  

Пожалуйста, кто-нибудь посоветуйте / помогите мне преодолеть это.
Спасибо.


person maXfenda    schedule 26.07.2013    source источник
comment
1) Вам нужно распознавание речи, но я сомневаюсь, что эту информацию можно будет поместить в полученный аудиофайл. 2) Пожалуйста, прочитайте всплывающие окна с тегами, прежде чем применять их к вопросу, это не имеет ничего общего с «потоковым аудио».   -  person Andrew Thompson    schedule 26.07.2013
comment
Вероятно, изучите API и Sphinx-4.   -  person AllTooSir    schedule 26.07.2013
comment
@AndrewThompson - Спасибо за комментарий, чувак. Я уже сделал часть распознавания речи и на 100% работает нормально. но здесь дело в том, что нет говорящей части. Речь идет о воспроизведении аудио. Чтобы распознать речь, должен быть некоторый ввод в целевую строку данных. Вот в чем я сейчас застрял. Есть идеи?   -  person maXfenda    schedule 26.07.2013


Ответы (1)


Взгляните на CMU sphinx! Чтобы иметь возможность конвертировать захваченный аудион в речь, вы можете использовать API Sphinx. Однако обратите внимание, что точность распознавания речи не так уж вам поможет, так как система все еще находится в стадии разработки. В Android вы можете использовать распознавание речи с google с хорошей точность. Но все же это не преобразует ваш захваченный голос в речь с желаемой точностью. Так что лучше иметь фиксированный лирический текст, который отображается со скоростью воспроизведения аудио.

Надеюсь, это помогло!!

person rahulserver    schedule 26.07.2013
comment
Хотя теоретически это может ответить на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки. В противном случае опубликуйте комментарий вместо ответа. - person jlordo; 26.07.2013
comment
@jlordo Я работал со сфинксом, и я очень хорошо знаю его плюсы и минусы. В любом случае, я обязательно добавлю дополнительную информацию и ссылки. В любом случае, спасибо !! - person rahulserver; 26.07.2013
comment
Я прошел CMU Sphinx и сделал с ним какую-то часть. пожалуйста, просто проверьте мой комментарий выше. Я четко упомянул свою проблему там. Спасибо, @jlordo, извини, братан, на данный момент у меня нет ссылки, но, честно говоря, я получил этот код из Интернета и внес некоторые изменения в соответствии со своими потребностями. Я очень ценю ваш совет. - person maXfenda; 26.07.2013
comment
Есть ли способ распечатать ByteArrayOutputStream в методе playAudio()? если есть способ, то это цель. Может кто-нибудь мне помочь? - person maXfenda; 26.07.2013
comment
Хорошее решение, кстати. - person Blasanka; 29.07.2017