Ignore:
Timestamp:
2015-05-14T13:56:53+12:00 (9 years ago)
Author:
davidb
Message:

Work developing a guitar to play, and recording notes on piano when played (with the radio button set to record)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/model-sites-dev/respooled/collect/popup-video-respooled/js/media-player.js

    r29867 r29877  
    1 // Sample Media Player using HTML5's Media API
     1"use strict";
     2
     3// Based on:
     4//   Sample Media Player using HTML5's Media API
    25//
    36// Ian Devlin (c) 2012
     
    1619var progressBar;
    1720
     21var mediaPlaybackMode = null;
     22
    1823var mediaStartPlayTime;
    1924var mediaStartPauseTime;
    2025var mediaPlayedNotes;
    2126
     27var recordedNotesArray = null;
     28
    2229function initialiseMediaPlayer() {
     30
     31    setPlaybackMode();
    2332
    2433    mediaStartPlayTime  = null;
     
    5463    });
    5564
    56     // Add a listener for the play and pause events so the buttons state can be updated
    57     mediaPlayer.addEventListener('play', function() {
    58         // Change the button to be a pause button
    59         changeButtonType(playPauseBtn, 'buttonx2 pause');
    60     }, false);
    61     mediaPlayer.addEventListener('pause', function() {
    62         // Change the button to be a play button
    63         changeButtonType(playPauseBtn, 'buttonx2 play');
    64     }, false);
     65    // Add a listener for the play and pause events so the buttons state can be updated
     66    mediaPlayer.addEventListener('play', function() {
     67    // Change the button to be a pause button
     68    changeButtonType(playPauseBtn, 'buttonx2 pause');
     69    }, false);
     70    mediaPlayer.addEventListener('pause', function() {
     71    // Change the button to be a play button
     72    changeButtonType(playPauseBtn, 'buttonx2 play');
     73    }, false);
    6574   
    66     // need to work on this one more...how to know it's muted?
    67     mediaPlayer.addEventListener('volumechange', function(e) {
    68         // Update the button to be mute/unmute
    69         if (mediaPlayer.muted) changeButtonType(muteBtn, 'button unmute');
    70         else changeButtonType(muteBtn, 'button mute');
    71     }, false); 
    72     mediaPlayer.addEventListener('ended', function() { this.pause(); }, false);
     75    // need to work on this one more...how to know it's muted?
     76    mediaPlayer.addEventListener('volumechange', function(e) {
     77    // Update the button to be mute/unmute
     78    if (mediaPlayer.muted) changeButtonType(muteBtn, 'button unmute');
     79    else changeButtonType(muteBtn, 'button mute');
     80    }, false); 
     81
     82    mediaPlayer.addEventListener('ended', stopPlayer, false);   
    7383}
    7484
    7585function togglePlayPause() {
    76     // If the mediaPlayer is currently paused or has ended
     86    // If the mediaPlayer is currently paused or has ended
     87    console.log("togglePlayPause()");
     88    //console.log("*** mediaPlayer (paused,ended): (" + mediaPlayer.paused + "," + mediaPlayer.ended + ")");
     89    //console.log("*** currentTime = " + mediaPlayer.currentTime);
     90
    7791    if (mediaPlayer.paused || mediaPlayer.ended) {
    7892        if (mediaStartPlayTime == null) {
     93        // Fresh play start
     94        console.log("**** mediaPlaybackMode = " + mediaPlaybackMode);
     95
    7996            mediaStartPlayTime = Date.now();
    8097        //console.log("*** mediaStartPlayTime=" + mediaStartPlayTime);
     
    83100        }
    84101        else {
     102        // Resume playing
    85103        var mediaPauseBuildup = mediaStartPauseTime - Date.now();
    86104
     
    98116    // Otherwise it must currently be playing
    99117    else {
    100         mediaPauseTime = Date.now();
     118        // put into pause state
     119
     120        mediaStartPauseTime = Date.now();
    101121
    102122        // Change the button to be a play button
     
    109129}
    110130
    111 function pad(n, width, z) {
     131function _pad(n, width, z) {
    112132  z = z || '0';
    113133  n = n + '';
     
    118138{
    119139    var int_mins = Math.floor(time / 60);   
    120 
    121140    var float_secs = time % 60;
    122     //var int_secs = Math.floor(float_secs);
    123    
    124     //var float_sub_sec = float_secs - int_secs;
    125     //var int_sub_sec = float_sub_sec.toFixed(2)
    126 
    127     var padded_secs = pad(float_secs.toFixed(1),4); // (2), 5 for 2 dec place
     141
     142    var padded_secs = _pad(float_secs.toFixed(1),4); // (2), 5 for 2 dec place
    128143    return int_mins + ":" + padded_secs
    129144}
     
    145160
    146161// Stop the current media from playing, and return it to the start position
     162
    147163function stopPlayer()
    148164{
     165    console.log("stopPlayer()");
    149166    mediaPlayer.pause();
     167
     168    if (mediaPlaybackMode == "record") {
     169    recordedNotesArray = mediaPlayedNotes[String(mediaStartPlayTime)];
     170    if (recordedNotesArray.length>0) {
     171        // non-trival data recorded
     172        $('#save-recording-popup').dialog('open');
     173    }
     174    }
     175
     176    mediaStartPlayTime = null;
     177    mediaStartPauseTime = null;
     178
    150179    mediaPlayer.currentTime = 0;
    151180    displayCurrentTime();
     181
    152182}
    153183
     
    180210    mediaPlayer.play();
    181211}
     212
     213
     214
    182215
    183216// Update the progress bar
     
    235268}
    236269
     270
    237271// Resets the media player
    238272function resetPlayer() {
     
    246280    displayCurrentTime();
    247281    // Ensure that the play pause button is set as 'play'
    248     changeButtonType(playPauseBtn, 'play');
    249 }
     282    changeButtonType(playPauseBtn, 'buttonx2 play');
     283}
     284
     285
     286function setPlaybackMode()
     287{
     288    //console.log("setPlaybackMode()");
     289    mediaPlaybackMode = $('input[name=mpm-radio]:checked', '#mpmForm').val();
     290}
     291
     292
     293
     294function saveRecording()
     295{
     296    var valid = true;
     297
     298    var $save_name_input = $("#save-recording-name");
     299    var save_name = $save_name_input.val();
     300   
     301    if (save_name.match(/^\s*$/)) {
     302    valid = false;
     303    $save_name_input.addClass( "ui-state-error" );
     304    }
     305    else {
     306    console.log("**** Saving under name '" + save_name +"': " + JSON.stringify(recordedNotesArray));
     307
     308    var $dialog = $('#save-recording-popup');
     309
     310    $dialog.dialog( "close" );
     311    }
     312
     313    return valid;
     314}
     315
     316
     317$(document).ready(function() {
     318    // Setup dialog
     319
     320    var dialog = $('#save-recording-popup').dialog({
     321    width : 500,
     322    height: 350,
     323    autoOpen: false, // Do not open on page load
     324    modal: true,     // Freeze the background behind the overlay
     325
     326    show: {
     327            effect: "blind",
     328            duration: 1000
     329    },
     330    hide: {
     331            effect: "blind",
     332            duration: 500
     333    },
     334
     335    buttons: {
     336            "Save Recording": saveRecording,
     337            Cancel: function() {
     338        dialog.dialog("close");
     339            }
     340    },
     341    close: function() {
     342            form[0].reset();
     343            $( "#save-recording-name" ).removeClass( "ui-state-error" );
     344    }
     345    });
     346
     347    var form = dialog.find( "form" ).on( "submit", function( event ) {
     348    event.preventDefault();
     349    });
     350 
     351
     352});
     353
Note: See TracChangeset for help on using the changeset viewer.