Merge pull request #6089 from reaperrr/wavlength

Add WavSoundLength to show track length in music player
This commit is contained in:
Paul Chote
2014-08-20 23:56:02 +12:00
2 changed files with 27 additions and 2 deletions

View File

@@ -91,6 +91,25 @@ namespace OpenRA.FileFormats
}
}
public static float WaveLength(Stream s)
{
s.Position = 12;
var fmt = s.ReadASCII(4);
if (fmt != "fmt ")
return 0;
s.Position = 22;
var channels = s.ReadInt16();
var sampleRate = s.ReadInt32();
s.Position = 34;
var bitsPerSample = s.ReadInt16();
var length = s.Length * 8;
return length / (channels * sampleRate * bitsPerSample);
}
public byte[] DecodeAdpcmData()
{
var s = new MemoryStream(RawOutput);

View File

@@ -32,6 +32,9 @@ namespace OpenRA.GameRules
Exists = true;
using (var s = GlobalFileSystem.Open(Filename))
if (Filename.ToLowerInvariant().EndsWith("wav"))
Length = (int)WavLoader.WaveLength(s);
else
Length = (int)AudLoader.SoundLength(s);
}
@@ -42,6 +45,9 @@ namespace OpenRA.GameRules
Exists = true;
using (var s = GlobalFileSystem.Open(Filename))
if (Filename.ToLowerInvariant().EndsWith("wav"))
Length = (int)WavLoader.WaveLength(s);
else
Length = (int)AudLoader.SoundLength(s);
}
}