转载自:http://ganeshtiwaridotcomdotnp.blogspot.com/2011/12/java-audio-playing-pcm-amplitude-array.html

How to play a array of PCM amplitude values (integer or float array) in Java - Steps

Basic Steps :

  1. //initialize source data line - for playback
  2. SourceDataLine line = AudioSystem.getSourceDataLine(audioFormat);
  3. line.open(audioFormat);
  4. line.start();
  5.  
  6. //play the byteArray
  7. line.write(byteArray, 0, byteArray .length);//(byte[] b, int off, int len)
  8. line.drain();
  9. line.close();

Converting integer array to bytearray :

We need to convert our PCM array to byteArray because the line.write requires byte[] b as parameter.

  1. byte b = (byte)(i*127f);

Full code : This example plays the randomly generated array :

  1. public class PlayAnArray {
  2. private static int sampleRate = 16000;
  3. public static void main(String[] args) {
  4. try {
  5. final AudioFormat audioFormat = new AudioFormat(sampleRate, 8, 1, true, true);
  6. SourceDataLine line = AudioSystem.getSourceDataLine(audioFormat );
  7. line.open(audioFormat );
  8. line.start();
  9. for (int i = 0; i < 5; i++) {//repeat in loop
  10. play(line, generateRandomArray());
  11. }
  12. line.drain();
  13. line.close();
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. private static byte[] generateRandomArray() {
  19. int size = 20000;
  20. System.out.println(size);
  21. byte[] byteArray = new byte[size];
  22. for (int i = 0; i < size; i++) {
  23. byteArray[i] = (byte) (Math.random() * 127f);
  24. }
  25. return byteArray;
  26. }
  27. private static void play(SourceDataLine line, byte[] array) {
  28. int length = sampleRate * array.length / 1000;
  29. line.write(array, 0, array.length);
  30. }
  31. }

You may modify generateRandomArray to play different waveforms like SINE wave, square wave... etc

For playing a wave file in java follow my post on How to play wave file on java

Java Audio : Playing PCM amplitude Array的更多相关文章

  1. Java Sound : audio inputstream from pcm amplitude array

    转载自:http://ganeshtiwaridotcomdotnp.blogspot.com/2011/12/java-sound-making-audio-input-stream.html In ...

  2. Java extract amplitude array from recorded wave

    转载自:http://ganeshtiwaridotcomdotnp.blogspot.com/2011/12/java-extract-amplitude-array-from.html Extra ...

  3. LeetCode第[18]题(Java):4Sum 标签:Array

    题目难度:Medium 题目: Given an array S of n integers, are there elements a, b, c, and d in S such that a + ...

  4. 排查Hive报错:org.apache.hadoop.hive.serde2.SerDeException: java.io.IOException: Start of Array expected

    CREATE TABLE json_nested_test ( count string, usage string, pkg map<string,string>, languages ...

  5. (java oracle)以bean和array为参数的存储过程及dao部分代码

    一.数据库部分 1.创建bean对象 CREATE OR REPLACE TYPE "QUARTZJOBBEAN" as object ( -- Author : Duwc -- ...

  6. Java for LeetCode 189 Rotate Array

    Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the array ...

  7. Java SE 基础知识(String,Array)

    String 类: 1. 对于String对象的相等性判断来说,请使用equals()方法,而不是==.String的equals()是判断当前字符串与传进来的字符串的内容是否一致. 2. Strin ...

  8. Java [Leetcode 238]Product of Array Except Self

    题目描述: Given an array of n integers where n > 1, nums, return an array output such that output[i]  ...

  9. Java [Leetcode 88]CMerge Sorted Array

    题目描述: Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array. N ...

随机推荐

  1. C++处理异常

    C++处理异常

  2. linux下Boost序列化问题解决

    由于项目需要,要使用boost,所以在网上找了一些例子帮助理解,其中遇到很多问题,再次总结记录一下.#include <boost/archive/text_oarchive.hpp> # ...

  3. python 类 双下划线解析

    __getattr__用法:说明:这是python里的一个内建函数,当调用的属性或者方法不存在时,该方法会被调用调用不存在的属性调用不存在的方法

  4. GreenPlum 常用命令

    gpstate 命令 参数 作用 gpstate -b => 显示简要状态 gpstate -c => 显示主镜像映射 gpstart -d => 指定数据目录(默认值:$MASTE ...

  5. mysqli扩展和持久化连接

    mysqli扩展的持久化连接在PHP5.3中被引入.支持已经存在于PDO MYSQL 和ext/mysql中. 持久化连接背后的思想是客户端进程和数据库之间的连接可以通过一个客户端进程来保持重用, 而 ...

  6. fread和fwrite和feof读写二进制文件

    #include <stdio.h> #include <stdlib.h> void text_to_bin(char *argv[]); void bin_to_text( ...

  7. php 每隔30s在页面显示字符串

    例子 // 30秒执行一次 ignore_user_abort(); //即使Client断开(如关掉浏览器),PHP脚本也可以继续执行. set_time_limit(); // 执行时间为无限制, ...

  8. 超级详细的git使用指北

    原文地址:https://www.cnblogs.com/wupeixuan/p/11947343.html 1.0  安装和配置 1.1  Git 安装 1.2  Git 配置 2.0  Git 基 ...

  9. ICEM-管肋

    原视频下载地址:https://yunpan.cn/cMgkmd7u9ZPdC  访问密码 8a73

  10. Java8中LocalDate的使用---项目中日期处理

    // 获取当前日期 LocalDate now = LocalDate.now(); // 设置日期 LocalDate now2 = LocalDate.of(2099, 2, 28); // 解析 ...