Files
ui/Assets/SpeakerModule.cs
2026-03-03 19:13:28 -05:00

71 lines
2.1 KiB
C#

using System;
using System.IO;
using UnityEngine;
public class SpeakerModule : ModuleBase
{
[Header("Selected Audio")]
public string audioFilePath = "";
public string audioFileName = "";
public byte[] audioBytes;
public override string moduleType => "Speaker";
public override string moduleName => "Speaker Module";
// Called by UI after user picks a file
public void SetAudioFile(string path)
{
if (string.IsNullOrEmpty(path) || !File.Exists(path))
{
Debug.LogWarning("[SpeakerModule] Invalid audio file path.");
ClearAudio();
return;
}
audioFilePath = path;
audioFileName = Path.GetFileName(path);
try
{
audioBytes = File.ReadAllBytes(path);
Debug.Log($"[SpeakerModule] Loaded audio file: {audioFileName} ({audioBytes.Length} bytes)");
}
catch (Exception e)
{
Debug.LogError($"[SpeakerModule] Failed to read audio file: {e.Message}");
ClearAudio();
}
}
// Called by UI when user presses the shared Send button
public void SendAudioToHardware()
{
if (audioBytes == null || audioBytes.Length == 0)
{
Debug.LogWarning("[SpeakerModule] No audio selected to send.");
return;
}
// TODO: replace with your real control library call
Debug.Log($"[SpeakerModule] Sending audio '{audioFileName}' ({audioBytes.Length} bytes) to hardware");
// Example:
// ControlLibrary.send_speaker_audio(Int32.Parse(moduleID), audioBytes, audioBytes.Length);
// or chunk it if your library requires.
}
public void PlayAudioOnHardware()
{
// TODO: Replace with your real ControlLibrary call
// Example:
// ControlLibrary.speaker_play(Int32.Parse(moduleID));
Debug.Log($"[SpeakerModule] Play requested on hardware for '{audioFileName}'.");
}
private void ClearAudio()
{
audioFilePath = "";
audioFileName = "";
audioBytes = null;
}
}