All files index.js

100% Statements 19/19
100% Branches 2/2
100% Functions 5/5
100% Lines 19/19
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42    5x 5x     10x       5x 10x 10x 10x 10x       5x   5x 5x 5x 5x 5x     5x 4x 3x       1x   2x            
'use strict'
 
const fs = require('fs')
const { createAudio } = require('node-mp3-player')
 
function isAudioFile (filename) {
  return /\.mp3$/.test(filename)
}
 
function audioFileLoader (dir, Audio) {
  return async function loadAudioFile (filename) {
    const aud = await Audio(`${dir}/${filename}`)
    await aud.play()
    await aud.loop(true)
    return aud
  }
}
 
module.exports = {
  async noiseGenerator (dir) {
    const Audio = createAudio()
    const files = fs.readdirSync(dir)
    const audioFileNames = files.filter(isAudioFile)
    const loadAudioFile = audioFileLoader(dir, Audio)
    const audioFiles = await Promise.all(
      audioFileNames.map(loadAudioFile)
    )
    return function noise (...volumes) {
      if (volumes.length !== audioFiles.length) {
        throw new Error(
          `invalid argument length, received ${volumes.length} but have ${audioFiles.length} files loaded`
        )
      }
      return Promise.all(
        volumes.map((value, i) => {
          return audioFiles[i].volume(value)
        })
      )
    }
  }
}