VB和c#取得mp3长度

简介:

<< VB.Net >>

 
  
  1. Imports System.IO
  2. Imports Microsoft.Win32
 
  
  1. ' API 宣告
  2. Private Declare Function mciSendStringA Lib "Winmm.dll" _
  3. (ByVal lpszCommand As String, ByVal lpszReturnString As String, _
  4. ByVal cchReturn As Integer, ByVal hwndCallback As IntPtr) As Integer

 
  
  1. Private Sub Button1_Click(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click
  2. MessageBox.Show(Cvt2HMS(GetMediaLen("C:\音樂欣賞\Candy Shop.mp3")))
  3. MessageBox.Show(Cvt2HMS(GetMediaLen("C:\音樂欣賞\國境之南.wmv")))
  4. MessageBox.Show(Cvt2HMS(GetMediaLen("C:\音樂欣賞\Time to say goodbye.wma")))
  5. MessageBox.Show(Cvt2HMS(GetMediaLen("C:\音樂欣賞\寶貝.flv")))
  6. End Sub

 
  
  1. ' 取得多媒體檔案長度
  2. Private Function GetMediaLen(ByVal File As String) As Long
  3. Dim key As String = "SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions"
  4. Dim RegKey As RegistryKey = Registry.LocalMachine.OpenSubKey(key)
  5. Dim FileExt As String = (Path.GetExtension(File).Replace(".", ""))
  6. Dim tp As String = RegKey.GetValue(FileExt, "MPEGVideo")
  7. RegKey.Close()
  8. Dim tm As New String(Chr(0), 128)
  9. Dim cmd As String
  10. cmd = "open """ & File & """ type " & tp & " alias Media"
  11. If mciSendStringA(cmd, vbNullString, 0, 0) = 0 Then
  12. If mciSendStringA("status Media length", tm, tm.Length, 0) = 0 Then
  13. If tm <> "" Then GetMediaLen = Convert.ToInt32(tm) \ 1000
  14. End If
  15. mciSendStringA("close Media", vbNullString, 0, 0)
  16. End If
  17. End Function

 
  
  1. ' 轉換成時分秒
  2. Private Function Cvt2HMS(ByVal sec As Long) As String
  3. Dim h, m, s As Integer
  4. Cvt2HMS = ""
  5. h = sec \ 3600
  6. If h > 0 Then Cvt2HMS &= h.ToString & "時"
  7. m = (sec Mod 3600) \ 60
  8. If m > 0 Then Cvt2HMS &= m.ToString & "分"
  9. s = (sec Mod 3600) Mod 60
  10. If s > 0 Then Cvt2HMS &= s.ToString & "秒"
  11. End Function

<< C# >>

 
  
  1. using System.IO;
  2. using Microsoft.Win32;
 
  
  1. // API 宣告
  2. [DllImport("winmm.dll", EntryPoint = "mciSendString", CharSet = CharSet.Auto)]
  3. public static extern int mciSendString(
  4. string lpstrCommand, string lpstrReturnString,
  5. int uReturnLength, int hwndCallback);

 
  
  1. private void button1_Click(object s, EventArgs e)
  2. {
  3. MessageBox.Show(GetMediaLen(@"D:\音樂欣賞\Dirty.mp3").ToString() + " Sec");
  4. }

 
  
  1. // 取得多媒體檔案長度
  2. private long GetMediaLen(string File)
  3. {
  4. long RetVal = 0;
  5. string key = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\MCI Extensions";
  6. RegistryKey RegKey = Registry.LocalMachine.OpenSubKey(key);
  7. string FileExt = Path.GetExtension(File).Replace(".", "");
  8. string tp = RegKey.GetValue(FileExt, "MPEGVideo").ToString();
  9. RegKey.Close();
  10. string tm = new string((char)0, 128);
  11. if (mciSendString("open \"" + File + "\" type " + tp + " alias Media", null, 0, 0) == 0)
  12. {
  13. if (mciSendString("status Media length", tm, tm.Length, 0) == 0)
  14. {
  15. tm = tm.Trim((char)0);
  16. if (!string.IsNullOrEmpty(tm)) RetVal = Convert.ToInt64(tm) / 1000;
  17. }
  18. mciSendString("close Media", null, 0, 0);
  19. }
  20. return RetVal;
  21. } 本文转自94cool博客园博客,原文链接http://www.cnblogs.com/94cool/archive/2009/08/31/1557020.html,如需转载请自行联系原作者
相关文章
|
C# API
c# 播放mp3
转载:http://www.cnblogs.com/igrl/archive/2010/03/29/1699975.html /// /// 播放MP3文件 /// public class Mp3Player { //定义API函数使用的字符串变量 [MarshalAs(UnmanagedType.
1268 0
|
11月前
|
XML 前端开发 C#
C#编程实践:解析HTML文档并执行元素匹配
通过上述步骤,可以在C#中有效地解析HTML文档并执行元素匹配。HtmlAgilityPack提供了一个强大而灵活的工具集,可以处理各种HTML解析任务。
440 19
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
487 3
|
监控 算法 C#
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
C#与Halcon联合编程实现鼠标控制图像缩放、拖动及ROI绘制
2445 0
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
1558 12
|
设计模式 C# 图形学
Unity 游戏引擎 C# 编程:一分钟浅谈
本文介绍了在 Unity 游戏开发中使用 C# 的基础知识和常见问题。从 `MonoBehavior` 类的基础用法,到变量和属性的管理,再到空引用异常、资源管理和性能优化等常见问题的解决方法。文章还探讨了单例模式、事件系统和数据持久化等高级话题,旨在帮助开发者避免常见错误,提升游戏开发效率。
801 4
|
安全 程序员 编译器
C#一分钟浅谈:泛型编程基础
在现代软件开发中,泛型编程是一项关键技能,它使开发者能够编写类型安全且可重用的代码。C# 自 2.0 版本起支持泛型编程,本文将从基础概念入手,逐步深入探讨 C# 中的泛型,并通过具体实例帮助理解常见问题及其解决方法。泛型通过类型参数替代具体类型,提高了代码复用性和类型安全性,减少了运行时性能开销。文章详细介绍了如何定义泛型类和方法,并讨论了常见的易错点及解决方案,帮助读者更好地掌握这一技术。
431 11