Files
m3uTool/Tests/Mp3EncoderTests.cs

185 lines
6.7 KiB
C#

using System;
using System.Diagnostics;
using System.IO;
using NUnit.Framework;
namespace m3uTool.Tests
{
[TestFixture]
public class Mp3EncoderTests : ProgressCallbackTestBase
{
private static void FilesAreEqual(FileInfo file1, FileInfo file2)
{
//Assert.AreEqual(file1.Length, file2.Length);
int filePosition = 0;
using (FileStream outputOptionFs = file1.OpenRead())
using (var outputOptionSr = new StreamReader(outputOptionFs))
using (FileStream streamingFs = file2.OpenRead())
using (var streamingSr = new StreamReader(streamingFs))
{
var outputOptionBuffer = new char[4096];
var streamingBuffer = new char[4096];
while (!outputOptionSr.EndOfStream)
{
int outputOptionReadLength = outputOptionSr.Read(outputOptionBuffer, 0, outputOptionBuffer.Length);
int streamingReadLength = streamingSr.Read(streamingBuffer, 0, streamingBuffer.Length);
Assert.AreEqual(outputOptionReadLength, streamingReadLength);
Assert.AreEqual(outputOptionBuffer, streamingBuffer, "offset : " + filePosition);
filePosition += outputOptionBuffer.Length;
}
}
}
/// <summary>
/// Call this method from the worker thread to increase the progress
/// counter by a specified value.
/// </summary>
public override void StepTo(int val)
{
if (val%10 == 0)
base.StepTo(val);
}
/// <summary>
/// Tests this instance.
/// </summary>
[Test]
public void StreamingTest()
{
String inputWav = "44_16_s.wav";
string encodedMp3 = "encodedMp3.mp3";
String decodedWav = "decodedWav.wav";
String reencodedMp3 = "reencodedMp3.mp3";
using (var fileStream = new FileStream(encodedMp3, FileMode.OpenOrCreate))
{
var encOpts = new Mp3EncodingOptions();
encOpts.Outfile = "-";
encOpts.Infile = "-";
using (ProcessStreamWrapper enc = new Mp3Encoder(encOpts, fileStream))
{
enc.ProgressCallback = this;
enc.ProcessInput(inputWav);
}
}
Debug.WriteLine("Finished writing " + encodedMp3);
Debug.WriteLine("Begin writing " + decodedWav);
using (var fileStream = new FileStream(decodedWav, FileMode.OpenOrCreate))
{
var wavOpts = new Mp3EncodingOptions();
wavOpts.Infile = "-";
wavOpts.Outfile = "-";
// wavOpts.MonoDownmixing = true;
wavOpts.Mp3Input = true;
wavOpts.DecodeWav = true;
using (ProcessStreamWrapper enc = new Mp3Encoder(wavOpts, fileStream))
{
enc.ProgressCallback = this;
enc.ProcessInput(encodedMp3);
}
}
Debug.WriteLine("Finished writing " + decodedWav);
using (var fileStream = new FileStream(reencodedMp3, FileMode.OpenOrCreate))
{
var encOpts = new Mp3EncodingOptions();
encOpts.Outfile = "-";
encOpts.Infile = "-";
using (ProcessStreamWrapper enc = new Mp3Encoder(encOpts, fileStream))
{
enc.ProgressCallback = this;
enc.ProcessInput(decodedWav);
}
}
var reencodedProperties = new Mp3FileProperties(reencodedMp3);
var encodedProperties = new Mp3FileProperties(encodedMp3);
Assert.AreEqual(encodedProperties.FileLength, reencodedProperties.FileLength);
}
/// <summary>
///
/// </summary>
[Test]
public void StreamingVsOutputMp3DecodingTest()
{
String input = "44_16_s.mp3";
String outputOptionDecoded = "outputOptionDecoded.wav";
String streamingDecoded = "streamingDecode.wav";
var encOpts = new Mp3EncodingOptions();
encOpts.Outfile = "-";
encOpts.Infile = "-";
encOpts.Mp3Input = true;
encOpts.DecodeWav = true;
using (var fileStream = new FileStream(streamingDecoded, FileMode.OpenOrCreate))
{
using (ProcessStreamWrapper enc = new Mp3Encoder(encOpts, fileStream))
{
enc.ProgressCallback = this;
enc.ProcessInput(input);
}
}
encOpts.Outfile = outputOptionDecoded;
using (ProcessStreamWrapper enc = new Mp3Encoder(encOpts))
{
enc.ProgressCallback = this;
enc.ProcessInput(input);
}
var outputOptionFileInfo = new FileInfo(outputOptionDecoded);
var streamingFileInfo = new FileInfo(streamingDecoded);
FilesAreEqual(outputOptionFileInfo, streamingFileInfo);
}
/// <summary>
///
/// </summary>
[Test]
public void StreamingVsOutputMp3EncodingTest()
{
//String inputWav = "44_16_s.wav";
String inputWav = "test1.wav";
String outputOptionEncodedMp3 = "outputOptionEncodedMp3.mp3";
String streamingEncodedMp3 = "streamingEncodedMp3.mp3";
var encOpts = new Mp3EncodingOptions();
encOpts.Outfile = "-";
encOpts.Infile = "-";
using (var fs = new FileStream(streamingEncodedMp3, FileMode.OpenOrCreate))
{
using (ProcessStreamWrapper enc = new Mp3Encoder(encOpts, fs))
{
enc.ProgressCallback = this;
enc.ProcessInput(inputWav);
}
}
encOpts.Outfile = outputOptionEncodedMp3;
using (ProcessStreamWrapper enc = new Mp3Encoder(encOpts))
{
enc.ProgressCallback = this;
enc.ProcessInput(inputWav);
}
var outputOptionProperties = new Mp3FileProperties(outputOptionEncodedMp3);
var streamingProperties = new Mp3FileProperties(streamingEncodedMp3);
Assert.AreEqual(outputOptionProperties.LengthInSeconds, streamingProperties.LengthInSeconds);
// FilesAreEqual(outputOptionFileInfo, streamingFileInfo);
}
}
}