今天给各位分享java获取音频长度的知识,其中也会对java 获取视频时长进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
1、通过输入设备获取音频流 原理或java实现2、用Java如何得到mp3的属性3、用java代码将两段音频拼成一段4、java js前端请求后台去获得音频流,然后播放音乐,音乐可以控制进度,显示总时长5、java怎样把一个音频文件读到一个数组中6、java如何实现从视频中提取音频??????
通过输入设备获取音频流 原理或java实现
主要的功能模块在两个程序包中提供:
javax.media.sound.sampled-该程序包明确地说明了捕获、混合以及回播数字采样音频的界面。
javax.media.sound.MIDI-该程序包提供MIDI合成、序列化以及事件传送的界面。
代码如下;
import java.io.*; import javax.sound.sampled.*; import java.net.*; /** * Title: VoiceChat * Description: 输出音频(放音程序)* Copyright: Copyright (c) 2001 * Company: * @author 你猜!* @version 1.0 */ class Playback implements Runnable { final int bufSize = 16384; SourceDataLine line; Thread thread; Socket s; Playback(Socket s){//构造器 取得socket以获得网络输入流 this.s=s; }
public void start()
代码和详细解释太长,你给个邮箱,我给你发过去
用Java如何得到mp3的属性
package mp3;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class ReadMp3 {
private SongInfo info = null;
private RandomAccessFile ran = null;
private File file = null;
public ReadMp3() throws FileNotFoundException {
file = new File(“./rec/感觉不到你.mp3”);
ran = new RandomAccessFile(file, “r”);
System.out.println(“文件装载完毕”);
}
public static void main(String[] args) throws IOException {
ReadMp3 read = new ReadMp3();
byte[] buffer = new byte[128];
read.ran.seek(read.ran.length() – 128);
read.ran.read(buffer);
SongInfo info = new SongInfo(buffer);
System.out.println(“name:” + info.getSongName() + ” year:”
+ info.getYear() + ” 歌手:” + info.getArtist() + ” 专辑名:”
+ info.getAlbum() + ” 备注:” + info.getComment());
}
}
package mp3;
/**
* 一个歌曲信息的类的结构表示 这个歌曲是使用ID3V1的信息存储结构的
*
* @author hadeslee
*/
public class SongInfo {
private final String TAG = “TAG”; // 文件头1-3
private String songName; // 歌曲名4-33
private String artist; // 歌手名34-63
private String album; // 专辑名61-93
private String year; // 年94-97
private String comment; // 备注98-125
private byte r1, r2, r3; // 三个保留位126,127,128
private boolean valid; // 是否合法
public transient String fileName; // 此歌曲对应的文件名,没有封装
public SongInfo(byte[] data) {
if (data.length != 128) {
throw new RuntimeException(“数据长度不合法:” + data.length);
}
String tag = new String(data, 0, 3);
// 只有前三个字节是TAG才处理后面的字节
if (tag.equalsIgnoreCase(“TAG”)) {
valid = true;
songName = new String(data, 3, 30).trim();
artist = new String(data, 33, 30).trim();
album = new String(data, 63, 30).trim();
year = new String(data, 93, 4).trim();
comment = new String(data, 97, 28).trim();
r1 = data[125];
r2 = data[126];
r3 = data[127];
} else {
valid = false;
}
}
public SongInfo() {
}
/**
* 返回是否合法
*
* @return 是否
*/
public boolean isValid() {
return valid;
}
/**
* 得到此对象的128个字节的表示形式
*
* @return
*/
public byte[] getBytes() {
byte[] data = new byte[128];
System.arraycopy(TAG.getBytes(), 0, data, 0, 3);
byte[] temp = songName.getBytes();
System.arraycopy(temp, 0, data, 3, temp.length 30 ? 30 : temp.length);
temp = artist.getBytes();
System
.arraycopy(temp, 0, data, 33, temp.length 30 ? 30
: temp.length);
temp = album.getBytes();
System
.arraycopy(temp, 0, data, 63, temp.length 30 ? 30
: temp.length);
temp = year.getBytes();
System.arraycopy(temp, 0, data, 93, temp.length 4 ? 4 : temp.length);
temp = comment.getBytes();
System
.arraycopy(temp, 0, data, 97, temp.length 28 ? 28
: temp.length);
data[125] = r1;
data[126] = r2;
data[127] = r3;
return data;
}
public String getArtist() {
return artist;
}
public void setArtist(String authorName) {
this.artist = authorName;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public byte getR1() {
return r1;
}
public void setR1(byte r1) {
this.r1 = r1;
}
public byte getR2() {
return r2;
}
public void setR2(byte r2) {
this.r2 = r2;
}
public byte getR3() {
return r3;
}
public void setR3(byte r3) {
this.r3 = r3;
}
public String getSongName() {
return songName;
}
public void setSongName(String songName) {
if (songName == null) {
throw new NullPointerException(“歌名不能是null!”);
}
valid = true;
this.songName = songName;
}
public String getAlbum() {
return album;
}
public void setAlbum(String specialName) {
this.album = specialName;
}
public String getYear() {
return year;
}
public void setYear(String year) {
this.year = year;
}
}
用java代码将两段音频拼成一段
用io流吧 使用字节流 把两个文件先后读取然后存放到一个文件中就可以了
使用ByteArrayInputStream流对象来读取数据
使用ByteArrayOutputStream流对象来写数据
java js前端请求后台去获得音频流,然后播放音乐,音乐可以控制进度,显示总时长
AudioCLip主要的方法有:play()播放依次声音;loop()循环播放音乐;stop()停止播放。做法一:InputStreamis=null;AudioStreamas=null;is=getClass().getResourceAsStream(“a.wav”);try{as=newAudioStream(is);}catch(IOExceptione){}AudioPlayer.player.start(as);此方法将音乐文件放入流中在播放,仅限于JavaApplication,容易报错,空指针异常,或者是流异常,不推荐。做法二:Stringmusic=”a.wav”;AudioClipclip=Applet.newAudioClip(getClass().getResource(music));次方法在Applet中运行没有问题,但是Application中getclass()会返回空指针,导致失败。推荐做法:privateURLurl;privateAudioClipac;Filef1=newFile(“C:/3.wav”);try{url=f1.toURL();}catch(MalformedURLExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}ac=Applet.newAudioClip(cb1);ac.play();
java怎样把一个音频文件读到一个数组中
// 直接给一个只读一行的吧,呵呵,数字之间以空格来分隔
public static void main(String[] args) throws Exception {
File file = new File(“src/test.txt”);
double[] a = getLineFromTxt(file,” “);
for(int i = 0; i a.length; i++){
System.out.println(“a[“+i+”] = “+a[i]);
}
}
test中的数据以空格隔开 12 32 32.02
public static double[] getLineFromTxt(File file, String split) throws Exception{
BufferedReader br = new BufferedReader(new FileReader(file));
String firstLine = br.readLine(); //就读第一行哦
String[] arrs = firstLine.split(” “);
//将字符数组转为double数组
double[] arr = new double[arrs.length];
for(int i = 0; i arr.length; i++){
arr[i] = Double.parseDouble(arrs[i]);
}
java如何实现从视频中提取音频??????
1.你可以播放视频,然后java软件录制。
2.研究视频的编码格式,提取视频中包含的声音信息。java编码提取。没中视频格式都要具体分析。
3.有视频处理软件,直接提取。
java获取音频长度的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 获取视频时长、java获取音频长度的信息别忘了在本站进行查找喔。