Update Cryville.Audio.

This commit is contained in:
2023-11-01 01:01:13 +08:00
parent 724cb10bc1
commit b57959b4bf
29 changed files with 1289 additions and 967 deletions

View File

@@ -268,12 +268,12 @@ namespace Cryville.Crtr {
"\nStates: c{0} / b{1}",
cbus.ActiveStateCount, bbus.ActiveStateCount
);
var aTime = Game.AudioClient.Position;
var aTime = Game.AudioClient.Position - atime0;
var iTime = inputProxy.GetTimestampAverage();
statusbuf.AppendFormat(
"\nSTime: {0:G9}s {5} {6}\nATime: {1:G9}s ({3:+0.0ms;-0.0ms;0}) {5} {6}\nITime: {2:G9}s ({4:+0.0ms;-0.0ms;0}) {5} {7}",
cbus.Time, aTime, iTime,
(aTime - atime0 - cbus.Time) * 1e3,
(aTime - cbus.Time) * 1e3,
(iTime - cbus.Time) * 1e3,
forceSyncFrames != 0 ? "(force sync)" : "",
paused ? "(paused)" : "",
@@ -529,7 +529,7 @@ namespace Cryville.Crtr {
logs.text = "";
}
Game.AudioSequencer.Playing = true;
atime0 = Game.AudioClient.Position - startOffset;
atime0 = Game.AudioClient.BufferPosition - startOffset;
inputProxy.SyncTime(cbus.Time);
inputProxy.Activate();
}

View File

@@ -1,4 +1,4 @@
using Cryville.Audio.Source;
using Cryville.Audio.Source.Libav;
using System.Collections.Generic;
using System.IO;

View File

@@ -26,6 +26,7 @@ namespace Cryville.Crtr {
public static string GameDataPath { get; private set; }
public static string UnityDataPath { get; private set; }
public static IAudioDeviceManager AudioManager;
public static IAudioDevice AudioDevice;
public static AudioClient AudioClient;
public static SimpleSequencerSource AudioSequencer;
public static SimpleSequencerSession AudioSession;
@@ -89,6 +90,16 @@ namespace Cryville.Crtr {
ffmpeg.RootPath = "";
#else
#error No FFmpeg search path.
#endif
#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN
EngineBuilder.Engines.Add(typeof(Audio.Wasapi.MMDeviceEnumeratorWrapper));
EngineBuilder.Engines.Add(typeof(Audio.WaveformAudio.WaveDeviceManager));
#elif UNITY_ANDROID
EngineBuilder.Engines.Add(typeof(Audio.AAudio.AAudioManager));
EngineBuilder.Engines.Add(typeof(Audio.OpenSLES.Engine));
#else
#error No audio engine defined.
#endif
while (true) {
try {
@@ -99,8 +110,13 @@ namespace Cryville.Crtr {
}
else {
Logger.Log("main", 1, "Audio", "Using audio API: {0}", AudioManager.GetType().Namespace);
AudioClient = AudioManager.GetDefaultDevice(DataFlow.Out).Connect();
AudioClient.Init(AudioClient.DefaultFormat);
AudioDevice = AudioManager.GetDefaultDevice(DataFlow.Out);
AudioClient = AudioDevice.Connect(AudioDevice.DefaultFormat, AudioDevice.MinimumBufferSize + AudioDevice.BurstSize);
Logger.Log(
"main", 1, "Audio",
"Audio Output = {{ Name = \"{0}\", BurstSize = {1}, Format = {2}, BufferSize = {3} }}",
AudioDevice.Name, AudioDevice.BurstSize, AudioClient.Format, AudioClient.BufferSize
);
AudioClient.Source = AudioSequencer = new SimpleSequencerSource();
AudioSession = AudioSequencer.NewSession();
AudioSequencer.Playing = true;
@@ -147,6 +163,7 @@ namespace Cryville.Crtr {
try {
AudioClient.Dispose();
AudioSequencer.Dispose();
AudioDevice.Dispose();
AudioManager.Dispose();
}
catch (Exception ex) {