获取mp3文件长度

2023-11-29

我目前正在尝试用 C# 编写一个音频播放器。我正在使用 BASS 库来处理播放音乐,但现在我在获取歌曲长度方面遇到了小问题。

好吧,我读过 BASS 文档并找到了一种方法: 我需要做的“所有”就是

int stream = Bass.BASS_StreamCreateFile(filepath,....);
int length = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));

在大多数情况下,我都能得到有效的歌曲长度。问题就从这里开始了。据我所知,流创建操作非常昂贵(如果我弄错了,请纠正我)并且创建流只是为了获得歌曲的长度看起来有点愚蠢。

所以我的问题是:有没有其他方法可以在不创建蒸汽文件的情况下获得它(不是那么昂贵)。稍后我会考虑读取 id3 标签。创建该流是否是“无论如何都必须完成的邪恶”,即使我尝试使用其他库获取它,它也会做完全相同的事情?


您可以使用Microsoft.WindowsAPICodePack.Shell:

using Microsoft.WindowsAPICodePack.Shell;

然后像这样编码:

string file = "myfile.mp3"
ShellFile so = ShellFile.FromFilePath(file);
double 100nanoseconds;
double.TryParse(so.Properties.System.Media.Duration.Value.ToString(), out 100nanoseconds);

有一个代码项目也可以帮助你

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取mp3文件长度 的相关文章

  • GCC C++ (ARM) 和指向结构体字段的 const 指针

    假设有一个简单的测试代码 typedef struct int first int second int third type t define ADDRESS 0x12345678 define REGISTER type t ADDRE
  • 获取两个字符串之间的公共部分c# [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要的是获取两个单词之间的共同部分并获取差异 例子 场景1 word1 感言 word2 Test 将返回 公共部分Test 不同之
  • 当我单击 C# 中的“取消”按钮时重定向到新页面(Web 部分)

    Cancel button tc new TableCell btnCancel new Button btnCancel Text Cancel btnCancel Click new EventHandler btnCanel Clic
  • 有什么工具可以说明每种方法运行需要多长时间?

    我的程序的某些部分速度很慢 我想知道是否有我可以使用的工具 例如它可以告诉我可以运行 methodA 花了 100ms 等等 或者类似的有用信息 如果您使用的是 Visual Studio Team System 性能工具 中有一个内置分析
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • ZLIB 解压缩

    我编写了一个小型应用程序 该应用程序应该解压缩以 gzip deflate 格式编码的数据 为了实现这一点 我使用 ZLIB 库 使用解压缩功能 问题是这个功能不起作用 换句话说 数据不是未压缩的 我在这里发布代码 int decompre
  • 为什么 BOOST_FOREACH 不完全等同于手工编码的?

    From 增强文档 http www boost org doc libs 1 48 0 doc html foreach html foreach introduction what is literal boost foreach li
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • 在 C# 中将位从 ulong 复制到 long

    所以看来 NET 性能计数器类型 http msdn microsoft com en us library system diagnostics performancecounter aspx有一个恼人的问题 它暴露了long对于计数器
  • 转到 C# WPF 中的第一页

    我正在 WPF 中使用导航服务 为了导航到页面 我使用 this NavigationService Navigate new MyPage 为了返回我使用 this NavigationService GoBack 但是如何在不使用的情况
  • 禁用 LINQ 上下文的所有延迟加载或强制预先加载

    我有一个文档生成器 目前包含约 200 个项目的查询 但完成后可能会超过 500 个 我最近注意到一些映射表示延迟加载 这给文档生成器带来了一个问题 因为它需要根据生成的文档来访问所有这些属性 虽然我知道DataLoadOptions可以指
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • 组合框项目为空但数据源已满

    将列表绑定到组合框后 其 dataSource Count 为 5 但组合框项目计数为 0 怎么会这样 我习惯了 Web 编程 而且这是在 Windows 窗体中进行的 所以不行combo DataBind 方法存在 这里的问题是 我试图以
  • C# 创建数组的数组

    我正在尝试创建一个将使用重复数据的数组数组 如下所示 int list1 new int 4 1 2 3 4 int list2 new int 4 5 6 7 8 int list3 new int 4 1 3 2 1 int list4
  • 在 C 中复制两个相邻字节的最快方法是什么?

    好吧 让我们从最明显的解决方案开始 memcpy Ptr const char a b 2 调用库函数的开销相当大 编译器有时不会优化它 我不会依赖编译器优化 但即使 GCC 很聪明 如果我将程序移植到带有垃圾编译器的更奇特的平台上 我也不
  • Fluent NHibernate 日期时间 UTC

    我想创建一个流畅的 nhibernate 映射来通过以下方式映射 DateTime 字段 保存时 保存 UTC 值 读取时 调整为本地时区值 实现此映射的最佳方法是什么 就我个人而言 我会将日期存储在 UTC 格式的对象中 然后在读 写时在
  • 我应该在应用程序退出之前运行 Dispose 吗?

    我应该在应用程序退出之前运行 Dispose 吗 例如 我创建了许多对象 其中一些对象具有事件订阅 var myObject new MyClass myObject OnEvent OnEventHandle 例如 在我的工作中 我应该使
  • 如何查明CONFIG_FANOTIFY_ACCESS_PERMISSIONS是否启用?

    我想利用fanotify 7 http man7 org linux man pages man7 fanotify 7 html我遇到的问题是在某些内核上CONFIG FANOTIFY ACCESS PERMISSIONS不起作用 虽然C
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • WPF/数据集:如何通过 XAML 将相关表中的数据绑定到数据网格列中?

    我正在使用 WPF DataSet 连接到 SQL Server Express XAML 和 C Visual Studio 2013 Express 我从名为 BankNoteBook 的现有 SQL Server Express 数据

随机推荐

  • 在Java中根据子字符串对字符串进行排序[关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我有一个字符串列表def123 abc999 zzz000 abc123 zzz111 我希望对列表进行排序 使得前三个字符按升序排序 后三个字符按降序排序 所以输出应该是abc999
  • 在另一个程序的窗口中查找按钮的句柄

    我需要一些帮助 我在最后写了我的问题 并首先解释我的代码到底应该做什么 我正在制作一个可以与其他程序通信的程序 我需要我的软件做的是能够单击另一个程序上的按钮 我相信执行此操作的适当代码是 SendMessage hWnd Msg wPar
  • Google Cloud Platform 外部 IP 指向新加坡的实例,但显示在美国

    我购买了一个 GCP 虚拟机实例亚洲 东南1并预留了一个外部IP为此在同一地区 GCP控制台中显示的实例和IP信息似乎没问题 但是当我将网站部署到其中时 响应非常慢 我的静态IP 虚拟机实例所以我查找我的 IP 工具显示我的 IP 来自美国
  • 不兼容的类型:java.lang.Object 无法转换为 T

    这是我的代码 package datastructures import java util Iterator public class Stack
  • 对于我的情况,如何在 Oracle 中编写 SQL?

    所以 这是表格 create table person id number name varchar2 50 create table injury place id number place varchar2 50 create tabl
  • 如何在 iOS 上获取音频音量级别和音量更改通知?

    我正在编写一个非常简单的应用程序 按下按钮时会播放声音 由于当设备设置为静音时该按钮没有多大意义 因此我想在设备的音量为零时禁用它 然后当音量再次调高时重新启用它 我正在寻找一种可行的 并且 AppStore 安全的 方法检测当前音量设置并
  • 了解 Web 身份验证上下文中的 JSON Web 令牌 (JWT)

    Web 客户端 服务器身份验证上下文中有关 JWT 的一些声明 JWT 对于中间人攻击并不安全 从安全角度来说 从客户端向服务器发送 JWT 相当于发送哈希密码 JWT 可以携带用户详细信息作为有效负载 使用这些数据而不访问数据库中的实际数
  • 在不规则形状内渲染 CoreText

    我正在寻找有关实现渲染视图的指导NSAttributedString在有孔的多边形内 包裹并重排文本以适应几何形状 它不是CoreText这就是问题所在 但是将不规则形状划分为有序的蹲矩形序列的一般问题 类似的问题尚未得到完全解答 如何在
  • 如何在React Route中传递id

    当我想从产品列表中按 ID 查看产品时 我想构建一个页面 在我的应用程序文件中 我有类似的内容
  • 使用 jQuery 获取边框样式

    我如何使用 jQuery 获得边框样式 以下内容不起作用 get click function var x div css borderStyle alert x Check http jsfiddle net s7YAN 31 alert
  • Mozilla 3.0.8 和 Chrome 高度错误解决方法

    我有一个textarea里面一个div div div
  • 使用大小写“透视”键|值表会返回空白列... mySQL

    我正在尝试将键 值格式的数据转换为每个条目一行 源数据库是 mysql 我知道我需要使用 Case 语句才能进行透视 并且遵循了该站点上的一些示例来构建我的查询 但是 我只返回一列数据 其余列中为空白 源表格式 user id meta k
  • 分配时的 JavaScript 评估顺序

    JavaScript 在什么时候确定赋值的左侧 是在评估右侧之前还是之后 例如 这段代码的作用是什么 var arr thing 1 thing 2 thing 3 last true arr arr length 1 newField a
  • 通过 PHP 或任何其他脚本创建电子邮件地址

    我需要为我的用户创建代理电子邮件地址 电子邮件地址将类似于 email protected 但最好我想要更好看的电子邮件地址 例如 email protected 发送到此地址的电子邮件应转发到用户不会暴露的真实电子邮件地址 例如 emai
  • 无法对数组类型调用 add

    我得到了一些需要修改的代码 这是一个囚徒困境游戏 最初玩家被设置了这段代码到一个数组中 IPDPlayer currentPlayers new RandomPlayer new TFTPlayer new TFTPlayer new TF
  • 如何在pyglet中连续播放音乐

    我和我的朋友正在开发一款游戏 我们希望音乐在游戏运 行时循环播放 求助 好像没有重复播放音乐的功能 在当前版本的 pyglet 中 您应该使用SourceGroup 设置loop归因于True 然后您可以将其排队到Player播放它 snd
  • javascript倒计时器暂停恢复

    起初 我的倒计时器没有暂停和恢复功能 并且计时器运行得很好 现在我刚刚添加了该功能 暂停没有问题 但恢复时间有问题 时间不会从当前位置开始显示 也不会从那里开始倒计时 如何更改我的代码 pause click function Get cu
  • Android 浮动操作按钮未返回到初始位置

    如果 FAB 浮动操作按钮 在小吃栏出现之前隐藏 在 CoordinatorLayout 中 那么下次我显示 FAB 时 它会在旧位置绘制 不会向下移动到原始位置 如果当小吃栏消失时 FAB 可见 则一切都按预期工作 我错过了什么还是一个错
  • “Set-AzureRmDataFactoryV2”未被识别为 cmdlet 的名称

    我已经在 Ubuntu 16 04 上安装了 Powershell 6 0 0 尝试使用 Powershell 创建 Azure 数据工厂时出现以下错误 Set AzureRmDataFactoryV2 The term Set Azure
  • 获取mp3文件长度

    我目前正在尝试用 C 编写一个音频播放器 我正在使用 BASS 库来处理播放音乐 但现在我在获取歌曲长度方面遇到了小问题 好吧 我读过 BASS 文档并找到了一种方法 我需要做的 所有 就是 int stream Bass BASS Str