npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

benz-audio-engine

v0.2.12

Published

一个简单的基于 Web Audio API 的音效引擎

Downloads

2

Readme

Benz Audio Engine

这是一个简单的基于 Web Audio API 的音效引擎。

我开发这个音效引擎是因为我觉得 cocos2d-js 的音效引擎不好用。cocos2d-js 在移动端无法预先加载音频资源,不支持 sprite,也不支持循环节。

2017/04/01 更新: 现在支持 sprite 了,可以取出音频的其中一小段来播放。

This is a simple audio engine that base on Web Audio API.

I developed it because I think cocos2d-js sound engine is not convenient to use. Cocos2d-js can not preload audio resources on the mobile side.

2017/04/01 Update: Now support "Audio Sprite"! You can slice a piece of audio to play.

Demo

中文版:https://benzleung.github.io/benz-audio-engine/demo.html

English: https://benzleung.github.io/benz-audio-engine/demo-eng.html

快速指引 Quick Start

首先下载js文件并写入html:

First, download "benzAudioEngine.js" and quote to HTML:

<!-- 只需要下载一个js并引用 -->
<!-- Just use ONE js file only -->
<script src="path/to/benzAudioEngine.js"></script>
<!-- 也可以选择压缩版本 -->
<!-- or use the minified version -->
<script src="path/to/benzAudioEngine.min.js"></script>

然后加载音频文件:

Then, load the audio file:

// 加载一个 MP3
// load an MP3 file
benzAudioEngine.load('path/to/audio-file.mp3', function() {
    // 加载完毕后回调
    // callback while loading is finish
});

// 加载多个 MP3
// load several MP3 files
benzAudioEngine.load(['path/to/audio1.mp3', 'path/to/audio2.mp3'], function() {
    // 所有加载完毕后回调(只回调一次)
    // callback while all files are loaded (callback only once)
});

然后播放:

Finally, play:

benzAudioEngine.play('path/to/audio-file.mp3');

API

(Tips: English Version in the NEXT SECTION)

/**
 * 是否支持 Web Audio API
 * @return {boolean}
 */
var isSupport = benzAudioEngine.support();
/**
 * 加载音频文件
 * @param {string|string[]} srcArray 音频文件路径(或者多个路径组成的数组)
 * @param {function} [callback] 所有音频文件加载完毕后的回调
 */
benzAudioEngine.load(srcArray, callback);
/**
 * 建立 Audio Sprites。也就是把某个音频的某一小片段取出来。
 * @param {string} src 音频文件路径
 * @param {object} spriteData 使用一个固定格式定义小片段的名字、开始时间、结束时间
 *                 {
 *                    '名字1' : [开始时间, 结束时间],
 *                    '名字2' : [开始时间, 结束时间],
 *                    ...
 *                 }
 */
benzAudioEngine.sprite(src, spriteData);

// 示例:
benzAudioEngine.sprite('path/to/a.mp3', {
    'a.mp3$1' : [0.0, 1.5],
    'a.mp3$2' : [1.85, 2.63],
    'feel free to name the sprite' : [3.14, 6.66]
});
benzAudioEngine.play('a.mp3$1');
benzAudioEngine.play('a.mp3$2');
// 同样支持循环节
benzAudioEngine.play('feel free to name the sprite', 0.1, 3.1);
/**
 * 卸载音频文件,释放内存
 * @param {string|string[]} srcArray 音频文件路径(或者多个路径组成的数组)
 */
benzAudioEngine.unload(srcArray);
/**
 * 播放音频文件,若文件尚未加载,则不播放(不会自动加载,也不会返回任何提示,
 *      因为游戏音效宁可不发声也不要延时发声)
 * @param {string} src 音频文件路径
 * @param {number} [loopStart] 循环开始时间
 * @param {number} [loopEnd] 循环结束时间,若不指定,则音频只播放一次
 * @return {int} 返回一个ID值,这个ID值用于操作暂停和停止,若不需要暂停和停止,
 *               则不需要理会这个返回值(不设置循环的话,音频播放完毕会自动停止)
 */
var id = benzAudioEngine.play(src, loopStart, loopEnd);
/**
 * 暂停某个音频
 * @param {int} id 要暂停的音频的ID
 */
benzAudioEngine.pause(id);
/**
 * 继续播放某个音频
 * @param {int} id 已经暂停的音频的ID
 */
benzAudioEngine.resume(id);
/**
 * 停止某个音频
 * @param {int} id 要暂停的音频的ID
 */
benzAudioEngine.stop(id);
/**
 * 设置音量,这是所有音频的统一音量,暂时没有对某个音频单独设置音量的功能
 * @param {number} vol 音量值,范围是 0.0 - 1.0
 */
benzAudioEngine.setVolume(vol);
/**
 * 获得当前音量
 * @return {number} 音量,0.0 - 1.0
 */
var vol = benzAudioEngine.getVolume();
/**
 * 设置静音,所有音频都静音,暂时没有对某个音频单独设置的功能
 * @param {boolean} muted 是否静音,true 为静音, false 为不静音
 */
benzAudioEngine.setMuted(muted);
/**
 * 获得当前是否已静音
 * @return {boolean}
 */
var isMuted = benzAudioEngine.getMuted();
/**
 * 暂停所有音频
 */
benzAudioEngine.pauseAll();
/**
 * 停止所有音频
 */
benzAudioEngine.stopAll();

API (English)

/**
 * Check if the system support Web Audio API
 * @return {boolean}
 */
var isSupport = benzAudioEngine.support();
/**
 * Load audio file(s)
 * @param {string|string[]} srcArray - Path to audio file, or an array of several
 *                                     file paths 
 * @param {function} [callback] - A callback when all files are loaded
 */
benzAudioEngine.load(srcArray, callback);
/**
 * Create Audio Sprites. That is, a small piece of audio to take out.
 * @param {string} src - Path to audio file.
 * @param {object} spriteData - Use a fixed format to define the name,
 *                              the start time, and the end time of the sprite
 *                 {
 *                    'spriteName1' : [startTime, endTime],
 *                    'spriteName2' : [startTime, endTime],
 *                    ...
 *                 }
 */
benzAudioEngine.sprite(src, spriteData);

// 示例:
benzAudioEngine.sprite('path/to/a.mp3', {
    'a.mp3$1' : [0.0, 1.5],
    'a.mp3$2' : [1.85, 2.63],
    'feel free to name the sprite' : [3.14, 6.66]
});
benzAudioEngine.play('a.mp3$1');
benzAudioEngine.play('a.mp3$2');
// also supported loop
benzAudioEngine.play('feel free to name the sprite', 0.1, 3.1);
/**
 * release memory
 * @param {string|string[]} srcArray - Path to audio file, or an array of several
 *                                     file paths
 */
benzAudioEngine.unload(srcArray);
/**
 * Play the audio file
 * If the file has not been loaded yet, give up playing
 *   (no automatically load, no error, no return)
 * It is because the sound effect in game would rather not sound
 *   and do not delay the sound
 * @param {string} src - Path to audio file
 * @param {number} [loopStart] - The starting time of the loop cycle (Optional)
 * @param {number} [loopEnd] - The ending time of the loop cycle (Optional)
 *                             If undefined, the audio play once and stop at the end
 * @return {int} - return an ID value. The value is used to control pause and stop.
 *                 If you do not need to pause and stop, then ignore the return value.
 */
var id = benzAudioEngine.play(src, loopStart, loopEnd);
/**
 * Pause an audio
 * @param {int} id - The ID of audio you want to pause
 */
benzAudioEngine.pause(id);
/**
 * Resume a paused audio
 * @param {int} id - The ID of audio that is paused
 */
benzAudioEngine.resume(id);
/**
 * Stop an audio
 * @param {int} id - The ID of audio you want to stop
 */
benzAudioEngine.stop(id);
/**
 * Set the volume.
 * This is a unified volume for all audio, and there is no function to 
 *   set the volume for a particular audio
 * @param {number} vol - Volume value. The range is from 0.0 to 1.0
 */
benzAudioEngine.setVolume(vol);
/**
 * Get the current volume
 * @return {number} - Volume value. The range is from 0.0 to 1.0
 */
var vol = benzAudioEngine.getVolume();
/**
 * Set mute.
 * All audio would be muted, there is no function for a particular audio set.
 * @param {boolean} muted - true: muted, false: unmuted
 */
benzAudioEngine.setMuted(muted);
/**
 * Get whether to mute
 * @return {boolean}
 */
var isMuted = benzAudioEngine.getMuted();
/**
 * Pause all audio
 */
benzAudioEngine.pauseAll();
/**
 * Stop all audio
 */
benzAudioEngine.stopAll();

其他说明 Other note

License

MIT license.