zoukankan      html  css  js  c++  java
  • Atitit java播放 wav MIXER 混响器编程 目录 1.1. MIXER 混响器编程 1 1.2. 得到系统中一共有多少个混音器设备: 1 1.3. 接口摘要 1 1.4. 调节音量

    Atitit java播放 wav  MIXER 混响器编程

     

    目录

    1.1. MIXER 混响器编程 1

    1.2. 得到系统中一共有多少个混音器设备: 1

    1.3. 接口摘要 1

    1.4. 调节音量 2

    1.5. Code /bookmarksHtmlEverythingIndexPrj/src/apkg/soundPlay.java 3

     

     

      1. MIXER 混响器编程

    2013年10月14日 17:17:24 fakine 阅读数:3632

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fakine/article/details/12711779

      1. 得到系统中一共有多少个混音器设备:


    (在一般的系统中只有一块声卡,所以返回的值应该为1;我的系统中装有一块PIC创新声卡,一块主板载C-media声卡,还安装了Totalrecorder软件,所以返回值是3)
    int devnum=::mixerGetNumDevs();

     

      1. 接口摘要

    Clip

    Clip 接口表示特殊种类的数据行,该数据行的音频数据可以在回放前加载,而不是实时流出。

    DataLine

    DataLine 将与介质相关的功能添加到其超接口 Line

    Line

    Line 接口表示单声道或多声道音频供给。

    LineListener

    可以注册实现 LineListener 接口的类的实例来接收行状态更改时发生的事件。

    Mixer

    混频器是一个具有一行或多行的音频设备。

    Port

    端口是往返于音频输入或输出线与音频设备之间的简单线路。

    SourceDataLine

    源数据行是可以写入数据的数据行。

    TargetDataLine

    目标数据行是可以从中读取音频数据的某种类型的 DataLine

     

     

      1. 调节音量
    1.     sline.open();                  
    2.         FloatControl volctrl=(FloatControl)sline.getControl(FloatControl.Type.MASTER_GAIN);   
    3. volctrl.setValue(newVal);// newVal - the value of volume slider  

     也就是说,必须开始播放,得到了播放的DataLine以后才可以得到Control信息.

    我这么做了,的到

    Master Gain with current value: 0.0 dB (range: -80.0 - 6.0206)

    不太懂dB是怎么算的,反正默认值为0,也就是说,向正(增大音量)只能移动6个单位.对于一个JSlider来说,实在太小距离了.

     

     

    混音与Java(不带混合机

     

      1. Code /bookmarksHtmlEverythingIndexPrj/src/apkg/soundPlay.java

    private static void playwav(String file) throws  Exception {

    AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(file));

    AudioFormat audioFormat= audioInputStream.getFormat();

     

    DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);

    SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem

    .getLine(info);

     

    //AudioFormat audioFormat2= new AudioFormat( 70000, 16, 2, true, false);

    sourceDataLine.open(audioFormat); //this audioformat can overwrite last  DataLine.Info.audioFormat

     

     

     

     

    sourceDataLine.start();

     

    int cnt;

    // 读取数据到缓存数据

    byte[] tempBuffer = new byte[10000] ;

    while ((cnt = audioInputStream.read(tempBuffer, 0, tempBuffer.length)) != -1) {

    if (cnt > 0) {

    // 播放缓存数据

    sourceDataLine.write(tempBuffer, 0, cnt);

    }

    }

    // Block等待临时数据被输出为空

    sourceDataLine.drain();

    sourceDataLine.close();

     

    }

     

    API) - IT屋-程序员软件开发技术分享社区.html

  • 相关阅读:
    Convolutional Sequence to Sequence Learning 论文笔记
    机器阅读理解(看经典MRC模型与花式Attention)
    Attention机制概述
    文本分类(TextRNN/TextCNN/TextRCNN/FastText/HAN)
    三大特征提取器(RNN/CNN/Transformer)
    UniGUI的布局使用说明
    Delphi获取文件名、文件名不带扩展名、文件名的方法;delphi 获取文件所在路径
    DELPHI如何获取某目录下的所有文件名?
    Delphi 自带的字符串分割函数split
    delphi 拆分字符串
  • 原文地址:https://www.cnblogs.com/attilax/p/15197261.html
Copyright © 2011-2022 走看看