LoginSignup
13
14

More than 5 years have passed since last update.

PEPPERで音声ファイルを再生する

Last updated at Posted at 2015-06-26

PEPPERで音声ファイルを再生する

PEPPERアプリケーションでタブレットのイベントで音声ファイルを再生する方法。
この記事での実現方法は3通りの方法を紹介します。

jsでALMemoryのイベントをあげてpythonで再生

うちの会社で開発しているアプリでは

  1. ユーザがボタンを押す
  2. SEがなる
  3. PEPPERが喋る

というパターンが多いので、
基本はこの方法を使っています。

javascript


var qis = new QiSession();
qis.socket().on('connect', function() {
    // ALMemoryを取得
    qis.service('ALMemory').done( function(m) {
    memory = m;
    });
});

// ボタンを押したらイベントを発生
$("#play").on("click", function(e) {
    memory.raiseEvent("PlaySound", "");
});

Choregraphe

ss.png

PlaySoundボックスは標準で入っているものです。
この実装方法だと効果音や音声が終わってから次の処理に行くことができるので、
音が鳴った後にPEPPERが喋る場合はこの方法を使います。

jsでALAudioPlayerを取得して再生

タブレット単体で遊ぶアプリなどはこの実装をします。
再生する音声の種類が多い時や、複雑なロジックをjs側に書かなければいけないときや、
Choregraphe側のボックスを減らしたいときなどはこの方法で実装することが多いです。

var qis = new QiSession();
qis.socket().on('connect', function() {
    // ALAudioPlayerを取得
    qis.service('ALAudioPlayer').done( function(ap) {
        audio = ap;
    });
});

// ボタンを押したら再生
$("#play").on("click", function(e) {
    audio.playFile(app_dir + "hello.wav");
});

jsでAudioを作成してタブレットのスピーカーから再生

どうしてもjs側でaddEventListenerとかを使いたい場合はこの方法を使います。
メタデータとるときとか。

var audio = new Audio("sound/hello.wav");
$("#play").on("click", function(e) {
    audio();
});

ただ、スピーカーの性能的にも
タブレットのスピーカーよりもPEPPERの耳のスピーカーの方がいいので、
この方法を採用することはほぼないです。

まとめ

結局のところ、音を鳴らすときはPEPPERが何かしら反応することが多いので、
jsでALMemoryのイベントをあげてpythonで再生する方法が一番扱いやすいです。
タブレットしか使わないようなアプリはPEPPERでやる必要はないので。

今回紹介したコードのサンプルはこちら
https://github.com/hws-hitorobo/pepper_play_sound

13
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
14