Skip to content

qengli/FlashWavRecorder

 
 

Repository files navigation

Simple Microphone Recorder

Use flash to record audio data from a microphone. Converts the audio data to a WAV file. Uploads the WAV file to the server. The WAV file is POSTed as a multpart form-data request. Additional fields can be added to the request, such as authenticity_token, (response) formart, etc... The flash recorder creates serveral external interfaces. This allows the recorder to be controlled through javascript. Only the save button must be clicked inside the flash application, see Upload and download require user interaction for more information.

Embedding the Recorder

<script>
  window.fwr_event_handler = function(eventName) {
    // handling logic here
  }
  var appWidth = 24;
  var appHeight = 24;
  var flashvars = {'upload_image': 'images/upload.png'};
  var params = {};
  var attributes = {'id': "recorderApp", 'name':  "recorderApp"};
  swfobject.embedSWF("recorder.swf", "flashcontent", appWidth, appHeight, "10.1.0", "", flashvars, params, attributes);
</script>

The fwr_event_handler is a javascript function that is called from the flash application. The first argument to the function is always the name of the event as a string. The other arguments may vary depending on the event.

Flash vars

upload_image: image used as the save button

font_color: font color for the save text, default #0000EE

font_size: font size for the save text, default 12

save_text: text used for the save link, default Save

background_color: background color of the flash app, only used when using a save link

if upload_image failes recorder will use a save link instead

Flash Events

ready: recorder is ready for use

  • width - save button's width
  • height - save button's height

no_microphone_found: no microphone was found when trying to record

microphone_user_request: user needs to allow the recorder to access the microphone

microphone_connected: user allowed access to the microphone

  • microphone - Microphone object from flash, can be used to get the name of the microphone, i.e. microphone.name

microphone_not_connected: user denied access to the microphone, at this point the recorder CAN NOT be used until the user reloads the page

Recording

recording: recording audio data from the microphone

  • name - of the recording that was specified when record was called

recording_stopped: stopped recording audio data

  • name - of the recording that was specified when record was called
  • duration - of the recording as a floating point value in seconds

Playback

playing: playing back the recorded audio data

  • name - of the recording that was specified when play was called

playback_started: useful for synchronizing playback with animation

  • name - of the recording that was specified when play was called
  • latency - number of milliseconds before playback starts

stopped: stopped playing back the recorded audio data

  • name - of the recording that was specified when play was called

Uploading recorded audio

save_pressed: save button was pressed in the recorder, good place to update the form data in the recorder

  • name - of the recording

saving: upload is in progress

  • name - of the recording

saved: upload is complete

  • name - of the recording
  • response - from the server as a string, can use var data = jQuery.parseJSON(arguments[2]) if response is json

save_failed: the recorder failed to upload the audio data

  • name - of the recording
  • error - message as a string

save_progress: upload progress

  • name - of the recording
  • bytes_loaded - number of bytes uploaded
  • bytes_total - number of bytes to upload

Observing microphone level

observing_level: started dispatching "microphone_level" event

Is dispatched just after call of observeLevel

microphone_level: current Microphone level

  • level - value from 0 to 1 provides current volume of sound registered by microphone

observing_level_stopped: stopped dispatching "microphone_level" event

Is dispatched just after call of stopObservingLevel

Obtaining raw microphone samples

observing_samples: started dispatching "microphone_samples" event

Is dispatched just after call of observeSamples

microphone_samples: current buffer of microphone samples

  • samples - array of values from -1 to 1

observing_samples_stopped: stopped dispatching "microphone_samples" event

Is dispatched just after call of stopObservingSamples

Recorder JS Interface

record: tells the recorder to record audio data from the microphone

  • name - of the recording, basically a reference to the recording, use this name for playback
  • filename - [optional] if saving the file on the server, this is the name of the file to save the WAV file as

will also stop recording if currently recording

playBack: tells the recorder to playback the recorded audio

  • name - of the recording

will stop playback if called before playback ends

playBackFrom: tells the recorder to playback from given second in recorded audio

  • name - of the recording
  • time - point in recording to start playback (Float of seconds).

pausePlayBack: tells the recorder to pause playback of recorded audio

stopPlayBack: tells the recorder to stop recording or playback

duration: returns the duration of the recording

  • name - of the recording

getCurrentTime: returns current time in recording playback

  • name - of the recording

getBase64: returns WAV data of recording in form of Base64 string

  • name - of the recording

getBlob: returns WAV data of recording in form of Blob object which can be used to send recorded audio to server (via JavaScript) or save on user's local drive

  • name - of the recording

Returns number of seconds as float. For paused recording returns pause position, for stopped recording returns 0.

observeLevel: starts dispatching microphone_level events

stopObservingLevel: stops dispatching microphone_level events

observeSamples: starts dispatching microphone_samples events

stopObservingSamples: stops dispatching microphone_samples events

init: setup the recorder for saving recordings

  • url - upload url
  • field_name - name of the form field for the WAV file
  • form_data - additional form data. Specified as an array of name/value pairs. ex: [{"name": 'authenticity_token', "value": "xxxx"}, {"name": "format", "value": "json"}]

permit: show the permissions dialog for microphone access, make sure the flash application is large enough for the dialog box before calling this method. Must be at least 240x160.

show: show the save button

hide: hide the save button

update: update the form data

  • form_data - additional form data, in jQuery you can use $('#upload_form').serializeArray()

configure: configure microphone settings

  • rate - at which the microphone captures sound, in kHz. default is 22. Currently we only support 44 and 22.
  • gain - the amount by which the microphone should multiply the signal before transmitting it. default is 100
  • silence_level - amount of sound required to activate the microphone and dispatch the activity event. default is 0
  • silence_timeout - number of milliseconds between the time the microphone stops detecting sound and the time the activity event is dispatched. default is 4000

setUseEchoSuppression: use echo suppression

  • yes_no

setLoopBack: routes audio captured by a microphone to the local speakers

  • yes_no

getMicrophone: returns the microphone object

Gradle Build

Set environment variable FLEX_HOME (compiled with Flex SDK 4.6.0 on windows)

Build with gradlew dist

Change Log

0.8.0 - May 21, 2014

  • Fixed XSS vulnerability issue
  • Added ability to get BLOB object of recorded audio
  • Added ability to get Base64 of recorded audio

Updating to 0.8.0:

  • Callback used by Flash to communicate with JavaScript for now on, has to be defined as fwr_event_handler. Specifying name of custom function in "Flash vars" as event_handler is no longer supported.

0.7.0

  • New demo page
  • Added ability to get current level of microphone
  • Added build using gradle
  • Added ability to obtain sound samples from microphone
  • Introducing unit tests

0.6.0

  • Added ability to pause playback
  • Added ability to get current time while playback

About

Simple flash file for recording audio and saving as a WAV

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • ActionScript 81.5%
  • JavaScript 14.8%
  • Groovy 2.0%
  • PHP 1.7%