精华内容
下载资源
问答
  • MP3信息解析源码

    2012-08-27 22:00:58
    MP3的基本歌曲信息存在了MP3文件的最后128个字节里, 其结构是: 1-3 TAG (标签) 4-33 歌曲名(Take Me To Your Heart ) ...• 请写一段读MP3歌曲信息程序,要求信息存放在结构成员变量 中,最后打印出来。
  • 在写有关音乐播放的程序的时候有时需要解析文件的一些基本信息,例如MP3格式的文件中的 艺术家,专辑,歌曲名,比特率,专辑图片等等 直接对MP3文件编码进行分析的过程比较复杂,这里介绍一个库的使用,通过这个库...

    在写有关音乐播放的程序的时候有时需要解析文件的一些基本信息,例如MP3格式的文件中的 艺术家,专辑,歌曲名,比特率,专辑图片等等

    直接对MP3文件编码进行分析的过程比较复杂,这里介绍一个库的使用,通过这个库可以很方便的分析出MP3文件的信息

    该类库项目地址:http://www.codeproject.com/Articles/17890/Do-Anything-With-ID3

    得到ID3.dll,引用到项目中

    string path = @"G:\Music\周杰伦-轨迹.mp3";
    ID3Info info = new ID3Info(path, true);            //第二个参数表示是否加载数据

    ID3Info类有四个属性

      FilePath,FileName,ID3v1Info, ID3v2Info

      其中ID3v1Info有以下成员,具体说明可以参考

    http://baike.baidu.com/view/66078.htm#3

            string title = info.ID3v1Info.Title;        //标题
            string artist = info.ID3v1Info.Artist;        //作者
            string album = info.ID3v1Info.Album;        //专辑
            string comment = info.ID3v1Info.Comment;    //备注
            string genre = info.ID3v1Info.Genre;        //类型
            string year = info.ID3v1Info.Year            //出品年代

      ID3v2Info属性包含的数据比较复杂,一般用函数对其进行操作,主要有

      属性:

        AttachedPictureFrames  //可以MP3文件中含有的图片

      函数:    GetTextFrame  SetTextFrame  //获取歌曲信息

            string title = info.ID3v2Info.GetTextFrame("TIT2");
            string artist = info.ID3v2Info.GetTextFrame("TPE1");
            string album = info.ID3v2Info.GetTextFrame("TALB");
            string trckNumber = info.ID3v2Info.GetTextFrame("TRCK");
            string year = info.ID3v2Info.GetTextFrame("TYER");
            string genre = info.ID3v2Info.GetTextFrame("TCON");
            string cmm = info.ID3v2Info.GetTextFrame("COMM");
            
            info.ID3v2Info.SetTextFrame("TIT2", "歌曲标题");
            info.ID3v2Info.SetTextFrame("TPE1", "艺术家");
            info.ID3v2Info.SetTextFrame("TALB", "专辑");
            info.ID3v2Info.SetTextFrame("COMM", "备注");
            
            // 创建新封面
            string picuter = @"C:\Users\bomo\Desktop\pic.jpg";
            AttachedPictureFrame pic = new AttachedPictureFrame(FrameFlags.Compression, "cover.jpg", TextEncodings.UTF_16, "", 
                AttachedPictureFrame.PictureTypes.Other, 
                new System.IO.MemoryStream(File.ReadAllBytes(picture)));
            
            //添加封面到MP3文件中
            info.ID3v2Info.AttachedPictureFrames.Add(pic);
            
            //读取图片
            foreach (AttachedPictureFrame frame in frames)
            {
                MemoryStream stream = frame.Data;
                string saveFile = @"C:\Users\bomo\Desktop\pic2.jpg";
    
                using (FileStream fs = new FileStream(saveFile, FileMode.OpenOrCreate, FileAccess.Write))
                {
                    int b;
                    while((b = stream.ReadByte()) != -1)
                    {
                        fs.WriteByte((byte)b);
                    }
                }
            }
            info.save();

    注意,对文件修改后一定要调用save()方法,才会使修改生效

    其他一些属性和方法不是很常用,更多信息可以参阅:http://id3.org/

    还有一个解析文件的时间长度,由于MP3文件本身没有存放时间的信息,所以这里我们使用微软提供的API,首先引入两个函数

            [DllImport("Kernel32", CharSet = CharSet.Auto)]
            static extern Int32 GetShortPathName(String path, StringBuilder shortPath, Int32 shortPathLength);
    
            [DllImport("winmm.dll")]
            public static extern int mciSendString(string m_strCmd, StringBuilder m_strReceive, int m_v1, int m_v2); 

    接下来是计算出歌曲的时间,直接给出c#代码

            public string GetLengthString(string path)
            {
                StringBuilder buf = new StringBuilder(80);
                GetShortPathName(@path, buf, buf.Capacity);
                string shortname = buf.ToString();
    
                buf = new StringBuilder(80);
                mciSendString("close all", buf, buf.Capacity, 0);
                mciSendString("open " + shortname + " alias song", buf, buf.Capacity, 0);
                mciSendString("status song length", buf, buf.Capacity, 0);
    
    
                int len = (int)Convert.ToDouble(buf.ToString()) / 1000;        //
                TimeSpan ts = new TimeSpan(0, 0, len);
                int minuts = ts.Minutes;
                int second = ts.Seconds;
    
                return minuts.ToString("d2") + ":" + second.ToString("d2");
            }

     

    ID3库文件 http://files.cnblogs.com/bomo/ID3.zip

     

     

    展开全文
  • 前文提到解析MP3标签,程序源码中也已经出现了调用解析MP3标签、打印MP3文件信息的功能,这儿先说说MP3文件信息的解析。  解析MP3的文件信息对MP3解码器来说只是一个附加功能,如果不加入这部分源码,同时删除掉前...
         前文提到解析MP3标签,程序源码中也已经出现了调用解析MP3标签、打印MP3文件信息的功能,这儿先说说MP3文件信息的解析。
    

          解析MP3的文件信息对MP3解码器来说只是一个附加功能,如果不加入这部分源码,同时删除掉前文源码中的相关调用,不影响解码播放。如果你想编写“迷你”型的MP3解码器,可以忽略这些附加的功能。

          MP3的标签信息位于文件开始处或结尾处,用于表达MP3文件的相关信息,常见的有ID3、APE等。


          ID3 V1 位于文件最后的128字节,如果读取的是网络文件而服务器又不支持随机读取的话,意味着不对对其解析这部分信息。这128字节共表示7个信息:

    [0..2]       3  bytes: ID3 v1标识 -- 'TAG'
    [3..32]     30 bytes: 标题
    [33..62]   30 bytes: 艺术家
    [63..92]   30 bytes: 专辑名
    [93..96]   4  bytes: 发行年份
    [97..126] 30 bytes: v1.0 -- 注释/附加/备注信息
             v1.1 -- 前29 bytes注释/附加/备注信息,最后1 byte音轨信息

    [127]       1  byte : 流派

          从“标题”开始,每部分内容之间用'\0'(字符串结束标志)或'\20'(空格)隔开。


          ID3 V2 表示的信息更丰富,结构更复杂,位于文件开始处或位于APE标签之后。ID3 V2的详细内容请参见http://www.id3.org/id3v2.3.0

          APE V1 & V2 位于文件开始处或ID3 V2之后。详细内容请参见http://cn.bing.com/reference/semhtml/APE_tag (External links下的链接就是APE V2)。有很多MP3的标签信息很混乱,内容重复。由于APE标签出现并在MP3中大量应用得比ID3晚,MP3文件的“有利”位置都被ID3占用,所以APE标签位于文件中的位置让人捉摸不透,情况很复杂,对网络文件来说,判断APE标签的位置要反复在文件中定位,况且有的服务器根本就不支持随机访问,所以我这儿就放弃了对APE的解析,尽管APE的解析过程并不复杂。


           本文只解析ID3 V1的具有的那几项简单的内容,JAVA的字符集转换很方便,所以解析ID3 V2的代码很简洁。ID3 V2的每一帧都以“Frame ID”开始,例如TT2或TIT2表示“标题”,程序中通过计算ID的哈希值来识别不同的帧。需要指出的是,在解码器读入文件时自动对标签信息进行解析,调用IRandomAccess接口的tagAvailable()方法查询是否已经完成对tag的解析完毕,对网络文件,是开线程以后台方式解析。如果对其解析完毕,调用getTitle()等方法就可以返回其内容,如果MP3文件本身没有标签信息,返回值为null。具体调用方法见http://jmp123.sf.net/ 下的API文档。

     

    ID3Tag.java源码:

    /*
    * ID3Tag.java -- 解析MP3文件的ID3 v1/v2 tag
    * Copyright (C) 2010
    *
    * This program is free software: you can redistribute it and/or modify
    * it under the terms of the GNU General Public License as published by
    * the Free Software Foundation, either version 3 of the License, or
    * (at your option) any later version.
    *
    * This program is distributed in the hope that it will be useful,
    * but WITHOUT ANY WARRANTY; without even the implied warranty of
    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    * GNU General Public License for more details.
    *
    * You should have received a copy of the GNU General Public License
    * along with this program.  If not, see <http://www.gnu.org/licenses/>.
    *
    * If you would like to negotiate alternate licensing terms, you may do
    * so by contacting the author: <http://jmp123.sourceforge.net/>
    */
    package jmp123.tag;
    
    import java.io.UnsupportedEncodingException;
    
    /*
     ID3v1:
     [0-2]    3  bytes: ID3 v1标识 -- 'TAG'
     [3—32]   30 bytes: 标题
     [33—62]  30 bytes: 艺术家
     [63—92]  30 bytes: 专辑名
     [93—96]  4  bytes: 发行年份
     [97—126] 30 bytes: v1.0 -- 注释/附加/备注信息
     					v1.1 -- 前29 bytes注释/附加/备注信息,最后1 byte音轨信息
     [127]    1  byte : 流派
    */
    
    public final class ID3Tag {
    	// ID3v1 & ID3v2
    	private String strTitle;
    	private String strArtist;
    	private String strAlbum;
    	private String strYear;
    
    	// ID3v2
    	//private String strLyrics;		// (内嵌)歌词
    	private int intVersion;
    	private int intExHeaderSize;
    	private boolean boolID3v2Footer;
    	//TEXT_ENCODING[0]应由 "ISO-8859-1" 改为 "GBK". ??
    	private static String[] TEXT_ENCODING = {"GBK", "UTF-16", "UTF-16BE", "UTF-8"};
    
    	//--------------------------------------------------------------------
    	// ID3v1 & ID3v2
    
    	public void printTag() {
    		//if (strLyrics != null)
    		//	System.out.println("\r" + strLyrics + "\n");
    		if (strTitle != null)
    			System.out.println("\r        标题: " + strTitle);
    		if (strArtist != null)
    			System.out.println("\r      艺术家: " + strArtist);
    		if (strAlbum != null)
    			System.out.println("\r      唱片集: " + strAlbum);
    		if (strYear != null)
    			System.out.println("\r      发行年: " + strYear);
    	}
    
    	public void destroy() {
    		strTitle = strArtist = strAlbum = strYear = null;
    		//strLyrics = null;
    		intVersion = intExHeaderSize = 0;
    		boolID3v2Footer = false;
    	}
    
    	public String getTitle() {
    		return strTitle;
    	}
    
    	public String getArtist() {
    		return strArtist;
    	}
    
    	public String getAlbum() {
    		return strAlbum;
    	}
    
    	public String getYear() {
    		return strYear;
    	}
    
    	//--------------------------------------------------------------------
    	// ID3v1
    
    	public boolean checkID3V1(byte[] b) {
    		return b[0] == 'T' && b[1] == 'A' && b[2] == 'G';
    	}
    
    	public void parseID3V1(byte[] b) {
    		int i;
    		if (b.length < 128 || checkID3V1(b) == false)
    			return;
    
    		byte[] buf = new byte[125];
    		System.arraycopy(b, 3, buf, 0, 125);
    
    		for (i = 0; i < 30 && buf[i] != 0; i++);
    		if (strTitle == null)
    			strTitle = new String(buf, 0, i).trim();
    		if (strTitle.length() == 0)
    			strTitle = null;
    
    		for (i = 30; i < 60 && buf[i] != 0; i++);
    		if (strArtist == null)
    			strArtist = new String(buf, 30, i-30).trim();
    		if (strArtist.length() == 0)
    			strArtist = null;
    
    		for (i = 60; i < 90 && buf[i] != 0; i++);
    		if (strAlbum == null)
    			strAlbum = new String(buf, 60, i-60).trim();
    		if (strAlbum.length() == 0)
    			strAlbum = null;
    
    		for (i = 90; i < 94 && buf[i] != 0; i++);
    		if (strYear == null)
    			strYear = new String(buf, 90, i-90).trim();
    		if (strYear.length() == 0)
    			strYear = null;
    
    		buf = null;
    	}
    
    	//--------------------------------------------------------------------
    	// ID3v2
    
    	public int checkID3V2(byte[] b, int off) {
    		if(b.length - off < 10)
    			return 0;
    		if(b[off] != 'I' || b[off+1] != 'D' || b[off+2] != '3')
    			return 0;
    
    		intVersion = b[off+3] & 0xff;
    
    		if(intVersion > 2 && (b[off+5] & 0x40) != 0)
    			intExHeaderSize = 1;		//设置为1表示有扩展头
    
    		boolID3v2Footer = (b[off+5] & 0x10) != 0;
    		int size = synchSafeInt(b, off+6);
    		size += 10;					// ID3 header:10bytes 
    		return size;
    	}
    
    	//b[off..]不含ID3v2 头(10 bytes)
    	public void parseID3V2(byte[] b, int off) {
    		int max_size = b.length;
    		int pos = off;
    		if(intExHeaderSize == 1) {
    			intExHeaderSize = synchSafeInt(b, off);
    			pos += intExHeaderSize;
    		}
    		max_size -= 10;		//1 frame header: 10 bytes
    		if(boolID3v2Footer)
    			max_size -= 10;
    
    		//System.out.println("ID3 v2." + intVersion);
    		while(pos < max_size)
    			pos += getText(b, pos, max_size);
    	}
    
    	public static int synchSafeInt(byte[] b, int off) {
    		int i = (b[off] & 0x7f) << 21;
    		i |= (b[off+1] & 0x7f) << 14;
    		i |= (b[off+2] & 0x7f) << 7;
    		i |=  b[off+3] & 0x7f;
    		return i;
    	}
    
    	private int makeInt(byte[] b, int off, int len) {
    		int i, ret = b[off] & 0xff;
    		for (i = 1; i < len; i++) {
    			ret <<= 8;
    			ret |= b[off + i] & 0xff;
    		}
    		return ret;
    	}
    
    	private int getText(byte[] b, int off, int max_size)  {
    		int id_part = 4, frame_header = 10;
    		if(intVersion == 2) {
    			id_part = 3;
    			frame_header = 6;
    		}
    		String id = new String(b, off, id_part);
    		off += id_part;
    
    		int fsize, len;
    		fsize = len = makeInt(b, off, id_part);
    		off += id_part;		// frame size = frame id bytes
    		if (intVersion > 2)
    			off += 2;		// flag: 2 bytes
    
    		int enc = b[off];
    		len--;				// Text encoding: 1 byte
    		off++;				// Text encoding: 1 byte
    		if (len <= 0 || off + len > max_size || enc < 0 || enc >= TEXT_ENCODING.length)
    			return fsize + frame_header;
    		//System.out.println(len+" ------------------------------------ off = " + off);
    		//System.out.println("ID: " + id + ", id.hashCode()=" + id.hashCode());
    		//System.out.println("text encoding: " + TEXT_ENCODING[enc]);
    		//System.out.println("frame size: " + fsize);
    
    		try {
    			switch(id.hashCode()) {
    			case 83378:		//TT2 v2.2
    			case 2575251:	//TIT2  标题
    				if (strTitle == null)
    					strTitle = new String(b, off, len, TEXT_ENCODING[enc]).trim();
    				break;
    			case 83552:
    			case 2590194:	//TYER  发行年
    				if (strYear == null)
    					strYear = new String(b, off, len, TEXT_ENCODING[enc]).trim();
    				break;
    			case 2569358:	//TCON  流派
    				break;
    			case 82815:
    			case 2567331:	//TALB  唱片集
    				if (strAlbum == null)
    					strAlbum = new String(b, off, len, TEXT_ENCODING[enc]).trim();
    				break;
    			case 83253:
    			case 2581512:	//TPE1  艺术家
    				if (strArtist == null)
    					strArtist = new String(b, off, len, TEXT_ENCODING[enc]).trim();
    				break;
    			case 2583398:	//TRCK  音轨
    				break;
    			/*case 2614438:	//USLT  歌词
    				off += 4;	//Languge: 4 bytes
    				len -= 4;
    				strLyrics = new String(b, off, len, TEXT_ENCODING[enc]);
    				break;*/
    			}
    		} catch (UnsupportedEncodingException e) {
    			return fsize + frame_header;
    		} finally {
    			id = null;
    		}
    		return fsize + frame_header;
    	}
    }


     

    展开全文
  • 查找了其它地方的网站关于MP3 文件的格式说明之后我就做了一个java 的小程序解析当前流行的MP3文件的附加信息,比如歌手名 ,专辑 ,和专辑图片等 首先说明一下, 当前Mp3大体就两种 附加信息就有两种,一种...

    查找了其它地方的网站关于MP3 文件的格式说明之后我就做了一个java 的小程序去解析当前流行的MP3文件的附加信息,比如歌手名 ,专辑 ,和专辑图片等


    首先说明一下,  当前Mp3大体就两种 附加信息就有两种,一种是在文件尾部的128个字节,一种是 在文件头的可变长的信息

    对于文件尾的固定128字节信息的解析网上其它地方有,可以去查,我只是做了一个解析V2.3格式的 方法


     

    展开全文
  • mp3 m4e 文件解析程序 源码 mp3文件按帧解析 以及MP3文件头中的信息等 m4e文件按帧解析
  • 易语言虾米网站MP3地址解析源码系统结构:开始读取解析,加入数组_取中间,获取歌曲信息, ======窗口程序集1 || ||------__启动窗口_创建完毕 || ||------_按钮1_被单击 || || ======虾米地址解析
  • 程序调用vdisk(威盘)上传接口,再将vdisk那边返回的文件信息进行解析获得解析地址,可实现在线播放以及调用到QQ空间背景音乐播放,免去了开绿钻的烦恼。程序目前支持mp3、wma格式上传,其他格式上传不了,如需...
  • Mp3文件解析

    2011-04-15 08:55:00
     // Struct_Mp3.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include<stdio.h><br />#include<stdlib.h><br /> int _tmain(int argc, _TCHAR* argv[]) {  ...

       // Struct_Mp3.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include<stdio.h>
    #include<stdlib.h>


    int _tmain(int argc, _TCHAR* argv[])
    {
     struct  MUSIC_TITAL_INFO
     {
      char ID3v1TAG[3];//存储标题信息
      char Artist[30];   //存储歌手信息
      char Album[30];   //存储专辑信息
      char YEAR[4];   //存储年代信息
      char Comments[28];  //存储备注信息,28个字节(有时为字节)
      char Genre;    //存储音乐风格信息,保留位,个字节
      char Reserved;   //保留位,个字节(有时没有意思
      char Track;    //音轨(曲号)保留位,个字节(有时没有)
     };

     struct MUSIC_TITAL_INFO music_mp3={0,0,0,0,0,0};
     char music_buf[128]={0};
     char filename[80] = "E://test.mp3";


     FILE *fp_mp3;
     fp_mp3 = fopen( filename, "rb" ) ;
     //打开失败
     if(fp_mp3 == NULL )
     { 
      printf("Open failed! Try it again!");
      getchar();                             
      return -1;
     }
     
     //打开成功
     fseek(fp_mp3,-128,SEEK_END);

     if( fread(music_buf,128,1,fp_mp3 ) == 0)//读入标签
     {
      printf( "fgets error/n" );
     }
     else
     {
      memcpy(&music_mp3,music_buf,sizeof(music_mp3));
      printf( "歌曲标签:%.3s/n歌    手: %.30s/n专    辑: %.30s/n年    代: %.4s/n备    注: %.28s/n",
       music_mp3.ID3v1TAG,
       music_mp3.Artist,
       music_mp3.Album,
       music_mp3.YEAR,
       music_mp3.Comments);//注意“.”的用法。
     }


     fclose(fp_mp3);


     printf("Press any key to continue....");
     getchar();
     
     return 0;
    }

    展开全文
  • MP3的ID3解析

    千次阅读 2012-10-22 10:16:57
     但ID3并不是MP3标签的ISO国际标准,ID3的各种版本目前只是一个近乎事实上的标准,并没有人强迫播放器或者编码程序必须支持它。 ID3V1大概有两个版本,由于ID3V1.0没有包括曲目序号的定义,所以Michael Mu
  • 声明:本工具仅供学习研究交流使用,禁止... 功能说明:自动解析网易云音乐缓存文件夹下缓存的音乐文件的音乐信息(音乐名,演唱者),并解码缓存文件为Mp3格式。 使用方法:运行CloudMusicCache2Mp3.exe打开软件,...
  • 解析 http 返回值

    2011-07-03 11:55:38
    如题,怎样在java程序中,解析返回值: 如下 http://zhangmens hiting.baidu.com/data/music/3653665/Poker%20Face.mp3?xcode=0a22a6a372506c53f08f3bb5c5f0aafe&r=1309660412 这是一首百度的MP3下载 在程序中...
  • 其实id3信息读取还算比较容易...下面我把我写的和xly rics中带的ID3解析拿出给大家分析,相关的id3详细信息到id3的官方网站查询。我的了id3 v1和v2读取程序是分开的。ID3 V1读取程序。#include#include/*Header 1-3 
  • 从酷狗复制过来的音乐文件名都是“作者 - 标题”,所以可以通过解析文件名直接获取作者和标题信息。 需要下载eyeD3模块  $ sudo apt-get install python-eyed3 代码 #/usr/bin/env python # -*- e...
  • Android程序设计基础

    热门讨论 2013-08-03 16:28:04
    Android内置了最常用的行业标准音频和视频格式的编解码器,这些格式包括H.264 (AVC)、MP3和AAC。  当前及未来各类硬件间的可移植性。所有程序都是用Java语言编写的,并且将由Android的Dalvik虚拟机执行,所以代码...
  • 4. 多解析,多模式播放。程序在播放结构上结合了各种网盘,网站。以代理为基础播放。比如优酷视频,腾讯视频,QQ音乐。 5. 小清新会员系统、 6.大量后援团免费开发模板,供大家下载。 7.多种网盘网站资源一键采集。 ...
  • 语言跟读小程序

    2018-09-04 14:01:36
    循环加载JSON数据集合时,如果其中有项是null,在开发工具中加载正常,但是在手机中浏览时显示空白页,并且调试时没有错误信息,所以需要对可能为null的数据进行判断 PS:由于有预处理,所以没有遇到这个问题 ...
  • 修改编译器,可以为编译出的EXE、DLL添加版本信息(通过“程序配置”设定)。 5. 修改集成开发环境,自动记忆非独立编译时是否写出依赖文件的选项。 6. 大幅提高编译速度。 对其它支持库的更新: 1. 修改高级...
  • cc实例120 透明的Flash动画 cc实例121 播放GIF动画 cc实例122 播放AVI动画 cc实例123 播放VCD 4.2 制作与播放音频 cc实例124 可以选择播放曲目的CD播放器 cc实例125 MP3播放器 cc 实例126 声音录制与...
  • cc实例120 透明的Flash动画 cc实例121 播放GIF动画 cc实例122 播放AVI动画 cc实例123 播放VCD 4.2 制作与播放音频 cc实例124 可以选择播放曲目的CD播放器 cc实例125 MP3播放器 cc 实例126 声音录制与...
  •  cc实例125 MP3播放器   cc实例126 声音录制与播放   cc实例127 制作RealOne播放器   4.3 多媒体控制   cc实例128 部队早起军号程序   cc实例129 利用PC喇叭播放声音   cc实例130 c控制左右声道...
  • 实例125 MP3播放器 实例126 声音录制与播放 实例127 制作RealOne播放器 4.3 多媒体控制 实例128 部队早起军号程序 实例129 利用PC喇叭播放声音 实例130 控制左右声道 4.4 屏幕保护相关程序 实例131 电子...
  • 实例125 MP3播放器 实例126 声音录制与播放 实例127 制作RealOne播放器 4.3 多媒体控制 实例128 部队早起军号程序 实例129 利用PC喇叭播放声音 实例130 控制左右声道 4.4 屏幕保护相关程序 实例131 电子...
  • 实例125 MP3播放器 实例126 声音录制与播放 实例127 制作RealOne播放器 4.3 多媒体控制 实例128 部队早起军号程序 实例129 利用PC喇叭播放声音 实例130 控制左右声道 4.4 屏幕保护相关程序 实例131 电子...
  • 实例125 MP3播放器 实例126 声音录制与播放 实例127 制作RealOne播放器 4.3 多媒体控制 实例128 部队早起军号程序 实例129 利用PC喇叭播放声音 实例130 控制左右声道 4.4 屏幕保护相关程序 实例131 电子...
  • 实例125 MP3播放器 实例126 声音录制与播放 实例127 制作RealOne播放器 4.3 多媒体控制 实例128 部队早起军号程序 实例129 利用PC喇叭播放声音 实例130 控制左右声道 4.4 屏幕保护相关程序 实例131 电子...
  • 实例125 MP3播放器 实例126 声音录制与播放 实例127 制作RealOne播放器 4.3 多媒体控制 实例128 部队早起军号程序 实例129 利用PC喇叭播放声音 实例130 控制左右声道 4.4 屏幕保护相关程序 实例131 电子...
  • 实例125 MP3播放器 实例126 声音录制与播放 实例127 制作RealOne播放器 4.3 多媒体控制 实例128 部队早起军号程序 实例129 利用PC喇叭播放声音 实例130 控制左右声道 4.4 屏幕保护相关程序 实例131 电子...
  • 实例125 MP3播放器 实例126 声音录制与播放 实例127 制作RealOne播放器 4.3 多媒体控制 实例128 部队早起军号程序 实例129 利用PC喇叭播放声音 实例130 控制左右声道 4.4 屏幕保护相关程序 实例131 电子...

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

解析mp3信息程序