mirror of
https://github.com/jambonz/freeswitch-modules.git
synced 2026-01-25 02:08:27 +00:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d01991ed0f | |||
| eec4df4b77 | |||
| b003ab0875 | |||
| 81ceddf3d2 | |||
| 110a12d5a5 | |||
| fe1e4dcf11 | |||
| f828171b3b | |||
| e717ca7dd3 |
@@ -172,7 +172,7 @@ namespace {
|
|||||||
else if (customModel) oss << "&model=" << customModel;
|
else if (customModel) oss << "&model=" << customModel;
|
||||||
|
|
||||||
if (var = switch_channel_get_variable(channel, "DEEPGRAM_SPEECH_MODEL_VERSION")) {
|
if (var = switch_channel_get_variable(channel, "DEEPGRAM_SPEECH_MODEL_VERSION")) {
|
||||||
oss << "&version";
|
oss << "&version=";
|
||||||
oss << var;
|
oss << var;
|
||||||
}
|
}
|
||||||
oss << "&language=";
|
oss << "&language=";
|
||||||
|
|||||||
@@ -742,7 +742,7 @@ extern "C" {
|
|||||||
std::string url;
|
std::string url;
|
||||||
std::ostringstream url_stream;
|
std::ostringstream url_stream;
|
||||||
// always use sample_rate=8000 for support jambonz caching system.
|
// always use sample_rate=8000 for support jambonz caching system.
|
||||||
url_stream << "https://api.deepgram.com/v1/speak?model=" << d->voice_name << "&encoding=linear16&sample_rate=8000";
|
url_stream << (d->endpoint != nullptr ? d->endpoint : "https://api.deepgram.com") << "/v1/speak?model=" << d->voice_name << "&encoding=linear16&sample_rate=8000";
|
||||||
url = url_stream.str();
|
url = url_stream.str();
|
||||||
|
|
||||||
/* create the JSON body */
|
/* create the JSON body */
|
||||||
|
|||||||
@@ -19,10 +19,12 @@ static void cleardeepgram(deepgram_t* d, int freeAll) {
|
|||||||
if (d->connect_time_ms) free(d->connect_time_ms);
|
if (d->connect_time_ms) free(d->connect_time_ms);
|
||||||
if (d->final_response_time_ms) free(d->final_response_time_ms);
|
if (d->final_response_time_ms) free(d->final_response_time_ms);
|
||||||
if (d->cache_filename) free(d->cache_filename);
|
if (d->cache_filename) free(d->cache_filename);
|
||||||
|
if (d->endpoint) free(d->endpoint);
|
||||||
|
|
||||||
|
|
||||||
d->api_key = NULL;
|
d->api_key = NULL;
|
||||||
d->request_id = NULL;
|
d->request_id = NULL;
|
||||||
|
d->endpoint = NULL;
|
||||||
|
|
||||||
d->reported_model_name = NULL;
|
d->reported_model_name = NULL;
|
||||||
d->reported_model_uuid = NULL;
|
d->reported_model_uuid = NULL;
|
||||||
@@ -121,6 +123,9 @@ static void d_text_param_tts(switch_speech_handle_t *sh, char *param, const char
|
|||||||
if (0 == strcmp(param, "api_key")) {
|
if (0 == strcmp(param, "api_key")) {
|
||||||
if (d->api_key) free(d->api_key);
|
if (d->api_key) free(d->api_key);
|
||||||
d->api_key = strdup(val);
|
d->api_key = strdup(val);
|
||||||
|
} else if (0 == strcmp(param, "endpoint")) {
|
||||||
|
if (d->endpoint) free(d->endpoint);
|
||||||
|
d->endpoint = strdup(val);
|
||||||
} else if (0 == strcmp(param, "voice")) {
|
} else if (0 == strcmp(param, "voice")) {
|
||||||
if (d->voice_name) free(d->voice_name);
|
if (d->voice_name) free(d->voice_name);
|
||||||
d->voice_name = strdup(val);
|
d->voice_name = strdup(val);
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
typedef struct deepgram_data {
|
typedef struct deepgram_data {
|
||||||
char *voice_name;
|
char *voice_name;
|
||||||
char *api_key;
|
char *api_key;
|
||||||
|
char *endpoint;
|
||||||
|
|
||||||
/* result data */
|
/* result data */
|
||||||
long response_code;
|
long response_code;
|
||||||
|
|||||||
+1
-1
@@ -271,7 +271,7 @@ SWITCH_STANDARD_API(dub_function)
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
char* text = argv[3];
|
char* text = argv[3];
|
||||||
int gain = argc > 4 ? atoi(argv[4]) : 0;
|
int gain = argc > 5 ? atoi(argv[5]) : 0;
|
||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "sayOnTrack %s gain %d\n", text, gain);
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_INFO, "sayOnTrack %s gain %d\n", text, gain);
|
||||||
status = dub_say_on_track(session, track, text, gain);
|
status = dub_say_on_track(session, track, text, gain);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -378,7 +378,10 @@ switch_status_t playht_parse_text(const std::map<std::string, std::string>& para
|
|||||||
cJSON_AddStringToObject(jResult, "quality", quality.c_str());
|
cJSON_AddStringToObject(jResult, "quality", quality.c_str());
|
||||||
}
|
}
|
||||||
if (!speed.empty()) {
|
if (!speed.empty()) {
|
||||||
cJSON_AddNumberToObject(jResult, "speed", atoi(speed.c_str()));
|
double val = strtod(speed.c_str(), NULL);
|
||||||
|
if (val != 0.0) {
|
||||||
|
cJSON_AddNumberToObject(jResult, "speed", val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!seed.empty()) {
|
if (!seed.empty()) {
|
||||||
cJSON_AddNumberToObject(jResult, "seed", atoi(seed.c_str()));
|
cJSON_AddNumberToObject(jResult, "seed", atoi(seed.c_str()));
|
||||||
|
|||||||
@@ -229,16 +229,6 @@ int AudioPipe::lws_callback(struct lws *wsi,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// static members
|
|
||||||
static const lws_retry_bo_t retry = {
|
|
||||||
nullptr, // retry_ms_table
|
|
||||||
0, // retry_ms_table_count
|
|
||||||
0, // conceal_count
|
|
||||||
UINT16_MAX, // secs_since_valid_ping
|
|
||||||
UINT16_MAX, // secs_since_valid_hangup
|
|
||||||
0 // jitter_percent
|
|
||||||
};
|
|
||||||
|
|
||||||
struct lws_context *AudioPipe::context = nullptr;
|
struct lws_context *AudioPipe::context = nullptr;
|
||||||
std::thread AudioPipe::serviceThread;
|
std::thread AudioPipe::serviceThread;
|
||||||
std::mutex AudioPipe::mutex_connects;
|
std::mutex AudioPipe::mutex_connects;
|
||||||
@@ -376,6 +366,28 @@ bool AudioPipe::lws_service_thread() {
|
|||||||
{ NULL, NULL, 0, 0 }
|
{ NULL, NULL, 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
uint16_t secs_sinceq_valid_ping = UINT16_MAX;
|
||||||
|
uint16_t secs_since_valid_hangup = UINT16_MAX;
|
||||||
|
|
||||||
|
char* wsVar = std::getenv("WS_PING_INTERVAL");
|
||||||
|
if (wsVar != nullptr) {
|
||||||
|
secs_sinceq_valid_ping = std::atoi(wsVar);
|
||||||
|
}
|
||||||
|
|
||||||
|
wsVar = std::getenv("WS_NO_PONG_HANGUP_INTERVAL");
|
||||||
|
if (wsVar != nullptr) {
|
||||||
|
secs_since_valid_hangup = std::atoi(wsVar);
|
||||||
|
}
|
||||||
|
|
||||||
|
const lws_retry_bo_t retry = {
|
||||||
|
nullptr, // retry_ms_table
|
||||||
|
0, // retry_ms_table_count
|
||||||
|
0, // conceal_count
|
||||||
|
secs_sinceq_valid_ping, // secs_sinceq_valid_ping
|
||||||
|
secs_since_valid_hangup, // secs_since_valid_hangup
|
||||||
|
0 // jitter_percent
|
||||||
|
};
|
||||||
|
|
||||||
memset(&info, 0, sizeof info);
|
memset(&info, 0, sizeof info);
|
||||||
info.port = CONTEXT_PORT_NO_LISTEN;
|
info.port = CONTEXT_PORT_NO_LISTEN;
|
||||||
info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
|
info.options = LWS_SERVER_OPTION_DO_SSL_GLOBAL_INIT;
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ namespace {
|
|||||||
cJSON_AddStringToObject(json, "format", "raw");
|
cJSON_AddStringToObject(json, "format", "raw");
|
||||||
cJSON_AddStringToObject(json, "encoding", "LINEAR16");
|
cJSON_AddStringToObject(json, "encoding", "LINEAR16");
|
||||||
cJSON_AddBoolToObject(json, "interimResults", tech_pvt->interim);
|
cJSON_AddBoolToObject(json, "interimResults", tech_pvt->interim);
|
||||||
cJSON_AddNumberToObject(json, "sampleRateHz", 8000);
|
cJSON_AddNumberToObject(json, "sampleRateHz", tech_pvt->sampling);
|
||||||
if (var = switch_channel_get_variable(channel, "JAMBONZ_STT_OPTIONS")) {
|
if (var = switch_channel_get_variable(channel, "JAMBONZ_STT_OPTIONS")) {
|
||||||
cJSON* jOptions = cJSON_Parse(var);
|
cJSON* jOptions = cJSON_Parse(var);
|
||||||
if (jOptions) {
|
if (jOptions) {
|
||||||
@@ -353,7 +353,7 @@ extern "C" {
|
|||||||
}
|
}
|
||||||
|
|
||||||
switch_status_t jb_transcribe_session_init(switch_core_session_t *session,
|
switch_status_t jb_transcribe_session_init(switch_core_session_t *session,
|
||||||
responseHandler_t responseHandler, uint32_t samples_per_second, uint32_t channels,
|
responseHandler_t responseHandler, uint32_t samples_per_second, int desiredSampling, uint32_t channels,
|
||||||
char* lang, int interim, char* bugname, void **ppUserData)
|
char* lang, int interim, char* bugname, void **ppUserData)
|
||||||
{
|
{
|
||||||
int err;
|
int err;
|
||||||
@@ -365,7 +365,7 @@ extern "C" {
|
|||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SWITCH_STATUS_SUCCESS != fork_data_init(tech_pvt, session, samples_per_second, 8000, channels, lang, interim, bugname, responseHandler)) {
|
if (SWITCH_STATUS_SUCCESS != fork_data_init(tech_pvt, session, samples_per_second, desiredSampling, channels, lang, interim, bugname, responseHandler)) {
|
||||||
destroy_tech_pvt(tech_pvt);
|
destroy_tech_pvt(tech_pvt);
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ int parse_ws_uri(switch_channel_t *channel, const char* szServerUri, char* host,
|
|||||||
switch_status_t jb_transcribe_init();
|
switch_status_t jb_transcribe_init();
|
||||||
switch_status_t jb_transcribe_cleanup();
|
switch_status_t jb_transcribe_cleanup();
|
||||||
switch_status_t jb_transcribe_session_init(switch_core_session_t *session, responseHandler_t responseHandler,
|
switch_status_t jb_transcribe_session_init(switch_core_session_t *session, responseHandler_t responseHandler,
|
||||||
uint32_t samples_per_second, uint32_t channels, char* lang, int interim, char* bugname, void **ppUserData);
|
uint32_t samples_per_second, int desiredSampling, uint32_t channels, char* lang, int interim, char* bugname, void **ppUserData);
|
||||||
switch_status_t jb_transcribe_session_stop(switch_core_session_t *session, int channelIsClosing, char* bugname);
|
switch_status_t jb_transcribe_session_stop(switch_core_session_t *session, int channelIsClosing, char* bugname);
|
||||||
switch_bool_t jb_transcribe_frame(switch_core_session_t *session, switch_media_bug_t *bug);
|
switch_bool_t jb_transcribe_frame(switch_core_session_t *session, switch_media_bug_t *bug);
|
||||||
|
|
||||||
|
|||||||
@@ -73,6 +73,8 @@ static switch_status_t start_capture(switch_core_session_t *session, switch_medi
|
|||||||
switch_codec_implementation_t read_impl = { 0 };
|
switch_codec_implementation_t read_impl = { 0 };
|
||||||
void *pUserData;
|
void *pUserData;
|
||||||
uint32_t samples_per_second;
|
uint32_t samples_per_second;
|
||||||
|
uint32_t desiredSampling = 8000;
|
||||||
|
const char* var;
|
||||||
|
|
||||||
if (!switch_channel_get_variable(channel, "JAMBONZ_STT_URL")) {
|
if (!switch_channel_get_variable(channel, "JAMBONZ_STT_URL")) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing JAMBONZ_STT_URL channel var\n");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Missing JAMBONZ_STT_URL channel var\n");
|
||||||
@@ -91,8 +93,11 @@ static switch_status_t start_capture(switch_core_session_t *session, switch_medi
|
|||||||
}
|
}
|
||||||
|
|
||||||
samples_per_second = !strcasecmp(read_impl.iananame, "g722") ? read_impl.actual_samples_per_second : read_impl.samples_per_second;
|
samples_per_second = !strcasecmp(read_impl.iananame, "g722") ? read_impl.actual_samples_per_second : read_impl.samples_per_second;
|
||||||
|
var = switch_channel_get_variable(channel, "JAMBONZ_STT_SAMPLING");
|
||||||
if (SWITCH_STATUS_FALSE == jb_transcribe_session_init(session, responseHandler, samples_per_second, flags & SMBF_STEREO ? 2 : 1, lang, interim, bugname, &pUserData)) {
|
if (var != NULL) {
|
||||||
|
desiredSampling = atoi(var);
|
||||||
|
}
|
||||||
|
if (SWITCH_STATUS_FALSE == jb_transcribe_session_init(session, responseHandler, samples_per_second, desiredSampling, flags & SMBF_STEREO ? 2 : 1, lang, interim, bugname, &pUserData)) {
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error initializing jb speech session.\n");
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Error initializing jb speech session.\n");
|
||||||
return SWITCH_STATUS_FALSE;
|
return SWITCH_STATUS_FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -774,7 +774,10 @@ extern "C" {
|
|||||||
cJSON_AddStringToObject(jResult, "quality", p->quality);
|
cJSON_AddStringToObject(jResult, "quality", p->quality);
|
||||||
}
|
}
|
||||||
if (p->speed) {
|
if (p->speed) {
|
||||||
cJSON_AddNumberToObject(jResult, "speed", atoi(p->speed));
|
double val = strtod(p->speed, NULL);
|
||||||
|
if (val != 0.0) {
|
||||||
|
cJSON_AddNumberToObject(jResult, "speed", val);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (p->seed) {
|
if (p->seed) {
|
||||||
cJSON_AddNumberToObject(jResult, "seed", atoi(p->seed));
|
cJSON_AddNumberToObject(jResult, "seed", atoi(p->seed));
|
||||||
|
|||||||
Reference in New Issue
Block a user