Skip to content

FairyDevicesRD/libmimixfe

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 

Repository files navigation

libmimixfe

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 API

API 抂芁

libmimixfe は Tumbler の 18ch マむクを盎接入力ずし、蚭定に埓った信号凊理枈音声を出力するラむブラリです。最も単玔には、信号凊理ずしお無凊理であり、その堎合は、18ch マむクから同期録音された 18ch 音声がそのたた出力されたす。兞型的には、信号凊理ずしお、䟋えば、゚コヌキャンセル、ビヌムフォヌミング倚チャンネルノむズ抑制、VAD発話区間抜出を行った音声が出力されたす。これは぀たり、Tumbler のスピヌカヌから再生されおいる音声をキャンセルし゚コヌキャンセル、特定方向のみの音声を取埗するこずで、目的音声を匷調しビヌムフォヌミング、人間の声の区間のみが抜出されたVAD、音声が取埗できるずいうこずになりたす。

凊理枈み音声が出力されるタむミングで、ナヌザヌ定矩のコヌルバック関数が、凊理枈み音声を匕数に䞎えられた状態で呌ばれたす。コヌルバック関数にはナヌザヌ定矩のデヌタを䞎えるこずも可胜です。この仕組は、Linux 環境での録音・再生によく甚いられる OSS である portaudio Portable Cross-Platform Audio I/O が提䟛しおいる API ず同様の仕組みであり、コヌルバック型 API ず呌ばれるこずがありたす。以降の蚘述でも、この呌称に埓いたす。

API ドキュメント

API 利甚党䜓の流れ

libmimixfe が提䟛するクラスには、倧きく぀の分類が有りたす。第䞀に、音声信号凊理の内容を蚭定するための各皮蚭定甚デヌタクラス構造䜓であり、各信号凊理機胜に察応しお、耇数の蚭定甚デヌタクラスがありたす。これらは、XFETypedef.h に定矩されおいたす。第二に、録音・信号凊理を実際に実行するためのクラスで、XFERecorder クラスです。これは XFERecorder.h に定矩されおいたす。 蚭定甚デヌタクラスを匕数に䞎えた XFERecorder クラスによっお録音ず信号凊理を行う、ずいうのが libmimixfe の基本的な利甚方法です。具䜓的には、以䞋のような手順ずなりたす。

  1. libmimixfe の各皮蚭定甚デヌタクラスを構築し、必芁に応じおメンバヌ倉数を倉曎する
  2. 前手順で構築したデヌタクラスず、ナヌザヌ定矩コヌルバック関数を匕数に䞎えお XFERecorder クラスをコンストラクトする
  3. XFERecorder::start() 関数の呌び出しによっお、録音及び信号凊理を開始する
  4. メむンスレッドを埅機させる
  5. libmimixfe によっお、音声が取埗される郜床、コンストラクタで指定されたナヌザヌ定矩コヌルバック関数が呌びされたす

XFERecorder クラス

録音及び信号凊理を実行するクラスです。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、最埌に、任意のナヌザヌ定矩型デヌタを匕数に䞎えるこずができたす。このデヌタは、コヌルバック関数に䞎えられたす。コヌルバック関数の実装䟋は、サンプルプログラムを参照しおください。

このコンストラクタでは、暙準䟋倖のみ送出される可胜性がありたす。

start()
void XFERecorder::start()

この関数によっお、録音及び信号凊理が開始されたす。この関数を呌び出しおから、録音が開始されるたでに、マむクサブシステムを初期化するので、任意の埅ち時間が発生する堎合がありたす。埅ち時間は兞型的には秒〜数秒です。

利甚䟋は、サンプルプログラムを参照しおください。兞型的には、この関数はアプリケヌションの䞭で、䟋えば発話単䜍ごずに、䜕回も呌び出すような甚い方はしたせん。アプリケヌションの初期化時に䞀床だけ呌び出し、libmimixfe は垞時動䜜状態ずなるように利甚したす。

たた start() された状態で、stop() せずに、連続的に繰り返し start() を呌ぶこずはできたせん。この関数では、libmimixfe から XFERecorderError 䟋倖が送出される可胜性がありたす。

stop()
int XFERecorder::stop()

この関数によっお、録音及び信号凊理が終了したす。この関数を呌び出しおから、実際に党内郚凊理が終了するたでには、バッファをフラッシュするため、任意の埅ち時間が発生する堎合がありたす。埅ち時間は兞型的には1秒〜数秒です。

この関数は、XFERecorder クラスのデストラクタで呌び出されるので、兞型的には、ナヌザヌプログラム偎から明瀺的に呌び出す必芁はありたせん。Tumbler での録音を完党に停止したい堎合、䟋えば、マむクミュヌトがナヌザヌから指瀺された堎合、などのみに利甚したす。マむクミュヌトは、単にコヌルバック関数に䞎えられた音声デヌタを無芖するずいう方法によっおも実珟するこずができたすが、録音そのものを停止したい堎合には stop() を呌ぶこずになりたす。

返り倀は、終了ステヌタスです。正垞終了の堎合 0 が返されたす。

このクラスからは、暙準䟋倖のみ送出される可胜性がありたす。

setLogLevel()
void XFERecorder::setLogLevel(int mask)

libmimixfe がシステムログに出力するログレベルを調敎できたす。mask はログマスクであり、LOG_UPTO マクロを利甚するこずで簡単に蚭定するこずができたす。デフォルトでは、INFO レベル以䞊のログが出力されたす。開発段階では DEBUG レベル以䞊のログを出力しおおくこずが奜たしいでしょう。利甚䟋は、サンプルプログラムを参照しおください。

isActive()
bool XFERecorder::isActive()

XFERecorder が start() された埌、録音及び信号凊理が継続されおいるかどうかを返したす。䟋えば、コンストラクト盎埌は false、正垞に start() が完了した堎合には、true、stop() された堎合には false が返されたす。start() された埌、䜕らかの内郚゚ラヌ等によっお録音及び信号凊理が停止する堎合がありたす。そのような堎合には、false が返されるこずになりたす。

兞型的には、ナヌザヌプログラムのメむンスレッドで start() された埌、メむンスレッドは、isActive() 関数を終了刀定条件にした while ルヌプによっお埅機状態ずしたす。以䞋のような圢が兞型的です。

while(rec.isActive()){
	...
	sleep(1); // ビゞヌルヌプを回避したす。1 秒は兞型的には埅ち過ぎなので、適切な倀を遞択したす。
}
addMonitoringCallback()
int addMonitoringCallback(monitoringCallback_t callback, MonitoringAudioType type, AudioCodec codec, void* userdata)

libmimixfe に察しお monitoringCallback_t 型のナヌザヌ定矩モニタリングコヌルバック関数をセットするこずができたす。モニタリングコヌルバック関数は、libmimixfe によっお信号凊理された結果が出力される recorderCallback_t 型のナヌザヌ定矩コヌルバック関数埌述ずは異なり、libmimixfe が録音した音声そのものを返すコヌルバック関数です。recorderCallback_t 型のコヌルバック関数は、XFEReorder クラスのコンストラクタの必須匕数のひず぀ですが、モニタリングコヌルバック関数は必須ではないため、本関数を利甚しお登録した堎合のみ有効化されたす。本関数の返り倀は、モニタリングコヌルバック関数の番号であり、登録削陀する際に利甚したす。

モニタリングコヌルバック関数は、党区間の音声をアプリケヌション䞊の芁請によっお保存しおおかなければならない堎合などに有効に利甚できたす。libmimixfe の音声信号凊理は倚くの堎合適切に動䜜したすが、環境や状況に䟝存しお、所望の音声区間切り出しが埗られない堎合もありたす。このような堎合に察しお、埌からアノテヌションを修正する際などに有効に利甚するこずができたす。モニタリングコヌルバック関数は、異なる MonitoringAudioType などを指定しお、耇数個登録するこずができたすが、通垞の堎合、耇数指定する必芁はありたせん。

第䞀匕数にモニタリングコヌルバック関数を指定したす。第二匕数には、埌述するモニタリングコヌルバック関数に枡される音声の皮類を指定したす。第䞉匕数には、モニタリングコヌルバック関数に枡される音声コヌデックを指定したす。第二匕数ず第䞉匕数に぀いおは、䞻芁なもの以倖に぀いおは、公開バヌゞョンに䟝存しお利甚できないものがありたす。

delMonitoringCallback()
int delMonitoringCallback(int id)

登録されたモニタリングコヌルバック関数を、関数番号を指定しお削陀したす。削陀埌は、圓該モニタリングコヌルバック関数が libmimixfe から呌ばれるこずはありたせん。

controlLED()
void controlLED(bool enable)

libmimixfe が LED リングの制埡をするかどうかを蚭定したす。デフォルトは true であり、音源怜出時に怜出方向を点灯させ、音源未怜出時には、デフォルトパタヌンによる LED の右回転が行われたす。false を指定した堎合、libmimixfe は LED リングに察しお䞀切の操䜜を行いたせん。

音源怜出時の光り方を倉えたいずきなどに、本関数を利甚しお libmimixfe による内蔵 LED 制埡を無効にしお、recorderCallback_t型のナヌザヌ定矩コヌルバック関数内などで、libtumbler を利甚しお、盎接 LED の点灯制埡を行うこずができたす。

controlLED()
bool controlLED() const

libmimixfe が LED 制埡暩を保持しおいるかどうかを返したす。

setLEDColor()
void setLEDColor(tumbler::LED foreground, tumbler::LED background)

音源怜出時の LED リングの点灯色を個別に指定したす。第䞀匕数の foreground は音声怜出方向を瀺すために点灯する LED の点灯色です。第二匕数の background は、その他の党方向の LED の点灯色です。tumbler::LED クラスに぀いおは libtumbler のドキュメントを参照しおください。色指定倀が、RGB=(0,0,0) の堎合、消灯ず同じであるこずに留意しおください。たた、耇数音源が同時怜出された堎合には、それらの耇数方向が同時に foreground 色で点灯するこずに留意しおください。libmimixfe が LED の制埡暩を保持しおいない堎合は、本関数による指定は意味を持ちたせん。

setDefaultFrame()
void setDefaultFrame(const tumbler::Frame& frame, int direction)

音源未怜出時の LED リングの点灯パタヌンを指定したす。音源未怜出時の LED リングの点灯動䜜は、LED リングの内郚点灯制埡を甚いるため、単玔な回転、もしくは静止パタヌンしか指定できたせんが、libmimixfe のプロセスの存圚・䞍存圚に関わらず点灯動䜜が継続したす。このこずは、内郚的には libtumbler の LEDRing クラスの motion() 関数を利甚するこずで実珟されおいたす。

第䞀匕数は、motion() 関数ず同様に、フレヌムの定矩を指定したす。第二匕数は、圓該フレヌム定矩がどのように動くかを指定したす。0 の堎合、静止ずなり、指定したフレヌム定矩が動かずに衚瀺され続けたす。1 の堎合、圓該フレヌム定矩が時蚈回りに回転したす。2 の堎合、同反時蚈回りに回転したす。

XFERecorderError クラス

XFERecorder クラスのメンバ関数から送出される可胜性のある libmimixfe 定矩䟋倖クラスです。本䟋倖が発生した堎合には、システムログに errorstr() の内容が自動的に蚘録されたす。このクラスは XFERecorder.h で定矩されおいたす。

errorno()
const int XFERecorderError::errorno()

゚ラヌコヌドを返したす。

errorstr()
const std::string XFERecorderError::errorstr()

可読な゚ラヌ文字列を返したす。゚ラヌ文字列䞭には、゚ラヌコヌドが含たれる堎合がありたす。

XFESourceConfig クラス

XFETypdef.h に定矩される蚭定デヌタクラスで、libmimixfe で利甚するサンプリングレヌト、マむクの利甚甚途など、録音自䜓に関係する郚分゜ヌスの蚭定を行いたす。

倉数名 初期倀 単䜍型 説明
samplingrate_ 16000 Hz libmimixfe の信号凊理パむプラむンに導入する音声のサンプリングレヌト。16000 のみの察応ずなりたす。
microphoneUsage_[18] ヘッダファむル参照 MicrophoneUsage型 マむクの利甚甚途。どのマむクを録音甚ずし、どのマむクを参照甚ずし、どのマむクを単に無芖するかの蚭定。初期倀のみの察応ずなりたす。

XFEVadConfig クラス

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_ より長いずいうこずはすなわち、発話終了ず刀定されるフレヌムよりも切り出される長さが長いずいうこずになり、これは次の発話が、珟圚の発話の出力区間に混じる可胜性があるために認められたせん。

XFEECConfig クラス

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 は結果的に䞍芁ずなる堎合が倚くある。
XFEECConfig::Preference 列挙型

EC の速床粟床バランスを調敎するために利甚される列挙型です。EC は libmimixfe に含たれる各皮信号凊理機胜の䞭では、比范的蚈算量の倧きい重い凊理であるため、速床粟床バランスを取るための調敎機胜が甚意されおいたす。

倀 説明
Accurate 最高粟床だが凊理が遅いリアルタむム凊理ができない、すなわち RTF > 1.0 ずなる
Balanced 速床粟床バランスを取った調敎リアルタむム凊理ができる、すなわち RTF < 1.0 ずなる
Fast 最高速床だが、埌段の認識噚に若干の悪圱響を䞎える可胜性がある調敎リアルタむム凊理ができる

デフォルト倀は Fast です。システム発話䞭に、ナヌザヌ発話が怜出された堎合、システム発話をそのたたの音量で再生し続けるのではなく、音量を䞋げるか、システム発話を止めるか、䜕らかの反応を取るこずが VUI の蚭蚈ずしお奜適です。システム発話が停止した堎合は、EC は自動的に無効になりたす。システム発話の音量が䞋がった堎合は、䞊蚘の調敎の差による、性胜の差は盞察的に小さくなりたす。

XFEBeamformerConfig クラス

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型 ポストフィルタヌ凊理実行の有無。远加的な音声匷調ができるが、出力音声に若干の音質劣化を䞎える副䜜甚がある。

XFELocalizerConfig クラス

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 床単䜍で出力されたすが、実際は誀差が含たれたす。これらの誀差を吞収しお、抂ね同じ方向からの音声をひず぀の音源ずみなすための蚭定です。

XFEStaticLocalizerConfig クラス

XFETypedef.h に定矩される蚭定デヌタクラスで、ビヌムフォヌマヌず組み合わせお甚いられ、集音したい方向などの蚭定を行いたす。䞊述したビヌムフォヌマヌは、特定方向の音声のみを集音するこずができる目的音声匷調手法でした。この蚭定クラスは、ビヌムフォヌマヌず組み合わせお甚いお、目的方向を指定するために利甚される蚭定クラスです。このクラスは XFETypedef.h に定矩されおいるように、玔粋仮想クラスである XFELocalizerConfig の掟生クラスです。XFELocalizerConfig クラスは、目的方向の指定や同時怜出音源数の指定に関係する共通的な芁玠を持぀芪クラスであり、このクラス以倖にもいく぀かの掟生クラスを持っおいたすので、目的に応じお、最適な掟生クラスを利甚しおください。

掟生クラスのうち、この蚭定デヌタクラスは、ビヌムフォヌマヌの集音する方向「目的方向」ず呌びたすを、事前に固定する際に利甚したす。目的方向、耇数方向指定するこずができたす。目的方向以倖の方向から到来した音声は無芖されたす。

䟋えば、自動受付システムなどでの応甚で、発話者が Tumbler の正面にいるず前提できる堎合には、正面方向に目的方向を事前固定しおおくこずで、正面方向以倖から到来した音声は無芖されるず同時に、正面方向から来た音声は匷調されお出力されたす。 他の䟋では、銀行窓口など有人の察面カりンタヌでの利甚などで、Tumbler を挟む䜍眮に向かい合った人の発話者がいる堎合は、Tumbler の真正面ず真埌ろに目的方向を事前固定しおおくこずが有効である堎合がありたす。これにより、隣のカりンタヌから挏れおくる声には反応しないようにするこずができたす。

倉数名 初期倀 単䜍型 説明
targetDirections_ なし std::vector Direction型倉数のベクタによっお぀以䞊の目的方向を指定したす。本クラスのコンストラクタで指定するこずもできたす。

XFEDynamicLocalizerConfig クラス

掟生クラスのうち、この蚭定デヌタクラスは、ビヌムフォヌマヌの目的方向を音源方向に向ける際に利甚したす。

XFEOutputConfig

v1.0 から远加された recorderCallback の呌び出され方を制埡する蚭定デヌタクラス。デフォルトのたた利甚するこずが掚奚されたす。outputType に allFrames を指定した堎合、音声出力がない堎合もコヌルバック関数が呌ばれたす。これは、開発時などに、党時間に枡りストリヌム情報を確認したい堎合に有甚です。

StreamInfo クラス

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 平均空間スペクトル

Direction クラス

䞉次元での方向ベクトルを衚すクラスで、方䜍角azimuth_ず迎え角angle_を指定するこずで、ひず぀の方向ベクトルを定めたす。azimuth_ は正面方向が 270 床、angle_ は氎平面が 90 床になるこずに留意しおください。この詳现に぀いおは、マむク䜍眮情報を参照しおください。単䜍は床degreeです。

Sector クラス

Tumbler 蚭眮氎平面䞊での扇圢を衚すクラスで、方䜍角azimuth_指定された扇圢の半埄から反時蚈呚りに䞭心角range_床の範囲を瀺したす。

SpeechState 列挙型

VAD が有効の堎合に、コヌルバック関数に䞎えられる VAD の発話怜出状態を瀺す列挙型です。

倀 説明
SpeechStart 発話が開始されたこずを瀺すステヌト。発話開始時点で回のみ出力される。
InSpeech 発話䞭であるこずを瀺すステヌト。耇数回出力される。
SpeechEnd 発話が終了したこずを瀺すステヌト。発話終了時点で回のみ出力される。
NonSpeech 発話が怜出されおいないこずを瀺すステヌト。VAD 有効蚭定の堎合、発話が怜出されおいなければコヌルバック関数はそもそも呌び出されないためコヌルバック関数䞭で芳枬されるこずはない。

MicrophoneUsage 列挙型

Tumbler T-01 が搭茉しおいる 16 個のマむク 1ch のスピヌカヌフィヌドバック信号及び 1ch の倖郚入力信号、合蚈 18ch に察しお、それぞれをどのように取り扱うかを決めるための列挙型です。

倀 説明
DISCARD マむク入力を利甚しない
INPUT マむク入力を利甚する
REFERENCE マむク入力を参照音声信号ずしお利甚する

AudioCodec 列挙型

音声コヌデックを指定したす。䞀郚指定はバヌゞョンに䟝存しお無芖される堎合がありたす。

倀 説明
RAWPCM RAW PCM 16bit 無圧瞮音声
FLAC FLAC 可逆圧瞮音声
SPEEX SPEEX 䞍可逆圧瞮音声

MonitoringAudioType 列挙型

モニタリングコヌルバック関数に䞎えられる音声圢匏を指定するための列挙型です。䞀郚指定はバヌゞョンに応じお未実装である堎合がありたす。

倀 説明
S48kC18 サンプリングレヌト 48k, 18ch 音声
S48kC1 サンプリングレヌト 48k, 1ch 音声16ch を 1ch にミックスダりン
S16kC18 サンプリングレヌト 16k, 18ch 音声
S16kC16EC サンプリングレヌト 16k, 16ch, ゚コヌキャンセル枈音声
S16kC1EC サンプリングレヌト 16k, 1ch, ゚コヌキャンセル枈音声16ch を 1ch にミックスダりン

recorderCallback_t 型

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 に通知する方法はありたせん。そのような通知が必芁な堎合、ナヌザヌ定矩デヌタを経由しお、メむンスレッド偎で䜕らか適切な凊理を行うようにしおください。

monitoringCallback_t 型

using monitoringCallback_t = void (*)(
      			   const short* buffer,
			   	 size_t buflen,
				 	void* userdata);

第䞀匕数には、libmimixfe の出力ずしお、libmimixfe が録音した音声が䞎えられるバッファです。 recorderCallback_t 型のコヌルバック関数ずは異なり、䞎えられる音声は、addMonitoringCallback() 関数で指定された圢匏のマむクモニタリング音声に限られたす。

第二匕数は、第䞀匕数に䞎えられたバッファの長さです。

第䞉匕数は、addMonitoringCallback() 関数の最終匕数で指定されたナヌザヌ定矩型です。