回答編集履歴
3
コード中のおかしな場所にある空白文字を削除
answer
CHANGED
@@ -26,9 +26,9 @@
|
|
26
26
|
# speech.SetVoice(voice) # (参照:https://teratail.com/questions/124906)
|
27
27
|
|
28
28
|
for sentence in ["Stop, Dave", "I'm afraid, Dave", "Dave, my mind is going"]:
|
29
|
-
print('before speak: ' + sentence
|
29
|
+
print('before speak: ' + sentence)
|
30
|
-
speech.Speak(sentence
|
30
|
+
speech.Speak(sentence, SVSFlag)
|
31
|
-
print('after speak: ' + sentence
|
31
|
+
print('after speak: ' + sentence)
|
32
32
|
```
|
33
33
|
|
34
34
|
---
|
2
誤記訂正
answer
CHANGED
@@ -40,4 +40,4 @@
|
|
40
40
|
SVSFlag = constants.SVSFlagsAsync | ...
|
41
41
|
...
|
42
42
|
```
|
43
|
-
のようなコードが見つかるのですが自分の環境(前述)だと「constantsにSVSFlagsAsyncというプロパティーがない」というエラーになってしまいました。本来このconstantsはCOMオブジェクトの定数のproxyとして動作することが期待なのだと思いますが、自分が使っているpywin32ではconstantsは単なる空の辞書でしかないように見えたのでimport自体不要と判断しました。類似機能のpypiwin32といったものがもあるのでそういうものを使った場合は意味が出てくるのかも知れません
|
43
|
+
のようなコードが見つかるのですが自分の環境(前述)だと「constantsにSVSFlagsAsyncというプロパティーがない」というエラーになってしまいました。本来このconstantsはCOMオブジェクトの定数のproxyとして動作することが期待なのだと思いますが、自分が使っているpywin32ではconstantsは単なる空の辞書でしかないように見えたのでimport自体不要と判断しました。類似機能のpypiwin32といったものがもあるのでそういうものを使った場合は意味が出てくるのかも知れません。(そこまでは試してません。)
|
1
誤記
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
`SVSFlagsAsync`は「`Speak`は音声再生処理を開始するが再生完了を待たずに返ってくる(つまり後続する他の処理と並行して音声の再生を行える)」という意味だと思います。このフラグを指定して再生した場合、もし後続する処理が何もなくてPythonインタープリタの実行が完了してしまうと「バックグラウンドでの非同期再生も自動的に停止」というような動作となり結果として「音が再生されない」ことになるのではないでしょうか。実際にWindows10 (ver 1803), Python 3.7.0, pywin32 224で試したところ生成音が聞こえずにプログラムが終了する現象が再現しました。
|
4
4
|
|
5
|
-
とりあえずSVSFlag
|
5
|
+
とりあえずSVSFlagからSVSFlagsAsyncのビット(=0b1みたいです)を除くと、期待通りに同期的な再生(再生完了後に`Speak`から戻ってくる)が行えるように見えました。
|
6
6
|
|
7
7
|
|
8
8
|
```Python
|