android - 我可以使用MediaPlayer从音频文件自动创建字幕吗?

标签 android android-studio audio android-mediaplayer media-player

下面是我的代码;

我可以通过编程方式将mp3创建为.srt文件吗?

    holder.llView.setOnClickListener(new View.OnClickListener() {
            @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
            @Override
            public void onClick(View v) {
                MediaPlayer mediaPlayer = new MediaPlayer();
                try {
                    mediaPlayer.setDataSource(filePathList.get(position));
                    mediaPlayer.prepare();

                   //mediaPlayer.addTimedTextSource(subTitleSrc, MediaPlayer.MEDIA_MIMETYPE_TEXT_SUBRIP);
                   //int textTrackIndex = findTrackIndexFor(
                   //MediaPlayer.TrackInfo.MEDIA_TRACK_TYPE_TIMEDTEXT,
                   //mediaPlayer.getTrackInfo());
                   //if (textTrackIndex >= 0) {
                   //   mediaPlayer.selectTrack(textTrackIndex);
                   //} else {
                   //  Log.w("test", "Cannot find text track!");
                    //}

                    // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
                    // mediaPlayer.setOnTimedTextListener(new MediaPlayer.OnTimedTextListener() {
                    //@Override
                    //public void onTimedText(final MediaPlayer mediaPlayer, final TimedText timedText) {
                    //if (timedText != null) {
                    //Log.d("test", "subtitle: " + timedText.getText());
                    // }
                     //       }
                     // });
                      // }
                   mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

                } catch (IOException e) {
                    e.printStackTrace();
                }
                mediaPlayer.start();
            }
        });

下面的代码为ffmpeg命令;
  String cmd=  "ffmpeg -i"+ filePathList.get(position).substring(filePathList.get(position).lastIndexOf("/")+1);
                    FFmpeg ffmpeg = FFmpeg.getInstance(CountryListActivity.this);
                    try {
                        // to execute "ffmpeg -version" command you just need to pass "-version"
                        ffmpeg.execute(new String[]{cmd}, new ExecuteBinaryResponseHandler() {

                            @Override
                            public void onStart() {
                                Log.e("!!!!!!!!!",""+filePathList.get(position));
                            }

                            @Override
                            public void onProgress(String message) {
                                Log.e("message..............",""+message);
                            }

                            @Override
                            public void onFailure(String message) {
                                Log.e("messageeeeeeeee..............",""+message);
                            }

                            @Override
                            public void onSuccess(String message) {
                                Log.e("messageeeeeeewwwwwwwwwwwee..............",""+message);
                            }

                            @Override
                            public void onFinish() {
                                Log.e("messagewwwewreeeeeeee..............","");
                            }
                        });
                    } catch (FFmpegCommandAlreadyRunningException e) {
                        // Handle if FFmpeg is already running
                        e.printStackTrace();
                    }

最佳答案

您基本上正在寻找的内容是语音转文字。正如您在问题中提到的那样,您已经录制了音频。您可以使用Google's Speech To Text API从音频获取文本。这是来自Google的示例代码

// Imports the Google Cloud client library
import com.google.cloud.speech.v1.RecognitionAudio;
import com.google.cloud.speech.v1.RecognitionConfig;
import com.google.cloud.speech.v1.RecognitionConfig.AudioEncoding;
import com.google.cloud.speech.v1.RecognizeResponse;
import com.google.cloud.speech.v1.SpeechClient;
import com.google.cloud.speech.v1.SpeechRecognitionAlternative;
import com.google.cloud.speech.v1.SpeechRecognitionResult;
import com.google.protobuf.ByteString;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class QuickstartSample {

  /**
   * Demonstrates using the Speech API to transcribe an audio file.
   */
  public static void main(String... args) throws Exception {
    // Instantiates a client
    try (SpeechClient speechClient = SpeechClient.create()) {

      // The path to the audio file to transcribe
      String fileName = "./resources/audio.raw";

      // Reads the audio file into memory
      Path path = Paths.get(fileName);
      byte[] data = Files.readAllBytes(path);
      ByteString audioBytes = ByteString.copyFrom(data);

      // Builds the sync recognize request
      RecognitionConfig config = RecognitionConfig.newBuilder()
          .setEncoding(AudioEncoding.LINEAR16)
          .setSampleRateHertz(16000)
          .setLanguageCode("en-US")
          .build();
      RecognitionAudio audio = RecognitionAudio.newBuilder()
          .setContent(audioBytes)
          .build();

      // Performs speech recognition on the audio file
      RecognizeResponse response = speechClient.recognize(config, audio);
      List<SpeechRecognitionResult> results = response.getResultsList();

      for (SpeechRecognitionResult result : results) {
        // There can be several alternative transcripts for a given chunk of speech. Just use the
        // first (most likely) one here.
        SpeechRecognitionAlternative alternative = result.getAlternativesList().get(0);
        System.out.printf("Transcription: %s%n", alternative.getTranscript());
      }
    }
  }
}

为了将其添加到您的Android项目中。要添加GoogleCloud,您可以visit或直接下载JAR

关于android - 我可以使用MediaPlayer从音频文件自动创建字幕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56863365/

相关文章:

android - 同步到Google Tasks API的步骤

javascript - Android chrome 中 JS 代码的低延迟音频播放

c# - 从资源中添加.wav文件(WPF C#)

android - 原因 : lateinit property _buildFeatureValues has not been initialized

Android - 具有 CHIPS 风格的自定义选项卡布局?

shell - 单层 SoCKS

android - 使用 transferobserver android 设置 aws 对象的权限

android - 如何在应用中高效实现多主题?

android - 在 Canvas 上绘制部分图像

android - 如何从 Android 应用程序的所有文件中删除未使用的项目?