zl程序教程

您现在的位置是:首页 >  后端

当前栏目

遇到的C++ cli 转 C++ native 为C# 程序提供接口。

c#C++接口程序 遇到 提供 native CLI
2023-09-14 09:12:37 时间

接口文件

 

/*++

(do not edit the above line)

********************************************************************************

**

**  “INTEL CONFIDENTIAL

**  Copyright 2013 - 2018 Intel Corporation All Rights Reserved.

**

********************************************************************************

**

**  The source code contained or described herein and all documents related to

**  the source code ("Material") are owned by Intel Corporation or its suppliers

**  or licensors. Title to the Material remains with Intel Corporation or its

**  suppliers and licensors. The Material may contain trade secrets and

**  proprietary and confidential information of Intel Corporation and its

**  suppliers and licensors, and is protected by worldwide copyright and trade

**  secret laws and treaty provisions. No part of the Material may be used,

**  copied, reproduced, modified, published, uploaded, posted, transmitted,

**  distributed, or disclosed in any way without Intel’s prior express written

**  permission.

**

**  No license under any patent, copyright, trade secret or other intellectual

**  property right is granted to or conferred upon you by disclosure or delivery

**  of the Materials, either expressly, by implication, inducement, estoppel or

**  otherwise. Any license under such intellectual property rights must be

**  express and approved by Intel in writing.

**

**  THE MATERIAL IS PROVIDED "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY OF

**  ANY KIND INCLUDING WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT,

**  OR FITNESS FOR A PARTICULAR PURPOSE. INTEL WILL NOT PROVIDE ANY SUPPORT,

**  ASSISTANCE, INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE

**  ANY UPDATES, ENHANCEMENTS OR EXTENSIONS.  Intel does not warrant or assume

**  responsibility for the accuracy or completeness of any information, text,

**  graphics, links or other items contained within the material.

**

**  LIMITATION OF LIABILITY.  IN NO EVENT SHALL INTEL OR ITS SUPPLIERS BE LIABLE

**  FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, LOST PROFITS,

**  BUSINESS INTERRUPTION, OR LOST INFORMATION) ARISING OUT OF THE USE OF OR

**  INABILITY TO USE THE MATERIAL, EVEN IF INTEL HAS BEEN ADVISED OF THE

**  POSSIBILITY OF SUCH DAMAGES.

**

**  *Third-party brands and names are the property of their respective owners.

**

**  Unless otherwise agreed by Intel in writing, you may not remove or alter

**  this notice or any other notice embedded in Materials by Intel

**  or Intel’s suppliers or licensors in any way.?**

********************************************************************************

--*/

 

#ifndef _ROCKHOPPER_H_

#define _ROCKHOPPER_H_

 

#ifdef ROCKHOPPER_LIBRARY_STATIC

#   define ROCKHOPPER_API_EXPORT

#else

#   ifdef _WIN32

#       if defined(ROCKHOPPER_EXPORT) /* Visual Studio */

#           define ROCKHOPPER_API_EXPORT __declspec(dllexport)

#       elif defined(__CYGWIN__) /* Disable this on Cygwin, it doesn't work */

#           define ROCKHOPPER_API_EXPORT

#       else

#           define ROCKHOPPER_API_EXPORT __declspec(dllimport)

#       endif

#   else

#       if defined(ROCKHOPPER_EXPORT)

#           define ROCKHOPPER_API_EXPORT __attribute__((visibility("default")))

#       else

#           define ROCKHOPPER_API_EXPORT

#       endif

#   endif

#endif

 

#ifdef __cplusplus

extern "C" {

#endif

 

    // left for compatibility

    #define ROCKHOPPER_SUCCESS                  RH_NO_ERROR

    #define ROCKHOPPER_ERROR                    RH_ERROR_GENERIC

    #define ROCKHOPPER_UNKNOWN_ERROR            RH_ERROR_GENERIC

    #define ROCKHOPPER_INVALID_PARAMETER        RH_ERROR_INVALID_PARAM

    #define ROCKHOPPER_INVALID_HANDLE_VALUE     RH_ERROR_INVALID_HANDLE_VALUE

    #define ROCKHOPPER_INVALID_PATH             RH_ERROR_INVALID_PATH

 

    // base error codes

    #define RH_NO_ERROR                          0

    #define RH_ERROR_GENERIC                    -1

    #define RH_ERROR_OUT_OF_MEMORY              -2

    #define RH_ERROR_FILE_IO                    -3

    #define RH_ERROR_INVALID_RESOURCE           -4

    #define RH_ERROR_INVALID_PARAM              -5

    #define RH_ERROR_INVALID_HANDLE_VALUE       -6

    #define RH_ERROR_INVALID_PATH               -7

 

    // Threading error codes

    #define RH_ERROR_THREAD_ALREADY_STARTED     -10

    #define RH_ERROR_THREAD_START_FAILED        -11

    #define RH_ERROR_THREAD_STOP_FAILED         -12

    #define RH_ERROR_THREAD_NOT_STARTED         -13

 

    // Communication error codes

    #define RH_ERROR_OUTPUT_BUFFER_FULL         -20

    #define RH_ERROR_MESSAGE_ENQUEUE_FAILED     -21

 

    // Rest error codes

    #define RH_ERROR_MODULE_INIT_FAILED         -30

    #define RH_ERROR_MODULE_NOT_INITIALIZED     -31

    #define RH_ERROR_ENGINE_NOT_STARTED         -32

    #define RH_ERROR_ENGINE_WRONG_STATE         -33

    #define RH_ERROR_MEMORY_COPY                -34

    #define RH_ERROR_TOO_SMALL_BUFFER           -35

    #define RH_ERROR_DATA_OVERWRITTEN           -36

    #define RH_ERROR_NOT_SUPPORTED              -37

 

    // Events

    #define ROCKHOPPER_EVENT_ON_READY_FOR_SPEECH 1

    #define ROCKHOPPER_EVENT_ON_SPEECH_BEGIN     2

    #define ROCKHOPPER_EVENT_ON_SPEECH_END       3

    #define ROCKHOPPER_EVENT_ON_RMS_CHANGED      4

    #define ROCKHOPPER_EVENT_ON_ERROR            5

    #define ROCKHOPPER_EVENT_ENGINE_STARTED      6

    #define ROCKHOPPER_EVENT_ENGINE_STOPPED      7

 

    typedef void* ASR_HANDLE; // speech recognition engine handle type

    typedef void* WFST_HANDLE; // Handle for a (dynamic) WFST resource

 

    typedef enum RockhopperDataType

    {

        ROCKHOPPER_DATA_TYPE_SAMPLE_INT_16,

        ROCKHOPPER_DATA_TYPE_FEATURE_INT_16

    } RockhopperDataType;

 

    /// C-style interface used intentionally to allow for bindings in

    /// runtimes that don't support/understand C++ name mangling or

    /// reference types

 

    typedef long(*UtteranceCallback)(

        void* p,                    // callback function parameter passed in RockhopperFSSetResultCallback

        const short* samples,       // Data buffer with utterance samples. Samples are sent only for final result.

                                    // Utterance longer than source buffer length will be passed without samples(null pointer).

        int   nSamples,             // number of samples in buffer

        const char* utteranceId,    // wall clock time when utterance begins

        const char* utteranceText,  // recognized text

        float score,                // recognition score (LM)

        int   isFinal               // 0: partial result, 1: final result (end of utterance)

        );

 

    typedef void(*EventCallback)(

        void* p,                    // callback function parameter passed in RockhopperFSSetEventCallback

        int eventCode,              // event code

        int value);                 // event value

 

#pragma pack(push, 4)

    typedef struct _AsrEngineStatistics {

        union {

            struct {

                unsigned int speech : 1;

                unsigned int frontend : 3;

                unsigned int scorer : 3;

                unsigned int decoder : 3;

                unsigned int reserved : 22;

            } fields;

            int value;

        } state;

        int signalvl;

        int samples_captured_ms;

        int frames_extracted_ms;

        int frames_decoded_ms;

        float uttRtFactor;

        int utt_min_snr;

        int utt_max_snr;

        int utt_snr;

    } AsrEngineStatistics;

 

#pragma pack(pop)

    /**

     * Initialize the ASR engine component.

     *

     * @param configurationFilename - absolute path to configuration file the ASR engine shall

     *                                read all its configuration parameters from

     * @param resourceDirectory - absolute path to resources listed in config file if relative path used

     * @param userResourceDirectory - absolute path to user resources (e.g. dynamic lexicon)

     *                                listed in config file if relative path used

     * @param [outptr] asrengine - handle to ASR engine

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (initialization completed successfully),

     *         - ROCKHOPPER_INVALID_PATH (cannot access the indicated configurationFilename),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSInitialize(const char* configurationFilename, const char* resourceDirectory,

        const char* userResourceDirectory, ASR_HANDLE* asrengine);

 

    /**

     * Update dynamic resource from a lexicon and a text acceptor WFST.

     *

     * @param configurationFilename - absolute path to configuration file the ASR engine shall

     *                                read all its configuration parameters from

     * @param resourceDirectory - absolute path of resource data folder (e.g. acoustic model)

     * @param userResourceDirectory - absolute path to target folder to contain user generated data

     *                                (e.g. dynamic lexicon)

     * @param tagId - ID of meta tag in CL statistical language model the dictionary is "plugged in"

     * @param wfst - Grammar wfst used for vocabulary.

     *

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (dynamic lexicon update completed successfully),

     *         - ROCKHOPPER_INVALID_PATH (cannot access the indicated configurationFilename),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSUpdateDynResource(const char* configurationFilename,

        const char* resourceDirectory, const char* userResourceDirectory, int tagId,

        WFST_HANDLE wfst);

 

    /**

     * Set callback for result processing.

     *

     * @param [in] asrengine    - handle to ASR engine

     * @param [in] rescallback  - result callback implementation to be invoked once

     *                            utternace or its fragment is recognized

     * @param [in] p            - callback parameter

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (callback set successfully),

     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSSetResultCallback(ASR_HANDLE asrengine,

        UtteranceCallback callback, const void* p);

 

    /**

     * Set callback for events like start / stop engine, ready for speech, speech begin/end, error.

     *

     * @param [in] asrengine handle to ASR engine

     * @param [in] evtcallback - event callback called whenever engine state is changing

     * @param [in] p - callback parameter

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (callback set successfully),

     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSSetEventCallback(ASR_HANDLE asrengine,

        EventCallback callback, const void* p);

 

    /**

     * Start phrase detection process.

     * In response to this method the engine is expected to initialize the

     * recognition and continue until a call to stop function is received.

     *

     * @param [in] asrengine - handle to ASR engine

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (started successfully),

     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSStartEngine(ASR_HANDLE asrengine);

 

    /**

     * Stop Rockhopper engine - resources are not released.

     *

     * @param [in] asrengine - handle to ASR engine

     * @param [in] waitForEndOfUtteranceProcessing - flag:

     *                                               True - requests deffered stop, routine does not return till last

     *                                                      samples/frames in all intermediate buffers are processed

     *                                               False - stops immediately if not doing batch file processing

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (stopped successfully),

     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle) ,

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

#ifdef __cplusplus

    ROCKHOPPER_API_EXPORT int RockhopperFSStopEngine(ASR_HANDLE asrengine, int waitForEndOfUtteranceProcessing = 1);

#else

    ROCKHOPPER_API_EXPORT int RockhopperFSStopEngine(ASR_HANDLE asrengine, int waitForEndOfUtteranceProcessing);

#endif

 

    /**

     * Release resources of Rockhopper engine.

     *

     * @param [in] asrengine - handle to ASR engine

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (released successfully),

     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSReleaseEngine(ASR_HANDLE asrengine);

 

    /**

     * Read current Rockhopper state & statistics.

     *

     * @param [in] asrengine - handle to ASR engine

     * @param [inout] stats - pointer to statistics buffer

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (stopped successfully),

     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSGetStatistics(ASR_HANDLE asrengine, AsrEngineStatistics* stats);

 

    /**

    * Feed stream source with samples from external application.

    *

    * @param [in] asrengine - handle to ASR engine

    * @param [in] samples - samples buffer 16kHz mono 16bit resolution

    * @param [in] nSamples - number of samples

    * @return number of samples consumed by ASR engine ( >=0 ) or STATUS code ( <0 ):

    *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),

    *         - ROCKHOPPER_UNKNOWN_ERROR (error)

    */

    ROCKHOPPER_API_EXPORT int RockhopperFSPushSamples(ASR_HANDLE asrengine, short* samples, int nSamples);

 

    /**

    * Feed stream source with data from external application.

    *

    * @param [in] asrengine - handle to ASR engine

    * @param [in] data - pointer to buffer with data to push

    * @param [in] elementsCount - number of elements of data, in case of:

    *                               SAMPLE_INT_16 it is the number of samples

    *                               FEATURE_INT_16 it is the number of features

    *                               (must be aligned to features per frame set in config file)

    * @param [in] type - type of data to push

    * @return number of samples consumed by ASR engine ( >=0 ) or STATUS code ( <0 ):

    *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),

    *         - ROCKHOPPER_UNKNOWN_ERROR (error)

    */

    ROCKHOPPER_API_EXPORT int RockhopperFSPushData(ASR_HANDLE asrengine, void* data,

        int elementsCount, RockhopperDataType type);

 

    /**

     * Convert grammar specified in JSGF to a WFST

     * The WFST is a transducer with input and output labels

     *

     * @param [in] configurationFilename - absoulute path to configuration file

     *        the asr engine shall read all it's configuration parameters from

     * @param [in] grammar - string buffer representing grammar in JSGF, null terminated

     *                       (http://www.w3.org/TR/2000/NOTE-jsgf-20000605/)

     * @param [in] grammarRule - root rule name (if not specified first public rule is selected)

     * @param [in] grammarSize - Size of the grammar string buffer including terminating null

     * @param [in] grammarRuleSize = Size of the grammarRule buffer including terminating null

     * @param [in] firstWordID - Word ID of the first word in the generated WFST.

     *                           It is important that word IDs of different resources do not overlap.

     * @param [out] wfst - handle to resulting grammar WFST

     *

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (grammar converted successfully),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSConvertJSGFToFST(const char *configurationFilename,

                                                           const char* grammar,

                                                           const char* grammarRule,

                                                           int grammarSize,

                                                           int grammarRuleSize,

                                                           int firstWordID,

                                                           WFST_HANDLE* wfst);

 

    /**

     * Convert ARPA statistical language model into WFST that can be used with

     * RockhopperFSUpdateDynResource() to create dynamic recognition resources

     *

     * @param [in] configurationFilename - absoulute path to configuration file

     *        the asr engine shall read all it's configuration parameters from

     * @param [in] arpa - string buffer representing grammar in ARPA format

     * @param [in] arpaSize - Size of the arpa string buffer

     * @param [in] firstWordID - Word ID of the first word in the generated WFST.

     *                           It is important that word IDs of different resources do not overlap.

     * @param [out] wfst - handle to resulting grammar WFST

     *

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (grammar converted successfully),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSConvertARPAToFST(const char *configurationFilename,

                                                           const char* arpa,

                                                           int arpaSize,

                                                           int firstWordID,

                                                           WFST_HANDLE* wfst);

 

    /**

     * Convert list of phrases into a Rockhopper WFST that can be used with

     * RockhopperFSUpdateDynResource() to create dynamic recognition resources

     *

     * @param [in] configurationFilename - absoulute path to configuration file

     *        the asr engine shall read all it's configuration parameters from

     * @param [in] phrases - string buffer representing grammar in JSGF

     *                       The different phrases are separated by the newline character '\n'

     * @param [in] phrasesSize - Size of the phrases string buffer

     * @param [in] firstWordID - Word ID of the first word in the generated WFST.

     *                           It is important that word IDs of different resources do not overlap.

     * @param [out] wfst - handle to resulting phrase grammar WFST

     *

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (grammar converted successfully),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSConvertPhrasesToFST(const char* configurationFilename,

                                                              const char* phrases,

                                                              int phrasesSize,

                                                              int firstWordID,

                                                              WFST_HANDLE* wfst);

 

    /**

     * Convert AT&T (OpenFST) ASCII text representation of a WFST into

     * a Rockhopper WFST.

     *

     * @param [in] configurationFilename - absoulute path to configuration file

     *        the asr engine shall read all it's configuration parameters from

     * @param [in] wfst_text - ASCII representation of the WFST

     * @param [in] text_size - Length of wfst_text in bytes

     * @param [in] firstWordID - Word ID of the first word in the generated WFST.

     *                           It is important that word IDs of different resources do not overlap.

     * @param [out] wfst - Handle to the Rockhopper WFST

     *

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (grammar converted successfully),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSConvertFST(const char *configurationFilename,

                                                     const char *wfst_text,

                                                     int text_size,

                                                     int firstWordID,

                                                     WFST_HANDLE* wfst);

 

    /**

     * Release (dynamic) WFST resource.

     *

     * @param [in] wfst - handle to a WFST resource

     * @return One of:

     *         - ROCKHOPPER_SUCCESS (stopped successfully),

     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),

     *         - ROCKHOPPER_UNKNOWN_ERROR (error)

     */

    ROCKHOPPER_API_EXPORT int RockhopperFSReleaseFST(WFST_HANDLE wfst);

 

    /**

    * Get the Rockhopper version string.

    *

    * @param [out] versionString - pointer to char string with the version ID

    * @return One of:

    *         - ROCKHOPPER_SUCCESS (stopped successfully),

    *         - ROCKHOPPER_UNKNOWN_ERROR (error)

    */

    ROCKHOPPER_API_EXPORT int RockhopperGetVersionString(const char **versionString);

 

#ifdef __cplusplus

}

#endif

 

#endif

 

C++ cli  头文件

 

#pragmaonce

 

#include"pch.h"

#include"../SDK/rockhopper.h"

//using namespace System;

 

#pragmacomment (lib, "../SDK/rockhopper.lib")

 

namespace IntelSDK {

 

        publicenumclassSDKRockhopperDataType

        {

               ROCKHOPPER_DATA_TYPE_SAMPLE_INT_16,

               ROCKHOPPER_DATA_TYPE_FEATURE_INT_16

        };

        //[Serializable]

        publicrefstructSDKAsrEngineStatistics

        {

 

        public:

               void setValue(intval)

               {

                       value = val;

               }

               int getValue()

               {

                       return value;

               }

               void setSignalvl(intval)

               {

                       signalvl = val;

               }

               int getSigalvl()

               {

                       return signalvl;

               }

               void setSamples_captured_ms(intval)

               {

                       samples_captured_ms = val;

               }

               int gettSamples_captured_ms()

               {

                       return samples_captured_ms;

               }

               void setFrames_extracted_ms(intval)

               {

                       frames_extracted_ms = val;

               }

               int getFrames_extracted_ms()

               {

                       return frames_extracted_ms;

               }

               void setFrames_decoded_ms(intval)

               {

                       frames_decoded_ms = val;

               }

               int getFrames_decoded_ms()

               {

                       return frames_decoded_ms;

               }

 

               void setUttRtFactor(floatval)

               {

                       uttRtFactor = val;

               }

               float getUttRtFactor()

               {

                       return uttRtFactor;

               }

               void setUtt_min_snr(intval)

               {

                       utt_min_snr = val;

               }

               int getUtt_min_snr()

               {

                       return utt_min_snr;

               }

               void setUtt_max_snr(intval)

               {

                       utt_max_snr = val;

               }

               int getUtt_max_snr()

               {

                       return utt_max_snr;

               }

               void setUtt_snr(intval)

               {

                       utt_snr = val;

               }

               int getUtt_snr()

               {

                       return utt_snr;

               }

 

        private:

               int value;

               int signalvl;

               int samples_captured_ms;

               int frames_extracted_ms;

               int frames_decoded_ms;

               float uttRtFactor;

               int utt_min_snr;

               int utt_max_snr;

               int utt_snr;

 

        };

 

        publicdelegatevoiddelegateEventCallback(int eventCode, int value);

        publicdelegateintdelegateUtteranceCallback(System::String^ UtteranceText);

        publicdelegatelong  Delegate_SDKUtteranceCallback(void* p, constshort* samples, int nSamples, constchar* UtteranceId, constchar* UtteranceText, float score, int isFinal);

        publicdelegatevoid  Delegate_SDKFSSetEventCallback(void* p, int eventCode, int value);

 

        publicrefclassOffLineSDK

        {

        private:

               ASR_HANDLE asrengine = 0;

               WFST_HANDLE wfst = 0;

        public:

               System::String^ getTest(System::String^ name);

               OffLineSDK();

               ~OffLineSDK();

               int SDKRockhopperFSStartEngine();

               int SDKRockhopperFSStopEngine();

               int SDKRockhopperFSInitialize(System::String^ configurationFilename, System::String^ resourceDirectory, System::String^ userResourceDirectory);

               int SDKRockhopperFSUpdateDynResource(System::String^ configurationFilename, System::String^ resourceDirectory, System::String^ userResourceDirectory, inttagId);

               int SDKRockhopperFSSetResultCallback();

               int  SDKRockhopperFSReleaseEngine();

               int  SDKRockhopperFSGetStatistics(SDKAsrEngineStatistics^ stats);

               int  SDKRockhopperFSPushSamples(array< int>^ samples, intnSamples);

               int  SDKRockhopperFSConvertJSGFToFST(System::String^ configurationFilename, System::String^ grammar, System::String^ grammarRule, intgrammarSize, intgrammarRuleSize, intfirstWordID);

               int  SDKRockhopperFSConvertARPAToFST(System::String^ configurationFilename, array<short>^ arpa, intarpaSize, intfirstWordID);

               int  SDKRockhopperFSPushData(array<short>^ wfst_text, intelementCount, SDKRockhopperDataTypetype);

               int  SDKRockhopperFSReleaseFST();

               int     SDKRockhopperFSSetEventCallback();

 

        private:

               staticlong  SDKUtteranceCallback(void* p, constshort* samples, intnSamples, constchar* UtteranceId, constchar* UtteranceText, floatscore, intisFinal);

               staticvoid  SDKFSSetEventCallback(void* p, inteventCode, intvalue);

        public:

               staticeventdelegateEventCallback^ FSSetEventCallback;

               staticeventdelegateUtteranceCallback^ EventUtteranceCallback;

 

        };

}

 

 

 

C++ cli 源文件

 

#include"pch.h"

#include"IntelSDK.h"

#include<string>

#include<iostream>

#include<fstream>

#include<cvt/wstring>

#include<codecvt>

 

usingnamespace IntelSDK;

#include<msclr\marshal_cppstd.h>

 

usingnamespace System::Runtime::InteropServices;

 

constchar* ToCppString(System::String^ s)

{

        msclr::interop::marshal_context context;

        constchar* result = context.marshal_as<constchar*>(s);

        return result;

}

 

bool To_CharStar(System::String^ source, char*& target)

{

        pin_ptr<constwchar_t> wch = PtrToStringChars(source);

        int len = ((source->Length + 1) * 2);

        target = newchar[len];

        return wcstombs(target, wch, len) != -1;

}

 

bool To_string(System::String^ source, std::string& target)

{

        pin_ptr<constwchar_t> wch = PtrToStringChars(source);

        int len = ((source->Length + 1) * 2);

        char* ch = newchar[len];

        bool result = wcstombs(ch, wch, len) != -1;

        target= ch;

        delete ch;

        return result;

}

std::string StringToAscIIChars(System::String^ text)

{

        //System::IntPtr ptr=Marshal::SecureStringToGlobalAllocAnsi(text);

        std::string converted = msclr::interop::marshal_as<std::string>(text->ToString());

        //std::string converted = msclr::interop::marshal_as< std::string >(text);

 

        return converted;

}

std::string StringUtf8ToAscIIChars(System::String^ text) {

 

        std::string converted = msclr::interop::marshal_as< std::string >(text);

        return converted;

}

System::String^ UTF8_To_Managed_Str(constchar* chars/*const std::string& str*/)

{

        if (chars == nullptr/*|| chars == "" || chars == " " || strnlen_s(chars, INT_MAX) <= 1*/) { // todo what is  0x20

               return"";

        }

        std::string str = std::string(chars);

        int nwLen = MultiByteToWideChar(CP_UTF8, 0, str.c_str(), -1, NULL, 0);

 

        wchar_t* pwBuf = newwchar_t[nwLen + 1];

        memset(pwBuf, 0, nwLen * 2 + 2);

 

        MultiByteToWideChar(CP_UTF8, 0, str.c_str(), (int)str.length(), pwBuf, nwLen);

 

        System::String^ pStr = gcnew System::String(pwBuf);

 

        delete[] pwBuf;

        pwBuf = NULL;

 

        return pStr;

}

 

 

 

 

 

System::String^ OffLineSDK::getTest(System::String^ name)

{

        //ASR_HANDLE handle = 0;

        returnname;

}

 

OffLineSDK::OffLineSDK()

{

        //throw gcnew System::NotImplementedException();

}

 

OffLineSDK::~OffLineSDK()

{

        //throw gcnew System::NotImplementedException();

        SDKRockhopperFSReleaseEngine();

        SDKRockhopperFSReleaseFST();

}

 

intOffLineSDK::SDKRockhopperFSStartEngine()

{

 

        /*GCHandle handle = GCHandle::Alloc(objEngine);

        System::IntPtr pointer = GCHandle::ToIntPtr(handle);

        void* ptr = pointer.ToPointer();*/

        //auto ret = RockhopperFSStartEngine(this->ptr);

        pin_ptr<ASR_HANDLE> pin = &asrengine;

        auto ret = RockhopperFSStartEngine(*pin);

        //handle.Free();

        return ret;

}

 

intOffLineSDK::SDKRockhopperFSStopEngine()

{

        auto ret = RockhopperFSStopEngine(asrengine);

        return ret;

 

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSInitialize(System::String^ configurationFilename, System::String^ resourceDirectory, System::String^ userResourceDirectory)

{

 

        std::string fileName = configurationFilename ? StringToAscIIChars(configurationFilename) : "";

        std::string directory = resourceDirectory ? StringToAscIIChars(resourceDirectory) : "";

        std::string userDirectory = userResourceDirectory ? StringUtf8ToAscIIChars(userResourceDirectory) : "";

 

        pin_ptr<ASR_HANDLE> pin = &asrengine;

 

        std::cout <<"get some info."<< std::endl;

        std::cout << fileName << std::endl;

        std::cout << directory << std::endl;

        std::cout << userDirectory << std::endl;

 

        // Convert Object^ to void*

        /*GCHandle handle = GCHandle::Alloc(objEngine);

        System::IntPtr pointer = GCHandle::ToIntPtr(handle);

        void* ptr = pointer.ToPointer();

 

        this->ptr = ptr;

        ASR_HANDLE asrengine2 = 0;*/

        //auto ret = RockhopperFSInitialize("./OffLineConfigFile/rh_params.txt", "./OffLineConfigFile/", "E:\\Code", pin);

 

        //std::string fileName1 = "./OffLineConfigFile/rh_params.txt";

        //std::string directory1 = "./OffLineConfigFile/";

        //std::string userDirectory1 = "E:\\code";

        //

        //auto ret = RockhopperFSInitialize(fileName1.c_str(), directory1.c_str(), userDirectory1.c_str(), pin);

       

        auto ret = RockhopperFSInitialize(fileName.c_str(), directory.c_str(), userDirectory.c_str(), pin);

        return ret;

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSUpdateDynResource(System::String^ configurationFilename, System::String^ resourceDirectory, System::String^ userResourceDirectory, inttagId)

{

        std::string fileName = configurationFilename ? StringToAscIIChars(configurationFilename) : "";

        std::string rDirectory = resourceDirectory ? StringUtf8ToAscIIChars(resourceDirectory) : "";

        std::string userDirectory = userResourceDirectory ? StringUtf8ToAscIIChars(userResourceDirectory) : "";

        pin_ptr<WFST_HANDLE> pin = &wfst;

        auto ret = RockhopperFSUpdateDynResource(fileName.c_str(), rDirectory.c_str(), userDirectory.c_str(), tagId, pin);

        return ret;

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSSetResultCallback()

{

 

        Delegate_SDKUtteranceCallback^ fp = gcnewDelegate_SDKUtteranceCallback(SDKUtteranceCallback);

        GCHandle gch = GCHandle::Alloc(fp);

        System::IntPtr ip = Marshal::GetFunctionPointerForDelegate(fp);

        UtteranceCallback cb = static_cast<UtteranceCallback>(ip.ToPointer());

 

        pin_ptr<ASR_HANDLE> pin = &asrengine;

 

        auto ret = RockhopperFSSetResultCallback(*pin, cb, NULL);

 

        return ret;

 

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSReleaseEngine()

{

        int res = -1;

        pin_ptr<ASR_HANDLE> pin = &asrengine;

 

        if (pin)

        {

               res = RockhopperFSReleaseEngine(*pin);

        }

        return res;

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSGetStatistics(SDKAsrEngineStatistics^ stats)

{

        return 0;

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSPushSamples(array<int>^ samples, intnSamples)

{

        return 0;

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSConvertJSGFToFST(System::String^ configurationFilename, System::String^ grammar, System::String^ grammarRule, intgrammarSize, intgrammarRuleSize, intfirstWordID)

{

        return 0;

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSConvertARPAToFST(System::String^ configurationFilename, array<short>^ arpa, intarpaSize, intfirstWordID)

{

        return 0;

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSPushData(array<short>^ wfst_text, intelementCount, SDKRockhopperDataTypetype)

{

        if (wfst_text == nullptr)

        {

               return  -3;

        }

        constint MAX_BUF_SIZE = 20480;

        short* sample;

        short buff[MAX_BUF_SIZE] = { 0 };

        /* if (elementCount > MAX_BUF_SIZE) {

                sample = new char[elementCount];

         }

         else {

                sample = buff;

         }*/

        sample = buff;

 

        for (int i = 0; i < (int)elementCount; i++)

        {

               sample[i] = wfst_text[i];

        }

        //RockhopperDataType type= ROCKHOPPER_DATA_TYPE_SAMPLE_INT_16;

 

        /*if (offlinetype == SDKRockhopperDataType::ROCKHOPPER_DATA_TYPE_SAMPLE_INT_16)

        {

               type = ROCKHOPPER_DATA_TYPE_SAMPLE_INT_16;

        }

        else

        {

               type = ROCKHOPPER_DATA_TYPE_FEATURE_INT_16;

        }*/

 

        auto ret = RockhopperFSPushData(asrengine, sample, elementCount, ROCKHOPPER_DATA_TYPE_SAMPLE_INT_16);

        return ret;

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSReleaseFST()

{

        auto ret = -1;

        if (wfst)

        {

               ret = RockhopperFSReleaseFST(wfst);

        }

        return ret;

}

 

int IntelSDK::OffLineSDK::SDKRockhopperFSSetEventCallback()

{

 

        Delegate_SDKFSSetEventCallback^ fp = gcnewDelegate_SDKFSSetEventCallback(SDKFSSetEventCallback);

        GCHandle gch = GCHandle::Alloc(fp);

        System::IntPtr ip = Marshal::GetFunctionPointerForDelegate(fp);

        EventCallback callBack = static_cast<EventCallback>(ip.ToPointer());

        pin_ptr<ASR_HANDLE> pin = &asrengine;

 

        auto res = RockhopperFSSetEventCallback(*pin, callBack, NULL);

        return res;

}

 

long IntelSDK::OffLineSDK::SDKUtteranceCallback(void* p, constshort* samples, intnSamples, constchar* UtteranceId, constchar* UtteranceText, floatscore, intisFinal)

{

 

        auto ret = EventUtteranceCallback(UTF8_To_Managed_Str(UtteranceText));

        //return 0;

        return ret;

}

 

void IntelSDK::OffLineSDK::SDKFSSetEventCallback(void* p, inteventCode, intvalue)

{

 

        FSSetEventCallback(eventCode, value);

 

}

 

 

 

 

 

/*++(do not edit the above line)************************************************************************************  “INTEL CONFIDENTIAL**  Copyright 2013 - 2018 Intel Corporation All Rights Reserved.**************************************************************************************  The source code contained or described herein and all documents related to**  the source code ("Material") are owned by Intel Corporation or its suppliers**  or licensors. Title to the Material remains with Intel Corporation or its**  suppliers and licensors. The Material may contain trade secrets and**  proprietary and confidential information of Intel Corporation and its**  suppliers and licensors, and is protected by worldwide copyright and trade**  secret laws and treaty provisions. No part of the Material may be used,**  copied, reproduced, modified, published, uploaded, posted, transmitted,**  distributed, or disclosed in any way without Intel’s prior express written**  permission.****  No license under any patent, copyright, trade secret or other intellectual**  property right is granted to or conferred upon you by disclosure or delivery**  of the Materials, either expressly, by implication, inducement, estoppel or**  otherwise. Any license under such intellectual property rights must be**  express and approved by Intel in writing.****  THE MATERIAL IS PROVIDED "AS IS" WITHOUT ANY EXPRESS OR IMPLIED WARRANTY OF**  ANY KIND INCLUDING WARRANTIES OF MERCHANTABILITY, NON-INFRINGEMENT,**  OR FITNESS FOR A PARTICULAR PURPOSE. INTEL WILL NOT PROVIDE ANY SUPPORT,**  ASSISTANCE, INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE**  ANY UPDATES, ENHANCEMENTS OR EXTENSIONS.  Intel does not warrant or assume**  responsibility for the accuracy or completeness of any information, text,**  graphics, links or other items contained within the material.****  LIMITATION OF LIABILITY.  IN NO EVENT SHALL INTEL OR ITS SUPPLIERS BE LIABLE**  FOR ANY DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, LOST PROFITS,**  BUSINESS INTERRUPTION, OR LOST INFORMATION) ARISING OUT OF THE USE OF OR**  INABILITY TO USE THE MATERIAL, EVEN IF INTEL HAS BEEN ADVISED OF THE**  POSSIBILITY OF SUCH DAMAGES.****  *Third-party brands and names are the property of their respective owners.****  Unless otherwise agreed by Intel in writing, you may not remove or alter**  this notice or any other notice embedded in Materials by Intel**  or Intel’s suppliers or licensors in any way.?**********************************************************************************--*/
#ifndef _ROCKHOPPER_H_#define _ROCKHOPPER_H_
#ifdef ROCKHOPPER_LIBRARY_STATIC#   define ROCKHOPPER_API_EXPORT#else#   ifdef _WIN32#       if defined(ROCKHOPPER_EXPORT) /* Visual Studio */#           define ROCKHOPPER_API_EXPORT __declspec(dllexport)#       elif defined(__CYGWIN__) /* Disable this on Cygwin, it doesn't work */#           define ROCKHOPPER_API_EXPORT#       else#           define ROCKHOPPER_API_EXPORT __declspec(dllimport)#       endif#   else#       if defined(ROCKHOPPER_EXPORT)#           define ROCKHOPPER_API_EXPORT __attribute__((visibility("default")))#       else#           define ROCKHOPPER_API_EXPORT#       endif#   endif#endif
#ifdef __cplusplusextern "C" {#endif
    // left for compatibility    #define ROCKHOPPER_SUCCESS                  RH_NO_ERROR    #define ROCKHOPPER_ERROR                    RH_ERROR_GENERIC    #define ROCKHOPPER_UNKNOWN_ERROR            RH_ERROR_GENERIC    #define ROCKHOPPER_INVALID_PARAMETER        RH_ERROR_INVALID_PARAM    #define ROCKHOPPER_INVALID_HANDLE_VALUE     RH_ERROR_INVALID_HANDLE_VALUE    #define ROCKHOPPER_INVALID_PATH             RH_ERROR_INVALID_PATH
    // base error codes    #define RH_NO_ERROR                          0    #define RH_ERROR_GENERIC                    -1    #define RH_ERROR_OUT_OF_MEMORY              -2    #define RH_ERROR_FILE_IO                    -3    #define RH_ERROR_INVALID_RESOURCE           -4    #define RH_ERROR_INVALID_PARAM              -5    #define RH_ERROR_INVALID_HANDLE_VALUE       -6    #define RH_ERROR_INVALID_PATH               -7
    // Threading error codes    #define RH_ERROR_THREAD_ALREADY_STARTED     -10    #define RH_ERROR_THREAD_START_FAILED        -11    #define RH_ERROR_THREAD_STOP_FAILED         -12    #define RH_ERROR_THREAD_NOT_STARTED         -13
    // Communication error codes    #define RH_ERROR_OUTPUT_BUFFER_FULL         -20    #define RH_ERROR_MESSAGE_ENQUEUE_FAILED     -21
    // Rest error codes    #define RH_ERROR_MODULE_INIT_FAILED         -30    #define RH_ERROR_MODULE_NOT_INITIALIZED     -31    #define RH_ERROR_ENGINE_NOT_STARTED         -32    #define RH_ERROR_ENGINE_WRONG_STATE         -33    #define RH_ERROR_MEMORY_COPY                -34    #define RH_ERROR_TOO_SMALL_BUFFER           -35    #define RH_ERROR_DATA_OVERWRITTEN           -36    #define RH_ERROR_NOT_SUPPORTED              -37
    // Events    #define ROCKHOPPER_EVENT_ON_READY_FOR_SPEECH 1    #define ROCKHOPPER_EVENT_ON_SPEECH_BEGIN     2    #define ROCKHOPPER_EVENT_ON_SPEECH_END       3    #define ROCKHOPPER_EVENT_ON_RMS_CHANGED      4    #define ROCKHOPPER_EVENT_ON_ERROR            5    #define ROCKHOPPER_EVENT_ENGINE_STARTED      6    #define ROCKHOPPER_EVENT_ENGINE_STOPPED      7
    typedef void* ASR_HANDLE; // speech recognition engine handle type    typedef void* WFST_HANDLE; // Handle for a (dynamic) WFST resource
    typedef enum RockhopperDataType    {        ROCKHOPPER_DATA_TYPE_SAMPLE_INT_16,        ROCKHOPPER_DATA_TYPE_FEATURE_INT_16    } RockhopperDataType;
    /// C-style interface used intentionally to allow for bindings in    /// runtimes that don't support/understand C++ name mangling or    /// reference types
    typedef long(*UtteranceCallback)(        void* p,                    // callback function parameter passed in RockhopperFSSetResultCallback        const short* samples,       // Data buffer with utterance samples. Samples are sent only for final result.                                    // Utterance longer than source buffer length will be passed without samples(null pointer).        int   nSamples,             // number of samples in buffer        const char* utteranceId,    // wall clock time when utterance begins        const char* utteranceText,  // recognized text        float score,                // recognition score (LM)        int   isFinal               // 0: partial result, 1: final result (end of utterance)        );
    typedef void(*EventCallback)(        void* p,                    // callback function parameter passed in RockhopperFSSetEventCallback        int eventCode,              // event code        int value);                 // event value
#pragma pack(push, 4)    typedef struct _AsrEngineStatistics {        union {            struct {                unsigned int speech : 1;                unsigned int frontend : 3;                unsigned int scorer : 3;                unsigned int decoder : 3;                unsigned int reserved : 22;            } fields;            int value;        } state;        int signalvl;        int samples_captured_ms;        int frames_extracted_ms;        int frames_decoded_ms;        float uttRtFactor;        int utt_min_snr;        int utt_max_snr;        int utt_snr;    } AsrEngineStatistics;
#pragma pack(pop)    /**     * Initialize the ASR engine component.     *     * @param configurationFilename - absolute path to configuration file the ASR engine shall     *                                read all its configuration parameters from     * @param resourceDirectory - absolute path to resources listed in config file if relative path used     * @param userResourceDirectory - absolute path to user resources (e.g. dynamic lexicon)     *                                listed in config file if relative path used     * @param [outptr] asrengine - handle to ASR engine     * @return One of:     *         - ROCKHOPPER_SUCCESS (initialization completed successfully),     *         - ROCKHOPPER_INVALID_PATH (cannot access the indicated configurationFilename),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSInitialize(const char* configurationFilename, const char* resourceDirectory,        const char* userResourceDirectory, ASR_HANDLE* asrengine);
    /**     * Update dynamic resource from a lexicon and a text acceptor WFST.     *     * @param configurationFilename - absolute path to configuration file the ASR engine shall     *                                read all its configuration parameters from     * @param resourceDirectory - absolute path of resource data folder (e.g. acoustic model)     * @param userResourceDirectory - absolute path to target folder to contain user generated data     *                                (e.g. dynamic lexicon)     * @param tagId - ID of meta tag in CL statistical language model the dictionary is "plugged in"     * @param wfst - Grammar wfst used for vocabulary.     *     * @return One of:     *         - ROCKHOPPER_SUCCESS (dynamic lexicon update completed successfully),     *         - ROCKHOPPER_INVALID_PATH (cannot access the indicated configurationFilename),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSUpdateDynResource(const char* configurationFilename,        const char* resourceDirectory, const char* userResourceDirectory, int tagId,        WFST_HANDLE wfst);
    /**     * Set callback for result processing.     *     * @param [in] asrengine    - handle to ASR engine     * @param [in] rescallback  - result callback implementation to be invoked once     *                            utternace or its fragment is recognized     * @param [in] p            - callback parameter     * @return One of:     *         - ROCKHOPPER_SUCCESS (callback set successfully),     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSSetResultCallback(ASR_HANDLE asrengine,        UtteranceCallback callback, const void* p);
    /**     * Set callback for events like start / stop engine, ready for speech, speech begin/end, error.     *     * @param [in] asrengine handle to ASR engine     * @param [in] evtcallback - event callback called whenever engine state is changing     * @param [in] p - callback parameter     * @return One of:     *         - ROCKHOPPER_SUCCESS (callback set successfully),     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSSetEventCallback(ASR_HANDLE asrengine,        EventCallback callback, const void* p);
    /**     * Start phrase detection process.     * In response to this method the engine is expected to initialize the     * recognition and continue until a call to stop function is received.     *     * @param [in] asrengine - handle to ASR engine     * @return One of:     *         - ROCKHOPPER_SUCCESS (started successfully),     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSStartEngine(ASR_HANDLE asrengine);
    /**     * Stop Rockhopper engine - resources are not released.     *     * @param [in] asrengine - handle to ASR engine     * @param [in] waitForEndOfUtteranceProcessing - flag:     *                                               True - requests deffered stop, routine does not return till last     *                                                      samples/frames in all intermediate buffers are processed     *                                               False - stops immediately if not doing batch file processing     * @return One of:     *         - ROCKHOPPER_SUCCESS (stopped successfully),     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle) ,     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */#ifdef __cplusplus    ROCKHOPPER_API_EXPORT int RockhopperFSStopEngine(ASR_HANDLE asrengine, int waitForEndOfUtteranceProcessing = 1);#else    ROCKHOPPER_API_EXPORT int RockhopperFSStopEngine(ASR_HANDLE asrengine, int waitForEndOfUtteranceProcessing);#endif
    /**     * Release resources of Rockhopper engine.     *     * @param [in] asrengine - handle to ASR engine     * @return One of:     *         - ROCKHOPPER_SUCCESS (released successfully),     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSReleaseEngine(ASR_HANDLE asrengine);
    /**     * Read current Rockhopper state & statistics.     *     * @param [in] asrengine - handle to ASR engine     * @param [inout] stats - pointer to statistics buffer     * @return One of:     *         - ROCKHOPPER_SUCCESS (stopped successfully),     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSGetStatistics(ASR_HANDLE asrengine, AsrEngineStatistics* stats);
    /**    * Feed stream source with samples from external application.    *    * @param [in] asrengine - handle to ASR engine    * @param [in] samples - samples buffer 16kHz mono 16bit resolution    * @param [in] nSamples - number of samples    * @return number of samples consumed by ASR engine ( >=0 ) or STATUS code ( <0 ):    *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),    *         - ROCKHOPPER_UNKNOWN_ERROR (error)    */    ROCKHOPPER_API_EXPORT int RockhopperFSPushSamples(ASR_HANDLE asrengine, short* samples, int nSamples);
    /**    * Feed stream source with data from external application.    *    * @param [in] asrengine - handle to ASR engine    * @param [in] data - pointer to buffer with data to push    * @param [in] elementsCount - number of elements of data, in case of:    *                               SAMPLE_INT_16 it is the number of samples    *                               FEATURE_INT_16 it is the number of features    *                               (must be aligned to features per frame set in config file)    * @param [in] type - type of data to push    * @return number of samples consumed by ASR engine ( >=0 ) or STATUS code ( <0 ):    *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),    *         - ROCKHOPPER_UNKNOWN_ERROR (error)    */    ROCKHOPPER_API_EXPORT int RockhopperFSPushData(ASR_HANDLE asrengine, void* data,        int elementsCount, RockhopperDataType type);
    /**     * Convert grammar specified in JSGF to a WFST     * The WFST is a transducer with input and output labels     *     * @param [in] configurationFilename - absoulute path to configuration file     *        the asr engine shall read all it's configuration parameters from     * @param [in] grammar - string buffer representing grammar in JSGF, null terminated     *                       (http://www.w3.org/TR/2000/NOTE-jsgf-20000605/)     * @param [in] grammarRule - root rule name (if not specified first public rule is selected)     * @param [in] grammarSize - Size of the grammar string buffer including terminating null     * @param [in] grammarRuleSize = Size of the grammarRule buffer including terminating null     * @param [in] firstWordID - Word ID of the first word in the generated WFST.     *                           It is important that word IDs of different resources do not overlap.     * @param [out] wfst - handle to resulting grammar WFST     *     * @return One of:     *         - ROCKHOPPER_SUCCESS (grammar converted successfully),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSConvertJSGFToFST(const char *configurationFilename,                                                           const char* grammar,                                                           const char* grammarRule,                                                           int grammarSize,                                                           int grammarRuleSize,                                                           int firstWordID,                                                           WFST_HANDLE* wfst);
    /**     * Convert ARPA statistical language model into WFST that can be used with     * RockhopperFSUpdateDynResource() to create dynamic recognition resources     *     * @param [in] configurationFilename - absoulute path to configuration file     *        the asr engine shall read all it's configuration parameters from     * @param [in] arpa - string buffer representing grammar in ARPA format     * @param [in] arpaSize - Size of the arpa string buffer     * @param [in] firstWordID - Word ID of the first word in the generated WFST.     *                           It is important that word IDs of different resources do not overlap.     * @param [out] wfst - handle to resulting grammar WFST     *     * @return One of:     *         - ROCKHOPPER_SUCCESS (grammar converted successfully),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSConvertARPAToFST(const char *configurationFilename,                                                           const char* arpa,                                                           int arpaSize,                                                           int firstWordID,                                                           WFST_HANDLE* wfst);
    /**     * Convert list of phrases into a Rockhopper WFST that can be used with     * RockhopperFSUpdateDynResource() to create dynamic recognition resources     *     * @param [in] configurationFilename - absoulute path to configuration file     *        the asr engine shall read all it's configuration parameters from     * @param [in] phrases - string buffer representing grammar in JSGF     *                       The different phrases are separated by the newline character '\n'     * @param [in] phrasesSize - Size of the phrases string buffer     * @param [in] firstWordID - Word ID of the first word in the generated WFST.     *                           It is important that word IDs of different resources do not overlap.     * @param [out] wfst - handle to resulting phrase grammar WFST     *     * @return One of:     *         - ROCKHOPPER_SUCCESS (grammar converted successfully),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSConvertPhrasesToFST(const char* configurationFilename,                                                              const char* phrases,                                                              int phrasesSize,                                                              int firstWordID,                                                              WFST_HANDLE* wfst);
    /**     * Convert AT&T (OpenFST) ASCII text representation of a WFST into     * a Rockhopper WFST.     *     * @param [in] configurationFilename - absoulute path to configuration file     *        the asr engine shall read all it's configuration parameters from     * @param [in] wfst_text - ASCII representation of the WFST     * @param [in] text_size - Length of wfst_text in bytes     * @param [in] firstWordID - Word ID of the first word in the generated WFST.     *                           It is important that word IDs of different resources do not overlap.     * @param [out] wfst - Handle to the Rockhopper WFST     *     * @return One of:     *         - ROCKHOPPER_SUCCESS (grammar converted successfully),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSConvertFST(const char *configurationFilename,                                                     const char *wfst_text,                                                     int text_size,                                                     int firstWordID,                                                     WFST_HANDLE* wfst);
    /**     * Release (dynamic) WFST resource.     *     * @param [in] wfst - handle to a WFST resource     * @return One of:     *         - ROCKHOPPER_SUCCESS (stopped successfully),     *         - ROCKHOPPER_INVALID_HANDLE_VALUE (invalid handle),     *         - ROCKHOPPER_UNKNOWN_ERROR (error)     */    ROCKHOPPER_API_EXPORT int RockhopperFSReleaseFST(WFST_HANDLE wfst);
    /**    * Get the Rockhopper version string.    *    * @param [out] versionString - pointer to char string with the version ID    * @return One of:    *         - ROCKHOPPER_SUCCESS (stopped successfully),    *         - ROCKHOPPER_UNKNOWN_ERROR (error)    */    ROCKHOPPER_API_EXPORT int RockhopperGetVersionString(const char **versionString);
#ifdef __cplusplus}#endif#endif