質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2261閲覧

音声出力の途中で画像を更新する方法

Akopara

総合スコア12

Raspberry Pi

Raspberry Piは、ラズベリーパイ財団が開発した、名刺サイズのLinuxコンピュータです。 学校で基本的なコンピュータ科学の教育を促進することを意図しています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/03/22 00:55

###前提・実現したいこと
Raspberry Pi3とpythonを用いて画像出力と音声出力を行っています。そしてその音声が5秒間あり、音声出力開始から3秒後に(音声を出力したまま)画像を変更したいと考えています。

具体的には「ありがとうございます。」とロボットが喋っている間に、口の開いた画像と口の閉じた画像を交互に画面出力したいと考えています。

###発生している問題・エラーメッセージ
音声出力を行ってる間、画像を変更できない。
3秒後に画像を更新すると3秒間で音声で終わってします。

エラーメッセージ

###該当のソースコード

import

1import pygame.mixer 2from time import sleep 3 4#setup for image 5pygame.init() 6screen = pygame.display.set_mode((1000, 900)) 7mouthopen = pygame.image.load ("MouthOpen.jpg") 8mouthclose = pygame.image.load("MouthClose.jpg") 9 10#setup for sound 11pygame.mixer.init (48000, -16, 1, 1024) 12sound = pygame.mixer.Sound("thankyou.wav") 13channel1A = pygame.mixer.Channel(1) 14 15while True: 16 screen.blit(mouthopen, (0, 0)) 17 pygame.display.update() 18 channel1A.play(sound) 19 sleep(3.0) 20 screen.blit(mouthclose, (0, 0)) 21 pygame.display.update() 22 sleep(2.0) 23 24 25 26

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
python2.7.9

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

  • ループ中でsleepすると処理が止まってしまうので、ループは回し続けます。
  • ループ内で時刻を計測し、口を開いて発声→口を閉じる の状態を経過時間によって交互に繰り返すようにします。

サンプル(動作は未確認)

Python

1import time 2() 3state = "start" 4tm_st = time.time() 5while True: 6 tm_dif = time.time() - tm_st # 開始からの経過秒 7 8 if state == "start": 9 # 口を開いて発声 10 screen.blit(mouthopen, (0, 0)) 11 pygame.display.update() 12 channel1A.play(sound) 13 14 tm_st = time.time() 15 state = "open" 16 elif state == "open": 17 if tm_dif >= 3: 18 # 口を閉じる 19 screen.blit(mouthclose, (0, 0)) 20 pygame.display.update() 21 state = "close" 22 elif state == "close": 23 if tm_dif >= 5: 24 state = "start" 25 26 time.sleep(0.01)

投稿2017/03/22 02:31

can110

総合スコア38266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Akopara

2017/03/22 02:54

教えて頂いたサンプルで、期待通りの動作を確認できました。 丁寧なご指導ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問