PEPPERで音声ファイルを再生する
PEPPERアプリケーションでタブレットのイベントで音声ファイルを再生する方法。
この記事での実現方法は3通りの方法を紹介します。
jsでALMemoryのイベントをあげてpythonで再生
うちの会社で開発しているアプリでは
- ユーザがボタンを押す
- SEがなる
- 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
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