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);
}
}