mimi XFE module for Fairy I/O Tumbler / version 1.x
T-01 çšãã€ããªãšããŠæäŸããã libmimixfe.so ãšãã®ããããã¡ã€ã«ãåã³ç°¡åãªå©çšäŸãå«ããªããžããªã§ãã include/
以äžã«ããããã¡ã€ã«ãexamples
以äžã«å©çšäŸã®ãœãŒã¹ã³ãŒããå«ãŸããŸããå©çšäŸã¯ã説æã®ããã®å®è£
ã§ããããããã¯ã·ã§ã³çšã®å®è£
ã«ã¯å¥œé©ã§ã¯ãªãå ŽåããããŸããã©ã€ãã©ãªæ¬äœã¯ãªãªãŒã¹ã«ç§»åããŸããã
ãªãªãŒã¹ ã«åããŒãžã§ã³ã®ã©ã€ãã©ãªãæ ŒçŽãããŠããŸãã1.0.2 ãããœãŒã¹ã¬ããžããªã«ã¯å梱ããªããªããŸããã®ã§ãçæãã ããã
LED ãªã³ã°ã®å¶åŸ¡ã®ããã« libtumbler.so ãå¿ èŠã§ãã https://github.com/FairyDevicesRD/tumbler/tree/master/libtumbler
T-01 å®æ©äžã® Makefile ã examples/
çŽäžã«çšæãããŠããŸãã
$ cd examples
$ make
é©å®ãªãªãŒã¹ã«æ ŒçŽãããŠãã lixmimife.so åã³äžèš libtumbler.so ãšãªã³ã¯ããŠå®è¡ããŠãã ãããããã€ãã®å©çšäŸã¯ sudo
ãå¿
èŠãšããŸãã
libmimixfe 㯠Tumbler ã® 18ch ãã€ã¯ãçŽæ¥å ¥åãšããèšå®ã«åŸã£ãä¿¡å·åŠçæžé³å£°ãåºåããã©ã€ãã©ãªã§ããæãåçŽã«ã¯ãä¿¡å·åŠçãšããŠç¡åŠçã§ããããã®å Žåã¯ã18ch ãã€ã¯ããåæé²é³ããã 18ch é³å£°ããã®ãŸãŸåºåãããŸããå žåçã«ã¯ãä¿¡å·åŠçãšããŠãäŸãã°ããšã³ãŒãã£ã³ã»ã«ãããŒã ãã©ãŒãã³ã°ïŒå€ãã£ã³ãã«ãã€ãºæå¶ïŒãVADïŒçºè©±åºéæœåºïŒãè¡ã£ãé³å£°ãåºåãããŸããããã¯ã€ãŸããTumbler ã®ã¹ããŒã«ãŒããåçãããŠããé³å£°ããã£ã³ã»ã«ãïŒãšã³ãŒãã£ã³ã»ã«ïŒãç¹å®æ¹åã®ã¿ã®é³å£°ãååŸããããšã§ãç®çé³å£°ã匷調ãïŒããŒã ãã©ãŒãã³ã°ïŒã人éã®å£°ã®åºéã®ã¿ãæœåºãããïŒVADïŒãé³å£°ãååŸã§ãããšããããšã«ãªããŸãã
åŠçæžã¿é³å£°ãåºåãããã¿ã€ãã³ã°ã§ããŠãŒã¶ãŒå®çŸ©ã®ã³ãŒã«ããã¯é¢æ°ããåŠçæžã¿é³å£°ãåŒæ°ã«äžããããç¶æ ã§åŒã°ããŸããã³ãŒã«ããã¯é¢æ°ã«ã¯ãŠãŒã¶ãŒå®çŸ©ã®ããŒã¿ãäžããããšãå¯èœã§ãããã®ä»çµã¯ãLinux ç°å¢ã§ã®é²é³ã»åçã«ããçšãããã OSS ã§ãã portaudio ïŒPortable Cross-Platform Audio I/OïŒ ãæäŸããŠãã API ãšåæ§ã®ä»çµã¿ã§ãããã³ãŒã«ããã¯å API ãšåŒã°ããããšããããŸãã以éã®èšè¿°ã§ãããã®åŒç§°ã«åŸããŸãã
libmimixfe ãæäŸããã¯ã©ã¹ã«ã¯ã倧ããïŒã€ã®åé¡ãæããŸãã第äžã«ãé³å£°ä¿¡å·åŠçã®å
容ãèšå®ããããã®åçš®èšå®çšããŒã¿ã¯ã©ã¹ïŒæ§é äœïŒã§ãããåä¿¡å·åŠçæ©èœã«å¯Ÿå¿ããŠãè€æ°ã®èšå®çšããŒã¿ã¯ã©ã¹ããããŸãããããã¯ãXFETypedef.h
ã«å®çŸ©ãããŠããŸãã第äºã«ãé²é³ã»ä¿¡å·åŠçãå®éã«å®è¡ããããã®ã¯ã©ã¹ã§ãXFERecorder
ã¯ã©ã¹ã§ãããã㯠XFERecorder.h
ã«å®çŸ©ãããŠããŸãã
èšå®çšããŒã¿ã¯ã©ã¹ãåŒæ°ã«äžãã XFERecorder
ã¯ã©ã¹ã«ãã£ãŠé²é³ãšä¿¡å·åŠçãè¡ãããšããã®ã libmimixfe ã®åºæ¬çãªå©çšæ¹æ³ã§ããå
·äœçã«ã¯ã以äžã®ãããªæé ãšãªããŸãã
- libmimixfe ã®åçš®èšå®çšããŒã¿ã¯ã©ã¹ãæ§ç¯ããå¿ èŠã«å¿ããŠã¡ã³ããŒå€æ°ãå€æŽãã
- åæé ã§æ§ç¯ããããŒã¿ã¯ã©ã¹ãšããŠãŒã¶ãŒå®çŸ©ã³ãŒã«ããã¯é¢æ°ãåŒæ°ã«äžããŠ
XFERecorder
ã¯ã©ã¹ãã³ã³ã¹ãã©ã¯ããã XFERecorder::start()
é¢æ°ã®åŒã³åºãã«ãã£ãŠãé²é³åã³ä¿¡å·åŠçãéå§ãã- ã¡ã€ã³ã¹ã¬ãããåŸ æ©ããã
- ïŒlibmimixfe ã«ãã£ãŠãé³å£°ãååŸãããéœåºŠãã³ã³ã¹ãã©ã¯ã¿ã§æå®ããããŠãŒã¶ãŒå®çŸ©ã³ãŒã«ããã¯é¢æ°ãåŒã³ãããŸãïŒ
é²é³åã³ä¿¡å·åŠçãå®è¡ããã¯ã©ã¹ã§ããXFERecorder.h
ã§å®çŸ©ãããŠããŸãã
XFERecorder::XFERecorder(
const XFESourceConfig& sourceConfig,
const XFEECConfig& ecConfig,
const XFEVADConfig& vadConfig,
const XFEBeamformerConfig& bfConfig,
const XFELocalizerConfig& locConfig,
const XFEOutputConfig& outConfig,
recorderCallback_t recorderCallback,
void *userdata);
ã³ã³ã¹ãã©ã¯ã¿ã§ã¯ãåçš®èšå®ããŒã¿ã¯ã©ã¹ãåŒæ°ã«åããŸããèšå®ããŒã¿ã¯ã©ã¹ã¯ã³ã³ã¹ãã©ã¯ã¿ã§åæå€ãèšå®ãããŠããã®ã§ãå¿
èŠã«å¿ããŠã¡ã³ããŒå€æ°ãå€æŽããŸãã次ã«ãrecorderCallback_t
åã®ãŠãŒã¶ãŒå®çŸ©ã³ãŒã«ããã¯é¢æ°ãäžããŸãããã®ã³ãŒã«ããã¯é¢æ°ã¯ãlibmimixfe ã«ãã£ãŠãé³å£°ãååŸãããä»»æã®ã¿ã€ãã³ã°ã§ã¡ã€ã³ã¹ã¬ãããšã¯ç°ãªãã¹ã¬ããã§åŒã³åºãããŸãïŒã³ãŒã«ããã¯å APIïŒãæåŸã«ãä»»æã®ãŠãŒã¶ãŒå®çŸ©åããŒã¿ãåŒæ°ã«äžããããšãã§ããŸãããã®ããŒã¿ã¯ãã³ãŒã«ããã¯é¢æ°ã«äžããããŸããã³ãŒã«ããã¯é¢æ°ã®å®è£
äŸã¯ããµã³ãã«ããã°ã©ã ãåç
§ããŠãã ããã
ãã®ã³ã³ã¹ãã©ã¯ã¿ã§ã¯ãæšæºäŸå€ã®ã¿éåºãããå¯èœæ§ããããŸãã
void XFERecorder::start()
ãã®é¢æ°ã«ãã£ãŠãé²é³åã³ä¿¡å·åŠçãéå§ãããŸãããã®é¢æ°ãåŒã³åºããŠãããé²é³ãéå§ããããŸã§ã«ããã€ã¯ãµãã·ã¹ãã ãåæåããã®ã§ãä»»æã®åŸ ã¡æéãçºçããå ŽåããããŸããåŸ ã¡æéã¯å žåçã«ã¯ïŒç§ãæ°ç§ã§ãã
å©çšäŸã¯ããµã³ãã«ããã°ã©ã ãåç §ããŠãã ãããå žåçã«ã¯ããã®é¢æ°ã¯ã¢ããªã±ãŒã·ã§ã³ã®äžã§ãäŸãã°çºè©±åäœããšã«ãäœåãåŒã³åºããããªçšãæ¹ã¯ããŸãããã¢ããªã±ãŒã·ã§ã³ã®åæåæã«äžåºŠã ãåŒã³åºããlibmimixfe ã¯åžžæåäœç¶æ ãšãªãããã«å©çšããŸãã
ãŸã start()
ãããç¶æ
ã§ãstop()
ããã«ãé£ç¶çã«ç¹°ãè¿ã start()
ãåŒã¶ããšã¯ã§ããŸããããã®é¢æ°ã§ã¯ãlibmimixfe ãã XFERecorderError
äŸå€ãéåºãããå¯èœæ§ããããŸãã
int XFERecorder::stop()
ãã®é¢æ°ã«ãã£ãŠãé²é³åã³ä¿¡å·åŠçãçµäºããŸãããã®é¢æ°ãåŒã³åºããŠãããå®éã«å šå éšåŠçãçµäºãããŸã§ã«ã¯ããããã¡ããã©ãã·ã¥ãããããä»»æã®åŸ ã¡æéãçºçããå ŽåããããŸããåŸ ã¡æéã¯å žåçã«ã¯1ç§ãæ°ç§ã§ãã
ãã®é¢æ°ã¯ãXFERecorder
ã¯ã©ã¹ã®ãã¹ãã©ã¯ã¿ã§åŒã³åºãããã®ã§ãå
žåçã«ã¯ããŠãŒã¶ãŒããã°ã©ã åŽããæ瀺çã«åŒã³åºãå¿
èŠã¯ãããŸãããTumbler ã§ã®é²é³ãå®å
šã«åæ¢ãããå ŽåãäŸãã°ããã€ã¯ãã¥ãŒãããŠãŒã¶ãŒããæ瀺ãããå Žåããªã©ã®ã¿ã«å©çšããŸãããã€ã¯ãã¥ãŒãã¯ãåã«ã³ãŒã«ããã¯é¢æ°ã«äžããããé³å£°ããŒã¿ãç¡èŠãããšããæ¹æ³ã«ãã£ãŠãå®çŸããããšãã§ããŸãããé²é³ãã®ãã®ãåæ¢ãããå Žåã«ã¯ stop()
ãåŒã¶ããšã«ãªããŸãã
è¿ãå€ã¯ãçµäºã¹ããŒã¿ã¹ã§ããæ£åžžçµäºã®å Žå 0 ãè¿ãããŸãã
ãã®ã¯ã©ã¹ããã¯ãæšæºäŸå€ã®ã¿éåºãããå¯èœæ§ããããŸãã
void XFERecorder::setLogLevel(int mask)
libmimixfe ãã·ã¹ãã ãã°ã«åºåãããã°ã¬ãã«ã調æŽã§ããŸããmask
ã¯ãã°ãã¹ã¯ã§ãããLOG_UPTO ãã¯ããå©çšããããšã§ç°¡åã«èšå®ããããšãã§ããŸããããã©ã«ãã§ã¯ãINFO ã¬ãã«ä»¥äžã®ãã°ãåºåãããŸããéçºæ®µéã§ã¯ DEBUG ã¬ãã«ä»¥äžã®ãã°ãåºåããŠããããšã奜ãŸããã§ããããå©çšäŸã¯ããµã³ãã«ããã°ã©ã ãåç
§ããŠãã ããã
bool XFERecorder::isActive()
XFERecorder
ã start()
ãããåŸãé²é³åã³ä¿¡å·åŠçãç¶ç¶ãããŠãããã©ãããè¿ããŸããäŸãã°ãã³ã³ã¹ãã©ã¯ãçŽåŸã¯ falseãæ£åžžã« start()
ãå®äºããå Žåã«ã¯ãtrueãstop()
ãããå Žåã«ã¯ false ãè¿ãããŸããstart()
ãããåŸãäœããã®å
éšãšã©ãŒçã«ãã£ãŠé²é³åã³ä¿¡å·åŠçãåæ¢ããå ŽåããããŸãããã®ãããªå Žåã«ã¯ãfalse ãè¿ãããããšã«ãªããŸãã
å
žåçã«ã¯ããŠãŒã¶ãŒããã°ã©ã ã®ã¡ã€ã³ã¹ã¬ãã㧠start()
ãããåŸãã¡ã€ã³ã¹ã¬ããã¯ãisActive()
é¢æ°ãçµäºå€å®æ¡ä»¶ã«ãã while ã«ãŒãã«ãã£ãŠåŸ
æ©ç¶æ
ãšããŸãã以äžã®ãããªåœ¢ãå
žåçã§ãã
while(rec.isActive()){
...
sleep(1); // ããžãŒã«ãŒããåé¿ããŸãã1 ç§ã¯å
žåçã«ã¯åŸ
ã¡éããªã®ã§ãé©åãªå€ãéžæããŸãã
}
int addMonitoringCallback(monitoringCallback_t callback, MonitoringAudioType type, AudioCodec codec, void* userdata)
libmimixfe ã«å¯Ÿã㊠monitoringCallback_t
åã®ãŠãŒã¶ãŒå®çŸ©ã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ãã»ããããããšãã§ããŸããã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ã¯ãlibmimixfe ã«ãã£ãŠä¿¡å·åŠçãããçµæãåºåããã recorderCallback_t
åã®ãŠãŒã¶ãŒå®çŸ©ã³ãŒã«ããã¯é¢æ°ïŒåŸè¿°ïŒãšã¯ç°ãªããlibmimixfe ãé²é³ããé³å£°ãã®ãã®ãè¿ãã³ãŒã«ããã¯é¢æ°ã§ããrecorderCallback_t
åã®ã³ãŒã«ããã¯é¢æ°ã¯ãXFEReorder
ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã®å¿
é åŒæ°ã®ã²ãšã€ã§ãããã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ã¯å¿
é ã§ã¯ãªããããæ¬é¢æ°ãå©çšããŠç»é²ããå Žåã®ã¿æå¹åãããŸããæ¬é¢æ°ã®è¿ãå€ã¯ãã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ã®çªå·ã§ãããç»é²åé€ããéã«å©çšããŸãã
ã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ã¯ãå šåºéã®é³å£°ãã¢ããªã±ãŒã·ã§ã³äžã®èŠè«ã«ãã£ãŠä¿åããŠãããªããã°ãªããªãå Žåãªã©ã«æå¹ã«å©çšã§ããŸããlibmimixfe ã®é³å£°ä¿¡å·åŠçã¯å€ãã®å Žåé©åã«åäœããŸãããç°å¢ãç¶æ³ã«äŸåããŠãææã®é³å£°åºéåãåºããåŸãããªãå ŽåããããŸãããã®ãããªå Žåã«å¯ŸããŠãåŸããã¢ãããŒã·ã§ã³ãä¿®æ£ããéãªã©ã«æå¹ã«å©çšããããšãã§ããŸããã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ã¯ãç°ãªã MonitoringAudioType ãªã©ãæå®ããŠãè€æ°åç»é²ããããšãã§ããŸãããéåžžã®å Žåãè€æ°æå®ããå¿ èŠã¯ãããŸããã
第äžåŒæ°ã«ã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ãæå®ããŸãã第äºåŒæ°ã«ã¯ãåŸè¿°ããã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ã«æž¡ãããé³å£°ã®çš®é¡ãæå®ããŸãã第äžåŒæ°ã«ã¯ãã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ã«æž¡ãããé³å£°ã³ãŒããã¯ãæå®ããŸãã第äºåŒæ°ãšç¬¬äžåŒæ°ã«ã€ããŠã¯ãäž»èŠãªãã®ä»¥å€ã«ã€ããŠã¯ãå ¬éããŒãžã§ã³ã«äŸåããŠå©çšã§ããªããã®ããããŸãã
int delMonitoringCallback(int id)
ç»é²ãããã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ããé¢æ°çªå·ãæå®ããŠåé€ããŸããåé€åŸã¯ãåœè©²ã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ã libmimixfe ããåŒã°ããããšã¯ãããŸããã
void controlLED(bool enable)
libmimixfe ã LED ãªã³ã°ã®å¶åŸ¡ããããã©ãããèšå®ããŸããããã©ã«ã㯠true ã§ãããé³æºæ€åºæã«æ€åºæ¹åãç¹ç¯ãããé³æºæªæ€åºæã«ã¯ãããã©ã«ããã¿ãŒã³ã«ãã LED ã®å³å転ãè¡ãããŸããfalse ãæå®ããå Žåãlibmimixfe 㯠LED ãªã³ã°ã«å¯ŸããŠäžåã®æäœãè¡ããŸããã
é³æºæ€åºæã®å
ãæ¹ãå€ããããšããªã©ã«ãæ¬é¢æ°ãå©çšã㊠libmimixfe ã«ããå
èµ LED å¶åŸ¡ãç¡å¹ã«ããŠãrecorderCallback_t
åã®ãŠãŒã¶ãŒå®çŸ©ã³ãŒã«ããã¯é¢æ°å
ãªã©ã§ãlibtumbler ãå©çšããŠãçŽæ¥ LED ã®ç¹ç¯å¶åŸ¡ãè¡ãããšãã§ããŸãã
bool controlLED() const
libmimixfe ã LED å¶åŸ¡æš©ãä¿æããŠãããã©ãããè¿ããŸãã
void setLEDColor(tumbler::LED foreground, tumbler::LED background)
é³æºæ€åºæã® LED ãªã³ã°ã®ç¹ç¯è²ãåå¥ã«æå®ããŸãã第äžåŒæ°ã® foreground
ã¯é³å£°æ€åºæ¹åã瀺ãããã«ç¹ç¯ãã LED ã®ç¹ç¯è²ã§ãã第äºåŒæ°ã® background
ã¯ããã®ä»ã®å
šæ¹åã® LED ã®ç¹ç¯è²ã§ããtumbler::LED
ã¯ã©ã¹ã«ã€ããŠã¯ libtumbler ã®ããã¥ã¡ã³ããåç
§ããŠãã ãããè²æå®å€ããRGB=(0,0,0)
ã®å Žåãæ¶ç¯ãšåãã§ããããšã«çæããŠãã ããããŸããè€æ°é³æºãåææ€åºãããå Žåã«ã¯ããããã®è€æ°æ¹åãåæã« foreground
è²ã§ç¹ç¯ããããšã«çæããŠãã ãããlibmimixfe ã LED ã®å¶åŸ¡æš©ãä¿æããŠããªãå Žåã¯ãæ¬é¢æ°ã«ããæå®ã¯æå³ãæã¡ãŸããã
void setDefaultFrame(const tumbler::Frame& frame, int direction)
é³æºæªæ€åºæã® LED ãªã³ã°ã®ç¹ç¯ãã¿ãŒã³ãæå®ããŸããé³æºæªæ€åºæã® LED ãªã³ã°ã®ç¹ç¯åäœã¯ãLED ãªã³ã°ã®å
éšç¹ç¯å¶åŸ¡ãçšãããããåçŽãªå転ããããã¯éæ¢ãã¿ãŒã³ããæå®ã§ããŸããããlibmimixfe ã®ããã»ã¹ã®ååšã»äžååšã«é¢ãããç¹ç¯åäœãç¶ç¶ããŸãããã®ããšã¯ãå
éšçã«ã¯ libtumbler ã® LEDRing
ã¯ã©ã¹ã® motion()
é¢æ°ãå©çšããããšã§å®çŸãããŠããŸãã
第äžåŒæ°ã¯ãmotion()
é¢æ°ãšåæ§ã«ãïŒãã¬ãŒã ã®å®çŸ©ãæå®ããŸãã第äºåŒæ°ã¯ãåœè©²ãã¬ãŒã å®çŸ©ãã©ã®ããã«åãããæå®ããŸãã0 ã®å Žåãéæ¢ãšãªããæå®ãããã¬ãŒã å®çŸ©ãåããã«è¡šç€ºããç¶ããŸãã1 ã®å Žåãåœè©²ãã¬ãŒã å®çŸ©ãæèšåãã«å転ããŸãã2 ã®å Žåãååæèšåãã«å転ããŸãã
XFERecorder
ã¯ã©ã¹ã®ã¡ã³ãé¢æ°ããéåºãããå¯èœæ§ã®ãã libmimixfe å®çŸ©äŸå€ã¯ã©ã¹ã§ããæ¬äŸå€ãçºçããå Žåã«ã¯ãã·ã¹ãã ãã°ã« errorstr()
ã®å
容ãèªåçã«èšé²ãããŸãããã®ã¯ã©ã¹ã¯ XFERecorder.h
ã§å®çŸ©ãããŠããŸãã
const int XFERecorderError::errorno()
ãšã©ãŒã³ãŒããè¿ããŸãã
const std::string XFERecorderError::errorstr()
å¯èªãªãšã©ãŒæååãè¿ããŸãããšã©ãŒæååäžã«ã¯ããšã©ãŒã³ãŒããå«ãŸããå ŽåããããŸãã
XFETypdef.h
ã«å®çŸ©ãããèšå®ããŒã¿ã¯ã©ã¹ã§ãlibmimixfe ã§å©çšãããµã³ããªã³ã°ã¬ãŒãããã€ã¯ã®å©çšçšéãªã©ãé²é³èªäœã«é¢ä¿ããéšåïŒãœãŒã¹ïŒã®èšå®ãè¡ããŸãã
å€æ°å | åæå€ | åäœïŒå | 説æ |
---|---|---|---|
samplingrate_ | 16000 | Hz | libmimixfe ã®ä¿¡å·åŠçãã€ãã©ã€ã³ã«å°å ¥ããé³å£°ã®ãµã³ããªã³ã°ã¬ãŒãã16000 ã®ã¿ã®å¯Ÿå¿ãšãªããŸãã |
microphoneUsage_[18] | ããããã¡ã€ã«åç § | MicrophoneUsageå | ãã€ã¯ã®å©çšçšéãã©ã®ãã€ã¯ãé²é³çšãšããã©ã®ãã€ã¯ãåç §çšãšããã©ã®ãã€ã¯ãåã«ç¡èŠãããã®èšå®ãåæå€ã®ã¿ã®å¯Ÿå¿ãšãªããŸãã |
XFETypdef.h
ã«å®çŸ©ãããèšå®ããŒã¿ã¯ã©ã¹ã§ãVADïŒçºè©±åºéæœåºåŠçïŒã®èšå®ãè¡ããŸãããã€ã¯ããé²é³ãããé³å£°ã«ã¯ãåœç¶ãªããã人ã®å£°ãå«ãŸããåºéãšãããã§ã¯ãªãåºéããããŸããäŸãã°ãçºè©±ãšçºè©±ã®éã®ç¡é³ïŒéé³ïŒãå«ãŸãããã人ã®å£°ä»¥å€ã®ãç°å¢éé³çãå«ãŸããŸããVAD ã¯ãVoice Activity Detection/Detector ã®ç¥ã§ãããé³å£°äžã®äººã®å£°ãå«ãŸããåºéãæšå®ããå
¥åé³å£°ããã人ã®å£°ãå«ãŸããåºéã®ã¿ãåãåºãæ©èœã瀺ããŸããlibmimixfe ã«å«ãŸãã VAD ã¯ã·ã³ãã«ãªæ©æ¢°åŠç¿ã«åºã¥ã VAD ã§ãé«éãªåŠçãåºæ¥ãåé¢ããã®æ§èœã¯äžå®çšåºŠã«éãããŸãã
å€æ°å | åæå€ | åäœïŒå | 説æ |
---|---|---|---|
enable_ | true | boolå | VAD ãæå¹ã«ãããã©ãã |
timeToActive_ | 80 | ããªç§ | VAD ã«ãã£ãŠãçºè©±éå§ã§ãããšå€å®ãããæçã®é·ãããããçãæ¹ããããæéã«çºè©±éå§å€å®ãåŸãããããçããããšãŽããæŸãå Žåãããã |
timeToInactive_ | 800 | ããªç§ | VAD ã«ãã£ãŠãçºè©±çµäºã§ãããšå€å®ãããæçã®é·ãããããçãæ¹ããããæéã«çºè©±çµäºå€å®ãåŸãããããçããããšçºè©±éäžã§åãããå Žåããã |
headPaddingTime_ | 400 | ããªç§ | VAD ãçºè©±æ€åºåºéãåãåºãéã«ãçºè©±æ€åºåºéã®åæ¹ã«äžããããŒãžã³ããããé·ãæ¹ã誀å€å®ã«å¯ŸããŠããã¹ãã«ãªãããç¡é§ãªéçºè©±åºéããµãŒããŒã«éãããšã«ãªãããã®äºèªäœã¯ããµãŒããŒåŽã«æªåœ±é¿ãäžããªãããåŸé課éã®å Žåã³ã¹ããã¡ãªããããã |
tailPaddingTime_ | 400 | ããªç§ | VAD ãçºè©±æ€åºåºéãåãåºãéã«ãçºè©±æ€åºåºéã®åŸæ¹ã«äžããããŒãžã³ããããé·ãæ¹ã誀å€å®ã«å¯ŸããŠããã¹ãã«ãªãããç¡é§ãªéçºè©±åºéããµãŒããŒã«éãããšã«ãªãããã®äºèªäœã¯ããµãŒããŒåŽã«æªåœ±é¿ãäžããªãããåŸé課éã®å Žåã³ã¹ããã¡ãªããããã |
rmsDbfs_ | -96 | dbFS | VAD ã«ããçºè©±å€å®ãè¡ãããã«å¿ èŠãªæäœé³é[dbFS] |
XFEVadConfig ã¯ã©ã¹ã®äžè¡šã®èšå®å€ã¯ãå šãŠ 10 msec 以äžã§ããå¿ èŠããããŸãããã€ãtailPaddingTime_ 㯠timeToInactive_ 以äžã§ããå¿ èŠããããŸãïŒtailPaddingTime_ <= timeToInactiveïŒãäžè¿°ã®éããtimeToInactive ã¯ãçºè©±çµäºã§ãããšå€å®ãããé·ãã§ãããtailPaddingTime_ ã¯ãçºè©±çµäºæç¹ããåŸæ¹ã«äžããããããŒãžã³ã§ããtailPaddingTime_ ã timeToInactive_ ããé·ããšããããšã¯ããªãã¡ãçºè©±çµäºãšå€å®ããããã¬ãŒã ãããåãåºãããé·ããé·ããšããããšã«ãªããããã¯æ¬¡ã®çºè©±ããçŸåšã®çºè©±ã®åºååºéã«æ··ããå¯èœæ§ãããããã«èªããããŸããã
XFETypdef.h
ã«å®çŸ©ãããèšå®ããŒã¿ã¯ã©ã¹ã§ããšã³ãŒãã£ã³ã»ã«ã®èšå®ãè¡ããŸããTumbler ã®ã¹ããŒã«ãŒããé³å£°ãåºåãããŠããç¶æ³ã§é²é³ãè¡ã£ãå Žåãé²é³ãããé³å£°ã«ã¯ãTumbler ã®ã¹ããŒã«ãŒããåºåãããŠããé³å£°ãæ··ãããŸããTumbler ã®ã¹ããŒã«ãŒãšãã€ã¯ã®è·é¢ã¯ãTumbler ã®ãã€ã¯ãšçºè©±è
ã®è·é¢ããããã£ãšè¿ãã®ã§ãé²é³ãããé³å£°ãèããŠã¿ããšãçºè©±è
ã®å£°ããããã£ãšå€§ããªé³éã§ãTumbler ã®ã¹ããŒã«ãŒããåºãŠããé³ãèšé²ãããŠããŸããŸãããã®ç¶æ³ã§ã¯ãæ£ããé³å£°èªèãè¡ãããšã¯ã§ããŸããããã®ãããããã€ãã®é³å£°èªèã·ã¹ãã ã§ã¯ãã·ã¹ãã ãçºè©±çããŠããéã«ã¯ããã€ã¯ããªãã«ãããšãã察å¿ãåãããå ŽåããããŸããã€ãŸããã·ã¹ãã çºè©±ãé®ã£ãŠããŠãŒã¶ãŒãçºè©±ããããšãã§ããªãå ŽåããããŸãã
libmimixfe ã«å«ãŸãããšã³ãŒãã£ã³ã»ã«ïŒEcho Cancellation; ECïŒæ©èœãšã¯ãTumbler ã®ã¹ããŒã«ãŒããåçãããŠããé³å£°ããé²é³ããŒã¿ããæ¶ãããã®æ©èœã§ããããã§ãæ¶ãããšèšã£ãå ŽåãïŒã€ã®ãæ¶ããããããŸããã²ãšã€ã¯ãããã£ã³ã»ã«ããšåŒã°ããåŠçã§ãããã¯ãé²é³é³å£°ã«äœèšãªæªã¿ãäžããã«ãæ¶ãããé³å£°ã ããæ¶ããšããæå³ã«äœ¿ãããŸããããã²ãšã€ã¯ããµãã¬ãã·ã§ã³ïŒæå¶ïŒæå§ïŒããšåŒã°ããåŠçã§ãããã¯ãããã£ã³ã»ã«ãã®åŸã«çµã¿åãããŠäœ¿ããããã®ã§ãé²é³é³å£°ã«è¥å¹²ã®äœèšãªæªã¿ãäžããŠããŸãããããã£ã³ã»ã«ãã§ã¯æ¶ããããªãã£ãæ®çæåããããã«å°ããããããšããæå³ã§äœ¿ãããŸããlibmimixfe ã«å«ãŸãã EC æ©èœã¯ããã®ïŒã€ã®ãæ¶ãããåããŠããŸãïŒEC/AESïŒ
ããã£ã³ã»ã«ãã¯äžè¬ã«ãåŸæ®µåŠçã«å¯ŸããŠè¯ã圱é¿ããæã¡ãŸããããããµãã¬ãã·ã§ã³ãã¯å¯äœçšãšããŠé³å£°æªã¿ãäžããŠããŸãããšãããåŸæ®µåŠçã«å¯ŸããŠãè¯ã圱é¿ãšæªã圱é¿ã®äž¡é¢ãæã¡ãŸãããªãŒããŒãªãŒã«ã§è¯ããªããæªããªããã¯ã±ãŒã¹ãã€ã±ãŒã¹ã§ãã£ãŠãããµãã¬ãã·ã§ã³ãã«ãã£ãŠã人éã®èŽæäžã¯ããããããã«èããããšããŠããé³å£°æªã¿ã®åœ±é¿ã«ãããåŸæ®µã®æ©æ¢°åŠçã«ã¯æªåœ±é¿ãäžãããšãã£ããäœæçã«ççŸããçµæãšãªãããšãå žåçã«ãããŸãã®ã§ãçæãå¿ èŠã§ãã
EC æ©èœã«ãã£ãŠãTumbler ãé³å£°å¿çãè¿ããŠãããšãã«ããŠãŒã¶ãŒã®å²ã蟌ã¿çºè©±ãåãä»ããããšãã§ããããã«ãªããŸãããŸããTumbler ãé³æ¥œãåçããŠãããšãã«ãé³å£°å ¥åãåãä»ããããšãã§ããŸãããã ãã倧é³éã«ãããŠã¯ãEC æ©èœããã£ãŠããŠããã¹ããŒã«ãŒåçé³ãæ¶ããããªãå Žåãããããçæãå¿ èŠãšãªããŸãã
å€æ°å | åæå€ | åäœïŒå | 説æ |
---|---|---|---|
enable_ | true | boolå | EC ãæå¹ã«ãããã©ãã |
pref_ | Preference::Fast | XFEECConfig::Preferenceå | EC ã®é床ïŒç²ŸåºŠãã©ã³ã¹ã®èª¿æŽ |
aesEnable_ | false | boolå | ãšã³ãŒãµãã¬ãã·ã§ã³ïŒAESïŒãæå¹ã«ãããã©ããã AES ã¯äžè¿°ã®ããã«è¯ã圱é¿ãšæªã圱é¿ã®äž¡æ¹ãæã€ã®ã§çæãå¿ èŠ |
aesRatio_ | 1.0 | floatå | AES ã®åŒ·ãã1.0 ã®å ŽåãAES ãæ倧ã®åŒ·ãã§å®è¡ãã0.0 ã®å ŽåãAES ãè¡ããªãå ŽåãšåçãšãªããAES ã®å¹æïŒèªå·±é³ããã匷ãæ¶ãïŒãšå¯äœçšïŒæ¶ããé³ãæªãïŒã®ãã©ã³ã¹ã調æŽããããã«çšããããšãã§ããŸãããåŸæ®µã§é³å£°èªèåšã«å°å ¥ããå Žåã¯ãAES ã¯çµæçã«äžèŠãšãªãå Žåãå€ãããã |
EC ã®é床ïŒç²ŸåºŠãã©ã³ã¹ã調æŽããããã«å©çšãããåæåã§ããEC 㯠libmimixfe ã«å«ãŸããå皮信å·åŠçæ©èœã®äžã§ã¯ãæ¯èŒçèšç®éã®å€§ããéãåŠçã§ãããããé床ïŒç²ŸåºŠãã©ã³ã¹ãåãããã®èª¿æŽæ©èœãçšæãããŠããŸãã
å€ | 説æ |
---|---|
Accurate | æé«ç²ŸåºŠã ãåŠçãé ãïŒãªã¢ã«ã¿ã€ã åŠçãã§ããªããããªãã¡ RTF > 1.0 ãšãªãïŒ |
Balanced | é床粟床ãã©ã³ã¹ãåã£ã調æŽïŒãªã¢ã«ã¿ã€ã åŠçãã§ãããããªãã¡ RTF < 1.0 ãšãªãïŒ |
Fast | æé«é床ã ããåŸæ®µã®èªèåšã«è¥å¹²ã®æªåœ±é¿ãäžããå¯èœæ§ããã調æŽïŒãªã¢ã«ã¿ã€ã åŠçãã§ããïŒ |
ããã©ã«ãå€ã¯ Fast ã§ããã·ã¹ãã çºè©±äžã«ããŠãŒã¶ãŒçºè©±ãæ€åºãããå Žåãã·ã¹ãã çºè©±ããã®ãŸãŸã®é³éã§åçãç¶ããã®ã§ã¯ãªããé³éãäžããããã·ã¹ãã çºè©±ãæ¢ããããäœããã®åå¿ãåãããšã VUI ã®èšèšãšããŠå¥œé©ã§ããã·ã¹ãã çºè©±ãåæ¢ããå Žåã¯ãEC ã¯èªåçã«ç¡å¹ã«ãªããŸããã·ã¹ãã çºè©±ã®é³éãäžãã£ãå Žåã¯ãäžèšã®èª¿æŽã®å·®ã«ãããæ§èœã®å·®ã¯çžå¯Ÿçã«å°ãããªããŸãã
XFETypdef.h
ã«å®çŸ©ãããèšå®ããŒã¿ã¯ã©ã¹ã§ãããŒã ãã©ãŒããŒã®èšå®ãè¡ããŸããTumbler 㯠16 åã®ãã€ã¯ãåããŠããŸããæ倧 16 åã®ãã€ã¯ãåæã«å©çšããããšã§ãç®çãšããé³å£°ã匷調ããããšãã§ããããã«ãªããŸããç®çä¿¡å·ã匷調ãããšããããšã¯ãããªãã¡ãéç®çä¿¡å·ãæå¶ãããšããããšã§ããã®ã§ãå€ãã£ã³ãã«ãã€ãºæå¶ãšåŒã°ããå ŽåããããŸãããåãæŠå¿µã§ãã
libmimixfe ã§ã¯ãå€ãã£ã³ãã«é³å£°ä¿¡å·ãå©çšããç®çé³å£°ä¿¡å·åŒ·èª¿ã®ããã«ãããŒã ãã©ãŒãã³ã°ïŒBeamforming; BFïŒãšããææ³ãçšããŠããŸããããã¯ãç¹å®æ¹åã®é³å£°ã®ã¿ãéé³ããããšãã§ããææ³ã§ããTumbler ã§ã¯ã8 åã®ãã€ã¯ãæèŒãããã€ã¯åºæ¿ãäºæ®µéããšãªã£ãŠãããããéé³ãããæ¹åãäžæ¬¡å çã«æå®ããããšãã§ããŸããæ¹åã®æå®ã¯ãå¥ã®èšå®ããŒã¿ã¯ã©ã¹ã§è¡ããŸããæ¬ã¯ã©ã¹ã§ã¯ãããŒã ãã©ãŒãã³ã°åŠçèªäœã®èª¿æŽãè¡ãããšãã§ããŸãã
ããŒã ãã©ãŒãã³ã°ã«ãã£ãŠãå€ãã£ã³ãã«é³å£°ããŸãšããããïŒç®çä¿¡å·ã匷調ãããïŒ 1ch é³å£°ïŒã¢ãã©ã«é³å£°ïŒãåºåãããããšã«æ³šæããŠãã ããããŸããå¥ã®èšå®ããŒã¿ã¯ã©ã¹ã®æå®ã«äŸåããŸãããåæã«æ€åºããé³æºæ°ãè€æ°åã§ãããšæå®ãããå Žåãã²ãšã€ã®é³æºæ¯ã«ã¢ãã©ã«é³å£°ãåºåãããããšãããlibmimixfe èªäœã®åºåãšããŠã¯ããããã®å€ãã£ã³ãã«ä¿¡å·åºåãšãªãããšã«çæããŠãã ãããäŸãã°ãåææ€åºããæ倧é³æºæ°ãïŒé³æºãšæå®ãããå Žåã§ãïŒé³æºãåæã«é³å£°ãåºããŠããå Žåãã€ãŸãäŸãã°ãåãåã£ãïŒäººã®çºè©±è ãåæã«çºè©±ããŠããå Žåãã«ã¯ãããããã®é³æºã«å¯ŸããŠããŒã ãã©ãŒãã³ã°ãåæã«å®è¡ããã2ch ã®åºåãšãªããŸããïŒé³æºã®çæ¹ã ããé³ãåºããŠããå Žåãã€ãŸããäŸãã°ãåãåã£ãïŒäººã®ãã¡ãçæ¹ã®äººã ããçºè©±ããŠãããããªå Žåãæ倧é³æºæ°ã¯ïŒé³æºã§ãããšæå®ãããŠããŠããåºåã¯ïŒé³æºãšãªããŸããã€ãŸããããŒã ãã©ãŒãã³ã°åŠçã®å ¥åãã£ãã«æ°ãšåºåãã£ãã«æ°ã¯ç°ãªãå Žåãå€ããšããããšã«çæããŠãã ããã
ããŒã ãã©ãŒãã³ã°åŠçã«ã¯ããã¹ããã£ã«ã¿ãŒåŠçãšåŒã°ãããè¿œå çãªãã€ãºæå¶ã®ä»çµã¿ãåããããŠããŸããããã¯ãEC æ©èœã® AES æ©èœãšåæ§ã§ãè¿œå çãªãã€ãºæå¶ãè¡ãããšãã§ããããå¯äœçšãšããŠãé³å£°æªã¿ãäžããŸããAES ãšæ¯èŒããå¯äœçšã®åºŠåãã¯äœããããããã©ã«ãã§ã¯ true ãšãªã£ãŠããŸãã
å€æ°å | åæå€ | åäœïŒå | 説æ |
---|---|---|---|
enable_ | true | boolå | ããŒã ãã©ãŒããŒãæå¹ã«ãããã©ãã |
type_ | type::MVDR_v2 | XFEBeamformerConfig::typeå | ããŒã ãã©ãŒãã³ã°ã®å éšåŠçã®çš®é¡ãå éšåŠç詳现ã¯äžè¬ã«ã¯é瀺ãããŠããŸããã |
sensitibity_ | 1.0 | floatå | - |
postfilter_enable_ | true | boolå | ãã¹ããã£ã«ã¿ãŒåŠçå®è¡ã®æç¡ãè¿œå çãªé³å£°åŒ·èª¿ãã§ããããåºåé³å£°ã«è¥å¹²ã®é³è³ªå£åãäžããå¯äœçšãããã |
XFETypedef.h
ã«å®çŸ©ãããèšå®ããŒã¿ã¯ã©ã¹ã§ãããŒã ãã©ãŒããŒãšåãããŠçšããããéé³ãããæ¹åãªã©ã®èšå®ãè¡ãããã®åºåºã¯ã©ã¹ã§ãããã®ã¯ã©ã¹ããã®ãŸãŸå©çšããããšã¯ã§ãããäžèšã®åã¯ã©ã¹ãå©çšãã圢ã«ãªããŸãã
å€æ°å | åæå€ | åäœïŒå | 説æ |
---|---|---|---|
enable_ | true | bool | é³æºå®äœã¢ãžã¥ãŒã«ãæå¹ã«ãããã©ãã |
maxSimultaneousSpeakers_ | 1 | int | åæã«å®äœããæ倧é³æºæ°ãæå®æ°ã«å¶éã¯ãããŸããããå®çšçã«ã¯ç¶æ³ã«äŸåã 1 ã 4 çšåºŠãšãªããŸãã |
sourceDetectionSensitibity_ | 0.4 | float | è€æ°é³æºãåæå®äœããå Žåã«ãé³æºãè€æ°åæ€åºãããæ床ãæå®ããŸãã0 ã®å Žåã«æãé³æºæ€åºæ床ãäœãã1.0 ã®å Žåã«æãé³æºæ€åºæ床ãé«ããªããŸããé³æºæ€åºæ床ãé«ããããšãå®éã«ã¯ååšããªãåœé³æºãæ€åºãããŠããŸãå ŽåããããŸããT-01 ã®æ¯èŒçè¿åã§çºè©±ãããå Žåã«ã¯ãé³æºæ€åºæ床ãäœããT-01 ã®æ¯èŒçé æ¹ã§çºè©±ãããå Žåã«ã¯ãé«ãã«èšå®ããŠãããšæå¹ã§ããå ŽåããããŸãã |
area_ | SearchArea::planar | SearchArea å | é³æºãå®äœããç¯å²ãplanar ã®å Žåã¯å¹³é¢ãsphere ã®å Žåã¯çé¢ãäžè¬çãªå©çšæ¹æ³ã«ãããŠã¯å¹³é¢ãæšå¥šããŸãã |
identitalRange_ | 20 | int | é³æºå®äœçµæã®èª€å·®ã®åžåå¹ ãèšå®ããŸããåºå®æ¹åèšå®ã®å Žåã¯ãèšå®æ¹åã«å¯ŸããŠèš±å®¹ããå®äœã®åå€å¹ ã瀺ããŸããåçå®äœã®å Žåã§è€æ°é³æºãåæå®äœããå Žåã¯ãèšå®è§åºŠä»¥äžãåäžé³æºãèŠåããŠåŠçãè¡ããŸããé³æºå®äœçµæ㯠1 床åäœã§åºåãããŸãããå®éã¯èª€å·®ãå«ãŸããŸãããããã®èª€å·®ãåžåããŠãæŠãåãæ¹åããã®é³å£°ãã²ãšã€ã®é³æºãšã¿ãªãããã®èšå®ã§ãã |
XFETypedef.h
ã«å®çŸ©ãããèšå®ããŒã¿ã¯ã©ã¹ã§ãããŒã ãã©ãŒããŒãšçµã¿åãããŠçšããããéé³ãããæ¹åãªã©ã®èšå®ãè¡ããŸããäžè¿°ããããŒã ãã©ãŒããŒã¯ãç¹å®æ¹åã®é³å£°ã®ã¿ãéé³ããããšãã§ããç®çé³å£°åŒ·èª¿ææ³ã§ããããã®èšå®ã¯ã©ã¹ã¯ãããŒã ãã©ãŒããŒãšçµã¿åãããŠçšããŠãç®çæ¹åãæå®ããããã«å©çšãããèšå®ã¯ã©ã¹ã§ãããã®ã¯ã©ã¹ã¯ XFETypedef.h
ã«å®çŸ©ãããŠããããã«ãçŽç²ä»®æ³ã¯ã©ã¹ã§ãã XFELocalizerConfig
ã®æŽŸçã¯ã©ã¹ã§ããXFELocalizerConfig
ã¯ã©ã¹ã¯ãç®çæ¹åã®æå®ãåææ€åºé³æºæ°ã®æå®ã«é¢ä¿ããå
±éçãªèŠçŽ ãæã€èŠªã¯ã©ã¹ã§ããããã®ã¯ã©ã¹ä»¥å€ã«ãããã€ãã®æŽŸçã¯ã©ã¹ãæã£ãŠããŸãã®ã§ãç®çã«å¿ããŠãæé©ãªæŽŸçã¯ã©ã¹ãå©çšããŠãã ããã
掟çã¯ã©ã¹ã®ãã¡ããã®èšå®ããŒã¿ã¯ã©ã¹ã¯ãããŒã ãã©ãŒããŒã®éé³ããæ¹åïŒãç®çæ¹åããšåŒã³ãŸãïŒããäºåã«åºå®ããéã«å©çšããŸããç®çæ¹åãè€æ°æ¹åæå®ããããšãã§ããŸããç®çæ¹å以å€ã®æ¹åããå°æ¥ããé³å£°ã¯ç¡èŠãããŸãã
äŸãã°ãèªååä»ã·ã¹ãã ãªã©ã§ã®å¿çšã§ãçºè©±è ã Tumbler ã®æ£é¢ã«ãããšåæã§ããå Žåã«ã¯ãæ£é¢æ¹åã«ç®çæ¹åãäºååºå®ããŠããããšã§ãæ£é¢æ¹å以å€ããå°æ¥ããé³å£°ã¯ç¡èŠããããšåæã«ãæ£é¢æ¹åããæ¥ãé³å£°ã¯åŒ·èª¿ãããŠåºåãããŸãã ä»ã®äŸã§ã¯ãéè¡çªå£ãªã©æ人ã®å¯Ÿé¢ã«ãŠã³ã¿ãŒã§ã®å©çšãªã©ã§ãTumbler ãæãäœçœ®ã«åããåã£ãïŒäººã®çºè©±è ãããå Žåã¯ãTumbler ã®çæ£é¢ãšçåŸãã«ç®çæ¹åãäºååºå®ããŠããããšãæå¹ã§ããå ŽåããããŸããããã«ãããé£ã®ã«ãŠã³ã¿ãŒããæŒããŠãã声ã«ã¯åå¿ããªãããã«ããããšãã§ããŸãã
å€æ°å | åæå€ | åäœïŒå | 説æ |
---|---|---|---|
targetDirections_ | ãªã | std::vector | Directionåå€æ°ã®ãã¯ã¿ã«ãã£ãŠïŒã€ä»¥äžã®ç®çæ¹åãæå®ããŸããæ¬ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã§æå®ããããšãã§ããŸãã |
掟çã¯ã©ã¹ã®ãã¡ããã®èšå®ããŒã¿ã¯ã©ã¹ã¯ãããŒã ãã©ãŒããŒã®ç®çæ¹åãé³æºæ¹åã«åããéã«å©çšããŸãã
v1.0 ããè¿œå ããã recorderCallback ã®åŒã³åºããæ¹ãå¶åŸ¡ããèšå®ããŒã¿ã¯ã©ã¹ãããã©ã«ãã®ãŸãŸå©çšããããšãæšå¥šãããŸããoutputType ã« allFrames ãæå®ããå Žåãé³å£°åºåããªãå Žåãã³ãŒã«ããã¯é¢æ°ãåŒã°ããŸããããã¯ãéçºæãªã©ã«ãå šæéã«æž¡ãã¹ããªãŒã æ å ±ã確èªãããå Žåã«æçšã§ãã
XFETypedef.h
ã«å®çŸ©ãããã¯ã©ã¹ã§ãrecorderCallback_t
åã®ãŠãŒã¶ãŒå®çŸ©ã³ãŒã«ããã¯é¢æ°ã§ libmimixfe ããäžããããé³å£°è§£ææ
å ±ãå«ãããŒã¿ã¯ã©ã¹ã§ãããã®è§£ææ
å ±ã¯ã10 ããªç§ããšã®è§£æçµæãšãªããŸãã解æçµæã®æå¹æŽ»çšæ¹æ³ã«ã€ããŠã¯ãæ¬ããã¥ã¡ã³ãã§ã¯çç¥ããŸãã
å€æ°å | åäœïŒå | 説æ |
---|---|---|
milliseconds_ | ããªç§ | libmimixfe ãé²é³ãéå§ããŠããã®çµéæéãé²é³éå§æå»ã 0 ãšãããšãã«ãååŸãããé³å£°ãããã¡ã®é²é³æå»ã«çžåœã |
direction_ | Directionå | ãã® 10 ããªç§ãã¬ãŒã ã§æå¹ãªé³æºãæ€åºãããå Žåããã®æšå®æ¹åãããŒã ãã©ãŒããŒãç¡å¹ã®å Žåæªå®çŸ© |
utteranceDirection_ | Directionå | çºè©±åäœã§ã®æšå®æ¹åãããŒã ãã©ãŒããŒãç¡å¹ã®å Žåæªå®çŸ© |
speechProbability_ | [0,1.0] | ãã® 10 ããªç§ãã¬ãŒã å šäœã§ã®çºè©±ååšç¢ºçãVAD ãç¡å¹ã®å Žåæªå®çŸ© |
rmsDbfs_ | dbFS | å¹³åé³é |
numSoundSources_ | åæ° | ãã® 10 ããªç§ãã¬ãŒã ã§ãå®éã«æœåºãããåæçºçé³æºæ°ããŠãŒã¶ãŒå®çŸ©ã³ãŒã«ããã¯é¢æ°ãç°ãªãé³æºçªå·ã§åŒã³åºããã |
totalNumSoundSources_ | åæ° | ãã® 10 ããªç§ãã¬ãŒã ã§ã®æšå®åæçºçé³æºæ°ã |
spatialSpectralPeak | dbFS | 空éã¹ãã¯ãã«å€ |
spatialSpectrum | dbFS | å¹³å空éã¹ãã¯ãã« |
äžæ¬¡å
ã§ã®æ¹åãã¯ãã«ãè¡šãã¯ã©ã¹ã§ãæ¹äœè§ïŒazimuth_
ïŒãšè¿ãè§ïŒangle_
ïŒãæå®ããããšã§ãã²ãšã€ã®æ¹åãã¯ãã«ãå®ããŸããazimuth_
ã¯æ£é¢æ¹åã 270 床ãangle_
ã¯æ°Žå¹³é¢ã 90 床ã«ãªãããšã«çæããŠãã ããããã®è©³çŽ°ã«ã€ããŠã¯ããã€ã¯äœçœ®æ
å ±ãåç
§ããŠãã ãããåäœã¯åºŠïŒdegreeïŒã§ãã
Tumbler èšçœ®æ°Žå¹³é¢äžã§ã®æ圢ãè¡šãã¯ã©ã¹ã§ãæ¹äœè§ïŒazimuth_
ïŒæå®ãããæ圢ã®ååŸããåæèšåšãã«äžå¿è§ïŒrange_
ïŒåºŠã®ç¯å²ã瀺ããŸãã
VAD ãæå¹ã®å Žåã«ãã³ãŒã«ããã¯é¢æ°ã«äžãããã VAD ã®çºè©±æ€åºç¶æ ã瀺ãåæåã§ãã
å€ | 説æ |
---|---|
SpeechStart | çºè©±ãéå§ãããããšã瀺ãã¹ããŒããçºè©±éå§æç¹ã§ïŒåã®ã¿åºåãããã |
InSpeech | çºè©±äžã§ããããšã瀺ãã¹ããŒããè€æ°ååºåãããã |
SpeechEnd | çºè©±ãçµäºããããšã瀺ãã¹ããŒããçºè©±çµäºæç¹ã§ïŒåã®ã¿åºåãããã |
NonSpeech | çºè©±ãæ€åºãããŠããªãããšã瀺ãã¹ããŒããVAD æå¹èšå®ã®å Žåãçºè©±ãæ€åºãããŠããªããã°ã³ãŒã«ããã¯é¢æ°ã¯ããããåŒã³åºãããªãããã³ãŒã«ããã¯é¢æ°äžã§èŠ³æž¬ãããããšã¯ãªãã |
Tumbler T-01 ãæèŒããŠãã 16 åã®ãã€ã¯ 1ch ã®ã¹ããŒã«ãŒãã£ãŒãããã¯ä¿¡å·åã³ 1ch ã®å€éšå ¥åä¿¡å·ãåèš 18ch ã«å¯ŸããŠããããããã©ã®ããã«åãæ±ããã決ããããã®åæåã§ãã
å€ | 説æ |
---|---|
DISCARD | ãã€ã¯å ¥åãå©çšããªã |
INPUT | ãã€ã¯å ¥åãå©çšãã |
REFERENCE | ãã€ã¯å ¥åãåç §é³å£°ä¿¡å·ãšããŠå©çšãã |
é³å£°ã³ãŒããã¯ãæå®ããŸããäžéšæå®ã¯ããŒãžã§ã³ã«äŸåããŠç¡èŠãããå ŽåããããŸãã
å€ | 説æ |
---|---|
RAWPCM | RAW PCM 16bit ç¡å§çž®é³å£° |
FLAC | FLAC å¯éå§çž®é³å£° |
SPEEX | SPEEX äžå¯éå§çž®é³å£° |
ã¢ãã¿ãªã³ã°ã³ãŒã«ããã¯é¢æ°ã«äžããããé³å£°åœ¢åŒãæå®ããããã®åæåã§ããäžéšæå®ã¯ããŒãžã§ã³ã«å¿ããŠæªå®è£ ã§ããå ŽåããããŸãã
å€ | 説æ |
---|---|
S48kC18 | ãµã³ããªã³ã°ã¬ãŒã 48k, 18ch é³å£° |
S48kC1 | ãµã³ããªã³ã°ã¬ãŒã 48k, 1ch é³å£°ïŒ16ch ã 1ch ã«ããã¯ã¹ããŠã³ïŒ |
S16kC18 | ãµã³ããªã³ã°ã¬ãŒã 16k, 18ch é³å£° |
S16kC16EC | ãµã³ããªã³ã°ã¬ãŒã 16k, 16ch, ãšã³ãŒãã£ã³ã»ã«æžé³å£° |
S16kC1EC | ãµã³ããªã³ã°ã¬ãŒã 16k, 1ch, ãšã³ãŒãã£ã³ã»ã«æžé³å£°ïŒ16ch ã 1ch ã«ããã¯ã¹ããŠã³ïŒ |
XFERecorder
ã¯ã©ã¹ã®ã³ã³ã¹ãã©ã¯ã¿ã®åŒæ°ã«äžããããŠãŒã¶ãŒå®çŸ©ã³ãŒã«ããã¯é¢æ°ã§ãããXFETypedef.h
ã§å®çŸ©ãããŠããŸãã
using recorderCallback_t = void (*)(
short* buffer,
size_t buflen,
SpeechState state,
int sourceId,
StreamInfo* info,
size_t infolen,
void* userdata);
第äžåŒæ°ã«ã¯ãlibmimixfe ã®åºåãšããŠãlibmimixfe ãé²é³åã³èšå®ã«åŸã£ãŠä¿¡å·åŠçãããåŠçæžé³å£°ãäžãããããããã¡ã§ãã
第äºåŒæ°ã¯ã第äžåŒæ°ã«äžãããããããã¡ã®é·ãã§ãã
第äžåŒæ°ã¯ãSpeechState
åå€æ°ã§ãVAD ãæå¹ãªå Žåã«ãXFETypedef.h
ã§å®çŸ©ããã VAD ã®å€å®ç¶æ
ãè¿ãããŸããVAD ãç¡å¹ãªå Žåã«ã¯æªå®çŸ©ã§ãã
第ååŒæ°ã¯ãé³æºçªå·ã§ããè€æ°é³æºãåææ€åºãããå Žåãæãå¹³åé³éã®å€§ããªé³æºããé ã« 1,2,... ãšéãçªå·ãæ¯ãããŸãã
第äºåŒæ°ã¯ãStreamInfo
åé
åã§ãXFETypedef.h
ã§å®çŸ©ãããã第äžåŒæ°ã§äžãããããããã¡ã«å«ãŸããé³å£°ã 10 ããªç§ããšã«è§£æããæ
å ±ãè¿ãããŸããèšå®æ¬¡ç¬¬ã§ãå
容ã¯ç°ãªããŸãã
第å åŒæ°ã¯ã第äºåŒæ°ã«äžããããé åã®é·ãã§ãã
第äžåŒæ°ã¯ãXFERecorder
ã®ã³ã³ã¹ãã©ã¯ã¿ã§äžãããããŠãŒã¶ãŒå®çŸ©åããŒã¿ãçŽ éããããŸãã
ãã®é¢æ°å éšã§ãšã©ãŒãçºçããå Žåã«ããããæ瀺çã« libmimixfe ã«éç¥ããæ¹æ³ã¯ãããŸããããã®ãããªéç¥ãå¿ èŠãªå ŽåããŠãŒã¶ãŒå®çŸ©ããŒã¿ãçµç±ããŠãã¡ã€ã³ã¹ã¬ããåŽã§äœããé©åãªåŠçãè¡ãããã«ããŠãã ããã
using monitoringCallback_t = void (*)(
const short* buffer,
size_t buflen,
void* userdata);
第äžåŒæ°ã«ã¯ãlibmimixfe ã®åºåãšããŠãlibmimixfe ãé²é³ããé³å£°ãäžãããããããã¡ã§ãã recorderCallback_t
åã®ã³ãŒã«ããã¯é¢æ°ãšã¯ç°ãªããäžããããé³å£°ã¯ãaddMonitoringCallback()
é¢æ°ã§æå®ããã圢åŒã®ãã€ã¯ã¢ãã¿ãªã³ã°é³å£°ã«éãããŸãã
第äºåŒæ°ã¯ã第äžåŒæ°ã«äžãããããããã¡ã®é·ãã§ãã
第äžåŒæ°ã¯ãaddMonitoringCallback()
é¢æ°ã®æçµåŒæ°ã§æå®ããããŠãŒã¶ãŒå®çŸ©åã§ãã