免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2327 | 回复: 0

java播放PCM文件 [复制链接]

论坛徽章:
0
发表于 2011-12-23 03:35 |显示全部楼层
Java代码 复制代码 收藏代码
  1. import java.io.File;   
  2. import java.io.FileInputStream;   
  3. import java.io.FileNotFoundException;   
  4. import java.io.IOException;   
  5. import java.io.InputStream;   
  6.   
  7. import javax.sound.sampled.AudioFormat;   
  8. import javax.sound.sampled.AudioSystem;   
  9. import javax.sound.sampled.DataLine;   
  10. import javax.sound.sampled.LineUnavailableException;   
  11. import javax.sound.sampled.SourceDataLine;   
  12.   
  13. public class test {   
  14.   
  15.     /**  
  16.      * @param args  
  17.      */  
  18.     public static void main(String[] args) {   
  19.         // TODO Auto-generated method stub   
  20.   
  21.         try {   
  22.             File file = new File("OutPcm.pcm");   
  23.             System.out.println(file.length());   
  24.             int offset = 0;   
  25.             int bufferSize = Integer.valueOf(String.valueOf(file.length())) ;   
  26.             byte[] audioData = new byte[bufferSize];   
  27.             InputStream in = new FileInputStream(file);   
  28.             in.read(audioData);   
  29.   
  30.                
  31.                
  32.             float sampleRate = 16000;   
  33.             int sampleSizeInBits = 16;   
  34.             int channels = 1;   
  35.             boolean signed = true;   
  36.             boolean bigEndian = false;   
  37.             // sampleRate - 每秒的样本数   
  38.             // sampleSizeInBits - 每个样本中的位数   
  39.             // channels - 声道数(单声道 1 个,立体声 2 个)   
  40.             // signed - 指示数据是有符号的,还是无符号的   
  41.             // bigEndian - 指示是否以 big-endian 字节顺序存储单个样本中的数据(false 意味着   
  42.             // little-endian)。   
  43.             AudioFormat af = new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);   
  44.             SourceDataLine.Info info = new DataLine.Info(SourceDataLine.class, af, bufferSize);   
  45.             SourceDataLine sdl = (SourceDataLine) AudioSystem.getLine(info);   
  46.             sdl.open(af);   
  47.             sdl.start();   
  48.             while (offset < audioData.length) {   
  49.                 offset += sdl.write(audioData, offset, bufferSize);   
  50.             }   
  51.         } catch (LineUnavailableException e) {   
  52.             // TODO Auto-generated catch block   
  53.             e.printStackTrace();   
  54.         } catch (FileNotFoundException e) {   
  55.             // TODO Auto-generated catch block   
  56.             e.printStackTrace();   
  57.         } catch (IOException e) {   
  58.             // TODO Auto-generated catch block   
  59.             e.printStackTrace();   
  60.         }   
  61.   
  62.     }   
  63.   
  64. }  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP