求教:vc中如何读取mp3文件的信息(演唱者等)以及计算时间长度

wdqdw 2002-03-21 03:58:28
加精
最好能给出主要源码 分数可以再加
...全文
373 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdqdw 2002-03-22
  • 打赏
  • 举报
回复
算了,我自己揣摩吧,散分
gzwy 2002-03-21
  • 打赏
  • 举报
回复
hex description

00 Blues
01 Classic
02 Country
03 Dance
04 Disco
05 Funk
06 Grunge
07 Hip-Hop
08 Jazz
09 Metal
0a New
0b Oldies
0c Other
0d Pop
0e R&B
0f Rap
10 Reggae
11 Rock
12 Techno
13 Industrial
14 Alternative
15 Ska
16 Death
17 Pranks
18 Soundtrack
19 Euro-Techno
1a Ambient
1b Trip-Hop
1c Vocal
1d Jazz+Funk
1e Fusion
1f Trance
20 Classical
21 Instrumental
22 Acid
23 House
24 Game
25 Sound
26 Gospel
27 Noise
28 Alt.
29 Bass
2a Soul
2b Punk
2c Space
2d Meditative
2e Instrumental Pop
2f Instrumental Rock
30 Ethnic
31 Gothic
32 Darkwave
33 Techno-Industrial
34 Electronic
35 Pop-Folk
36 Euro
37 Dream
38 Southern
39 Comedy
3a Cult
3b Gangsta Rap
3c Top
3d Christian
3e Pop/Funk
3f Jungle
40 Native
41 Cabaret
42 New
43 Psychedelic
44 Rave
45 Show
46 Trailer
47 Lo-Fi
48 Tribal
49 Acid Punk
4a Acid Jazz
4b Polka
4c Retro
4d Musical
4e Rock
4f Hard
50 Folk
51 Folk/Rock
52 National
53 Swing
54 Fast-Fusion
55 Bebob
56 Latin
57 Revival
58 Celtic
59 Bluegrass
5a Avantgarde
5b Gothic
5c Progressive
5d Psychedelic
5e Symphonic
5f Slow
60 Big
61 Chorus
62 Easy
63 Acoustic
64 Humour
65 Speech
66 Chanson
67 Opera
68 Chamber
69 Sonata
6a Symphony
6b Booty
6c Primus
6d Porn
6e Satire
6f Slow
70 Club
71 Tango
72 Samba
73 Folklore
74 Ballad
75 Power
76 Rhythmic Soul
77 Free
78 Duet
79 Punk
7a Drum
7b Acapella
7c Euro-House
7d Dance
7e Goa
7f Drum
80 Club-House
81 Hardcore
82 Terror
83 Indie
84 Britpop
85 Negerpunk
86 Polsk Punk
87 Beat
88 Christian Gangsta
89 Heavy Metal
8a Black Metal
8b Crossover
8c Contemporary Ch?
8d Christian Rock
8e Merengue
8f Salsa
90 Trash Metal
91 Anime
92 JPop
93 Synthpop
gzwy 2002-03-21
  • 打赏
  • 举报
回复
以下是 ID3-Tag 的有关资料
*************************

ID3-Tag format (WinAmp style)
=============================

This structure can be appended to mp3 files and provide information
about the track which can be viewed using WinAmp or other mp3 player.

struct idtag {
const char magic[3] = "TAG";
char title[30];
char artist[30];
char album[30];
char year[4];
char comment[30];
char genre;
};


Own database format
===================

Text file, lines are separated by or , fields are
separated by (ASCII 9). You can produce these tables
easily with most spreadsheet programs, with awk/perl/c-programs
or with a text editor.

First line : "PUMPDB 1.0" (Magic)

Other lines have the following fields:

path, title, artist, album, year, comment, genre, priority

Maximum string length for the individual entries:
path : 128
title : 64
artist : 64
album : 64
year : 4 (only digits from 0 to 9)
comment : 64
genre : 20 (see Section "Genre")
priority: 3 (only digits from 0 to 9)
emphasis: 3 ( " )



Remarks to the database format
==============================

The format is designed to make it easyer to handle MP3 files stored on a
CD-ROM in ISO9660 format, which does not support long file names. The
idea is to put a file called "PUMP.DB" in the root directory of every
CD-ROM containing MP3 files which contains consecutive entries of the
dbentry structure.

You may omit any of the fields except the field. If you provide
fields after omitted fields, you will have to provide the correct number
of s. The fist non-empty field in a line is taken as the path, so
you can (and _should_) not omit the path field.


path: This field contains a string of the file name of the MP3 file
with the complete path relative to the location of the PUMP.DB
file.

128 characters
are sufficient because the (strict) ISO format only allows file
and directory names to consist of 8 characters a, dot (".") and
another 3 characters and the maximum directory depth is 8. That
makes 9 x (8 + 1 + 3) = 108 bytes.
How this field is handeled depends on the software reading it,
but it is recommended to stick the following rules:

- Do not use long file or directory names, just use 8.3 DOS
conforming names. Some CD-ROMs and all modern file systems
provide support for long file names (ISO extensions, Joliet,
VFAT, ...) - resist to write them to the PUMP.DB.

- Use uppercase letters only.

- Do not use any special characters like spaces or "%".
Characters to use are: "A" - "Z", "0" - "9", "_" and "~".

- Use "/" as directory separator, not "\".

- Let entries begin with a valid directory or file name.
Entries that begin with "/", "./" or "../" might not be
processed properly.

An Example:
Suppose your CD drive had the drive letter E: and there
was a directory in the root directory called
"No_Doubt_-_Tragic_Kingdom"
and in this directory was a file called
"No_Doubt_-_Don't_speak.mp3"
then you would normally access this file with something like
"E:\No_Doubt_-_Tragic_Kingdom\No_Doubt_-_Don't_speak.mp3"
Obeying the above rules, you'd have to find out the real ISO
file names before writing an entry in the PUMP.DB.
Suppose the ISO name of the directory would be "NO_DOU~1"
and the file name "NO_DO~11.MP3". Then a correct entry would
look like:
"NO_DOU~1/NO_DO~11.MP3" (without the quotes)

ATTENTION! Normally, you would use a tool that generates the PUMP.DB
entries for you automatically. This can lead to problems because CD
writing software does not necessarily use the same names for the ISO
file names that DOS uses when the files are on a hard disk. Make sure
you know how the files will be named on the resulting CD! In some CD
writing software you can check the ISO file names before writing. In
other software you could at least guess how the files will be named.
Some software does use the exact DOS file names (CDRWIN from Golden
Hawk and WinOnCD from CeQuadrat do), other software has a different
numbering scheme for the numbers following the "~" and some software
replaces the "~" with "_" (underscore).
The coolest way to be sure is to build an ISO image and use linux to
check the file names. Mount the ISO image via the loopback device and
keep linux from using joliet file names.


title: The title (name) of the song. Experiences have proven that 30
characters are not sufficient for names like
"This great track (crazy mpeg layer 3 remix)".


artist: The interpret of the track. Again, 30 characters are too small
for names like:
"This great artist featuring another great artist"


album: The name of the album the MP3s were ripped from.


year: The year of publishing of the tracks. Only numeric entries
with 4 digits - we do not want to have another Y2000 prob ;)


comment: Any comments you might want to associate with the file.


genre: A string describing the genre the track belongs to. It is a
good idea to choose a genre name that appears in the section
"Genres".


priority: A string describing the priority assiciated with the track.
This information can be used for search functions or the
propability a MP3-player plays this track when playing files
randomly. Normal priority is "127". Higher values mean higher
priority.

emphasis: This is an offset to the volume setting of an MP3-Player.
You can use this to compensate for poorly sampled MP3 songs.
127 means normal volume, 255 is maximal, 0 is minimal volume.


Genres
======

You can ignore the hexadecimal id, for the database format, only the
genre name is needed. The list contains the genres used by WinAmp 2.03.

smae 2002-03-21
  • 打赏
  • 举报
回复
mp3文件最后的128个字节
typedef struct {
char tag[3];
char title[30];
char artist[30];
char album[30];
char year[4];
char comments[30];
char genre;
}MP3_TAILER;
swordman 2002-03-21
  • 打赏
  • 举报
回复
够用吗,朋友?
swordman 2002-03-21
  • 打赏
  • 举报
回复
float CVidFileSendDlg::GetMovieDuration(LPCSTR sMovieName)
{
HRESULT hr;
double MovieDuration ;
IGraphBuilder *pigb;
IMediaPosition *pims = NULL;

CoInitialize(NULL);
hr = CoCreateInstance(CLSID_FilterGraph, // get this documents graph object
NULL,
CLSCTX_INPROC_SERVER,
IID_IGraphBuilder,
(void **) &pigb);

if (FAILED(hr)) return -1;

WCHAR wFile[512];
MultiByteToWideChar( CP_ACP, 0, (LPCSTR)sMovieName, -1, wFile, 512 );
hr = pigb->RenderFile(wFile, NULL);
pigb->QueryInterface(IID_IMediaPosition, (void **)&pims);
pims->get_Duration(&MovieDuration);
pims->Release();
pigb->Release();
CoUninitialize();

return (float)MovieDuration ;
}
wdqdw 2002-03-21
  • 打赏
  • 举报
回复
To Mae:没找到直接的例子,不过freeamp中好象有一点,还没看明白
多谢
Mae 2002-03-21
  • 打赏
  • 举报
回复
去这里 http://202.112.105.179/vc/

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧