谁弄过java读汉字,然后发音出来呢!现在看小说太累了,小自己写一个读小说的!标点符号不读,有英语能读出来最好!

解决方案 »

  1.   

    楼主这想法很好,我觉得这个软件可以分为几部分
    1. 文本读取模块,作为输入端
    2. 语音引擎/语音库模块,提供中文发音
    3. 用户模块(界面、功能、日志、恢复阅读等)我认为选择一个合适的语音引擎,调试测试引擎接口API应该是最优先最重要的一步。
      

  2.   

    音视频处理
    需要安装jmf-2_1_1e-windows-i586.exe(java media framerwork)
    实例: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;/**
     * 采集音频
     * @author Administrator
     */
    public class CaptureAudio {

    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:///D:/Dvp/foo.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);
    }
    StreamWriterControl swc = (StreamWriterControl) p.getControl("javax.media.control.StreamWriterControl");
    // 最大 5MB
    if (swc != null)
    swc.setStreamSizeLimit(5000000);
    try {
    filewriter.start();
    } catch (IOException e) {
    e.printStackTrace();
    System.exit(-1);
    }
    // 录制5秒钟
    sh.playToEndOfMedia(5000);
    sh.close();
    filewriter.close();
    }
    }
      

  3.   

    JMF自带的读的让人不能淡定,楼主可以找一下现在成熟的语音引擎,然后直接使用它的Java调用就好了。