我有这个 USB-to-GSM Serial-GPRS-SIM800C 模块,我已经成功地能够向它发送 AT 命令并做一些事情,但我真正想要的是文本到语音功能,我能够生成 AMR 音频文件,将其上传到模块的内存中,并在有人调用时播放。
但是来电者听到的消息是动态的,TTS 将实时运行,所以音频文件上传到模块的过程会导致不必要的延迟,有什么办法可以通过模块流一些音频?
谢谢。
我有这个 USB-to-GSM Serial-GPRS-SIM800C 模块,我已经成功地能够向它发送 AT 命令并做一些事情,但我真正想要的是文本到语音功能,我能够生成 AMR 音频文件,将其上传到模块的内存中,并在有人调用时播放。
但是来电者听到的消息是动态的,TTS 将实时运行,所以音频文件上传到模块的过程会导致不必要的延迟,有什么办法可以通过模块流一些音频?
谢谢。
这就是我必须做的。
ATDxxxxxxxxxxx;
)AT+DTAM=2
)AT+CREC=1,1,0
)AT+CREC=2
)ATH
)现在我可以使用以下播放我录制的内容
ATDxxxxxxxxxxx;
)AT+DTAM=2
)AT+CREC=4,1,0,80
)ATH
)不知道如何动态执行此操作,甚至不知道如何上传 *.amr 文件。
如果您能分享您用来查看是否有任何改进方法的命令,将不胜感激。
回答@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); });
});