[Freeswitch-users] mod_sndfile error called from mod_tts_commandline - [WARNING] mod_sndfile.c:281 Error Opening File

Lewis Bergman lewis.bergman at gmail.com
Tue Mar 2 01:30:06 UTC 2021

Hello all. I am pretty new to Freeswitch and have an experimental container
on Proxmox 6.3 Debian 10 to play with. The goal is to get mod_unimrcp
working. To that end, I have mod_tts_commandline (installed from binary
with FusionPBX as part of the default install) listed in modules.conf.xml
                <!-- Speech Recognition / Text to Speech -->
                <load module="mod_unimrcp"/>
                <load module="mod_tts_commandline"/>
                <load module="mod_flite"/>
I have tried it with and without mod_flite enabled.
Mod_tts_commandline refuses to pull a sound file and the debug log seems to
blame mod_sndfile. This is using the example from the mod_tts_commandline
as dialplan shows following the debug log output below:

2021-02-26 15:19:24.713040 [NOTICE] mod_dptools.c:1406 Channel
[sofia/internal/102 at] has been answered
2021-02-26 15:19:24.713040 [DEBUG] switch_channel.c:3865 (sofia/internal/
102 at Callstate Change RINGING -> ACTIVE
2021-02-26 15:19:24.713040 [DEBUG] sofia.c:7326 Channel sofia/internal/
102 at entering state [completed][200]
EXECUTE [depth=0] sofia/internal/102 at
speak(tts_commandline|pico|This is an example of using tts_commandline)
2021-02-26 15:19:24.713040 [DEBUG] switch_ivr_play_say.c:3023 OPEN TTS
2021-02-26 15:19:24.713040 [DEBUG] switch_ivr_play_say.c:3033 Raw Codec
2021-02-26 15:19:24.713040 [DEBUG] mod_tts_commandline.c:160 Executing:
echo 'This is an example of using tts_commandline' | text2wave -f 8000 >
2021-02-26 15:19:25.433013 [WARNING] mod_sndfile.c:281 Error Opening File
[/tmp/0665a30d-2bb8-40fe-b5a6-9625bd58306e.tmp.wav] [File contains data in
an unknown format.]
2021-02-26 15:19:25.433013 [ERR] mod_tts_commandline.c:170 Failed to open
file: /tmp/0665a30d-2bb8-40fe-b5a6-9625bd58306e.tmp.wav
2021-02-26 15:19:25.433013 [DEBUG] switch_ivr_play_say.c:2741 Speaking
text: This is an example of using tts_commandline
2021-02-26 15:19:25.433013 [DEBUG] sofia.c:7326 Channel sofia/internal/
102 at entering state [ready][200]
2021-02-26 15:19:25.433013 [DEBUG] switch_ivr_play_say.c:2905 done speaking
2021-02-26 15:19:25.433013 [NOTICE] switch_core_state_machine.c:386
sofia/internal/102 at has executed the last dialplan
instruction, hanging up.
2021-02-26 15:19:25.433013 [NOTICE] switch_core_state_machine.c:388 Hangup
sofia/internal/102 at [CS_EXECUTE] [NORMAL_CLEARING]

The dialplan for extension I am testing looks like this:
<extension name="tts_commandline_test">
   <condition field="destination_number" expression="^561$">
      <action application="speak" data="tts_commandline|pico|This is
an example of using tts_commandline"/>

The code lines mentioned in debug seem to be pretty mundane, not that I
really know what I am looking for:
>From mod_tts_commnandline line 160:
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Executing:
%s\n", message);
I tried setting the /tmp directory to 777 but that didn't help and the
error output was identical. mod_tts_commandline never reports an error
creation and it looks like the next part of of mod_tts_commandline
would print an error if it did like this:
if (switch_system(message, SWITCH_TRUE) < 0) {
    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to
execute command: %s\n", message);
    ret = SWITCH_STATUS_FALSE; goto done;
if (switch_core_file_open(info->fh, info->file, 0, //number_of_channels,
    info->rate, //samples_per_second,
    switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "Failed to
open file: %s\n", info->file);
    ret = SWITCH_STATUS_FALSE; goto done;

Starting at line 279 in mod_sndfile (sorry for the space formatting):

if (!context->handle) {
if (sndfile_perform_open(context, path, mode, handle) !=
Opening File [%s] [%s]\n", path, sf_strerror(context->handle));
goto end;

According to the dptools docs
and libsndfile wav has been supported forever and it would seem highly
unlikely that is an issue. It seems like mod_tts isn't writing the
file but also isn't reporting an error. I have started fresh with two
new containers twice and a full VM once all with the same error
resulting. I check the /tmp directory and no files are present but I
don't know if they are being deleted by some cleanup process or just
not created. Not knowing C, it seems like mod_sndfile never received a
file handle but that is just a guess. Other Freeswitch apps are
writing to the /tmp directory (at least there are some files in
there). Maybe someone sees an error from mod_tts_commandline I don't
see or knows I am doing something stupid. Any help would be
appreciated. I only found 2 references to the error in the mail
history and neither had anything to do with a similar issue.

Freeswitch version reports: FreeSWITCH Version
1.10.5-release-17-25569c1631~64bit (-release-17-25569c1631 64bit)
FusionPBX version, in case it matters, is : 4.5.21
OS is Debian 10 Buster

Lewis Bergman

More information about the FreeSWITCH-users mailing list