# Microm
**Repository Path**: mirrors/Microm
## Basic Information
- **Project Name**: Microm
- **Description**: Microm 是一个漂亮的库,可以用 JavaScript 将浏览器的麦克风转为 MP3,Microm 的目的是让浏览器里的播放和转播变得简单
- **Primary Language**: JavaScript
- **License**: MIT
- **Default Branch**: master
- **Homepage**: https://www.oschina.net/p/microm
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2020-09-17
- **Last Updated**: 2026-02-21
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
[](https://travis-ci.org/zzarcon/microm)
[](https://badge.fury.io/js/microm)
[](http://badge.fury.io/bo/microm)
[DEMO](https://zzarcon.github.io/microm)
# Microm
> Beautiful library to convert browser microphone to mp3 in Javascript
Microm it's just a wrapper of few audio converting libraries which exposes a fully **Promise** and **Event oriented** api. Microm goal it's to make trivial to **play and convert audio** in the browser.
# Installation
`$ npm install microm`
or
`$ bower install microm`
# Usage
**Recording and converting the user microphone**
```javascript
var microm = new Microm();
var mp3 = null;
start();
setTimeout(stop, 1500);
function start() {
microm.record().then(function() {
console.log('recording...')
}).catch(function() {
console.log('error recording');
});
}
function stop() {
microm.stop().then(function(result) {
mp3 = result;
console.log(mp3.url, mp3.blob, mp3.buffer);
play();
download();
});
}
function play() {
microm.play();
}
function download() {
var fileName = 'cat_voice';
microm.download(fileName);
}
```
**Reacting to events**
```javascript
microm.on('timeupdate', updateCurrentTime);
microm.on('loadedmetadata', onLoaded);
microm.on('play', onPlayEvent);
microm.on('pause', onPauseEvent);
microm.on('ended', onEndEvent);
function onLoaded(time) {
duration.innerHTML = time;
}
function updateCurrentTime(time) {
currentTime.innerHTML = time;
}
function onPlayEvent() {
status.innerHTML = 'Playing';
}
function onPauseEvent(time) {
status.innerHTML = 'Paused';
}
function onEndEvent() {
status.innerHTML = 'Ended';
}
```
**Upload mp3 to the server**
```javascript
microm.getBase64().then(function(base64string) {
$.ajax({
type: 'POST',
contentType: 'application/octet-stream',
mimeType: 'audio/mpeg',
processData: false,
url: 'server/upload_audio',
data: base64string,
success: onSuccess
});
});
```
# Under the hood
To achieve that, Microm uses the following libs:
* [lamejs](https://github.com/zhuker/lamejs) mp3 encoder in javascript
* [webrtc-adapter](https://github.com/webrtc/adapter) Shim to insulate apps from spec changes and prefix differences
* [RecordRTC](https://github.com/muaz-khan/RecordRTC) record WebRTC audio/video media streams
* [RSVP](https://github.com/tildeio/rsvp.js/) Provides tools for organizing asynchronous code
#### How Microm uses that libraries?
In order to get the user recorded data, we use **webrtc-adapter** + **RecordRTC** which provides some shims and tools to make it easy and without worry about crossbrowser issues.
Later we use **lamejs** to convert the Wav to Mp3. We can say that the hard work happen in that lib <3.
And finally to provide a Promise based Api we use **RSVP** which support the [Promises/A+](https://promisesaplus.com/) and have a great support.
# Browser support
The library just work in **Chrome** and **Firefox** right now. More info:
* [Caniuse Stream](http://caniuse.com/#feat=stream)
* [Caniuse WebRTC](http://caniuse.com/#feat=rtcpeerconnection)
* [navigator.getUserMedia deprecation](https://developer.mozilla.org/en/docs/Web/API/Navigator/getUserMedia)
* [navigator.mediaDevices.getUserMedia](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)
* [Safari is the new IE](https://news.ycombinator.com/item?id=9804533)
# Api reference
# download
Forces file download.
**Parameters**
- `fileName` **String**
Returns **void**
# getBase64
Base64 value of the recorded data.
**Examples**
```javascript
microm.getBase64().then(function(base64) {
console.log(base64);
});
```
Returns **Promise**
# getBlob
Blob value of the recorded data.
Returns **Blob**
# getBuffer
ArrayBuffer of the recorded data (raw binary data buffer).
Returns **ArrayBuffer**
# getMp3
Returns all mp3 info.
Right now we are converting the recorded data
everytime this function it's called.
Returns **Promise**
# getUrl
Link to the mp3.
It can be used as a audio "src" value
**Examples**
```javascript
microm.getUrl();
// Something like --> "blob:http%3A//localhost%3A8090/8b40fc63-8bb7-42e3-9622-9dcc59e5df8f"
```
Returns **String**
# getWav
Blob enconded as Wav.
Returns **Blob**
# off
Remove an event handler
**Parameters**
- `eventName` **String**
Returns **void**
# on
Attach an event handler function for event name
**Parameters**
- `eventName` **String**
- `handler` **Function**
Returns **void**
# pause
Pauses the player.
Returns **void**
# play
Reproduce the player audio.
Returns **void**
# record
Request browser microphone access and waits for it resolution.
If the user grant access, Microm will start recording the audio.
Returns **Promise**
# stop
Stops recording audio if Micron is recording, if not
just pauses the player and set's the currentTime to 0.
**Examples**
```javascript
microm.stop().then(function(mp3) {
console.log(mp3.url, mp3.blob);
});
```
Returns **Promise** Will be resolved with the mp3.