Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
galaxy-iOS
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mobile-group
galaxy-iOS
Commits
88721a74
Commit
88721a74
authored
Jun 04, 2025
by
pete谢兆麟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
无法运行
parent
3464e93f
Changes
14
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
849 additions
and
0 deletions
+849
-0
project.pbxproj
galaxy/galaxy.xcodeproj/project.pbxproj
+20
-0
SpeechRecognitionManager.swift
...galaxy/Classes/Tools/Voice/SpeechRecognitionManager.swift
+114
-0
NeoNui.h
...axy/Classes/Tools/Voice/nuisdk.framework/Headers/NeoNui.h
+194
-0
NeoNuiCode.h
...Classes/Tools/Voice/nuisdk.framework/Headers/NeoNuiCode.h
+138
-0
NeoNuiTts.h
.../Classes/Tools/Voice/nuisdk.framework/Headers/NeoNuiTts.h
+84
-0
StreamInputTts.h
...ses/Tools/Voice/nuisdk.framework/Headers/StreamInputTts.h
+118
-0
Info.plist
...xy/galaxy/Classes/Tools/Voice/nuisdk.framework/Info.plist
+0
-0
ali_copylist.txt
.../Voice/nuisdk.framework/Resources.bundle/ali_copylist.txt
+3
-0
cei.json
...es/Tools/Voice/nuisdk.framework/Resources.bundle/cei.json
+88
-0
copylist.txt
...ools/Voice/nuisdk.framework/Resources.bundle/copylist.txt
+3
-0
nui.json
...es/Tools/Voice/nuisdk.framework/Resources.bundle/nui.json
+54
-0
parameter.cfg
...Voice/nuisdk.framework/Resources.bundle/tts/parameter.cfg
+31
-0
nuisdk
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/nuisdk
+0
-0
galaxy-Bridge-Header.h
galaxy/galaxy/Res/galaxy-Bridge-Header.h
+2
-0
No files found.
galaxy/galaxy.xcodeproj/project.pbxproj
View file @
88721a74
...
...
@@ -35,6 +35,8 @@
0411CF182D1D502D00644D35
/* YHlifeCollectionReusableView.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
0411CF172D1D502D00644D35
/* YHlifeCollectionReusableView.swift */
;
};
0411CF1A2D22960900644D35
/* YHGCWorkExperienceListReasonTableViewCell.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
0411CF192D22960900644D35
/* YHGCWorkExperienceListReasonTableViewCell.swift */
;
};
0411CF1C2D2BA99500644D35
/* YHGCWorkExperienceListTableViewCell.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
0411CF1B2D2BA99500644D35
/* YHGCWorkExperienceListTableViewCell.swift */
;
};
0411DD582DEFE92700D8FF1C
/* SpeechRecognitionManager.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
0411DD572DEFE90600D8FF1C
/* SpeechRecognitionManager.swift */
;
};
0411DD5C2DEFF03300D8FF1C
/* nuisdk.framework in Frameworks */
=
{
isa
=
PBXBuildFile
;
fileRef
=
0411DD5B2DEFF03300D8FF1C
/* nuisdk.framework */
;
};
041938712D2B722D00C7A52A
/* YHGCCollegeSearchViewController.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
041938702D2B722D00C7A52A
/* YHGCCollegeSearchViewController.swift */
;
};
041CCDF72D7ED9030015E7BC
/* YHHKVisaRenewalPaymentInfoList.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
041CCDF62D7ED9030015E7BC
/* YHHKVisaRenewalPaymentInfoList.swift */
;
};
041CCDF92D7EE8B90015E7BC
/* YHVisaRenewalPayMemberCell.swift in Sources */
=
{
isa
=
PBXBuildFile
;
fileRef
=
041CCDF82D7EE8B90015E7BC
/* YHVisaRenewalPayMemberCell.swift */
;
};
...
...
@@ -1342,6 +1344,8 @@
0411CF172D1D502D00644D35
/* YHlifeCollectionReusableView.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHlifeCollectionReusableView.swift
;
sourceTree
=
"<group>"
;
};
0411CF192D22960900644D35
/* YHGCWorkExperienceListReasonTableViewCell.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHGCWorkExperienceListReasonTableViewCell.swift
;
sourceTree
=
"<group>"
;
};
0411CF1B2D2BA99500644D35
/* YHGCWorkExperienceListTableViewCell.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHGCWorkExperienceListTableViewCell.swift
;
sourceTree
=
"<group>"
;
};
0411DD572DEFE90600D8FF1C
/* SpeechRecognitionManager.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
SpeechRecognitionManager.swift
;
sourceTree
=
"<group>"
;
};
0411DD5B2DEFF03300D8FF1C
/* nuisdk.framework */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
wrapper.framework
;
path
=
nuisdk.framework
;
sourceTree
=
"<group>"
;
};
041938702D2B722D00C7A52A
/* YHGCCollegeSearchViewController.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHGCCollegeSearchViewController.swift
;
sourceTree
=
"<group>"
;
};
041CCDF62D7ED9030015E7BC
/* YHHKVisaRenewalPaymentInfoList.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHHKVisaRenewalPaymentInfoList.swift
;
sourceTree
=
"<group>"
;
};
041CCDF82D7EE8B90015E7BC
/* YHVisaRenewalPayMemberCell.swift */
=
{
isa
=
PBXFileReference
;
lastKnownFileType
=
sourcecode.swift
;
path
=
YHVisaRenewalPayMemberCell.swift
;
sourceTree
=
"<group>"
;
};
...
...
@@ -2610,6 +2614,7 @@
files
=
(
6203A87EDC96313BBE789D9C
/* Pods_galaxy.framework in Frameworks */
,
04EA376F2BEA071600DBAF64
/* libc++.tbd in Frameworks */
,
0411DD5C2DEFF03300D8FF1C
/* nuisdk.framework in Frameworks */
,
0468D42E2B5654A500CFB916
/* CoreTelephony.framework in Frameworks */
,
04EA376D2BEA06EF00DBAF64
/* WebKit.framework in Frameworks */
,
045C13B72D12CA5F00BD2DC0
/* ATAuthSDK_D.framework in Frameworks */
,
...
...
@@ -2770,6 +2775,15 @@
path
=
V
;
sourceTree
=
"<group>"
;
};
0411DD542DEFE64900D8FF1C
/* Voice */
=
{
isa
=
PBXGroup
;
children
=
(
0411DD5B2DEFF03300D8FF1C
/* nuisdk.framework */
,
0411DD572DEFE90600D8FF1C
/* SpeechRecognitionManager.swift */
,
);
path
=
Voice
;
sourceTree
=
"<group>"
;
};
04307B772D1AADBE00ED8E8D
/* M */
=
{
isa
=
PBXGroup
;
children
=
(
...
...
@@ -6195,6 +6209,7 @@
045C0F472D12CA5E00BD2DC0
/* Tools */
=
{
isa
=
PBXGroup
;
children
=
(
0411DD542DEFE64900D8FF1C
/* Voice */
,
045C0F0E2D12CA5E00BD2DC0
/* Analytics */
,
045C0F112D12CA5E00BD2DC0
/* CustomRefreshHeader */
,
045C0F232D12CA5E00BD2DC0
/* Extention */
,
...
...
@@ -8378,6 +8393,7 @@
045C13A62D12CA5F00BD2DC0
/* YHTravelDocsPreparationViewModel.swift in Sources */
,
045C13A72D12CA5F00BD2DC0
/* YHWorkExampleMessageTableViewCell.swift in Sources */
,
045C13A82D12CA5F00BD2DC0
/* YHBasicInfoCellModel.swift in Sources */
,
0411DD582DEFE92700D8FF1C
/* SpeechRecognitionManager.swift in Sources */
,
04AE20292D13B20900891D24
/* YHGCSpouseInfoContainerVC.swift in Sources */
,
045C13A92D12CA5F00BD2DC0
/* YHAllowUseMyInfoViewController.swift in Sources */
,
045C13AA2D12CA5F00BD2DC0
/* YHServiceCenterProgressModel.swift in Sources */
,
...
...
@@ -8505,6 +8521,7 @@
"$(inherited)"
,
"$(PROJECT_DIR)/galaxy/Res/Frameworks"
,
"$(PROJECT_DIR)/galaxy/Classes/Modules/AutoLogin(一键登录)/framework"
,
"$(PROJECT_DIR)/galaxy/Classes/Tools/Voice"
,
);
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_FILE
=
galaxy/Res/Info.plist
;
...
...
@@ -8653,6 +8670,7 @@
"$(inherited)"
,
"$(PROJECT_DIR)/galaxy/Res/Frameworks"
,
"$(PROJECT_DIR)/galaxy/Classes/Modules/AutoLogin(一键登录)/framework"
,
"$(PROJECT_DIR)/galaxy/Classes/Tools/Voice"
,
);
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_FILE
=
galaxy/Res/Info.plist
;
...
...
@@ -8863,6 +8881,7 @@
"$(inherited)"
,
"$(PROJECT_DIR)/galaxy/Res/Frameworks"
,
"$(PROJECT_DIR)/galaxy/Classes/Modules/AutoLogin(一键登录)/framework"
,
"$(PROJECT_DIR)/galaxy/Classes/Tools/Voice"
,
);
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_FILE
=
galaxy/Res/Info.plist
;
...
...
@@ -8913,6 +8932,7 @@
"$(inherited)"
,
"$(PROJECT_DIR)/galaxy/Res/Frameworks"
,
"$(PROJECT_DIR)/galaxy/Classes/Modules/AutoLogin(一键登录)/framework"
,
"$(PROJECT_DIR)/galaxy/Classes/Tools/Voice"
,
);
GENERATE_INFOPLIST_FILE
=
YES
;
INFOPLIST_FILE
=
galaxy/Res/Info.plist
;
...
...
galaxy/galaxy/Classes/Tools/Voice/SpeechRecognitionManager.swift
0 → 100644
View file @
88721a74
//
// SpeechRecognitionManager.swift
// galaxy
//
// Created by EDY on 2025/6/4.
// Copyright © 2025 https://www.galaxy-immi.com. All rights reserved.
//
import
nu
class
SpeechRecognitionManager
{
static
let
shared
=
SpeechRecognitionManager
()
private
var
recognizer
:
NlsSpeechRecognizer
?
private
var
fileTrans
:
NlsFileTrans
?
// 配置你的阿里云信息
private
let
accessKeyId
=
"your_access_key_id"
private
let
accessKeySecret
=
"your_access_key_secret"
private
let
appKey
=
"your_app_key"
private
init
()
{
setupCredentials
()
}
private
func
setupCredentials
()
{
let
config
=
AlibabaCloudCredentialConfig
()
config
.
accessKeyId
=
accessKeyId
config
.
accessKeySecret
=
accessKeySecret
let
provider
=
AlibabaCloudStaticCredentialProvider
(
config
:
config
)
AlibabaCloudCredential
.
default
=
provider
}
}
extension
SpeechRecognitionManager
{
func
startRealTimeRecognition
(
resultHandler
:
@escaping
(
String
?,
Error
?)
->
Void
)
{
recognizer
=
NlsSpeechRecognizer
()
// 配置识别参数
let
request
=
NlsSpeechRecognizerRequest
()
request
.
appkey
=
appKey
request
.
format
=
"pcm"
// 音频格式
request
.
sampleRate
=
16000
// 采样率
// 设置回调
recognizer
?
.
onRecognizationStarted
=
{
print
(
"识别开始"
)
}
recognizer
?
.
onTaskFailed
=
{
error
in
print
(
"识别失败:
\(
error
.
localizedDescription
)
"
)
resultHandler
(
nil
,
error
)
}
recognizer
?
.
onRecognizationCompleted
=
{
result
in
if
let
text
=
result
.
result
{
print
(
"识别结果:
\(
text
)
"
)
resultHandler
(
text
,
nil
)
}
}
recognizer
?
.
onChannelClosed
=
{
print
(
"通道关闭"
)
}
// 开始识别
do
{
try
recognizer
?
.
start
(
request
:
request
)
}
catch
{
print
(
"启动识别失败:
\(
error
.
localizedDescription
)
"
)
resultHandler
(
nil
,
error
)
}
}
func
stopRealTimeRecognition
()
{
recognizer
?
.
stop
()
recognizer
=
nil
}
func
pushAudioData
(
_
data
:
Data
)
{
recognizer
?
.
sendAudio
(
data
:
data
)
}
}
extension
SpeechRecognitionManager
{
func
transcribeAudioFile
(
fileURL
:
URL
,
completion
:
@escaping
(
String
?,
Error
?)
->
Void
)
{
fileTrans
=
NlsFileTrans
()
let
request
=
NlsFileTransRequest
()
request
.
appkey
=
appKey
request
.
fileLink
=
fileURL
.
absoluteString
request
.
format
=
"pcm"
// 根据实际文件格式设置
request
.
sampleRate
=
16000
fileTrans
?
.
onTaskFailed
=
{
error
in
print
(
"文件转写失败:
\(
error
.
localizedDescription
)
"
)
completion
(
nil
,
error
)
}
fileTrans
?
.
onTranscriptionCompleted
=
{
result
in
if
let
text
=
result
.
result
{
print
(
"转写结果:
\(
text
)
"
)
completion
(
text
,
nil
)
}
}
do
{
try
fileTrans
?
.
start
(
request
:
request
)
}
catch
{
print
(
"启动文件转写失败:
\(
error
.
localizedDescription
)
"
)
completion
(
nil
,
error
)
}
}
}
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Headers/NeoNui.h
0 → 100644
View file @
88721a74
#ifndef NeoNui_h
#define NeoNui_h
#ifdef DEBUG_MODE
#define TLog( s, ... ) NSLog( s, ##__VA_ARGS__ )
#else
#define TLog( s, ... )
#endif
#import <Foundation/Foundation.h>
#import "NeoNuiCode.h"
typedef
int
NuiResultCode
;
enum
NuiAudioState
{
STATE_OPEN
,
STATE_PAUSE
,
STATE_CLOSE
,
};
enum
NuiFunMode
{
kFuncModeAsp
=
0x00000001
,
kFuncModeVad
=
0x00000010
,
kFuncModeKws
=
0x00000100
,
kFuncModeAsr
=
0x00001000
,
kFuncModeEnc
=
0x00010000
,
kFuncModeOu
=
0x00100000
,
kFuncModeFull
=
0x11111111
,
};
enum
NuiAudioExtraEvent
{
AudioRmsChanged
,
};
enum
NuiCallbackEvent
{
EVENT_VAD_START
,
EVENT_VAD_TIMEOUT
,
EVENT_VAD_END
,
EVENT_WUW
,
EVENT_WUW_TRUSTED
,
EVENT_WUW_CONFIRMED
,
EVENT_WUW_REJECTED
,
EVENT_WUW_END
,
EVENT_ASR_PARTIAL_RESULT
,
EVENT_ASR_RESULT
,
EVENT_ASR_ERROR
,
// 10
EVENT_DIALOG_ERROR
,
EVENT_ONESHOT_TIMEOUT
,
EVENT_DIALOG_RESULT
,
EVENT_WUW_HINT
,
EVENT_VPR_RESULT
,
EVENT_TEXT2ACTION_DIALOG_RESULT
,
EVENT_TEXT2ACTION_ERROR
,
EVENT_ATTR_RESULT
,
EVENT_MIC_ERROR
,
EVENT_DIALOG_EX
,
// 20
EVENT_WUW_ERROR
,
EVENT_BEFORE_CONNECTION
,
EVENT_SENTENCE_START
,
EVENT_SENTENCE_END
,
EVENT_SENTENCE_SEMANTICS
,
EVENT_RESULT_TRANSLATED
,
EVENT_TRANSCRIBER_COMPLETE
,
EVENT_FILE_TRANS_CONNECTED
,
EVENT_FILE_TRANS_UPLOADED
,
EVENT_FILE_TRANS_RESULT
,
// 30
EVENT_FILE_TRANS_UPLOAD_PROGRESS
,
EVENT_TRANSCRIBER_STARTED
,
EVENT_ASR_STARTED
,
};
enum
NuiVadMode
{
MODE_VAD
,
MODE_P2T
,
MODE_KWS
,
MODE_PARALLEL
,
MODE_KWS2PARALLEL
,
MODE_AUTO_CONTINUAL
,
MODE_KWS_CONTINUAL
,
MODE_KWS2TALK
,
MODE_ONLY_KWS
};
enum
ServiceType
{
SERVICE_TYPE_NONE
=
-
1
,
SERVICE_TYPE_ASR
=
0
,
// SpeechRecognizer
SERVICE_TYPE_TIANGONG_ASSISTANT
=
1
,
SERVICE_TYPE_DIALOG_ASSISTANT
=
2
,
//DialogAssistant
SERVICE_TYPE_VIRTUAL_ASSISTANT
=
3
,
//TiangongV4
SERVICE_TYPE_SPEECH_TRANSCRIBER
=
4
//SpeechTranscriber
};
enum
NuiSdkVprEvent
{
EVENT_VPR_NONE
,
EVENT_VPR_REGISTER_START
,
EVENT_VPR_REGISTER_DONE
,
EVENT_VPR_REGISTER_FAILED
,
EVENT_VPR_UPDATE_START
,
EVENT_VPR_UPDATE_DONE
,
EVENT_VPR_UPDATE_FAIL
,
EVENT_VPR_DELETE_DONE
,
EVENT_VPR_DELETE_FAIL
};
typedef
enum
NuiSdkVprEvent
NuiSdkVprEvent
;
typedef
enum
NuiAudioState
NuiAudioState
;
typedef
enum
NuiCallbackEvent
NuiCallbackEvent
;
typedef
enum
NuiCallbackEvent
NuiCallbackEvent
;
typedef
enum
NuiVadMode
NuiVadMode
;
@protocol
NeoNuiSdkDelegate
<
NSObject
>
@optional
-
(
int
)
onNuiNeedAudioData
:
(
char
*
)
audioData
length
:
(
int
)
len
;
-
(
void
)
onNuiAudioStateChanged
:(
NuiAudioState
)
state
;
-
(
void
)
onNuiEventCallback
:(
NuiCallbackEvent
)
nuiEvent
dialog
:(
long
)
dialog
kwsResult
:(
const
char
*
)
wuw
asrResult
:(
const
char
*
)
asr_result
ifFinish
:(
BOOL
)
finish
retCode
:(
int
)
code
;
-
(
void
)
onNuiRmsChanged
:(
float
)
rms
;
-
(
void
)
onNuiLogTrackCallback
:(
NuiSdkLogLevel
)
level
logMessage
:(
const
char
*
)
log
;
-
(
void
)
onFileTransEventCallback
:(
NuiCallbackEvent
)
nuiEvent
asrResult
:(
const
char
*
)
asr_result
taskId
:(
const
char
*
)
task_id
ifFinish
:(
BOOL
)
finish
retCode
:(
int
)
code
;
-
(
void
)
onFileTransLogTrackCallback
:(
NuiSdkLogLevel
)
level
logMessage
:(
const
char
*
)
log
;
@end
@interface
NeoNui
:
NSObject
@property
(
readonly
)
void
*
nui_sdk
;
@property
(
nonatomic
,
weak
)
id
<
NeoNuiSdkDelegate
>
delegate
;
+
(
instancetype
)
get_instance
;
//Initialize API
-
(
NuiResultCode
)
nui_initialize
:(
const
char
*
)
parameters
logLevel
:(
NuiSdkLogLevel
)
level
saveLog
:(
BOOL
)
save_log
;
//Release API
-
(
NuiResultCode
)
nui_release
;
//Dialog API
-
(
NuiResultCode
)
nui_dialog_start
:(
NuiVadMode
)
vad_mode
dialogParam
:(
const
char
*
)
dialog_params
;
-
(
NuiResultCode
)
nui_dialog_cancel
:(
BOOL
)
force
;
-
(
NuiResultCode
)
nui_dialog_resume
;
//Text to Action API
-
(
NuiResultCode
)
nui_dialog_text2action
:(
const
char
*
)
text
Context
:(
const
char
*
)
context
isNewDialog
:(
BOOL
)
is_new_dialog
dialogParams
:(
const
char
*
)
dialog_params
;
-
(
NuiResultCode
)
nui_dialog_text2action_cancel
;
//File Transcriber API
-
(
NuiResultCode
)
nui_file_trans_start
:(
const
char
*
)
params
taskId
:(
char
*
)
task_id
;
-
(
NuiResultCode
)
nui_file_trans_cancel
:(
const
char
*
)
task_id
;
//Set parameter API
-
(
NuiResultCode
)
nui_set_param
:(
const
char
*
)
para
Value
:(
const
char
*
)
value
;
-
(
NuiResultCode
)
nui_set_params
:(
const
char
*
)
params
;
-
(
NuiResultCode
)
nui_update_audio_data
:(
const
char
*
)
data
Len
:(
int
)
length
FirstPack
:(
BOOL
)
first_pack
;
-
(
const
char
*
)
nui_get_version
;
-
(
const
char
*
)
nui_get_all_response
;
#ifdef NUI_VPR
//Voice Print Recognition API
-
(
NuiResultCode
)
nui_vpr_register_user
:(
const
char
*
)
service_id
groupId
:(
const
char
*
)
group_id
userId
:(
const
char
*
)
user_id
;
-
(
NuiResultCode
)
nui_vpr_update_user
:(
const
char
*
)
service_id
groupId
:(
const
char
*
)
group_id
userId
:(
const
char
*
)
user_id
;
-
(
NuiResultCode
)
nui_vpr_delete_user
:(
const
char
*
)
service_id
groupId
:(
const
char
*
)
group_id
userId
:(
const
char
*
)
user_id
;
-
(
NuiResultCode
)
nui_vpr_enable
;
-
(
NuiResultCode
)
nui_vpr_disable
;
-
(
NuiResultCode
)
nui_vpr_register_cancel
;
#endif
@end
#endif
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Headers/NeoNuiCode.h
0 → 100644
View file @
88721a74
//
// NeoNuiCode.h
//
//
// Created by zhouguangdong on 2021/3/11.
//
#ifndef NeoNuiCode_h
#define NeoNuiCode_h
enum
NuiSdkLogLevel
{
NUI_LOG_LEVEL_VERBOSE
,
NUI_LOG_LEVEL_DEBUG
,
NUI_LOG_LEVEL_INFO
,
NUI_LOG_LEVEL_WARNING
,
NUI_LOG_LEVEL_ERROR
,
NUI_LOG_LEVEL_NONE
,
};
typedef
enum
NuiSdkLogLevel
NuiSdkLogLevel
;
typedef
int
NuiResultCode
;
#define SUCCESS (0)
//legacy, not required handle
#define DEFAULT_ERROR (240999) //default err value.
//config or params invalid
#define NUI_CONFIG_INVALID (240001) //Config or file invalid.
#define ILLEGAL_PARAM (240002) //parmeters illegal.
#define ILLEGAL_INIT_PARAM (240003) //initialize with illegal parameters.
#define NECESSARY_PARAM_LACK (240004) //lack of necessaray parameters.
#define NULL_PARAM_ERROR (240005) //parameters with null pointer or empty content.
#define NULL_LISTENER_ERROR (240006) //no listener for callback set.
#define NULL_DIALOG_ERROR (240007) //no dialog created.
#define NULL_ENGINE_ERROR (240008) //no dialog engine created.
#define ILLEGAL_DATA (240009) //transfer illegal audio or video data.
#define ILLEGAL_WORD_LIST (2400010) //word list format error
//state invalid
#define ILLEGAL_REENTRANT (240010) //happen when call from async callback or sdk already exit.
#define SDK_NOT_INIT (240011) //call apis when sdk not initialized.
#define SDK_ALREADY_INIT (240012) //call initialize if already initialized.
#define DIALOG_INVALID_STATE (240013) //dialog state machine error.
#define STATE_INVALID (240014) //asr engine state machine error.
#define ILLEGAL_FUNC_CALL (240015) //some function is not supposed to call on some working mode.
//system call fail
#define MEM_ALLOC_ERROR (240020) //alloc or new object fail.
#define FILE_ACCESS_FAIL (240021) //access file fail.
#define CREATE_DIR_ERROR (240022) //create directory fail.
//nui call fail
#define CREATE_NUI_ERROR (240030) //create dialog engine fail.
#define TEXT_DIALOG_START_FAIL (240031) //start text to action fail.
#define TEXT_DIALOG_CANCEL_FAIL (240032) //cancel text to action fail.
#define WUW_DUPLICATE (240033) //set duplicated wake words for dynamic keywords.
//cei call fail
#define CEI_INIT_FAIL (240040) //init cei engine fail.
#define CEI_SET_PARAM_FAIL (240041) //cei set parameters fail.
#define CEI_COMPILE_GRAMMAR_FAIL (240042) //cei compile grammar fail.
#define CEI_STOP_FAIL (240043) //cei stop fail.
#define CEI_CANCEL_FAIL (240044) //cei cancel fail.
#define CEI_UNLOAD_KWS_FAIL (240045) //cei unload kws fail.
#define GET_WUW_ERROR (240046) //cei get wakeup word fail.
#define CEI_CHECK_BIN_FAIL (240047) //check resource bin file fail
//audio manager
#define SELECT_RECORDER_ERROR (240050) //select recorder fail.
#define UPDATE_AUDIO_ERROR (240051) //update audio fail) usually push audio more than wanted.
#define MIC_ERROR (240052) //get audio data fail continually for 2 senconds.
//nls error
#define CREATE_DA_REQUEST_ERROR (240060) //create dialog assistant fail.
#define START_DA_REQUEST_ERROR (240061) //start dialog assistant fail.
#define DEFAULT_NLS_ERROR (240062) //default network error.
#define SSL_ERROR (240063) //ssl new fail.
#define SSL_CONNECT_FAILED (240064) //ssl connect fail.
#define HTTP_CONNECT_FAILED (240065) //http connect fail.
#define DNS_FAILED (240066) //DNS fail.
#define CONNECT_FAILED (240067) //connect socket fail.
#define SERVER_NOT_ACCESS (240068) //server responce status bad.
#define SOCKET_CLOSED (240069) //socket closed.
#define AUTH_FAILED (240070) //authentication fail.
#define HTTPDNS_FAILED (240071) //connect fail when use http dns.
#define HTTP_SEND_FAILED (240072)
#define HTTP_RECEIVE_FAILED (240073)
#define HTTP_RESPONSE_ERROR (240074)
#define HTTP_SERVER_ERROR (240075)
//function call timeout
#define ENGINE_INIT_TIMEOUT (240080) //init engine timeout.
#define SET_PARAM_TIMEOUT (240081) //set parameters timeout.
#define SET_WUW_TIMEOUT (240082) //set wakeup word timeout.
#define SELECT_RECORDER_TIMEOUT (240083) //select recorder timeout.
#define STOP_TIMEOUT (240084) //stop dialog timeout.
#define ASR_ENGINE_STOP_TIMEOUT (240085) //asr engine stop timeout.
#define UNLOAD_DYNAMIC_WUW_TIMEOUT (240086) //unload dynamic wakeup word timeout.
#define ADD_DYNAMIC_WUW_TIMEOUT (240087) //add dynamic wakeup word timeout.
#define HANDLE_API_TIMEOUT (240088)
#define CHECK_ASSET_TIMEOUT (240089) //check asset bin file timeout
//network timeout
#define UPDATE_CONTEXT_TIMEOUT (240090) //update context timeout.
#define CONNECTION_TIMEOUT (240091) //connect to server timeout.
#define PARTIAL_ASR_TIMEOUT (240092) //get partial asr result timeout.
#define ASR_TIMEOUT (240093) //get final asr result timeout.
#define DIALOG_TIMEOUT (240094) //get dialog result timeout.
#define WWV_TIMEOUT (240095) //get wake word verification result timeout.
//legacy
#define WAIT_TIMEOUT (240100) //legacy definition.
#ifdef NUI_VIDEO_MANAGER
#define SELECT_CAMERA_TIMEOUT (240101)
#define SELECT_CAMERA_ERROR (240102)
#endif
#ifdef NUI_SENSOR_MANAGER
#define SELECT_SENSOR_TIMEOUT (240103)
#define SELECT_SENSOR_ERROR (240104)
#endif
#ifdef NUI_INCLUDE_VPR
#define VPR_ARGS_INVALID (240110)
#define VPR_REG_TIMEOUT (240111)
#define VPR_STATE_INVALID (240112)
#define VPR_UPDATE_TIMEOUT (240113)
#define VPR_DELETE_TIMEOUT (240114)
#define VPR_CANCEL_TIMEOUT (240115)
#endif
#define RING_BUF_WRITE_FAIL (240120)
#define AUDIO_PROCESS_THREAD_BLOCK (240121)
#define PERFORMANCE_FILEOVER (240130)
#define RESAMPLE_ERR (240140)
#define FILE_TRANS_TASK_LIMIT (240150)
#define FILE_TRANS_ENCODER_FAIL (140151)
#define THREAD_CREATE_FAILD (240200)
#define SERVER_ERR_SILENT_SPEECH (40010007)
#endif
/* NeoNuiCode_h */
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Headers/NeoNuiTts.h
0 → 100644
View file @
88721a74
//
// NeoNuiTts.h
// nuisdk
//
// Created by zhouguangdong on 2019/12/21.
// Copyright © 2019年 zhouguangdong. All rights reserved.
//
#ifndef NeoNuiTts_h
#define NeoNuiTts_h
#ifdef DEBUG_MODE
#define TLog( s, ... ) NSLog( s, ##__VA_ARGS__ )
#else
#define TLog( s, ... )
#endif
#import <Foundation/Foundation.h>
#import "NeoNuiCode.h"
enum
NuiSdkTtsEvent
{
TTS_EVENT_START
=
0
,
TTS_EVENT_END
=
1
,
TTS_EVENT_CANCEL
=
2
,
TTS_EVENT_PAUSE
=
3
,
TTS_EVENT_RESUME
=
4
,
TTS_EVENT_ERROR
=
5
,
TTS_EVENT_CACEH_START
=
6
,
TTS_EVENT_CACEH_END
=
7
,
TTS_EVENT_CACEH_CANCEL
=
8
,
TTS_EVENT_CACEH_DELETE
=
9
,
TTS_EVENT_CACEH_ERROR
=
10
,
TTS_EVENT_FONT_EVENT_START
=
11
,
TTS_EVENT_FONT_DOWNLOAD
=
12
,
TTS_EVENT_FONT_END
=
13
,
TTS_EVENT_FONT_PAUSE
=
14
,
TTS_EVENT_FONT_RESUME
=
15
,
TTS_EVENT_FONT_CANCEL
=
16
,
TTS_EVENT_FONT_ERROR
=
17
};
typedef
enum
NuiSdkTtsEvent
NuiSdkTtsEvent
;
@protocol
NeoNuiTtsDelegate
<
NSObject
>
@optional
-
(
void
)
onNuiTtsEventCallback
:
(
NuiSdkTtsEvent
)
event
taskId
:
(
char
*
)
taskid
code
:
(
int
)
code
;
-
(
void
)
onNuiTtsUserdataCallback
:(
char
*
)
info
infoLen
:(
int
)
info_len
buffer
:(
char
*
)
buffer
len
:(
int
)
len
taskId
:(
char
*
)
task_id
;
-
(
void
)
onNuiTtsVolumeCallback
:(
int
)
volume
taskId
:(
char
*
)
task_id
;
-
(
void
)
onNuiTtsLogTrackCallback
:(
NuiSdkLogLevel
)
level
logMessage
:(
const
char
*
)
log
;
@end
@interface
NeoNuiTts
:
NSObject
@property
(
readonly
)
void
*
nui_tts_sdk
;
@property
(
nonatomic
,
weak
)
id
<
NeoNuiTtsDelegate
>
delegate
;
+
(
instancetype
)
get_instance
;
-
(
int
)
nui_tts_initialize
:(
const
char
*
)
parameters
logLevel
:(
NuiSdkLogLevel
)
level
saveLog
:(
BOOL
)
save_log
;
-
(
int
)
nui_tts_release
;
-
(
int
)
nui_tts_play
:(
const
char
*
)
priority
taskId
:(
const
char
*
)
taskid
text
:(
const
char
*
)
text
;
-
(
int
)
nui_tts_cancel
:(
const
char
*
)
taskid
;
-
(
int
)
nui_tts_pause
;
-
(
int
)
nui_tts_resume
;
-
(
int
)
nui_tts_set_param
:(
const
char
*
)
param
value
:(
const
char
*
)
value
;
-
(
const
char
*
)
nui_tts_get_param
:(
const
char
*
)
param
;
-
(
int
)
nui_tts_get_num_of_chars
:(
const
char
*
)
param
;
@end
#endif
/* NeoNuiTts_h */
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Headers/StreamInputTts.h
0 → 100644
View file @
88721a74
//
// NeoNuiStreamInputTts.h
// nuisdk
//
// Created by lengjiayi on 2024/4/17.
// Copyright © 2024 zhouguangdong. All rights reserved.
//
#ifndef StreamInputTts_h
#define StreamInputTts_h
#import <Foundation/Foundation.h>
#import "NeoNuiCode.h"
enum
StreamInputTtsCallbackEvent
{
TTS_EVENT_SYNTHESIS_STARTED
=
0
,
TTS_EVENT_SENTENCE_BEGIN
=
1
,
TTS_EVENT_SENTENCE_SYNTHESIS
=
2
,
TTS_EVENT_SENTENCE_END
=
3
,
TTS_EVENT_SYNTHESIS_COMPLETE
=
4
,
TTS_EVENT_TASK_FAILED
=
5
};
typedef
enum
StreamInputTtsCallbackEvent
StreamInputTtsCallbackEvent
;
@protocol
StreamInputTtsDelegate
<
NSObject
>
@optional
/**
* 事件回调
* @param event:回调事件,参见如下事件列表。
* @param task_id:请求的任务ID,每次调用一个新ID。
* @param session_id:请求的会话ID。
* @param ret_code:参见错误码,出现TTS_EVENT_ERROR事件时有效,可查阅xxxxx。
* @param error_msg:当产生错误码时,返回错误信息。
* @param timestamp:时间戳信息。
* @param all_response:返回的完整json格式信息。
*/
-
(
void
)
onStreamInputTtsEventCallback
:
(
StreamInputTtsCallbackEvent
)
event
taskId
:
(
char
*
)
taskid
sessionId
:
(
char
*
)
sessionId
ret_code
:
(
int
)
ret_code
error_msg
:
(
char
*
)
error_msg
timestamp
:
(
char
*
)
timestamp
all_response
:
(
char
*
)
all_response
;
/**
* 当开始识别时,此回调被连续调用,App需要在回调中进行语音数据填充,语音数据来自App的录音
* @param buffer: 合成的语音数据
* @param len: 合成的语音长度
*/
-
(
void
)
onStreamInputTtsDataCallback
:(
char
*
)
buffer
len
:(
int
)
len
;
-
(
void
)
onStreamInputTtsLogTrackCallback
:(
NuiSdkLogLevel
)
level
logMessage
:(
const
char
*
)
log
;
@end
@interface
StreamInputTts
:
NSObject
@property
(
nonatomic
,
weak
)
id
<
StreamInputTtsDelegate
>
delegate
;
+
(
instancetype
)
get_instance
;
/**
* 与服务端完成建链,并开始流式语音合成任务
* @param ticket:json string形式的鉴权参数,参见下方说明或接口说明:xxxxx
* @param parameters:json string形式的初始化配置参数,参见下方说明或接口说明:xxxxx
* @param session_id:会话ID,可传入32个字节的uuid,或传入空内容由SDK自动生成。
* @param level:log打印级别,值越小打印越多。
* @param save_log:是否保存log为文件,存储目录为ticket中的debug_path字段值。
* @return:参见错误码:https://help.aliyun.com/document_detail/459864.html。
*/
-
(
int
)
startStreamInputTts
:(
const
char
*
)
ticket
parameters
:(
const
char
*
)
parameters
sessionId
:(
const
char
*
)
sessionId
logLevel
:(
NuiSdkLogLevel
)
logLevel
saveLog
:(
BOOL
)
saveLog
;
/**
* 与服务端完成建链,并开始单向流式语音合成(长文本语音合成)任务,同步接口
* @param ticket:json string形式的鉴权参数,参见下方说明或接口说明:xxxxx
* @param parameters:json string形式的初始化配置参数,参见下方说明或接口说明:xxxxx
* @param text:待合成文本
* @param session_id:会话ID,可传入32个字节的uuid,或传入空内容由SDK自动生成。
* @param level:log打印级别,值越小打印越多。
* @param save_log:是否保存log为文件,存储目录为ticket中的debug_path字段值。
* @return:参见错误码:https://help.aliyun.com/document_detail/459864.html。
*/
-
(
int
)
playStreamInputTts
:(
const
char
*
)
ticket
parameters
:(
const
char
*
)
parameters
text
:(
const
char
*
)
text
sessionId
:(
const
char
*
)
sessionId
logLevel
:(
NuiSdkLogLevel
)
logLevel
saveLog
:(
BOOL
)
saveLog
;
/**
* 与服务端完成建链,并开始单向流式语音合成(长文本语音合成)任务,异步接口
* @param ticket:json string形式的鉴权参数,参见下方说明或接口说明:xxxxx
* @param parameters:json string形式的初始化配置参数,参见下方说明或接口说明:xxxxx
* @param text:待合成文本
* @param session_id:会话ID,可传入32个字节的uuid,或传入空内容由SDK自动生成。
* @param level:log打印级别,值越小打印越多。
* @param save_log:是否保存log为文件,存储目录为ticket中的debug_path字段值。
* @return:参见错误码:https://help.aliyun.com/document_detail/459864.html。
*/
-
(
int
)
asyncPlayStreamInputTts
:(
const
char
*
)
ticket
parameters
:(
const
char
*
)
parameters
text
:(
const
char
*
)
text
sessionId
:(
const
char
*
)
sessionId
logLevel
:(
NuiSdkLogLevel
)
logLevel
saveLog
:(
BOOL
)
saveLog
;
/**
* 以流式的方式发送文本
* @param text:从大模型当中生成的流式文本
* @return:参见错误码:https://help.aliyun.com/document_detail/459864.html。
*/
-
(
int
)
sendStreamInputTts
:(
const
char
*
)
text
;
/**
* 结束合成任务,通知服务端流入文本数据发送完毕,阻塞等待服务端处理完成,并返回所有合成音频。阻塞超时可以通过start接口中的complete_waiting_ms设置
* @return:参见错误码:https://help.aliyun.com/document_detail/459864.html。
*/
-
(
int
)
stopStreamInputTts
;
/**
* 结束合成任务,通知服务端流入文本数据发送完毕,不等待而是立即返回,同时回调继续返回剩余内容
* @return:参见错误码:https://help.aliyun.com/document_detail/459864.html。
*/
-
(
int
)
asyncStopStreamInputTts
;
/**
* 立即停止合成任务,不会有任何回调返回
* @return:参见错误码:https://help.aliyun.com/document_detail/459864.html。
*/
-
(
int
)
cancelStreamInputTts
;
@end
#endif
/* NeoNuiStreamInputTts_h */
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Info.plist
0 → 100644
View file @
88721a74
File added
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Resources.bundle/ali_copylist.txt
0 → 100644
View file @
88721a74
tts
cei.json
nui.json
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Resources.bundle/cei.json
0 → 100644
View file @
88721a74
{
"cei"
:{
"cei_param_version"
:
"2.2.0"
,
"cei_param_device_type"
:
"car"
,
"cei_param_reco_mode"
:
0
,
"cei_param_log_level"
:
2
,
"cei_param_debug_path"
:
"asr_debug"
,
"cei_param_is_debug_enable"
:
false
,
"cei_param_resource_path"
:
""
,
"cei_param_resource_is_multi_language"
:
false
,
"cei_param_audio_format_str"
:
"16k16bitmono"
,
"cei_param_mcs_mode"
:
0
,
"cei_param_work_mode"
:
0
,
"cei_param_max_cache_frames"
:
1000
,
"cei_param_is_aec_bf_active"
:
false
,
"cei_param_is_agc_active"
:
false
,
"cei_param_is_vad_active"
:
true
,
"cei_param_is_kws_active"
:
true
,
"cei_param_is_sr_active"
:
true
},
"asp"
:{
"asp_param_is_process_parallel"
:
false
,
"asp_param_is_input_debug_enable"
:
false
,
"asp_param_is_output_debug_enable"
:
false
,
"asp_param_debug_path"
:
"asr_debug"
,
"asp_param_is_callback_enable"
:
false
,
"asp_param_callback_period_frames"
:
5
},
"vad"
:{
"vad_param_is_input_debug_enable"
:
false
,
"vad_param_is_output_debug_enable"
:
false
,
"vad_param_debug_path"
:
"asr_debug"
,
"vad_param_asleep_speech_noise_thres"
:
-0.8
,
"vad_param_awake_speech_noise_thres"
:
-0.5
,
"vad_param_asleep_max_speech_segment_time"
:
300000
,
"vad_param_awake_max_speech_segment_time"
:
60000
,
"vad_param_asleep_block_size"
:
3
,
"vad_param_awake_block_size"
:
3
,
"vad_param_front_timeout_interval"
:
8000
,
"vad_param_tail_timeout_interval"
:
800
,
"vad_param_is_detect_start"
:
true
,
"vad_param_is_detect_end"
:
true
},
"kws"
:{
"kws_param_is_input_debug_enable"
:
false
,
"kws_param_is_output_debug_enable"
:
false
,
"kws_param_debug_path"
:
"asr_debug"
,
"kws_param_is_process_parallel"
:
false
,
"kws_param_front_extend_frames"
:
10
,
"kws_param_tail_extend_frames"
:
5
,
"kws_param_encoder_type_str"
:
"opu"
,
"kws_param_encoder_bitrate"
:
16000
,
"kws_param_encoder_complexity"
:
2
,
"kws_param_callback_period_ms"
:
100
,
"kws_param_max_frames_per_callback"
:
25
,
"kws_param_max_bytes_per_callback"
:
16000
},
"sr"
:{
"sr_param_is_input_debug_enable"
:
false
,
"sr_param_is_output_debug_enable"
:
false
,
"sr_param_debug_path"
:
"asr_debug"
,
"sr_param_is_itn_enable"
:
true
,
"sr_param_is_do_conf_filter"
:
false
,
"sr_param_is_process_parallel"
:
true
,
"sr_param_is_need_result"
:
false
,
"sr_param_is_need_voice"
:
true
,
"sr_param_ngram_conf_thres"
:
65.0
,
"sr_param_jsgf_conf_thres"
:
65.0
,
"sr_param_encoder_type_str"
:
"opu"
,
"sr_param_encoder_bitrate"
:
16000
,
"sr_param_encoder_complexity"
:
2
,
"sr_param_callback_period_ms"
:
100
,
"sr_param_max_frames_per_callback"
:
25
,
"sr_param_max_bytes_per_callback"
:
16000
},
"ou"
:{
"oss_upload_param_is_enable"
:
false
,
"oss_upload_param_asp_in"
:
false
,
"oss_upload_param_asp_out"
:
false
,
"oss_upload_param_vad_in"
:
false
,
"oss_upload_param_vad_out"
:
false
,
"oss_upload_param_kws_in"
:
false
,
"oss_upload_param_kws_susp_in"
:
false
,
"oss_upload_param_kws_out"
:
false
,
"oss_upload_param_kws_susp_out"
:
false
,
"oss_upload_param_sr_in"
:
false
}
}
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Resources.bundle/copylist.txt
0 → 100644
View file @
88721a74
tts
cei.json
nui.json
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Resources.bundle/nui.json
0 → 100644
View file @
88721a74
{
"device_type"
:
"phone"
,
"assets_version"
:
"1.1.20190902"
,
"nui_config"
:{
"service_mode"
:
"kModeFullCloud"
,
"log_level"
:
"kLogLevelVerbose"
,
"enable_recorder_by_user"
:
true
,
"enable_dialog"
:
false
},
"nls_config"
:{
"debug_level"
:
4
,
"sr_format"
:
"opus"
,
"sample_rate"
:
16000
,
"dns_timeout"
:
5000
,
"vocab_default_weight"
:
2
},
"audio_config"
:{
"debug"
:
"none"
,
"16k_audio"
:{
"name"
:
"16kmono16bit"
,
"id"
:
0
,
"mic"
:{
"name"
:
"16kmono16bit"
,
"debug_heap_pollution"
:
false
,
"read_cnt"
:
0
,
"sample_rate"
:
16000
,
"bits_per_sample"
:
16
,
"channels"
:
1
,
"recording_interval"
:
10
,
"cei_frame_time_len"
:
20
,
"channel_mask"
:
"kAMChannalMaskNone"
,
"format_type"
:
"kAMDataFormatPcmInterleaved"
,
"endianness"
:
"kAMByteOrderLittleEndian"
}
},
"8k_audio"
:{
"name"
:
"8kmono16bit"
,
"id"
:
0
,
"mic"
:{
"name"
:
"8kmono16bit"
,
"debug_heap_pollution"
:
false
,
"read_cnt"
:
0
,
"sample_rate"
:
8000
,
"bits_per_sample"
:
16
,
"channels"
:
1
,
"recording_interval"
:
10
,
"cei_frame_time_len"
:
20
,
"channel_mask"
:
"kAMChannalMaskNone"
,
"format_type"
:
"kAMDataFormatPcmInterleaved"
,
"endianness"
:
"kAMByteOrderLittleEndian"
}
}
}
}
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/Resources.bundle/tts/parameter.cfg
0 → 100644
View file @
88721a74
{
"device_type":"car",
"mode_type":2,
"smart_engine":3,
"encode_type":"pcm",
"debug_info":{
"debug_level":0,
"debug_path":"/sdcard/tmp"
},
"common_info":{
"pitch_level":0,
"speed_level":1.0,
"volume":1.0,
"play_audio":0,
"callback_raw_data":1,
"sample_rate":16000,
"font_name":"xiaoyun",
"wait_time":2000
},
"cache":{
"on":true,
"max_cache_size":2000000,
"save_path":"/sdcard/mit/"
},
"font":{
"on":false,
"mode":"cmd",
"save_path":"/sdcard/mit"
}
}
galaxy/galaxy/Classes/Tools/Voice/nuisdk.framework/nuisdk
0 → 100755
View file @
88721a74
File added
galaxy/galaxy/Res/galaxy-Bridge-Header.h
View file @
88721a74
...
...
@@ -14,6 +14,7 @@
//#import <AliyunOSSiOS/OSSService.h>
#import "WXApi.h"
#import "JPUSHService.h"
#import <nuisdk/NeoNui.h>
// iOS10注册APNs所需头文件
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
...
...
@@ -22,6 +23,7 @@
// 七鱼SDK
#import <QYSDK/QYSDK.h>
#import <NIMSDK/NIMMessage.h>
#endif
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment