この記事は、2021年の Node.js のアドベントカレンダー の 8日目の記事です。
内容はタイトルの通りで、以下のものに関する記事です。
●node-wav-player - npm
https://www.npmjs.com/package/node-wav-player
音の再生に必要なもの(Mac の場合)
node-wav-player のページ上部に、以下のような記載があります。
自分の場合 Mac を使っているので「afplayコマンド」が必要になるようです。
例えば、以下の記事に afplayコマンドに関する記載があります。
●afplayコマンドをつかってMacにてターミナルからコマンドで音楽ファイルを再生する 💻 - みかづきブログ・カスタム
https://blog.kimizuka.org/entry/2020/07/10/174935
このコマンドが使えることを確認しておきましょう。
簡単なサンプルで試してみる
それでは、公式ページに書いてあるサンプルを試してみます。
試す前に npm i node-wav-player
を実行しておきましょう。
const player = require('node-wav-player');
player.play({
path: './【WAVファイルの名前】.wav',
}).then(() => {
console.log('The wav file started to be played successfully.');
}).catch((error) => {
console.error(error);
});
WAVファイルは、以下の記事にも書いていた方法で準備しました。
(効果音ラボさんの素材として公開されている MP3ファイルを、ffmpeg で WAVファイルに変換)
●【M5Stack 2021】 #M5Stack Core2 + #UIFlow で音を鳴らすのに手間が少なそうな方法(+ ffmpeg での音声ファイルの処理の話) - Qiita
https://qiita.com/youtoy/items/57fce216e2f74dff2452
適当な WAVファイルを用意して、上記を実行すると、音を鳴らすことができました。
サンプルに手を加える
2つの音を鳴らす1(同時に鳴る)
次に、2つの WAVファイルを用意して、それを鳴らすような処理を書いてみます。
const player = require("node-wav-player");
const wavList = [
"【1つ目のWAVファイルの名前】.wav",
"【2つ目のWAVファイルの名前】.wav",
];
function playWav(inputWav) {
player
.play({
path: inputWav,
})
.then(() => {
console.log("The wav file started to be played successfully.");
})
.catch((error) => {
console.error(error);
});
}
playWav(wavList[0]);
playWav(wavList[1]);
これを実行すると、2つの WAVファイルが同時になりました。
2つの音を鳴らす2(順番に鳴る)
上記のプログラムで、音が同時になったのは、以下の記載に関係していそうです。
ここに書かれているオプションが false になっていると、1つ目の WAVファイルが再生され始めてすぐに、次の再生へと進むようです。
このオプションを true にして、かつ、処理を少し書きかえたプログラムを実行してみます。
const player = require("node-wav-player");
const wavList = [
"【1つ目のWAVファイルの名前】.wav",
"【2つ目のWAVファイルの名前】.wav",
];
player
.play({
path: wavList[0],
sync: true,
})
.then(() => {
console.log("The wav file started to be played successfully.");
player
.play({
path: wavList[1],
sync: true,
})
.then(() => {
console.log("The wav file started to be played successfully.");
});
})
.catch((error) => {
console.error(error);
});
これで、2つの音声ファイルが順番に鳴りました。
この書き方が良いのか、ちょっと不安がありつつ...
おわりに
Node.js のプログラムで、 WAVファイルを再生することができました。
「何か処理が終わったタイミングでとか、操作をしたタイミングで」といったところで音を鳴らすとか、使えそうな場面はいろいろありそうなので、さらに活用法を考えたりお試しをしたり、というのをやっていければと思います。