m3u文件wav格式 m3u和mp3文件wav格式 m3u区别在哪儿

教你轻松制作M3U音乐文件播放清单
教你轻松制作M3U音乐文件播放清单
&教你轻松制作Mp3&play&list&(用记事本编辑M3U播放清单)
&&&&风似感悟&&(首次亮相,原作于2005年12月)
看到这个标题时,你是不是感到奇怪呢?有没有搞错,开什么玩笑?&且往下看。
相信大家都习惯将自己喜欢的歌曲做成一个播放列表,但是有时,我们用某款播放软件导
出的播放列表文件不能在其它软件中使用。我们知道,大名鼎鼎的winamp的播放列表导出
功能是比较好的,因为大多播放软h件都支持(兼容)M3U格式的播放列表,其实用
导出的播放列表文件也是较小的。但如果我们手头没有这个怎么办呢?是不是还需要第三
方软件呢?(可能现在大家一般都用“千千静听”了,修改时注)&Of&Course&
not,要不我就有会写这篇文章了。记事本你总有吧?到底怎样做呢
,别卖关子了。好的,听我一步步道来。
打开记事本,按下面的格式即可轻松制作出你想要的东东。
基本格式:
[path&filename.ext]
[path&filename.ext]
1、首先在记事本的首行输入&"#EXTM3U"&(不要引号,下同,也可省略此步)
2、接下来就是往下面添加你想要添加的歌曲名了,注意路径和扩展名不能缺省。如果你
打算将列表文件存在歌曲所在目录,则路径名可以省掉。
可能你会问,这么多曲名,难道要我一个个来输入吗?如果我想要添加的歌曲特别多,那
不是要累死我?&
不要急,下面的内容才是重点。且听我慢慢告诉你一个诀窍(捷径)。虽然
现在是Windows
时代了,可是现在我们要发挥DOS的作用了。(或许各位还有更好的方法,
比如用WinRAR。但本人认为还是DOS操作更为简单,也是每台PC机都有的,当然某些特殊
用途机可能禁用了。)
3、打开开始菜单,在运行提示栏输入运行DOS的命令,cmd&(win9x为command)&&
(winXP及Win2k,winNT可以只输入CMD,两者略有不同,但基本功能是一样的。)
command&对应的是系统安装目录下(一般是X:\windows\或X:\winnt\system32
下的NTVDM.EXE,而cmd&对应的是cmd.exe,至于这些差别,不是我们今天的主题]&
,输入这个干什么呢?
4、运行显示文件和子目录列表命令"DIR"。
DIR&[drive:][path][filename]&[/A[[:]Attributes]]&[/B]&[/C]&[/D]&[/L]&
&&[/O[[:]sortorder]]&[/P]&[/Q]&[/S]&[/T[[:]timefield]]&[/W]&[/X]&[/4]
记得要带参数运行。否则你还要进一步“加工”。
下面有必要介绍一下主要参数的用法:(当然你可以输入"DIR&&/?"&
获取更多的提示。)
dir&[drive:][path][filename]指定要列出的驱动器、目录和/或文件。
/B&使用空格式(没有标题信息或摘要)。(正是我们所需要的。)
/S&&显示指定目录和所有子目录中的文件。
[/O[[:]sortorder]]
&/O用分类顺序列出文件。
&&sortorder&&&&&N&&按名称(字母顺序)&&&&&&S&&按大小(从小到大)
&&&&&&&&&&&&&&&&&&&&&E&&按扩展名(字母顺序)&&&D&&按日期/时间(从先到后)
&&&&&&&&&&&&&&&&&&&&&G&&组目录优先&&&&&&&&&&&&&&&&&-&&颠倒顺序的前缀
另外,还是有必要对一些没有用过DOS的朋友多讲一句,假如我的一个文件夹下有多种格
式的音乐文件,比如MP3的和wav或wma等。而我又只想要将MP3添加进列表中,怎么办呢?&
有,我们用通配符,“*”&
可以代替任意多个字符,“?”可以代替一个字符,所以我们
可以用*.mp3来显示所有扩展名为.mp3的文件。
我们最好使用 dir&[path]&/*.*&/b,&如果你想添加全部,你还可以带上&
/s等参数。具体情况具体分析。
注意:对于长文件夹或文件名,我们尽量使用短文件名,即六个字符(三个中文) 后加一
个~1,否则在DOS下可能无法识别。比如我的mp3音乐保存在E:\My&Documents\My
Music\mp3下,我们就要用"Dir&E:\mydocu~1\mymusi~1\mp3&/b/on&
"来查看。(当然你可以直接进入该目录,此时允许路径中有空格。另外注意参数前一定要&br&
加一个空格。)
5、文件名清单是出来了,可是我该如何复制到记事本呢。这里又不能用Ctrl&+&
C,& 在窗口顶部点击鼠标右键试试,(Windows&
XP可以直接在活动窗口中点击,)是不是出来菜单
了,选择“标记(K)” 或“编辑(E)→标记(K)” 再在窗口中选择你要复制的内容,当
然如果你的文件多的话,你可以直接在右键菜单中按S键(全选),不过如果你前面还运行
过命令的话,这时要先执行清屏(cls)命令,(为照顾一些十足的菜鸟,还是要在此啰嗦一
下。)清除多余的内容。接下来,不用我说了,当然是复制选中内容了,(也可以直接按回
车键)。然后粘贴到记事本或其它文字编辑工具就可以了。为我们省了不少事吧。
6、还没完,不要急于保存退出,记得去掉前面和后面多余的成分。最后,别忘了,将文
件另存为 *.m3u&(*&
的内容即为你想给这个播放列表文件取的文件名)即大功告成了。否
则一个文本文件,你放不出Music&来朝我咂鸡蛋,我可就惨了。~:)&
[当然你不嫌麻烦的话,也可以在“工具”(windows&9X&
在“查看”)→文件夹选项→查看,将“隐藏已知文
件类型的扩展名”的钩去掉,将txt&改为m3u&
即可,此时一个弹出的警告不要理会。](第
七条你也用不理会了,赶快点击你刚做的文件来享受一下你向往以久的音乐吧!
祝各位能~~~~~~~~~~听得尽兴!
7、附加说明:这样做出来的播放列表比软件本身生成的M3U还要缩水一半,(甚至更多)因
为软件自建的文件往往包含一些这样的字符,“#EXTINF:123,????????”,不信你可以用
记事本或写字板打开试试,当然你有UltraEdit等文字编辑工具更容易操作,(我也是这样
发现的。)我又对比了一下,用几种不同的软件,往里面添加同样的歌曲,可生成的文件
大小都不相同,于是我试着用UltraEdit&打开看看,结果发现用winamp保存下来的播放列
表文件比其它软件的要简单,并且只要可以放音频的软件都可以打开它播放。也无需懂得
更多的程序语言,后来我又看着那些“#EXTINF:*,*” 不顺眼,就试着删除一行,保存
,再放刚才删掉了INF信息的歌曲,居然没有一点影响,于是将所有#EXTINF&开头的那一
行字符全部删除,且将绝对路径改为相对路径,并尽量使用DOS格式的短文件名,(这样的
播放列表文件只能在当前目录下使用。用绝对路径保存的文件可以复制到其它文件夹播放
。)保存一看,现在的文件大小居然还不到原文件的35%,(当然这并不能节省多少磁盘空
间,但看起来舒服多了。)
以下就是一个样例:(括号内为注释。)
(假如我的列表打算存在“F:\My&Music\mp3”文件夹下
Andy.mp3的路径为“F:\andy.mp3”
阿杜的Hello这首mp3存放在“F:\My&Music\mp3\阿杜”文件夹下。
口语11.MP3存放在“F:\My&
Music\李阳疯狂英语\走遍美国之口语篇”文件夹下。)
阿杜\Hello.WMA&&&&&&&&&&&&&&&&
周华健\1234567.mp3
backst~1\I&want&it&that&way.mp3
backstreetboys\I&need&you.mp3
F:\Mymusi~1\李阳疯~1\走遍美~1\口语10.MP3
..\李阳疯~1\走遍美~1\口语11.MP3
绝口不提爱你.mp3
无痛分手.mp3
无懈可击.wma
千里之外.mp3
最后另存为PLAYLIST.M3U即可。
看了这么多,也许你都晕了,其实总结起来只需两步:
1、开始→运行→CMD(command)→cd&/d&[path]&&(进入音乐文件所在的目录)
dir&*.MP3&/s/b/on&(按文件名首拼音字母排序)
{&&&&&&&&&或&开始→运行→CMD(command)→
dir&[PATH]&/s/b/on&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
→右键→S(全选)→Enter(回车)
2、开始→运行→CMD→notepad&(打开记事本,或&开始→程序→附件→记事本)
去掉第一行和最后一行
→另存为&“播放清单.m3u”即可。
附加说明:
1、在用dir命令时,我们可以用..来替代上级目录。当前盘符可以省略,(如"F:\x.mp3&
"可以只用"\x.mp3
F:\x\y\z\a.mp3"&
可以省略成"\x\y\z\a.mp3")当然这只是举个例子。这样还可以让这个
播放列表文件变得更“苗条”。(但这样做出来的文件只能在当前路径中使用。)
一般情况,不要将歌和英语学习的MP3放到一个播放清单里面。
2、对于长文件名既可以用完整名,也可以用8位DOS名。(但要注意是否会有重名,否则
要用??????~2.*)
3、扩展名不能缺省。
风似感悟收集和整理。转载请保留此句。
发表评论:
TA的推荐TA的最新馆藏[转]&【虾歌】播放列表只支持导入m3u8格式,m3u格式没反应 - 虾米音乐讨论区
Loading...
【虾歌】播放列表只支持导入m3u8格式,m3u格式没反应
今天早上更新了一下软件。
已经解决了之前FM的问题、同步歌曲信息等问题。
导入播放列表的时候也不会莫名终止程序了。
播放列表无法导入啊!
研究了一下,试着导出一个m3u格式的列表,可以导出,但是不能导入。
然后导出一个m3u8格式的列表,可以导出,也可以导入。
=====================
我的系统是win8,,64px的
=====================
本不想麻烦你们,想自己把m3u转换成m3u8就好了
可是。。。尝试了好久。。。我不会啊。。。。
同时,歌曲数量实在庞大,列表也有很多很多个,都是心血,不可能重新再做一遍啊!
======================
所以麻烦你们,要不告诉我m3u转换成m3u8的办法
要不就解决一下虾歌的小问题。辛苦。
复制给好友:
好了,我已经把m3u转换成m3u8了。
回复此话题? 请先一个虾米账号,或
关注虾米:安卓(37)
M3U本质上说不是音频文件,它是音频文件的列表文件,是纯文本文件。你下载下来打开它,播放软件并不是播放它,而是根据它的记录找到进行在线播放。
下面我们来解析m3u文件中的音乐网络地址:
一、界面如下:界面很简单,一个输入框(输入一个m3u文件链接),然后解析、开始和终止按钮。解析完成后,开始按钮获得焦点
播放从m3u文件解析的音乐
二、xml文件如下:
&RelativeLayout xmlns:android=&/apk/res/android&
xmlns:tools=&/tools&
android:layout_width=&match_parent&
android:layout_height=&match_parent&
android:paddingBottom=&@dimen/activity_vertical_margin&
android:paddingLeft=&@dimen/activity_horizontal_margin&
android:paddingRight=&@dimen/activity_horizontal_margin&
android:paddingTop=&@dimen/activity_vertical_margin&
tools:context=&.MainActivity& &
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:id=&@+id/m3uTextPath&
&LinearLayout
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:orientation=&horizontal&
android:layout_marginTop=&60dip&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:id=&@+id/parse&
android:onClick=&mainCLick&
android:text=&解析&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:id=&@+id/start&
android:onClick=&mainCLick&
android:text=&开始&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:id=&@+id/stop&
android:onClick=&mainCLick&
android:text=&终止&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:id=&@+id/pausePull&
android:onClick=&mainCLick&
android:text=&pull解析&
&/LinearLayout&
&!-- id为@id/android:list的ListView为客户化的list布局,如果没有,则系统会调用默认的布局 --&
android:id=&@id/android:list&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:background=&#00FF00&
android:drawSelectorOnTop=&false&
android:layout_marginTop=&100dip&
&!-- 当ListView中没有数据时,id为@id/android:empty的view就会显示出来 --&
android:id=&@id/android:empty&
android:layout_width=&fill_parent&
android:layout_height=&wrap_content&
android:textColor=&#FF0000&
android:text=&No data&
android:gravity=&center_vertical|center_horizontal&
android:layout_marginTop=&110dip&
&/RelativeLayout&
三、activity
package com.example.m3
import java.io.IOE
import java.io.InputS
import java.util.L
import com.example.parseUtil.M3UP
import com.example.parseUtil.P
import com.example.parseUtil.netXmlP
import android.app.ListA
import android.media.MediaP
import android.os.B
import android.util.L
import android.view.M
import android.view.V
import android.widget.ArrayA
import android.widget.B
import android.widget.EditT
import android.widget.ListA
import android.widget.T
public class MainActivity extends ListActivity {
* Android支持播放网络上的Audio
* 访问网络上的Audio,我们通过Http需要获取音频流
* 这可能要涉及到ICY协议。ICY对Http协议进行了扩展
* 然而,网络上的站点,往往并不允许我们直接访问其音频流
* 我们需要一种中间文件来指向我们需要的音频流的地址,以使第三方的软件可以播放。
* 对于ICY流来说,其就是一个PLS文件或者一个M3U文件
* PLS对应的MIME类型为:audio/x-scpls
* M3U对应的MIME类型为:audio/x-mpegurl
* 虽然Android提供了对ICy流的支持,但是其并没有提供现成的方法来解析M3U或PLS文件
* 所以,为了播放网络上的音频流,我们需要自己实现这些文件的解析
* M3U文件其实就是一个音频流的索引文件,他指向要播放的音频流的路径。
* @author Administrator
// private EditText m3uTextP
private Button btnParse, btnPlay, btnS
private EditText editU
private MediaP
private List&String& pathL
private int currPosition = 0; //记录当前播放的媒体文件的index
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
editUrl = (EditText)findViewById(R.id.m3uTextPath);
btnParse = (Button)this.findViewById(R.id.parse);
btnPlay = (Button)this.findViewById(R.id.start);
btnStop = (Button)this.findViewById(R.id.stop);
editUrl.setText(&http://pubint.ic.llnwd.net/stream/pubint_kmfa.m3u&);
InputMethodManager imm = (InputMethodManager)this.getSystemService(INPUT_METHOD_SERVICE);
btnPlay.setEnabled(false);
btnStop.setEnabled(false);
player = new MediaPlayer();
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer player) {
// 这个方法当MediaPlayer的play()执行完后触发
player.stop();
player.reset();
if(pathList.size() & currPosition+1){
currPosition++; //转到下一首
prepareToPlay();
player.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
//缓冲完成执行
public void onPrepared(MediaPlayer arg0) {
// 这个方法当MediaPlayer的prepare()执行完后触发
btnStop.setEnabled(true);
player.start();
//当一曲播放完后,执行onCompletionListener的onCompletion方法
* 播放音乐
private void prepareToPlay(){
//获取当前音频流的路径后我们需要通过MediaPlayer的setDataSource来设置,然后调用prepareAsync()来完成缓存加载
String path = pathList.get(currPosition);
player.setDataSource(path);
//之所以使用prepareAsync是因为该方法是异步的,因为访问音频流是网络操作,在缓冲和准备播放时需要花费
//较长的时间,这样用户界面就可能出现卡死的现象
//该方法执行完成后,会执行onPreparedListener的onPrepared()方法。
player.prepareAsync();//异步线程避免卡死
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
* 按钮事件
* @throws Exception
public void mainCLick(View v) throws Exception
switch (v.getId()) {
case R.id.parse:
//完成解析
progress = ProgressDialog.show(this, &提示&, &正在解析,请稍后...&);
progress.show();
String url =
if(editUrl.getText() != null){
url = editUrl.getText().toString();
if(url != null && !url.trim().equals(&&)){
pathList = M3UParser.parseStringFromUrl(url);
ListAdapter adapter = new ArrayAdapter&String&(this, android.R.layout.simple_list_item_1, pathList);
this.setListAdapter(adapter);
btnPlay.setEnabled(true);
Toast.makeText(this, &请输入正确的M3U文件访问地址&, Toast.LENGTH_LONG).show();
case R.id.start:
//这里播放是从第一个开始
btnPlay.setEnabled(false);
btnParse.setEnabled(false);
this.currPosition = 0;
if(pathList != null && pathList.size() & 0){
prepareToPlay();
case R.id.stop:
player.pause();
btnPlay.setEnabled(true);
btnStop.setEnabled(false);
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
三、解析代码:
package com.example.parseU
import java.io.BufferedR
import java.io.InputS
import java.io.InputStreamR
import java.util.ArrayL
import java.util.L
import org.apache.http.HttpR
import com.example.HTTPServer.HttpC
public class M3UParser {
* 返回List&String&类型
* @param url
public static List&String& parseStringFromUrl(String url) {
List&String& resultList =
HttpResponse res = HttpConnect.getResponseFromUrl(url);
if(res != null){
resultList = new ArrayList&String&();
InputStream in = res.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = &&;
while((line = reader.readLine()) != null){
if(line.startsWith(&#&)){
//这里是Metadata信息
}else if(line.length() & 0 && line.startsWith(&http://&)){
//这里是一个指向的音频流路径
resultList.add(line);
in.close();
} catch (Exception e) {
e.printStackTrace();
return resultL
* 从指定的Url进行解析,返回一个包含FilePath对象的列表
* FilePath封装每一个Audio路径。
* @param url
public static List&FilePath& parseFromUrl(String url)
List&FilePath& resultList =
HttpResponse response = HttpConnect.getResponseFromUrl(url);
if(response != null){
resultList = new ArrayList&M3UParser.FilePath&();
InputStream in = response.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
String line = &&;
while((line = reader.readLine()) != null){
if(line.startsWith(&#&)){
//这里是Metadata信息
}else if(line.length() & 0 && line.startsWith(&http://&)){
//这里是一个指向的音频流路径
FilePath filePath = new FilePath(line);
resultList.add(filePath);
in.close();
} catch (Exception e) {
e.printStackTrace();
return resultL
//解析后的实体对象
static class FilePath{
private String fileP
public FilePath(String filePath){
this.filePath = fileP
public String getFilePath() {
return fileP
public void setFilePath(String filePath) {
this.filePath = fileP
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:38313次
排名:千里之外
原创:60篇
(1)(1)(1)(1)(1)(2)(1)(5)(2)(4)(2)(4)(5)(1)(3)(3)(1)(2)(3)(2)(2)(2)(1)(3)(9)}

我要回帖

更多关于 m3u文件格式 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信