55 < meta name ="viewport " content ="width=device-width,initial-scale=1.0 ">
66 < meta charset ="utf-8 ">
77
8- < script type ="text/javascript " src ="js/joy.min.js "> </ script >
98 < script type ="text/javascript ">
9+ var stackchan_params = null ;
1010 async function set_parameter ( name , val ) {
1111 var value = document . getElementById ( val ) . value ;
1212 var data = { 'cmd' : 'set_param' , 'name' : name , 'value' : value } ;
3535 body : JSON . stringify ( { 'cmd' :'get_parameters' , 'name' : name } )
3636 } ) ;
3737
38- const data = await response . json ( ) ;
39- restore_config ( data ) ;
38+ stackchan_params = await response . json ( ) ;
39+ restore_config ( stackchan_params ) ;
4040 }
4141
4242 function restore_config ( data ) {
43- console . log ( data ) ;
44- document . getElementById ( "motor_type" ) . value = data [ 'motor' ] ;
45- document . getElementById ( "motor_pan" ) . value = data [ 'SG90' ] [ 'pan' ] ;
46- document . getElementById ( "motor_tilt" ) . value = data [ 'SG90' ] [ 'tilt' ] ;
43+ document . getElementById ( "motor" ) . value = data [ 'motor' ] ;
44+ document . getElementById ( "SG90_pan" ) . value = data [ 'SG90' ] [ 'pan' ] ;
45+ document . getElementById ( "SG90_tilt" ) . value = data [ 'SG90' ] [ 'tilt' ] ;
4746
48- document . getElementById ( "asr_type " ) . value = data [ 'asr' ] ;
47+ document . getElementById ( "asr " ) . value = data [ 'asr' ] ;
4948 document . getElementById ( "google_sampleRateHertz" ) . value = data [ 'google' ] [ 'sampleRateHertz' ] ;
5049 document . getElementById ( "vosk_host" ) . value = data [ 'vosk' ] [ 'host' ] ;
5150
52- document . getElementById ( "tts_type " ) . value = data [ 'tts' ] ;
51+ document . getElementById ( "tts " ) . value = data [ 'tts' ] ;
5352 document . getElementById ( "google_lang" ) . value = data [ 'google' ] [ 'lang' ] ;
5453 document . getElementById ( "google_speakingRate" ) . value = data [ 'google' ] [ 'speakingRate' ] ;
5554 document . getElementById ( "google_ssmlGender" ) . value = data [ 'google' ] [ 'ssmlGender' ] ;
6160 document . getElementById ( "voicevox_host" ) . value = data [ 'voicevox' ] [ 'host' ] ;
6261 document . getElementById ( "voicevox_voice_id" ) . value = data [ 'voicevox' ] [ 'voice_id' ] ;
6362
64- document . getElementById ( "dialog_type " ) . value = data [ 'dialog' ] ;
63+ document . getElementById ( "dialog " ) . value = data [ 'dialog' ] ;
6564 document . getElementById ( "gemini_model" ) . value = data [ 'gemini' ] [ 'model' ] ;
6665 document . getElementById ( "gemini_lang" ) . value = data [ 'gemini' ] [ 'lang' ] ;
6766 document . getElementById ( "openai_model" ) . value = data [ 'openai' ] [ 'model' ] ;
6867 document . getElementById ( "prompt" ) . value = data [ 'prompt' ] ;
6968
7069
71- document . getElementById ( "web_port " ) . value = data [ 'web_server' ] ;
72- document . getElementById ( "camera " ) . value = data [ 'camera_setup' ] ;
70+ document . getElementById ( "web_server " ) . value = data [ 'web_server' ] ;
71+ document . getElementById ( "camera_setup " ) . value = data [ 'camera_setup' ] ;
7372 document . getElementById ( "vflip" ) . value = data [ 'vflip' ] ;
7473 }
74+
75+ async function set_parameters ( ) {
76+ var data = { 'cmd' : 'set_parameters' , 'data' : stackchan_params } ;
77+ const res = await fetch ( '/command' , {
78+ method : "POST" ,
79+ body : JSON . stringify ( data ) ,
80+ } ) ;
81+ }
82+
83+
84+ function update_param ( ele , key = null ) {
85+ if ( key == null ) {
86+ key = ele . id . split ( "_" ) ;
87+ }
88+ if ( Array . isArray ( key ) ) {
89+ if ( key . length > 1 ) {
90+ var key1 = key . shift ( ) ;
91+ var key2 = key . join ( "_" ) ;
92+ stackchan_params [ key1 ] [ key2 ] = ele . value ;
93+ } else {
94+ stackchan_params [ key [ 0 ] ] = ele . value ;
95+ }
96+ } else {
97+ stackchan_params [ key ] = ele . value ;
98+ }
99+ ele . style . color = "red" ;
100+ console . log ( stackchan_params ) ;
101+ return ;
102+ }
75103 </ script >
76104 </ head >
77105 < body onload ="get_params('config') ">
78- < h1 > アールティ版< br > スタックチャンの設定</ h1 >
106+ < h1 > アールティ版 スタックチャンの設定</ h1 >
79107 <!-- <button onclick="get_params('config')">Get</button> -->
108+ < button onclick ="set_parameters() "> Update Parameters</ button >
80109 < h2 > モータ</ h2 >
81- < ul >
82- < li > Type: < select id ="motor_type ">
110+ < table >
111+ < tr > < th > モータのタイプ:</ th >
112+ < td colspan ="2 ">
113+ < select id ="motor " onChange ="update_param(this) ">
83114 < option value ="Dynamixel " /> Dynamixel
84115 < option value ="SG90 " /> SG90
85- </ select > </ li >
86- < ul > SG90 options:
87- < li > Pan_port: < input id ="motor_pan " value ="" size ="2 "/> </ li >
88- < li > Tilt_port: < input id ="motor_tilt " value ="" size ="2 "> </ li >
89- </ ul >
90- </ ul >
116+ </ select >
117+ </ td >
118+ </ tr >
119+ < tr >
120+ < td > </ td >
121+ < th > SG90 options:</ th >
122+ < td >
123+ 横方向: < input id ="SG90_pan " value ="" size ="2 " onChange ="update_param(this) "> < br >
124+ 縦方向: < input id ="SG90_tilt " value ="" size ="2 " onChange ="update_param(this) ">
125+ </ td >
126+ </ tr >
127+ </ table >
91128 < hr >
92129 < h2 > 音声認識</ h2 >
93- < ul >
94- < li > Service: < select id ="asr_type ">
130+ < table >
131+ < tr >
132+ < th > 音声認識サーバー: </ th >
133+ < td colspan ="2 "> < select id ="asr " onChange ="update_param(this) ">
95134 < option value ="google " /> Google Speech API
96135 < option value ="vosk " /> Vosk server(local)
97- </ select > </ li >
98- < ul > Google stt:
99- < li > sampleRateHertz: < input id ="google_sampleRateHertz " value ="" /> </ li >
100- </ ul >
101- < ul > Vosk:
102- < li > Host: < input id ="vosk_host " value ="" /> </ li >
103- </ ul >
104- </ ul >
136+ </ select >
137+ </ td >
138+ </ tr >
139+ < tr >
140+ < td > </ td >
141+ < th > Google Speech</ th > < td > </ td >
142+ </ tr >
143+ < tr >
144+ < td > </ td >
145+ < td > sampleRateHertz:</ td > < td > < input id ="google_sampleRateHertz " value ="" onChange ="update_param(this) " /> </ td >
146+ </ tr >
147+ < tr >
148+ < td > </ td >
149+ < th > Vosk:</ th > < td > </ td >
150+ </ tr >
151+ < tr >
152+ < td > </ td >
153+ < td > Host: </ td > < td > < input id ="vosk_host " value ="" onChange ="update_param(this) " /> </ td >
154+ </ tr >
155+ </ table >
105156 < hr >
106157 < h2 > 音声合成</ h2 >
107- < ul >
108- < li > Service: < select id ="tts_type ">
158+ < table >
159+ < tr >
160+ < th > 音声合成サーバー:</ th >
161+ < td colspan ="2 "> < select id ="tts " onChange ="update_param(this) " >
109162 < option value ="google " /> Google Speech API
110163 < option value ="voicevox " /> Voicevox_engine server(local)
111- </ select > </ li >
112-
113- < ul > Google tts:
114- < li > Lang: < input id ="google_lang " value ="" /> </ li >
115- < li > speakingRate: < input id ="google_speakingRate " value ="" /> </ li >
116- < li > ssmlGender: < input id ="google_ssmlGender " value ="" /> </ li >
117- < li > voiceName: < input id ="google_voiceName " value ="" /> </ li >
118- < li > pitch: < input id ="google_pitch " value ="" /> </ li >
119- < li > volumeGain: < input id ="google_volumeGain " value ="" /> </ li >
120- < li > sampleRate: < input id ="google_sampleRate " value ="" /> </ li >
121- < li > effectsProfileId: < input id ="google_effectsProfileId " value ="" /> </ li >
122- </ ul >
123- < ul > Voicevox:
124- < li > Host: < input id ="voicevox_host " value ="" /> </ li >
125- < li > Voice ID: < input id ="voicevox_voice_id " value ="" /> </ li >
126- </ ul >
127- </ ul >
164+ </ select >
165+ </ td >
166+ </ tr >
167+ < tr >
168+ < td > </ td >
169+ < th > Google tts:</ th >
170+ < td > </ td >
171+ </ tr >
172+ < tr >
173+ < td > </ td >
174+ < td > Lang: </ td > < td > < input id ="google_lang " value ="" onChange ="update_param(this) " /> </ td >
175+ </ tr >
176+ < tr >
177+ < td > </ td >
178+ < td > speakingRate: </ td > < td > < input id ="google_speakingRate " value ="" onChange ="update_param(this) " /> </ td >
179+ </ tr >
180+ < tr >
181+ < td > </ td >
182+ < td > ssmlGender: </ td > < td > < input id ="google_ssmlGender " value ="" onChange ="update_param(this) " /> </ td >
183+ </ tr >
184+ < tr >
185+ < td > </ td >
186+ < td > voiceName: </ td > < td > < input id ="google_voiceName " value ="" onChange ="update_param(this) " /> </ td >
187+ </ tr >
188+ < tr >
189+ < td > </ td >
190+ < td > pitch:</ td > < td > < input id ="google_pitch " value ="" onChange ="update_param(this) " /> </ td >
191+ </ tr >
192+ < tr >
193+ < td > </ td >
194+ < td > volumeGain: </ td > < td > < input id ="google_volumeGain " value ="" onChange ="update_param(this) " /> </ td >
195+ </ tr >
196+ < tr >
197+ < td > </ td >
198+ < td > sampleRate: </ td > < td > < input id ="google_sampleRate " value ="" onChange ="update_param(this) " /> </ td >
199+ </ tr >
200+ < tr >
201+ < td > </ td >
202+ < td > effectsProfileId:</ td > < td > < input id ="google_effectsProfileId " value ="" onChange ="update_param(this) " /> </ td >
203+ </ tr >
204+
205+ < tr >
206+ < td > </ td >
207+ < th > Voicevox:</ th > < td > </ td >
208+ </ tr >
209+ < tr >
210+ < td > </ td >
211+ < td > Host:</ td > < td > < input id ="voicevox_host " value ="" onChange ="update_param(this) " /> </ td >
212+ </ tr >
213+ < tr >
214+ < td > </ td >
215+ < td > Voice ID:</ td > < td > < input id ="voicevox_voice_id " value ="" onChange ="update_param(this) " /> </ td >
216+ </ tr >
217+ </ table >
128218 < hr >
129219 < h2 > 音声対話(LLM)</ h2 >
130- < ul >
131- < li > Service: < select id ="dialog_type ">
220+ < table >
221+ < tr >
222+ < th > 音声対話サーバー(LLM)</ th >
223+ < td colspan ="2 "> < select id ="dialog " onChange ="update_param(this) " >
132224 < option value ="gemini " /> Google Gemini
133225 < option value ="openai " /> OpenAI ChatGPT
134- </ select > </ li >
135- < ul > Gemini:
136- < li > Model: < input id ="gemini_model " value ="" /> </ li >
137- < li > Lang: < input id ="gemini_lang " value ="" /> </ li >
138- </ ul >
139- < ul > ChatGPT:
140- < li > Model: < input id ="openai_model " value ="" /> </ li >
141- </ ul >
142- < li > Prompt < textarea id ="prompt " cols ="80 "> </ textarea > </ li >
143- </ ul >
226+ </ select > </ td >
227+ </ tr >
228+ < tr >
229+ < td > </ td >
230+ < th > Gemini:</ th > < td > </ td >
231+ </ tr >
232+ < tr >
233+ < td > </ td >
234+ < td > Model:</ td > < td > < input id ="gemini_model " value ="" onChange ="update_param(this) " /> </ td >
235+ </ tr >
236+ < tr >
237+ < td > </ td >
238+ < td > Lang: </ td > < td > < input id ="gemini_lang " value ="" onChange ="update_param(this) " /> </ td >
239+ </ tr >
240+ < tr >
241+ < td > </ td >
242+ < th > ChatGPT: </ th > < td > </ td >
243+ </ tr >
244+ < tr >
245+ < td > </ td >
246+ < td > Model:</ td > < td > < input id ="openai_model " value ="" onChange ="update_param(this) " /> </ td >
247+ </ tr >
248+ </ table >
249+ < table >
250+ < tr >
251+ < th > Prompt</ th >
252+ < td > < textarea id ="prompt " cols ="80 " onChange ="update_param(this) "> </ textarea > </ td >
253+ </ tr >
254+ </ table >
144255 < hr >
145256 < h2 > Web Server</ h2 >
146- < ul >
147- < li > Port: < input id ="web_port " value ="" size ="8 "> </ li >
148- </ ul >
257+ < table >
258+ < tr >
259+ < th > Port: </ th > < td > < input id ="web_server " value ="" size ="8 " onChange ="update_param(this, 'web_server') "> </ td >
260+ < tr >
261+ </ table >
149262 < hr >
150263 < h2 > Camera</ h2 >
151- < ul >
152- < li > Setup: < select id ="camera ">
264+ < table >
265+ < tr >
266+ < th > 開始時の初期化: </ th >
267+ < td > < select id ="camera_setup " onChange ="update_param(this, 'camera_setup') ">
153268 < option value =true /> Enable
154269 < option value =false /> Disable
155- </ select > </ li >
156- < li > V Flip: < select id ="vflip ">
270+ </ select > </ td >
271+ </ tr >
272+ < tr >
273+ < th > 上下転置: </ th >
274+ < td > < select id ="vflip " onChange ="update_param(this) " >
157275 < option value =true /> Enable
158276 < option value =false /> Disable
159- </ select > </ li >
160- </ ul >
277+ </ select > </ td >
278+ </ tr >
279+ </ table >
161280 < hr >
162281
163282 < a href ="/ "> Back to Top</ a >
164283 </ body >
165- </ html >
284+ </ html >
0 commit comments