send_stop_recording()の後で、音声ファイルが取得できない。

アプリ開発に関する質問 send_stop_recording()の後で、音声ファイルが取得できない。

9件の投稿を表示中 - 1 - 9件目 (全9件中)
  • 投稿者
    投稿
  • #2526
    monamu
    参加者

    PaPeRo制御用WebSocket通信アドオンシナリオとRaspberry Pi上のPythonプログラムで、PaPeRo iで録音をしたところ、PaPeRo i上でのファイルの書き込みが終わる前にRaspberry Piでファイルを取得してしまうという事象が発生しています。

    
    papero.send_start_recording(remote_file_path)
    
    papero.send_stop_recording()
    
    # 録音停止完了イベントまで待つ
    while True:
      messages = papero.papero_robot_message_recv(0.5)
      if messages is not None and messages[0]["Name"] == "stopRecordingRes":
        logger.debug('録音成功。リモートファイル[%s]', remote_file_path)
        break
    
    # ここでSCPでファイル取得
    
    

    このような実装をしているのですが、SCPでファイルを取得する際に、まだremote_file_pathに
    ファイルが作成されていない場合があります。

    録音停止→ディスク書き込み完了までを待機することはできないでしょうか?

    • このトピックはmonamuが2年、 8ヶ月前に変更しました。
    0
    #2528
    takahashi@spi
    参加者

    動作確認しておらず無責任な回答で申し訳ありませんが、stopRecordingRes後にgetRecordingStatus()でポーリングしてもダメでしょうか?

    0
    #2529
    monamu
    参加者

    takahashi@spi

    なるほど!試してみます。

    0
    #2530
    monamu
    参加者
    
    # 録音停止完了イベントまで待つ
    while True:
        messages = papero.papero_robot_message_recv(0.5)
        if messages is not None and messages[0]["Name"] == "stopRecordingRes":
            logger.debug('録音成功。リモートファイル[%s]', remote_file_path)
            break
    
    papero.send_get_recording_status()
    while True:
      messages = papero.papero_robot_message_recv(0.5)
      # 録音状態が0(アイドル)に変わるまで待機
      if messages is not None \
          and messages[0]["Name"] == "getRecordingStatusRes" \
          and messages[0]["Return"] == 0:
        break
      else:
        print('まだ')
        papero.send_get_recording_status()
    

    ありがとうございます。
    上記のようにポーリングを入れたらうまくいきました!
    (「まだ」が4回位出力されました。)

    RecordingStatusを見ているので、stopRecordingResを待つ必要は無いですよね。

    • この返信は2年、 8ヶ月前にmonamuが編集しました。
    0
    #2532
    takahashi@spi
    参加者

    大変有益な情報ありがとうございました。
    私もstopRecordingResで録音停止してくれていると思い込んでおりました。

    こうなると
    send_start_recording()直後の
    send_get_recording_status()では
    録音中状態は保証されていなさそうな気がします(わかりませんが)。
    もし保証されていない場合、
    send_start_recording()直後の
    send_stop_recording()直後の
    send_get_recording_status()
    で停止中であったとしても、録音前の停止中なのか録音後の停止中なのか
    分からないということになる気がします。
    ですので、もしそうなら、stopRecordingResは待たなくて良いですが
    startRecordingResは待った方が良いという気がします。
    もちろん直後にstopすることが無いのであれば不要ですし、
    全部仮定の話なので必要ない可能性も高いですが。

    • この返信は2年、 8ヶ月前にtakahashi@spiが編集しました。
    0
    #2534
    monamu
    参加者

    send_start_recording()直後の
    send_get_recording_status()では
    録音中状態は保証されていなさそうな気がします(わかりませんが)。

    可能性はありますね。

    startRecordingResは待った方が良いという気がします。
    もちろん直後にstopすることが無いのであれば不要ですし、
    全部仮定の話なので必要ない可能性も高いですが。

    録音終了をボタンクリックで呼び出しているのですが、
    たまに、録音開始直後に終了ボタンをクリックしても反応しない(終了時の処理が流れない)
    ことがありました。
    もしかすると、これが原因かもしれません。
    こちらについてはとくに問題になっていないので、深追いはしないでおきますが、、、

    0
    #2535
    monamu
    参加者

    深追いしないと言いつつ、気になるので試してみました。

    Stopのときと 同じようなポーリングを入れたところ、1~2回程度「まだ」が出力されたので、
    takahashi@spi の推察どおりでした。

    0
    #2536
    monamu
    参加者

    続き(チャットみたいですみません

    send_start_recording()の後に、startRecordingResもgetRecordingStatusResの両方を待たなかったとしても、
    send_start_recording()の直後の音声は録音されるという動作でした。

    0
    #2537
    takahashi@spi
    参加者

    詳しい情報ありがとうございます。大変参考になります。

    0
9件の投稿を表示中 - 1 - 9件目 (全9件中)
  • このトピックに返信するにはログインが必要です。