jmf获取网络上某个电台发出的声音,或获取播放本地音频时的声音,并生成一个音频文件。

时间:2021-02-08 19:44:55
想通过jmf获取网络上某一个电台的声音。或者获取播放本地音频文件的声音,并生成一个音频文件。怎么获取声卡设备呢?会的能指导一下小弟吗?或发一份代码给小弟。QQ:136424642  MSN:lingyonghui@hotmail.com  邮箱:seven_ling@yahoo.com.cn 

这是我通过麦克风输入声音获取声音,并生成一个音频文件。大家可以帮忙看一下,怎么进行改变。
package irichu;
import java.io.IOException;
import java.util.Vector;
 
import javax.media.CaptureDeviceInfo;
import javax.media.CaptureDeviceManager;
import javax.media.DataSink;
import javax.media.Manager;
import javax.media.MediaLocator;
import javax.media.NoDataSinkException;
import javax.media.NoProcessorException;
import javax.media.Processor;
import javax.media.control.StreamWriterControl;
import javax.media.format.AudioFormat;
import javax.media.protocol.DataSource;
import javax.media.protocol.FileTypeDescriptor;

import irichu.StateHelper;
 
public class CaptureAudio {
       /**
        * Writing captured audio to a file with a DataSink. 
        */
       public static void main(String[] args) {
              CaptureDeviceInfo di = null;
           Processor p = null;
           StateHelper sh = null;
 //查询CaptureDeviceManager,来定位你需要使用的媒体采集设备。
           Vector deviceList = CaptureDeviceManager.getDeviceList(new
                                AudioFormat(AudioFormat.LINEAR, 44100, 16, 2));
              if (deviceList.size() > 0){
//得到此设备的CaptureDeviceInfo实例。
                  di = (CaptureDeviceInfo)deviceList.firstElement();
                  }
              else
                  // 找不到满足(linear, 44100Hz, 16 bit,stereo audio.)音频设备,退出。
                  System.exit(-1);
              try {
             //获得MediaLocator,并由此创建一个Processor。
                     p = Manager.createProcessor(di.getLocator());
                  sh = new StateHelper(p);
               } catch (IOException e) {
                     e.printStackTrace();
                  System.exit(-1);
              } catch (NoProcessorException e) {
                     e.printStackTrace();
                  System.exit(-1);
              }
              // Configure the processor
              if (!sh.configure(10000)){
                     System.out.println("configure wrong!");
                  System.exit(-1);
                  }
              //定义待存储该媒体的内容类型(content type)。
              p.setContentDescriptor(new
                         FileTypeDescriptor(FileTypeDescriptor.WAVE));
         // realize the processor.
              if (!sh.realize(10000)){
                     System.out.println("realize wrong!");
                  System.exit(-1);
                  }
              // get the output of the processor
             DataSource source = p.getDataOutput();
         //定义存储该媒体的文件。
             MediaLocator dest = new MediaLocator(new java.lang.String("file:///C:/foo1.wav"));
         //创建一个数据池
              DataSink filewriter = null;
              try {
                  filewriter = Manager.createDataSink(source, dest);
                  filewriter.open();
              } catch (NoDataSinkException e) {
                     e.printStackTrace();
                  System.exit(-1);
              } catch (IOException e) {
                     e.printStackTrace();
                  System.exit(-1);
              } catch (SecurityException e) {
                     e.printStackTrace();
                  System.exit(-1);
              }
              // if the Processor implements StreamWriterControl, we can
              // call setStreamSizeLimit
              // to set a limit on the size of the file that is written.
              StreamWriterControl swc = (StreamWriterControl)
                  p.getControl("javax.media.control.StreamWriterControl");
              //set limit to 5MB
              if (swc != null)
                  swc.setStreamSizeLimit(5000000);
              // now start the filewriter and processor
              try {
                  filewriter.start();
              } catch (IOException e) {
                     e.printStackTrace();
                  System.exit(-1);
              }
              // Capture for 5 seconds
              sh.playToEndOfMedia(20000);
              sh.close();
              // Wait for an EndOfStream from the DataSink and close it...
              filewriter.close();
       }
}

2 个解决方案

#1


学习一下

#2


up一下,在音频采集并生成一个音频文件的时候,新生成的音频文件的声音比原来的声音小。如何解决这个问题呢?

#1


学习一下

#2


up一下,在音频采集并生成一个音频文件的时候,新生成的音频文件的声音比原来的声音小。如何解决这个问题呢?