2013-04-24 39 views
0

我開發了一個應用程序,可以記錄特定持續時間的音頻,另一個使用網絡將語音轉換爲文本。 這兩件事可以同時完成嗎?我的意思是錄製一段音頻並將該錄製的音頻文件中可用的語音轉換爲文本?同時錄製音頻並轉換爲文本

+0

我假設你已經嘗試將它們放在兩個單獨的線程中?雖然這可能會失敗,因爲您會試圖同時訪問相同的音頻文件。您可能需要等待關閉音頻文件,然後上傳。一種選擇可能是使用靜音檢測以塊的形式記錄音頻,並且一次處理它幾個字 – 2013-04-24 09:34:10

+0

我不確定是否在語音到文本轉換應用程序中上傳了音頻文件。是否可以這樣做?如果是,你能幫我解決資源問題嗎? – 2013-04-24 09:53:02

+0

我只是假設你正在上傳它。然而,你正在對文本進行演講,我認爲唯一的方法是將音頻保存爲小塊,並分別處理每個文件 – 2013-04-24 09:54:18

回答

0

你這樣做的方式可能不是很準確,因爲對語音輸入有很多不同的建議。但你可以給它一個打擊。
據我所知,你應該在後臺服務中運行音頻並啓動語音檢測。
對於後臺服務this是你如何使用它們。你也可以看到一個完整的應用程序here
對於語音識別,您可以參考here

這就是你如何創建一個服務。
更好地將您的媒體代碼投入使用。這是在後臺播放媒體的最佳方式。

public class serv extends Service{ 

    MediaPlayer mp; 
    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 
    public void onCreate() 
    { 
     mp = MediaPlayer.create(this, R.raw.b); 
     mp.setLooping(false); 
    } 
    public void onDestroy() 
    {  
     mp.stop(); 
    } 
    public void onStart(Intent intent,int startid){ 

     Log.d(tag, "On start"); 
     mp.start(); 
    } 
} 

其中raw是在資源中創建的文件夾。和R.raw.b是一個mp3文件。
就在您啓用此意圖之前調用此服務。

/** 
* Fire an intent to start the voice recognition activity. 
*/ 
private void startVoiceRecognitionActivity() 
{ 
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
      RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); 
    intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Voice recognition Demo..."); 
    startActivityForResult(intent, REQUEST_CODE); 
} 

/** 
* Handle the results from the voice recognition activity. 
*/ 
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) 
    { 
     // Populate the wordsList with the String values the recognition engine thought it heard 
     ArrayList<String> matches = data.getStringArrayListExtra(
       RecognizerIntent.EXTRA_RESULTS); 
     wordsList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
       matches)); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
}