声明这个是实用化的操作,我有一个公网ip. 现在手机每天都用浏览器播放存在服务器上的音乐。
首先mkdir 一个存放音乐文件的目录空music
再vi建一个music.html空文件 再用vi 写一个js空文件1.js,这个文件就是存放用于浏览器播发音乐的列表文件。远行用java编辑Music.java就会自动生成music目录对应的1.js文件。以后只需要music目录中增减歌曲后,再运行一下java Music就生成新的列表文件1.js
特别注意,音乐名最好不要有(){ } [ ] 空格等一切特殊符号。因为浏览器不认这些符号。
我一直用for 循环来读取音乐文件都没成功,但网上居然有读成功的,不懂为啥。最后用js的addeventlistener 才成功。我理解,这网页程序是单线程的,不能在程序的某处耗时间等待,就像java等待键盘输入一样。浏览器表现为死机的样子。必须一根筋的一下就生成网页html文件
至此以后就可以用浏览器连续播发自己喜欢的音乐了。不用担心音乐版权,不用下载音乐播发软件。如果和nas 或者公网ip 配合,就成为了简单的音乐服务器。哈哈哈
重点:本程序现在已可以在任意位置开始连续播发音乐,方法:先点连续播发按钮,首先播发的是第一首歌,马上按第一首的暂停键,就暂停第一首音乐的播发,好了,现在你可以按任意的歌的播发键后,它就以这首歌开始连续播放了。如不想听了,又可以暂停,点其他的歌。
软件如下:
java 生成连续浏览器播发程序Music.java
import java.net.*;
import java.io.*;
public class Music {
public static void main(String[] args) {
File fl=new File("1.js");
File fm=new File("music");
try {
FileWriter fw=new FileWriter(fl);
String[] li=fm.list();
int c,k,p=0;
for(c=0;c<li.length;c++) {
String h=new String("document.write('<audio id="+c+" src="+'"'+"music/"+li[c]+'"'+" controls></audio>');");
fw.write(h);
fw.write("\n");
}
for(k=0;k<li.length;k++) {
fw.write("var a"+k+"=document.getElementById("+'"'+k+'"'+");");
fw.write("\n");
}
fw.write("function ss(){\n");
fw.write("a"+p+".play();\n");
for(p=0;p<li.length;p++) {
fw.write("a"+p+".addEventListener("+'"'+"ended"+'"'+",function(){\n");
fw.write("a"+(p+1)+".play();\n");
fw.write("},false);\n");
}
fw.write("}");
fw.close();
System.out.println("over");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
music.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>简单音乐播放器</title>
</head>
<body>
<script type="text/javascript" src="1.js"></script>
<br>
<br>
<br>
<button onclick="ss()"> 连续播放</button>
</body>
</html>
document.write('<audio id=0 src="music/不仅仅是喜欢.flac" controls></audio>');
document.write('<audio id=1 src="music/程响世界这么大还是遇见你.flac" controls></audio>');
document.write('<audio id=2 src="music/cannon.m4a" controls></audio>');
document.write('<audio id=3 src="music/外滩18号.flac" controls></audio>');
document.write('<audio id=4 src="music/佐羽身后空无一人.mp3" controls></audio>');
document.write('<audio id=5 src="music/听过你的歌.mp3" controls></audio>');
document.write('<audio id=6 src="music/下坠.mp3" controls></audio>');
document.write('<audio id=7 src="music/阿刁.mp3" controls></audio>');
document.write('<audio id=8 src="music/清新的小女孩.mp3" controls></audio>');
document.write('<audio id=9 src="music/天生一对.flac" controls></audio>');
document.write('<audio id=10 src="music/张泽熙那个女孩.mp3" controls></audio>');
document.write('<audio id=11 src="music/Рахымжан Жақайым.flac" controls></audio>');
document.write('<audio id=12 src="music/еяхатмузыка.mp3" controls></audio>');
document.write('<audio id=13 src="music/任舒瞳 那个女孩.flac" controls></audio>');
document.write('<audio id=14 src="music/张泽熙程响那个女孩.flac" controls></audio>');
document.write('<audio id=15 src="music/破裂.flac" controls></audio>');
document.write('<audio id=16 src="music/你的答案.mp3" controls></audio>');
document.write('<audio id=17 src="music/洛天依你是人间四月天.mp3" controls></audio>');
document.write('<audio id=18 src="music/失眠飞行.mp3" controls></audio>');
document.write('<audio id=19 src="music/伊晗孤独为荣.flac" controls></audio>');
document.write('<audio id=20 src="music/Рождествоакхочется жить.flac" controls></audio>');
document.write('<audio id=21 src="music/1.mp3" controls></audio>');
document.write('<audio id=22 src="music/像风一样自由.flac" controls></audio>');
document.write('<audio id=23 src="music/宋小睿少年.mp3" controls></audio>');
document.write('<audio id=24 src="music/佐羽故事与酒.mp3" controls></audio>');
document.write('<audio id=25 src="music/一个人挺好.flac" controls></audio>');
document.write('<audio id=26 src="music/袁成杰外滩十八号.flac" controls></audio>');
document.write('<audio id=27 src="music/心如止水.flac" controls></audio>');
document.write('<audio id=28 src="music/赵唯博下坠Falling.mp3" controls></audio>');
document.write('<audio id=29 src="music/张永健夜舞.flac" controls></audio>');
document.write('<audio id=30 src="music/2.flac" controls></audio>');
var a0=document.getElementById("0");
var a1=document.getElementById("1");
var a2=document.getElementById("2");
var a3=document.getElementById("3");
var a4=document.getElementById("4");
var a5=document.getElementById("5");
var a6=document.getElementById("6");
var a7=document.getElementById("7");
var a8=document.getElementById("8");
var a9=document.getElementById("9");
var a10=document.getElementById("10");
var a11=document.getElementById("11");
var a12=document.getElementById("12");
var a13=document.getElementById("13");
var a14=document.getElementById("14");
var a15=document.getElementById("15");
var a16=document.getElementById("16");
var a17=document.getElementById("17");
var a18=document.getElementById("18");
var a19=document.getElementById("19");
var a20=document.getElementById("20");
var a21=document.getElementById("21");
var a22=document.getElementById("22");
var a23=document.getElementById("23");
var a24=document.getElementById("24");
var a25=document.getElementById("25");
var a26=document.getElementById("26");
var a27=document.getElementById("27");
var a28=document.getElementById("28");
var a29=document.getElementById("29");
var a30=document.getElementById("30");
function ss(){
a0.play();
a0.addEventListener("ended",function(){
a1.play();
},false);
a1.addEventListener("ended",function(){
a2.play();
},false);
a2.addEventListener("ended",function(){
a3.play();
},false);
a3.addEventListener("ended",function(){
a4.play();
},false);
a4.addEventListener("ended",function(){
a5.play();
},false);
a5.addEventListener("ended",function(){
a6.play();
},false);
a6.addEventListener("ended",function(){
a7.play();
},false);
a7.addEventListener("ended",function(){
a8.play();
},false);
a8.addEventListener("ended",function(){
a9.play();
},false);
a9.addEventListener("ended",function(){
a10.play();
},false);
a10.addEventListener("ended",function(){
a11.play();
},false);
a11.addEventListener("ended",function(){
a12.play();
},false);
a12.addEventListener("ended",function(){
a13.play();
},false);
a13.addEventListener("ended",function(){
a14.play();
},false);
a14.addEventListener("ended",function(){
a15.play();
},false);
a15.addEventListener("ended",function(){
a16.play();
},false);
a16.addEventListener("ended",function(){
a17.play();
},false);
a17.addEventListener("ended",function(){
a18.play();
},false);
a18.addEventListener("ended",function(){
a19.play();
},false);
a19.addEventListener("ended",function(){
a20.play();
},false);
a20.addEventListener("ended",function(){
a21.play();
},false);
a21.addEventListener("ended",function(){
a22.play();
},false);
a22.addEventListener("ended",function(){
a23.play();
},false);
a23.addEventListener("ended",function(){
a24.play();
},false);
a24.addEventListener("ended",function(){
a25.play();
},false);
a25.addEventListener("ended",function(){
a26.play();
},false);
a26.addEventListener("ended",function(){
a27.play();
},false);
a27.addEventListener("ended",function(){
a28.play();
},false);
a28.addEventListener("ended",function(){
a29.play();
},false);
a29.addEventListener("ended",function(){
a30.play();
},false);
a30.addEventListener("ended",function(){
a31.play();
},false);
}
实际使用效果
第三张是自动生成的1.js文件