能否使用C#检查OGG文件属性(尤其是循环时间码)?
使用C#读取OGG文件属性及循环时间码
当然可以用C#来读取OGG文件的属性,包括你关注的循环时间码!最便捷的方式是借助成熟的第三方库——NVorbis,它专门针对OGG Vorbis音频文件做了解析优化,能轻松获取各类元数据和音频参数。
步骤1:安装NVorbis库
你可以通过NuGet快速安装:
- 在Visual Studio的NuGet包管理器中搜索「NVorbis」并安装;
- 或者在Package Manager Console中执行命令:
Install-Package NVorbis
步骤2:编写代码提取循环时间码
下面是一个完整的示例,展示如何打开OGG文件、读取基础属性,并提取循环时间信息:
using NVorbis; using System; class OggLoopInfoReader { static void Main(string[] args) { // 替换为你的OGG文件路径 var oggFilePath = @"C:\your-file.ogg"; using (var vorbisReader = new VorbisReader(oggFilePath)) { // 先输出一些基础音频属性 Console.WriteLine($"音频采样率: {vorbisReader.SampleRate} Hz"); Console.WriteLine($"声道数量: {vorbisReader.Channels}"); Console.WriteLine($"总时长: {TimeSpan.FromSeconds(vorbisReader.TotalTime):hh\\:mm\\:ss\\.fff}"); // 读取循环标签(LOOPSTART和LOOPEND是OGG Vorbis标准的循环标记) var loopStartTag = vorbisReader.Comments.GetTag("LOOPSTART"); var loopEndTag = vorbisReader.Comments.GetTag("LOOPEND"); if (!string.IsNullOrWhiteSpace(loopStartTag) && !string.IsNullOrWhiteSpace(loopEndTag)) { // 注意:标签值存储的是样本索引,需要转换为时间 if (long.TryParse(loopStartTag, out var startSample) && long.TryParse(loopEndTag, out var endSample)) { var loopStartTime = TimeSpan.FromSeconds((double)startSample / vorbisReader.SampleRate); var loopEndTime = TimeSpan.FromSeconds((double)endSample / vorbisReader.SampleRate); Console.WriteLine("\n循环时间信息:"); Console.WriteLine($"起始时间: {loopStartTime:hh\\:mm\\:ss\\.fff}"); Console.WriteLine($"结束时间: {loopEndTime:hh\\:mm\\:ss\\.fff}"); Console.WriteLine($"循环时长: {loopEndTime - loopStartTime:hh\\:mm\\:ss\\.fff}"); } else { Console.WriteLine("循环标签格式无效,无法解析为样本索引"); } } else { Console.WriteLine("\n该OGG文件未包含循环时间码信息"); } } } }
关键细节说明
- 循环标签的含义:
LOOPSTART和LOOPEND是OGG Vorbis中约定的循环标记,它们的值是音频的样本索引,需要通过「样本数 ÷ 采样率」转换为实际时间。 - 异常处理:代码中用了
long.TryParse来避免标签值格式错误导致的崩溃,同时也做了空值检查——不是所有OGG文件都会带有循环标签,一定要处理这种情况。 - 其他OGG格式:如果你的OGG文件包含视频(比如OGG Theora),NVorbis可能无法处理,这时需要专门的多媒体解析库,但对于纯音频OGG,NVorbis完全够用。
内容的提问来源于stack exchange,提问作者DesMondesBlut
相关产品推荐
相关产品推荐

