incubator-callback-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Per Quested Aronsson (JIRA)" <j...@apache.org>
Subject [jira] [Created] (CB-1680) Uncaught TypeError in cordova-*.js when using media API
Date Fri, 19 Oct 2012 07:02:03 GMT
Per Quested Aronsson created CB-1680:
----------------------------------------

             Summary: Uncaught TypeError in cordova-*.js when using media API
                 Key: CB-1680
                 URL: https://issues.apache.org/jira/browse/CB-1680
             Project: Apache Cordova
          Issue Type: Bug
          Components: CordovaJS
    Affects Versions: 2.0.0
         Environment: 1. Ripple, Chrome, Mac OSX 10.7.5
2. Phonegap Build, Apple iPad
            Reporter: Per Quested Aronsson
            Assignee: Filip Maj
             Fix For: Master


When testing my code in Ripple, I get the following error and no sound plays:
```
Uncaught TypeError: Cannot set property '_duration' of undefined cordova-2.0.0.js:3090
Media.onStatus cordova-2.0.0.js:3090
(called from anonymous function) ripple.js:477
row 3090: media._duration = value;
```

The same code tested in Phonegap Build does *not* crash. It doesn't work as expected, but
it doesn't crash. Audio playback doesn't stop when it should. The audio file is played to
the end every time.

Please find the relevant part of the code below. It will not run as is. It expects to find
an audio file of at least 8s duration at "audio/FX.m4a", and it expects to find an HTML element
with ID "cross", but that's it I think.

```javascript
    function AudioPG() {
		var self = this; 
		var soundOff = false;
		var inter;
		var sound = new Media('audio/FX.m4a', self.onSuccess, self.onError);
		var segmentEnd = 0.5; //sound.getDuration(); // used for sound
		var sprites = { // id: [start, length], startpoints: 0,1,2,7
			0: [1, 1.7], // Jackpot
			1: [0.0, 0.5], // Click
			2: [2.5, 5], // Whosh
			3: [7.2, 7.7] // Buzz
        };
        
		this.checkSprite = function () { console.log('checkSprite');
			if (segmentEnd) {
                sound.getCurrentPosition(function(position) { console.log([position, segmentEnd]);
                    if (position >= segmentEnd) { // getCurrentPosistion uses seconds
                        sound.pause();
                        clearInterval(inter);
                        inter = null;
                    }
               },
                function(e) {
                    console.log("Error getting pos=" + e);
                }
              );
			}
			
		};
	
		this.playSprite = function (id) {
			if (soundOff) {
				return;
			}
			var startTime = sprites[id][0];
			segmentEnd = startTime + sprites[id][1];
			if (sound) {
				sound.seekTo(startTime*1000); // seekTo uses milliseconds
				sound.play();
				if (!inter) {
					inter = setInterval(self.checkSprite,100);	
				}
				
			}
			
		};
	
		this.stopSprite = function () {
			if (sound) {
				sound.pause();
			}
		};
	
		this.toggleSound = function (e) {
			var cross = e.target;
			soundOff = !soundOff;
			cross.style.opacity = (soundOff ? 0.4 : 0);
		};
		
		// onSuccess Callback
        //
        this.onSuccess = function () {
            console.log("playAudio():Audio Success");
        };

        // onError Callback 
        //
        this.onError = function (error) {
            alert('code: '    + error.code    + '\n' + 
                  'message: ' + error.message + '\n');
        };
			
		document.getElementById('cross').addEventListener('touchstart', self.toggleSound, false);
		console.log(['AudioPG', segmentEnd]);
    }
```

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message