2

我有这个 USB-to-GSM Serial-GPRS-SIM800C 模块,我已经成功地能够向它发送 AT 命令并做一些事情,但我真正想要的是文本到语音功能,我能够生成 AMR 音频文件,将其上传到模块的内存中,并在有人调用时播放。

但是来电者听到的消息是动态的,TTS 将实时运行,所以音频文件上传到模块的过程会导致不必要的延迟,有什么办法可以通过模块流一些音频?

谢谢。

4

2 回答 2

4

这就是我必须做的。

  1. 开始通话 ( ATDxxxxxxxxxxx;)
  2. 设置模式 ( AT+DTAM=2)
  3. 开始录制 ( AT+CREC=1,1,0)
  4. 用麦克风说出我想播放的内容 5.停止录音 ( AT+CREC=2)
  5. 挂断(ATH

现在我可以使用以下播放我录制的内容

  1. 开始通话 ( ATDxxxxxxxxxxx;)
  2. 设置模式 ( AT+DTAM=2)
  3. 开始播放 ( AT+CREC=4,1,0,80)
  4. 挂断(ATH

不知道如何动态执行此操作,甚至不知道如何上传 *.amr 文件。

如果您能分享您用来查看是否有任何改进方法的命令,将不胜感激。

于 2020-04-02T14:41:21.100 回答
1

回答@anothersanj

我正在使用serialport-gsm使事情变得更容易。这就是我的做法:

modem.executeCommand('AT+FSMKDIR=C:\\status\\',(result) => { log.debug(result); });
        //reading the audio file from your computer with nodejs fs module
        fs.readFile('tts2.amr', function(err, amr_data) {
            if(!err) {
                let fsize= fs.statSync('tts2.amr').size;
                log.debug(fsize);
                //creating the file on the GSM module's memory
                modem.executeCommand('AT+FSCREATE=C:\\stats\\tts2.amr',(result) => { log.debug(result); });
                //writing the file on the GSM module's memory
                modem.executeCommand('AT+FSWRITE=C:\\stats\\tts2.amr,0,'+fsize+',100',(result) => { 
                    modem.port.write(amr_data);
                });
                //Display file list on specified path (like ls command)
                modem.executeCommand('AT+FSLS=C:\\stats',(result) => { log.debug(result); });
                
            }
        }); 

并且每当有人打电话给你时播放文件:

//playing the file on incoming call
        modem.on('onNewIncomingCall', (result) => { 
            log.debug(result); 
            modem.executeCommand('ATA',(result) => { log.debug(result); });
            modem.executeCommand('AT+CMEDPLAY=1,\"C:\\stats\\tts2.amr\",0,100',(result) => { log.debug(result); });
            modem.executeCommand('AT+DDET=1',(result) => { log.debug(result); });

        });
于 2021-04-13T08:04:53.700 回答