【问题标题】:Android sync audio with textAndroid 将音频与文本同步
【发布时间】:2016-10-23 17:49:37
【问题描述】:

我正在开发一个应用程序,其中包含文本和录制的音频(波斯语-波斯语)。是否有任何 API 可以将这两者相互同步。播放音频时有什么方法可以突出显示文本。

【问题讨论】:

    标签: android synchronization speech


    【解决方案1】:

    我认为没有任何标准的 API,因为它听起来像是一种特定的功能。提供它的全面实施将是如此广泛,但 尽管如此,我还是可以给你一个研究方向,因为我认为这是一个很好的问题。

    您应该为每个音频文件创建某种类型的字幕文件,例如srt,其中可分割的单词将与音频上的发音时间进行映射。之后,您应该在您的应用程序中parse that file 创建一个Map 的句点到单词。因此,使用MediaPlayer 回调,根据音频时间突出显示文本不会有问题。此解决方案使您可以动态地将带有字幕的音频文件添加到您的应用程序中。当然,如果您不需要这种灵活性,您可以直接将字幕硬编码到您的应用程序中,并避免这个有点复杂的解析过程。

    【讨论】:

    • 数据太大。这需要很多次
    • @alirezaarvandi 所以你可以尝试create subtitles automatically 而不仅仅是编辑它。但这可能有点棘手。不幸的是,除了拒绝此功能之外,您没有其他选择。运行时的语音识别也不是一种选择,因为它应该只运行很短的时间并且效果不佳。不是 2016 年的想法
    【解决方案2】:

    我想我回答这个问题为时已晚,这也非常困难且耗时,但我建议你,但如果你有多个音频,如音频 1、音频 2、音频 3 等,并且你正在一个一个地播放,然后循环播放Mediaplayer,您可以通过记录文本[如果在数组中]来突出显示文本。例如,如果 text1 [在数组中] 然后播放 audio1。我在 listview 中实现了这一点,例如:

            mPlayer.start();
                a++;
                z=1;
                mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
                    public void onCompletion(MediaPlayer mp) {
                        if (a!=b+1) {
                            if(mPlayer != null) {
                                if(mPlayer.isPlaying()) {
                                    mPlayer.stop();
                                }
                                mPlayer.reset();
                            }
                            try {
                                mPlayer.setDataSource("/mnt/sdcard/audio/aya(" + a + ").mp3");
                                mPlayer.prepare();
                                quranlst.setFocusableInTouchMode(true);
                                quranlst.setSelection(z);
                                quranlst.requestFocus();
                             quranlst.getChildAt(z).setBackgroundColor(Color.WHITE);
    
    
    
    
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
    
                            mPlayer.start();
    
                            a++;
                            z++;
    

    其中 z 是文本位置。希望这能给你一些想法。

    【讨论】:

      猜你喜欢
      • 2017-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2023-03-24
      • 2014-01-07
      • 1970-01-01
      相关资源
      最近更新 更多