「java声音格式」java 音频格式转换
本篇文章给大家谈谈java声音格式,以及java 音频格式转换对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java音乐播放器没有声音,MP3 flac 都试过了
- 2、java 里支持什么格式的音频文件?
- 3、Java怎么将.amr 格式的音频转换成 mp3 格式
- 4、java实现 mp3格式转换wav
- 5、java 支持什么格式声音文件
- 6、java怎样播放声音文件?
java音乐播放器没有声音,MP3 flac 都试过了
Java Applet支持的音乐格式只有wav,mid,au三种格式,
你如果要播放Mp3格式的音乐文件,需要JMF(Java Media Framework) API的有关jar包的支持才行.flac格式的音乐文件就更不行了.
要不然你用音乐格式的转换软件把Mp3文件转成wav,就可以播放了.
java 里支持什么格式的音频文件?
java本身有格式限制
可运行在Internet平台上的音频文件有HTML支持的WMIDI.JAVA支持的AU及RA.
另外试试看WAV格式的音乐文件.
这个不是很清楚..
sound=getAudioClip(getCodeBase(),"歌名.wav");
Java怎么将.amr 格式的音频转换成 mp3 格式
步骤
运行添加视频文件。打开狸(liwo)窝全能转换器后,单击界面左上角的第一个按钮“添加视频”,浏览打开文件夹并将amr音乐文件导入到软件。有的用户可以会疏忽的,就是在打开文件夹时没发现有amr文件,其实有可能忘掉选择文件类型了,选择All Files(*.*),即所有文件,就可以看到了。
视频编辑。软件提供有视频编辑和3D效果的功能,这是对视频而言的。对于音频,我们可以使用软件的视频编辑功能。单击主界面左上方第二个按钮“视频编辑”,即可进入编辑窗口。如图所示,可以对音频进行切割,比如音乐太大的时候可以用,剪掉不需要的一段,保存需要的一段。
选择预置方案。软件支持输出aac、ac3、aiff、amr、m4a、mp2、mp3、ogg、ra、au、wav、wma、mka、flac(无损)、wav(无损)等格式音频。这里在分类“常用音频”中就可以找到需要转换的mp3格式-MP3-MPEG Layer-3 Audio (*.mp3) 流行的音频格式,具有很好的音质和很小的体积。
参数设置。在“预置方案”右边是“高级设置”,单击进入设置窗口,可以进行音频参数设置。新手不用进行此项设置,因为软件已经按照常用格式,使用范围等进行分类设置了,其参数相差不大。只是按照所需要的在预置方案中选择相应格式即可。
5
开始转换。设置完毕后,单击主界面右下角的圆形按钮,软件开始转换音频文件。转换没有先后顺序,是同时进行转换。软件转换速度较快,加上音频文件体积本来就不大,最多的一分钟即可转换完毕
java实现 mp3格式转换wav
/*
* 实现录音机的功能
*/
package com.liuyun.MyRecord1;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.io.*;
import javax.sound.sampled.*;
import java.lang.*;
public class MyRecord extends JFrame implements ActionListener{
//定义录音格式
AudioFormat af = null;
//定义目标数据行,可以从中读取音频数据,该 TargetDataLine 接口提供从目标数据行的缓冲区读取所捕获数据的方法。
TargetDataLine td = null;
//定义源数据行,源数据行是可以写入数据的数据行。它充当其混频器的源。应用程序将音频字节写入源数据行,这样可处理字节缓冲并将它们传递给混频器。
SourceDataLine sd = null;
//定义字节数组输入输出流
ByteArrayInputStream bais = null;
ByteArrayOutputStream baos = null;
//定义音频输入流
AudioInputStream ais = null;
//定义停止录音的标志,来控制录音线程的运行
Boolean stopflag = false;
//记录开始录音的时间
long startPlay;
//定义所需要的组件
JPanel jp1,jp2,jp3;
JLabel jl1=null;
JButton captureBtn,stopBtn,playBtn,saveBtn;
public static void main(String[] args) {
//创造一个实例
MyRecord mr = new MyRecord();
}
//构造函数
public MyRecord()
{
//组件初始化
jp1 = new JPanel();
jp2 = new JPanel();
jp3 = new JPanel();
//定义字体
Font myFont = new Font("华文新魏",Font.BOLD,30);
jl1 = new JLabel("录音机功能的实现");
jl1.setFont(myFont);
jp1.add(jl1);
captureBtn = new JButton("开始录音");
//对开始录音按钮进行注册监听
captureBtn.addActionListener(this);
captureBtn.setActionCommand("captureBtn");
//对停止录音进行注册监听
stopBtn = new JButton("停止录音");
stopBtn.addActionListener(this);
stopBtn.setActionCommand("stopBtn");
//对播放录音进行注册监听
playBtn = new JButton("播放录音");
playBtn.addActionListener(this);
playBtn.setActionCommand("playBtn");
//对保存录音进行注册监听
saveBtn = new JButton("保存录音");
saveBtn.addActionListener(this);
saveBtn.setActionCommand("saveBtn");
this.add(jp1,BorderLayout.NORTH);
this.add(jp2,BorderLayout.CENTER);
this.add(jp3,BorderLayout.SOUTH);
jp3.setLayout(null);
jp3.setLayout(new GridLayout(1, 4,10,10));
jp3.add(captureBtn);
jp3.add(stopBtn);
jp3.add(playBtn);
jp3.add(saveBtn);
//设置按钮的属性
captureBtn.setEnabled(true);
stopBtn.setEnabled(false);
playBtn.setEnabled(false);
saveBtn.setEnabled(false);
//设置窗口的属性
this.setSize(400,300);
this.setTitle("录音机");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
if(e.getActionCommand().equals("captureBtn"))
{
//点击开始录音按钮后的动作
//停止按钮可以启动
captureBtn.setEnabled(false);
stopBtn.setEnabled(true);
playBtn.setEnabled(false);
saveBtn.setEnabled(false);
//调用录音的方法
capture();
//记录开始录音的时间
startPlay = System.currentTimeMillis();
}else if (e.getActionCommand().equals("stopBtn")) {
//点击停止录音按钮的动作
captureBtn.setEnabled(true);
stopBtn.setEnabled(false);
playBtn.setEnabled(true);
saveBtn.setEnabled(true);
//调用停止录音的方法
stop();
//记录停止录音的时间
long stopPlay = System.currentTimeMillis();
//输出录音的时间
System.out.println("Play continues " + (stopPlay-startPlay));
}else if(e.getActionCommand().equals("playBtn"))
{
//调用播放录音的方法
play();
}else if(e.getActionCommand().equals("saveBtn"))
{
//调用保存录音的方法
save();
}
}
//开始录音
public void capture()
{
try {
//af为AudioFormat也就是音频格式
af = getAudioFormat();
DataLine.Info info = new DataLine.Info(TargetDataLine.class,af);
td = (TargetDataLine)(AudioSystem.getLine(info));
//打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
td.open(af);
//允许某一数据行执行数据 I/O
td.start();
//创建播放录音的线程
Record record = new Record();
Thread t1 = new Thread(record);
t1.start();
} catch (LineUnavailableException ex) {
ex.printStackTrace();
return;
}
}
//停止录音
public void stop()
{
stopflag = true;
}
//播放录音
public void play()
{
//将baos中的数据转换为字节数据
byte audioData[] = baos.toByteArray();
//转换为输入流
bais = new ByteArrayInputStream(audioData);
af = getAudioFormat();
ais = new AudioInputStream(bais, af, audioData.length/af.getFrameSize());
try {
DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, af);
sd = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
sd.open(af);
sd.start();
//创建播放进程
Play py = new Play();
Thread t2 = new Thread(py);
t2.start();
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//关闭流
if(ais != null)
{
ais.close();
}
if(bais != null)
{
bais.close();
}
if(baos != null)
{
baos.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//保存录音
public void save()
{
//取得录音输入流
af = getAudioFormat();
byte audioData[] = baos.toByteArray();
bais = new ByteArrayInputStream(audioData);
ais = new AudioInputStream(bais,af, audioData.length / af.getFrameSize());
//定义最终保存的文件名
File file = null;
//写入文件
try {
//以当前的时间命名录音的名字
//将录音的文件存放到F盘下语音文件夹下
File filePath = new File("F:/语音文件");
if(!filePath.exists())
{//如果文件不存在,则创建该目录
filePath.mkdir();
}
long time = System.currentTimeMillis();
file = new File(filePath+"/"+time+".wav");
AudioSystem.write(ais, AudioFileFormat.Type.WAVE, file);
//将录音产生的wav文件转换为容量较小的mp3格式
//定义产生后文件名
String tarFileName = time+".mp3";
Runtime run = null;
try {
run = Runtime.getRuntime();
long start=System.currentTimeMillis();
//调用解码器来将wav文件转换为mp3文件
strongspan style="color:#ff0000;"Process p=run.exec(filePath+"/"+"lame -b 16 "+filePath+"/"+file.getName()+" "+filePath+"/"+tarFileName); //16为码率,可自行修改
/span/strong//释放进程
p.getOutputStream().close();
p.getInputStream().close();
p.getErrorStream().close();
p.waitFor();
long end=System.currentTimeMillis();
System.out.println("convert need costs:"+(end-start)+"ms");
//删除无用的wav文件
if(file.exists())
{
file.delete();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//最后都要执行的语句
//run调用lame解码器最后释放内存
run.freeMemory();
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//关闭流
try {
if(bais != null)
{
bais.close();
}
if(ais != null)
{
ais.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
//设置AudioFormat的参数
public AudioFormat getAudioFormat()
{
//下面注释部分是另外一种音频格式,两者都可以
AudioFormat.Encoding encoding = AudioFormat.Encoding.
PCM_SIGNED ;
float rate = 8000f;
int sampleSize = 16;
String signedString = "signed";
boolean bigEndian = true;
int channels = 1;
return new AudioFormat(encoding, rate, sampleSize, channels,
(sampleSize / 8) * channels, rate, bigEndian);
// //采样率是每秒播放和录制的样本数
// float sampleRate = 16000.0F;
// // 采样率8000,11025,16000,22050,44100
// //sampleSizeInBits表示每个具有此格式的声音样本中的位数
// int sampleSizeInBits = 16;
// // 8,16
// int channels = 1;
// // 单声道为1,立体声为2
// boolean signed = true;
// // true,false
// boolean bigEndian = true;
// // true,false
// return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed,bigEndian);
}
//录音类,因为要用到MyRecord类中的变量,所以将其做成内部类
class Record implements Runnable
{
//定义存放录音的字节数组,作为缓冲区
byte bts[] = new byte[10000];
//将字节数组包装到流里,最终存入到baos中
//重写run函数
public void run() {
baos = new ByteArrayOutputStream();
try {
stopflag = false;
while(stopflag != true)
{
//当停止录音没按下时,该线程一直执行
//从数据行的输入缓冲区读取音频数据。
//要读取bts.length长度的字节,cnt 是实际读取的字节数
int cnt = td.read(bts, 0, bts.length);
if(cnt 0)
{
baos.write(bts, 0, cnt);
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
//关闭打开的字节数组流
if(baos != null)
{
baos.close();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
td.drain();
td.close();
}
}
}
}
//播放类,同样也做成内部类
class Play implements Runnable
{
//播放baos中的数据即可
public void run() {
byte bts[] = new byte[10000];
try {
int cnt;
//读取数据到缓存数据
while ((cnt = ais.read(bts, 0, bts.length)) != -1)
{
if (cnt 0)
{
//写入缓存数据
//将音频数据写入到混频器
sd.write(bts, 0, cnt);
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
sd.drain();
sd.close();
}
}
}
}
java 支持什么格式声音文件
jdk自带类库只能实现AU,AIFF,WAV,MIDI,RFM等格式的音频,加了插件后才能实现mp3等。
java怎样播放声音文件?
//给你个例子
import java.io.*;
import javax.sound.sampled.*;
import javax.swing.*;
public class Au extends JFrame
{
public static void main(String[] args) throws Exception
{
Au w=new Au();
w.loop();
}
void loop() throws Exception
{
//将f指定为声音文件的文件名,声音文件只能是WAVE、AU、AIFF、AIFC、SND格式的
final String f="s.wav";
Clip c=AudioSystem.getClip();
c.open(AudioSystem.getAudioInputStream(new File(f)));
c.loop(Clip.LOOP_CONTINUOUSLY);
}
Au()
{
setSize(400,300);
setLocationRelativeTo(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
}
java声音格式的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 音频格式转换、java声音格式的信息别忘了在本站进行查找喔。