我自己用一个音频流写了一个可以播放mp3格式的类, 现在我在想扩展一点功能就是快进快退的功能,想了很久还是没有一个很好的解决方案,用流写过播放器的高手帮忙分析给我听如何实现.
我的播放器原理是:先用一个类把指定的mp3文件格式转换格式,转换后去读取一定的字节长度,读取的这个方法是按每秒来读取的, (关键就是这个每秒读取才是障碍)
然后再每秒的输出音频,代码如下
int len=(int)af.getSampleRate()*af.getFrameSize(); //这个len就是一秒的字节数
byte[] buffer=new byte[len];
int buffer_all=0;
sdl.open(af, sdl.getBufferSize()); //打开
sdl.start(); //开始播放
while(buffer_all>=0){
buffer_all=ais.read(buffer,0,len); //一秒读取一定长度的字节
if(buffer_all>=0){
sdl.write(buffer, 0, buffer_all); //再一秒输出读取的字节
}
}
我的想法是要读取的长度比输出的长度大才能做到快进,但是这样没办法精确
然后我又想一次性全部读出来,然后再一秒一秒的播放. 但是这样岂不是要先等一首歌的时间(等它读进内存吖),等它读完再播放..
有没有写过类似的高手吖,帮忙分析给我听啊