2014-02-11 97 views
11

我正在使用Intel Perceptual Computing SDK语音识别模块。使用Microsoft Visual Studio 2012 Professional,SDK示例察觉到听写,并在处理完语音输入后将其打印在控制台窗口中。我想要做的就是复制控制台窗口上打印的输出并将其写入.txt文件中。我遵循一般的方式,但不知何故写入文件的文本只是一些数字。将Visual C++控制台输出写入或复制到文本文件

// Callback for recognized commands and alerts 
class MyHandler: public PXCVoiceRecognition::Recognition::Handler, public PXCVoiceRecognition::Alert::Handler 

{ 公共: MyHandler的(标准::矢量&命令) {这个 - >命令=命令; }

virtual void PXCAPI OnRecognized(PXCVoiceRecognition::Recognition *cmd) 
{ 
    wprintf_s(L"\nRecognized: <%s>\n", (cmd->label>=0)?commands[cmd->label]:cmd- >dictation); //this line prints the dictated statement// 
    // writing to a text file 
    printf("Writing to the txt file..."); 
    std::ofstream out("c:\\MyVoice.txt"); 
    out<<cmd->dictation; 
} 

protected: 
std::vector<pxcCHAR*> commands; 

};

int wmain(int argc, wchar_t* argv[]) { 
// Create session 
PXCSmartPtr<PXCSession> session; 
pxcStatus sts = PXCSession_Create(&session); 
if (sts < PXC_STATUS_NO_ERROR) { 
wprintf_s(L"Failed to create the PXCSession\n"); 
return 3; 
} 
// Parse command line 
UtilCmdLine cmdl(session); 
if (!cmdl.Parse(L"-file-iuid-grammar-sdname-realtime-eos",argc, argv)) return 1; 

// Create PXCVoiceRecognition instance 
PXCSmartPtr<PXCVoiceRecognition> vc; 
sts=session->CreateImpl(cmdl.m_iuid, PXCVoiceRecognition::CUID, (void **)&vc); 
if (sts<PXC_STATUS_NO_ERROR) 
{ 
wprintf_s(L"Failed to create PXCVoiceRecognition\n"); 
return 3; 
} 

// Find and initilize capture module 
UtilCaptureFile capture(session,cmdl.m_recordedFile,false); 
if (cmdl.m_sdname) capture.SetFilter(cmdl.m_sdname); 

// Query PXCVoiceRecognition profile 
PXCVoiceRecognition::ProfileInfo profile; 
for (int i=0;;i++) 
{ 
    sts=vc->QueryProfile(i, &profile); 
    sts=capture.LocateStreams(&profile.inputs); 
    return 3; 
} 
if (cmdl.m_realtime >= 0) capture.SetRealtime(cmdl.m_realtime); 
// Set PXCVoiceRecognition profile 
if (cmdl.m_eos) profile.endOfSentence = cmdl.m_eos; 
sts=vc->SetProfile(&profile); 

// Grammar intialization 
pxcUID grammar = 0; 
if (cmdl.m_grammar.size()<0) 
{ 
    wprintf_s(L"Dictation Mode\n"); 
} 

vc->SetGrammar(grammar); 
// SubscribeRecognition 
MyHandler handler(cmdl.m_grammar); 
vc->SubscribeRecognition(80, &handler); 
vc->SubscribeAlert(&handler); 

// Processing loop 
PXCSmartPtr<PXCAudio> audio; 
PXCSmartSPArray sps(3); 
wprintf_s(L"Press any key to exit\n"); 

while (!_kbhit()) 
{ 
    sts = capture.ReadStreamAsync(audio.ReleaseRef(),sps.ReleaseRef(0)); 
    sts=vc->ProcessAudioAsync(audio,sps.ReleaseRef(1)); 
    sps.SynchronizeEx(); 
} 

}

+0

你能否正确格式化你的代码 – Sean

+0

@肖恩我有这样的格式化大麻烦。这不允许我发布更改。 –

回答

1

一般来说,如果你能在控制台窗口中正确地产生输出,那么你可以只运行与像> c:\result.txt命令行参数的可执行文件到标准输出重定向到一个文件(我假设你是在Windows上,因为你有visual-C++标签),因此你根本不需要改变你的代码(你放到cout的所有东西都会被写入参数指定的文件中)。如果您使用的是Visual Studio GUI,则可以在项目的属性页面中指定命令行参数,否则您可以直接在控制台窗口中手动输入命令。

+0

是的,我正在使用Windows 7.请给我一个链接,详细描述您刚刚描述的方法? –

18

您可以使用>重定向由Visual Studio运行的命令的输出。通过在解决方案资源管理器中选择您的项目并单击PROJECT-> Properties-> Configuration Properties-> Debugging,将它添加到命令参数中。然后在命令参数中输入> output.txt。运行应用程序后,该文件将显示在工作目录中 - 默认情况下,该目录与.sln文件相同。

+0

谢谢。这适用于正常的应用程序。不知何故,当我为上面发布的这种语音识别代码做同样的事时,控制台并没有给出任何东西。没有这个变化,它工作正常,给我输出。但是除了创建一个空的txt文件之外,对于output.txt不做任何事情。 –

+1

有可能你的输出是stderr而不是stdout?要捕获stderr,你可以使用'2> output.txt'而不是'>'。你也可以将''output.txt 2>&1'结合到同一个文件中。' – Rastaban

+0

好。但有一个转折点。该程序正在执行完美,并制作一个txt文件。但它不会将控制台输出写入txt文件。 –

2

我想他只是建议运行可执行文件并将其引导到一个文件:
C:\ EXE> C:\ output.txt中

这里是一个链接约redirection

相关问题