Skip to content

Commit

Permalink
Fix seek for IMA ADPCM.
Browse files Browse the repository at this point in the history
Also fix naming for Haxe3.0; but code still working only compiled with Haxe2.10
  • Loading branch information
datacompboy committed Dec 10, 2013
1 parent bf474b5 commit aee17a0
Show file tree
Hide file tree
Showing 12 changed files with 80 additions and 52 deletions.
20 changes: 10 additions & 10 deletions IPlayer.hx
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
interface IPlayer {
var volume(getVolume, setVolume): Float;
var pan(getPan, setPan): Float;
var soundTransform(getST, setST): flash.media.SoundTransform;
var volume(get_volume, set_volume): Float;
var pan(get_pan, set_pan): Float;
var soundTransform(get_soundTransform, set_soundTransform): flash.media.SoundTransform;
function play(?path : String, ?trigger_buffer : Float): Void;
function setVolume(volume: Float) : Float;
function getVolume(): Float;
function setPan(pan: Float): Float;
function getPan(): Float;
function setST(st: flash.media.SoundTransform): flash.media.SoundTransform;
function getST(): flash.media.SoundTransform;
function set_volume(volume: Float) : Float;
function get_volume(): Float;
function set_pan(pan: Float): Float;
function get_pan(): Float;
function set_soundTransform(st: flash.media.SoundTransform): flash.media.SoundTransform;
function get_soundTransform(): flash.media.SoundTransform;
function pause(): Void;
function resume(): Void;
function seek(pos: Float): Void;
function stop(): Void;
}
}
22 changes: 11 additions & 11 deletions Mp3Player.hx
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,9 @@ class Mp3Player extends flash.events.EventDispatcher, implements IPlayer {
var playTimer : flash.utils.Timer;

var schtr: SoundTransform;
public var volume(getVolume, setVolume): Float;
public var pan(getPan, setPan): Float;
public var soundTransform(getST, setST): SoundTransform;
public var volume(get_volume, set_volume): Float;
public var pan(get_pan, set_pan): Float;
public var soundTransform(get_soundTransform, set_soundTransform): SoundTransform;

public function new(?path : String) {
super();
Expand Down Expand Up @@ -81,36 +81,36 @@ class Mp3Player extends flash.events.EventDispatcher, implements IPlayer {
}
}

public function setVolume(volume: Float): Float {
public function set_volume(volume: Float): Float {
this.schtr.volume = volume;
trace("mp3 setVolume(" + volume + ")");
trace("mp3 set_volume(" + volume + ")");
this.soundTransform = this.soundTransform; // Apply changes
return volume;
}

public function getVolume(): Float {
public function get_volume(): Float {
return this.schtr.volume;
}

public function setPan(pan: Float): Float {
public function set_pan(pan: Float): Float {
this.schtr.pan = pan;
this.soundTransform = this.soundTransform; // Apply changes
return this.schtr.pan;
}

public function getPan(): Float {
public function get_pan(): Float {
return this.schtr.pan;
}

public function setST(st: SoundTransform): SoundTransform {
public function set_soundTransform(st: SoundTransform): SoundTransform {
this.schtr = st;
if (this.channel != null) {
this.channel.soundTransform = this.schtr;
}
return this.schtr;
}

public function getST(): SoundTransform {
public function get_soundTransform(): SoundTransform {
return this.schtr;
}

Expand Down Expand Up @@ -197,4 +197,4 @@ class Mp3Player extends flash.events.EventDispatcher, implements IPlayer {
trace("mp3 ERROR ERROR");
dispatchEvent(event);
}
}
}
22 changes: 11 additions & 11 deletions Player.hx
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ class Player extends flash.events.EventDispatcher, implements IPlayer {
var pos : Null<Float>;

var schtr: SoundTransform;
public var volume(getVolume, setVolume): Float;
public var pan(getPan, setPan): Float;
public var soundTransform(getST, setST): SoundTransform;
public var volume(get_volume, set_volume): Float;
public var pan(get_pan, set_pan): Float;
public var soundTransform(get_soundTransform, set_soundTransform): SoundTransform;

public function new(?path : String) {
super();
Expand Down Expand Up @@ -112,41 +112,41 @@ class Player extends flash.events.EventDispatcher, implements IPlayer {
asink.addEventListener(PlayerEvent.STOPPED, stoppedEvent);
} catch (error : Dynamic) {
trace("Unable to load: "+error);
trace(haxe.Stack.exceptionStack());
//trace(haxe.Stack.exceptionStack());
throw error;
}
}

public function setVolume(volume: Float): Float {
public function set_volume(volume: Float): Float {
this.schtr.volume=volume;
trace("setVolume("+volume+")");
trace("set_volume("+volume+")");
this.soundTransform = this.soundTransform; // Apply changes
return volume;
}

public function getVolume(): Float {
public function get_volume(): Float {
return this.schtr.volume;
}

public function setPan(pan: Float): Float {
public function set_pan(pan: Float): Float {
this.schtr.pan=pan;
this.soundTransform = this.soundTransform; // Apply changes
return this.schtr.pan;
}

public function getPan(): Float {
public function get_pan(): Float {
return this.schtr.pan;
}

public function setST(st: SoundTransform): SoundTransform {
public function set_soundTransform(st: SoundTransform): SoundTransform {
this.schtr = st;
if (this.asink!=null) {
this.asink.soundTransform = this.schtr;
}
return this.schtr;
}

public function getST(): SoundTransform {
public function get_soundTransform(): SoundTransform {
return this.schtr;
}

Expand Down
2 changes: 1 addition & 1 deletion debug.hxml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-swf9 wavplayer-debug.swf
-swf wavplayer-debug.swf
-main WavPlayer
-swf-version 10
-swf-header 400:800:40:ffffff
Expand Down
7 changes: 7 additions & 0 deletions fmt/Decoder.hx
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ interface IDecoder {
var sampleSize : Int;
// Number of PCM samples in one input chunk
var sampleLength : Int;
// Seek decoder to required chunk
// Returns initial seek position required for decoder to sync state
public function seek ( chunk: Int ) : Int;
// Decode one input chunk to PCM samples
function decode( InBuf : haxe.io.BytesData, InOff: Int, Chan: Int, OutBuf : Array<Float>, OutOff: Int ) : Int;
// Return output length based on count of input samples
Expand All @@ -35,6 +38,10 @@ class Decoder implements IDecoder {
throw("Please specify in subclass");
return 0;
}
// Most of decoders have no problem with that
public function seek ( chunk: Int ) : Int {
return chunk;
}
// Common standard decoder
public function decodeLength(chunks: Int) : Int {
return chunks*sampleLength;
Expand Down
16 changes: 16 additions & 0 deletions fmt/DecoderIMAADPCM.hx
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,11 @@ class IMAADPCM {
spb = samples;
}

public function reset(): Int {
proceed = 0;
return resync;
}

function calc(nibble: Int): Float {
var diff: Int;
step = ima_step_table[index];
Expand Down Expand Up @@ -113,6 +118,16 @@ class DecoderIMAADPCM extends fmt.Decoder {
}
}

public override function seek ( chunk: Int ) : Int {
var chu: Int;
var res: Int = 1;
for (channel in channels) {
res = channel.reset();
}
chu = Math.floor(chunk / res) * res;
return chu;
}

public override function decodeLength(chunks: Int): Int {
return channels[0].decodeLength(chunks);
}
Expand All @@ -121,3 +136,4 @@ class DecoderIMAADPCM extends fmt.Decoder {
return channels[Chan].decode(InBuf, Off, OutBuf, OutOff);
}
}

7 changes: 4 additions & 3 deletions fmt/File.hx
Original file line number Diff line number Diff line change
Expand Up @@ -140,12 +140,13 @@ class File implements IFile {
public function seek(Pos: Float): Float {
if (ready() != 1) return 0;
var sample = Math.ceil( Pos * rate ); // Wanted sample number
var chunk = Math.ceil( sample / sndDecoder.sampleLength ); // Wanted sample chunk
var chunk = sndDecoder.seek(Math.ceil( sample / sndDecoder.sampleLength )); // Wanted sample chunk
var offset = chunk * chunkSize + dataOff; // Offset, where to seek
if (offset > bufsize) // Round to maximal ready
offset = Math.ceil( (bufsize - dataOff) / chunkSize ) * chunkSize + dataOff;
offset = Math.floor( (bufsize - dataOff) / chunkSize ) * chunkSize + dataOff;
Readed = offset; // Seek to required offset
sample = Math.ceil( (offset - dataOff) / chunkSize ); // Get final selected sample
sample = Math.ceil( (offset - dataOff) / chunkSize ) * sndDecoder.sampleLength; // Get final selected sample
trace("Sync to Pos "+Pos+"; sample = "+sample+"; offset="+offset+"; res="+(sample/rate));
return sample / rate;
}

Expand Down
16 changes: 10 additions & 6 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,10 @@
<a href="javascript:doPlay('test.gsm')">doPlay('test.gsm')</a>
<a href="javascript:doPlay('test.au')">doPlay('test.au')</a>
<a href="javascript:doPlay('direct-5683.au')">doPlay('direct-5683.au')</a>
<a href="javascript:doPlay('adpcm_8k.wav')">doPlay('adpcm_8k.wav')</a>
<a href="javascript:doPlay('ADPCM.wav')">doPlay('ADPCM.wav')</a>
<a href="javascript:doPlay('ADPCM8k.wav')">doPlay('ADPCM8k.wav')</a>
<a href="javascript:doPlay('ADPCMmono.wav')">doPlay('ADPCMmono.wav')</a>
<a href="javascript:doStop()">doStop()</a>
<br />
<a href="javascript:setVolume(5.0)">Volume 500%</a>
Expand All @@ -105,20 +109,20 @@
<div id="InfoSound"></div>
<div id="InfoState"></div>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
width="300"
height="20"
width="2000"
height="3000"
id="haxe"
align="middle">
<param name="movie" value="wavplayer.swf?gui=full&h=20&w=300&sound=test-vf-44100.au&"/>
<param name="movie" value="wavplayer-debug.swf?gui=full&h=20&w=300&sound=test-vf-44100.au&"/>
<param name="allowScriptAccess" value="always" />
<param name="quality" value="high" />
<param name="scale" value="noscale" />
<param name="salign" value="lt" />
<param name="bgcolor" value="#dddddd"/>
<embed src="wavplayer.swf?gui=full&h=20&w=300&sound=test-vf-44100.au&"
<embed src="wavplayer-debug.swf?gui=full&h=20&w=300&sound=test-vf-44100.au&"
bgcolor="#dddddd"
width="300"
height="20"
width="2000"
height="3000"
name="haxe"
quality="high"
align="middle"
Expand Down
18 changes: 9 additions & 9 deletions org/xiph/system/AudioSink.hx
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ class AudioSink extends flash.events.EventDispatcher {
var fill : Bool;
var size : Int;
public var pos : Float;
public var volume(getVolume, setVolume): Float;
public var pan(getPan, setPan): Float;
public var soundTransform(getST, setST): SoundTransform;
public var volume(get_volume, set_volume): Float;
public var pan(get_pan, set_pan): Float;
public var soundTransform(get_soundTransform, set_soundTransform): SoundTransform;

var s : Sound;
var sch : SoundChannel;
Expand All @@ -66,35 +66,35 @@ class AudioSink extends flash.events.EventDispatcher {
sch = null;
}

public function setVolume(volume: Float): Float {
public function set_volume(volume: Float): Float {
this.schtr.volume=volume;
this.soundTransform = this.soundTransform;
return volume;
}

public function getVolume(): Float {
public function get_volume(): Float {
return this.schtr.volume;
}

public function setPan(pan: Float): Float {
public function set_pan(pan: Float): Float {
this.schtr.pan=pan;
this.soundTransform = this.soundTransform;
return this.schtr.pan;
}

public function getPan(): Float {
public function get_pan(): Float {
return this.schtr.pan;
}

public function setST(st: SoundTransform): SoundTransform {
public function set_soundTransform(st: SoundTransform): SoundTransform {
this.schtr = st;
if (this.sch!=null) {
this.sch.soundTransform = this.schtr;
}
return this.schtr;
}

public function getST(): SoundTransform {
public function get_soundTransform(): SoundTransform {
return this.schtr;
}

Expand Down
2 changes: 1 addition & 1 deletion release.hxml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
-swf9 wavplayer.swf
-swf wavplayer.swf
-main WavPlayer
-swf-version 10
-swf-header 40:40:40:7f7f7f
Expand Down
Binary file modified wavplayer-debug.swf
Binary file not shown.
Binary file modified wavplayer.swf
Binary file not shown.

0 comments on commit aee17a0

Please sign in to comment.