namespace OCES.Resonance.Core; /// /// 音频文件扫描器,负责递归扫描目录并识别音频文件 /// public class AudioFileScanner { static readonly string[] SupportedExtensions = [ ".wav", ".mp3", ".flac", ".aiff", ".aif", ".m4a", ".ogg", ".wma", ".bwf", ".wav64", ]; /// /// 扫描指定目录,返回所有音频文件路径 /// /// 要扫描的目录路径 /// 是否递归扫描子目录 /// 音频文件路径集合 public IEnumerable ScanDirectory(string directoryPath, bool recursive = true) { if (!Directory.Exists(directoryPath)) { throw new DirectoryNotFoundException($"目录不存在:{directoryPath}"); } SearchOption searchOption = recursive ? SearchOption.AllDirectories : SearchOption.TopDirectoryOnly; return SupportedExtensions .SelectMany(ext => Directory.EnumerateFiles(directoryPath, $"*{ext}", searchOption)) .Where(IsSupportedAudioFile); } /// /// 判断文件是否为支持的音频格式 /// /// 文件路径 /// 是否为支持的音频格式 public bool IsSupportedAudioFile(string filePath) { if (string.IsNullOrWhiteSpace(filePath)) { return false; } var extension = Path.GetExtension(filePath).ToLowerInvariant(); return SupportedExtensions.Contains(extension); } }