0

コンピューターからサウンドをキャプチャできる小さなアプリケーションを作成しました。システムの簡単なプロセスは、音楽ファイルを再生すると音声がキャプチャされ、キャプチャされたものを再生すると再生されます。完全にすべてが正常に機能します。今私がやりたいことは、プレイバックを印刷したいということです。「こんにちは、おはよう」のような声をキャプチャすると仮定すると、再生を押すと、録音されたものをテキストで出力する必要があります。以下のようにコーディングをキャプチャして再生します。

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);
    }
}  

誰かのアドバイス/これから克服するのを手伝ってください。
ありがとうございました。

4

1 に答える 1

1

CMUスフィンクスを見てください!キャプチャしたオーディオを音声に変換するには、Sphinx API を使用できます。ただし、システムはまだ開発中であるため、音声認識の精度はあまり役に立たないことに注意してください.Androidでは、かなりの精度を持つGoogleの音声認識を使用できます.しかし、それでもキャプチャした音声を音声に変換しません.希望の精度で。そのため、オーディオの再生速度で表示される固定の歌詞テキストを使用することをお勧めします。

それが役に立ったことを願っています!!

于 2013-07-26T10:55:35.827 に答える