2016-02-27 47 views
-1

对不起,我一直坚持这一个月,我想提供尽可能多的细节......它只是一个文件没有发现异常在一个简单的库...: )文件未找到异常? (语音识别)

我对我的variances文件中获取文件未发现异常:

enter image description here

,不过我会,有差异文件:

enter image description here

我试图简单地在我的后台服务中实现语音识别,以便我可以检测到用户说出单词hello(使用pocketsphinx)。

的问题发生在这个方法:createSphinxDir();

这里是我的服务:

@Override 
    public void onCreate() { 
     super.onCreate(); 
     setupRecog(); 

     } 
    private void setupRecog() { 
    String sphinxDir = createSphinxDir(); 
    Log.v(TAG, "ABOUT TO CREATE SETUP"); 
    if (sphinxDir != null) { 
     try { 

      Log.v(TAG, "SETTING UP! :)"); 
      mSpeechRecognizer = defaultSetup() 
        .setAcousticModel(new File(sphinxDir, "en-us-ptm")) 
        .setDictionary(new File(sphinxDir, "hello.dict")) 
        .setBoolean("-allphone_ci", true) //WHAT IS THIS 
        .getRecognizer(); 
      mSpeechRecognizer.addListener(this); 

      Log.v(TAG, "ADDED LISTENER"); 

      if ((new File(sphinxDir + File.separator + "command.gram")).isFile()) { 
       mSpeechRecognizer.addKeywordSearch("hello", 
         new File(sphinxDir + File.separator + "command.gram")); 

       Log.v(TAG, "ADDED KEYWORD SEARCH! :)"); 
      } 

      // Or wherever appropriate 
      mSpeechRecognizer.startListening("wakeup"); //Is this correct? 
      Log.v(TAG, "STARTED LISTENING"); 

     } catch (IOException e) { 

      Log.v("ERROR", TAG); 

     } 
    } 
} 


String createSphinxDir() { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); 
    String sphinxDir = prefs.getString("sphinx", null); 
    if (sphinxDir == null) { 
     Assets assets; 
     Log.v(TAG, "Assets are not synced, should sync now:"); 
     try { 
      Log.v(TAG, "In try block!"); 
      assets = new Assets(this); 
      File sphinxDirFile = assets.syncAssets(); 
      Log.v(TAG, "Syncing assets...should set up listener"); 
      if (sphinxDirFile != null) { 
       sphinxDir = sphinxDirFile.getAbsolutePath(); 
       SharedPreferences.Editor editor = prefs.edit(); 
       editor.putString("sphinx", sphinxDir); 
       editor.commit(); 
       Log.v(TAG, "Set up listener"); 

      }else{ 
       Log.v(TAG, "sphinxDirFile is null!"); 
      } 
     } catch (IOException e) { //THIS IS THE PLACE WHERE I AM GETTING THE ERROR! 
      e.printStackTrace(); 
      Log.d(TAG, e.toString()); 
     } 
    } 
    return sphinxDir; 
} 

我也有所有的回调方法(onPartialResult,onResult等),但他们从来没有得到调用。

早些时候我得到一个异常说方差.md5文件不存在,所以我把一个空间,在variances.md5之间,但现在我得到这个错误,我不知道为什么...

请让我知道,

Ruchir

+0

我没有看到你所处理的AssetManager通过其加载的资产的代码。 –

+0

我可以从堆栈跟踪中看到您正在使用AssetManager。它在Assets类中,我们在这里看不到。 –

+0

在差异文件末尾添加一个空格,看看它是否可以。您不需要AssetManager,Sphinx的syncAssets方法为您完成副本。 –

回答

1

早些时候我得到一个异常说.md5文件不存在的方差,所以我把一个空间方差之和.md5,但现在我得到这个错误,我不知道为什么...

,它引起的问题,而是你需要遵循documentation你不应该做这样的事情:

的标准方法在您的Android应用程序中发布资源文件是将它们放到您项目的assets/目录中。但为了使它们可用于pocketsphinx文件应该有物理路径,只要它们在.apk之内就没有它们。来自pocketsphinx-android的资产类提供了一种方法来自动将资产文件复制到目标设备的外部存储。 edu.cmu.pocketsphinx.Assets#syncAssets同步assets.lst文件位于顶部assets/的资源读取项目。在复制之前,如果存在相同的名称,则匹配资产的MD5校验和和外部存储上的文件。如果存在不完整的信息(外部存储中没有文件,没有任何两个.md5文件),或者存在散列不匹配,它只会进行实际的复制。 PocketSphinxAndroidDemo包含生成assets.lst以及.md5文件的蚂蚁脚本,请查找assets.xml

请注意,如果ant构建脚本在构建过程中无法正常运行,资产可能不同步。确保脚本在构建过程中运行。

为了整合资产同步在应用程序中执行以下操作

包括从演示应用app/asset.xml构建文件到您的应用程序。编辑build.gradle构建文件运行assets.xml

ant.importBuild 'assets.xml' 
    preBuild.dependsOn(list, checksum) 
    clean.dependsOn(clean_assets) 
+0

'asset.xml'的内容应该是什么? –

+0

请参阅pocketsphinx android演示 –

+0

但演示中'main'中没有'assets.xml'。 –