Skip to content

Commit af17af4

Browse files
author
bieshan
committed
fix: delete no need code :neckbeard:
add: tricky logic for android chrome :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: test: just test :neckbeard: delete: stop button :neckbeard: fix: button format:neckbeard: fix: onend function :neckbeard: fix: logic :neckbeard: fix: logic :neckbeard: fix: logic :neckbeard: fix: logic :neckbeard: fix: format :neckbeard: fix: logic :neckbeard: fix: logic :neckbeard: fix: logic :neckbeard: fix: logic :neckbeard: fix: logic :neckbeard: fix: format :neckbeard:
1 parent 4296289 commit af17af4

File tree

1 file changed

+21
-27
lines changed

1 file changed

+21
-27
lines changed

pages/index.js

Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ const Home = () => {
1919
const [detecting, setDetecting] = useState(false); // 音声認識ステータス
2020
const [finalText, setFinalText] = useState(""); // 確定された文章
2121
const [transcript, setTranscript] = useState("ボタンを押して検知開始"); // 認識中の文章
22+
const [android, setAndroid] = useState(false); // Android chrome用のフラグ
2223
// 単語検知
2324
const initialTagValues = ["年収"]; // デフォルト検知単語
2425
const candidates = ["年収", "自由", "成功"]; // 検知単語候補
@@ -35,39 +36,46 @@ const Home = () => {
3536
alert("お使いのブラウザには未対応です");
3637
return;
3738
}
39+
40+
// Androidのためのプラグ
41+
if (/Android/i.test(navigator.userAgent)) {
42+
setAndroid(true);
43+
};
44+
3845
// NOTE: 将来的にwebkit prefixが取れる可能性があるため
3946
const SpeechRecognition =
4047
window.SpeechRecognition || window.webkitSpeechRecognition;
4148
recognizerRef.current = new SpeechRecognition();
4249
recognizerRef.current.lang = "ja-JP";
4350
recognizerRef.current.interimResults = true;
4451
recognizerRef.current.continuous = true;
45-
recognizerRef.current.maxAlternatives = 1;
4652
recognizerRef.current.onstart = () => {
4753
setDetecting(true);
4854
};
4955
recognizerRef.current.onend = () => {
50-
setTranscript("");
5156
setDetecting(false);
57+
if (android && !alertOpen) {
58+
recognizerRef.current.start();
59+
}
5260
};
5361
recognizerRef.current.onresult = event => {
5462
[...event.results].slice(event.resultIndex).forEach(result => {
5563
const transcript = result[0].transcript;
64+
setTranscript(transcript);
5665
if (result.isFinal) {
66+
if (tagValues.some(value => transcript.includes(value))) {
67+
// NOTE: ユーザーが効果音を追加しなければデフォルトを鳴らす
68+
(userMusic || music).play();
69+
setAlertOpen(true);
70+
}
5771
// 音声認識が完了して文章が確定
5872
setFinalText(prevState => {
59-
return prevState + transcript;
73+
// Android chromeなら値をそのまま返す
74+
return android ? transcript : (prevState + transcript);
6075
});
76+
// 文章確定したら候補を削除
6177
setTranscript("");
62-
return;
63-
}
64-
// 音声認識の途中経過
65-
if (tagValues.some(value => transcript.includes(value))) {
66-
// NOTE: ユーザーが効果音を追加しなければデフォルトを鳴らす
67-
(userMusic || music).play();
68-
setAlertOpen(true);
6978
}
70-
setTranscript(transcript);
7179
});
7280
};
7381
});
@@ -138,11 +146,11 @@ const Home = () => {
138146
</Grid>
139147
<Box m={2}>
140148
<Grid container alignItems="center" justify="center">
141-
<Grid item xs={3}>
149+
<Grid item>
142150
<Button
143151
variant="outlined"
144152
disabled={detecting}
145-
color="primary"
153+
color="secondary"
146154
size="large"
147155
onClick={() => {
148156
recognizerRef.current.start();
@@ -151,20 +159,6 @@ const Home = () => {
151159
{detecting ? "検知中..." : "検知開始"}
152160
</Button>
153161
</Grid>
154-
<Grid item xs={6}/>
155-
<Grid item xs={3}>
156-
<Button
157-
variant="outlined"
158-
disabled={!detecting}
159-
color="secondary"
160-
size="large"
161-
onClick={() => {
162-
recognizerRef.current.onend();
163-
}}
164-
>
165-
{detecting ? "検知停止" : "検知待ち"}
166-
</Button>
167-
</Grid>
168162
</Grid>
169163
</Box>
170164
</Container>

0 commit comments

Comments
 (0)