CodeWalker/Forms/AwcForm.cs
2017-09-21 20:33:05 +10:00

197 lines
4.6 KiB
C#

using CodeWalker.GameFiles;
using SharpDX.Multimedia;
using SharpDX.XAudio2;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CodeWalker.Forms
{
public partial class AwcForm : Form
{
public AwcFile Awc { get; set; }
private string fileName;
public string FileName
{
get { return fileName; }
set
{
fileName = value;
UpdateFormTitle();
}
}
public string FilePath { get; set; }
private bool Playing = false;
public AwcForm()
{
InitializeComponent();
}
private void UpdateFormTitle()
{
Text = fileName + " - AWC Player - CodeWalker by dexyfex";
}
public void LoadAwc(AwcFile awc)
{
Awc = awc;
DetailsPropertyGrid.SelectedObject = awc;
//MainTabControl.SelectedTab = DetailsTabPage;//remove this
fileName = awc?.Name;
if (string.IsNullOrEmpty(fileName))
{
fileName = awc?.FileEntry?.Name;
}
PlayListView.Items.Clear();
if (awc.Audios != null)
{
foreach (var audio in awc.Audios)
{
var item = PlayListView.Items.Add(audio.Name);
item.SubItems.Add(audio.Type);
item.SubItems.Add(audio.LengthStr);
item.Tag = audio;
}
}
UpdateFormTitle();
}
private void Play()
{
if (PlayListView.SelectedItems.Count != 1) return;
var item = PlayListView.SelectedItems[0];
var audio = item.Tag as AwcAudio;
if (audio == null) return;
//see https://github.com/sharpdx/SharpDX-Samples/blob/master/Desktop/XAudio2/PlaySound/Program.cs
//see https://github.com/sharpdx/SharpDX-Samples/blob/master/Desktop/XAudio2/AudioPlayerApp/AudioPlayer.cs
//var mstrm = new MemoryStream(audio.Data);
//var sstrm = new SoundStream(mstrm);
//SourceVoice sv=new SourceVoice()
var mstrm = audio.GetWavStream();
////var mdata = ((MemoryStream)mstrm).GetBuffer();
////File.WriteAllBytes("C:\\test2.wav", mdata);
////return;
//var sstrm = new SoundStream(mstrm);
//var waveFormat = sstrm.Format;
//var buffer = new AudioBuffer
//{
// Stream = sstrm.ToDataStream(),
// AudioBytes = (int)sstrm.Length,
// Flags = BufferFlags.EndOfStream
//};
//sstrm.Close();
//var xaudio2 = new XAudio2();//cache this...
//var masteringVoice = new MasteringVoice(xaudio2);//cache this...
//var sourceVoice = new SourceVoice(xaudio2, waveFormat, true);
////sourceVoice.BufferEnd += (context) => Console.WriteLine(" => event received: end of buffer");
//sourceVoice.SubmitSourceBuffer(buffer, sstrm.DecodedPacketsInfo);
//sourceVoice.Start();
//while (sourceVoice.State.BuffersQueued > 0) // && !IsKeyPressed(ConsoleKey.Escape))
//{
// Thread.Sleep(10);
//}
//sourceVoice.DestroyVoice();
//sourceVoice.Dispose();
//buffer.Stream.Dispose();
//masteringVoice.Dispose();//on form exit?
//xaudio2.Dispose();//on form exit?
Playing = true;
}
private void Pause()
{
Playing = false;
}
private void Prev()
{
}
private void Next()
{
}
private void PositionTrackBar_Scroll(object sender, EventArgs e)
{
}
private void PlayButton_Click(object sender, EventArgs e)
{
if (Playing) Pause();
else Play();
}
private void PrevButton_Click(object sender, EventArgs e)
{
Prev();
}
private void NextButton_Click(object sender, EventArgs e)
{
Next();
}
private void VolumeButton_Click(object sender, EventArgs e)
{
}
private void VolumeTrackBar_Scroll(object sender, EventArgs e)
{
}
}
public class AudioPlayer
{
}
}