You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 10:04:42