LoginSignup
5
0

More than 1 year has passed since last update.

【Node.js 2021】 WAVファイルを Node.js で再生する(Mac で node-wav-player を利用する)

Last updated at Posted at 2021-12-06

この記事は、2021年の Node.js のアドベントカレンダー の 8日目の記事です。

内容はタイトルの通りで、以下のものに関する記事です。

●node-wav-player - npm
 https://www.npmjs.com/package/node-wav-player

音の再生に必要なもの(Mac の場合)

node-wav-player のページ上部に、以下のような記載があります。

環境.jpg

自分の場合 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(順番に鳴る)

上記のプログラムで、音が同時になったのは、以下の記載に関係していそうです。
オプションの設定.jpg
ここに書かれているオプションが 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ファイルを再生することができました。

「何か処理が終わったタイミングでとか、操作をしたタイミングで」といったところで音を鳴らすとか、使えそうな場面はいろいろありそうなので、さらに活用法を考えたりお試しをしたり、というのをやっていければと思います。

5
0
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
5
0