Android 语音合成问题
柠檬爱_曾 发布于2018-12 浏览:1935 回复:5
0
收藏

问题:看了下demo源代码,发现文字合成语音时文本不能超过超过1024个GBK字节(500汉字),在源码中修改了下代码,发现当文本超过500汉字,把文本截成几段调用批量合成播放,播放过程刚开始是女音播放,播放一段时加后变成男音,男音播放一小段时间后又变成女音播放。并且Edittext那个文字选中会在播放一段文字后,又重新跳到开始位置。


  private void speak() {
        mShowText.setText("");
        String text = mInput.getText().toString();
        // 需要合成的文本text的长度不能超过1024个GBK字节。
        if (TextUtils.isEmpty(mInput.getText())) {
            text = "百度语音,面向广大开发者永久免费开放语音合成技术。斑驳的旧时光里,总有一些" +
                    "或深或浅温暖人心的馨香,让人舍不得遗忘。潮湿的过往,不经意间邂逅了谁的眼眸" +
                    ";文字里泛舟,又与谁的倩影不期而遇?淡淡的墨香中,谁在翩然靠近,袅袅娜娜," +
                    "直抵心间?一切,都那么美,那么惆怅,这不仅仅是文字的描摹,其外还有收藏着的心思" +
                    "与情感。的确,光阴里曾经明媚或暗淡的过往,总是伴着美丽的忧伤与成长的阵痛;" +
                    "日渐淡薄的往昔,也总能或多或少的在心里留下一丝清雅的执念。收藏,是因为" +
                    "骨子里是个守旧的人;收藏,更是因为心里有值得铭记的感动。今生,心为笔," +
                    "写下满笺素心浅事,不求浮华,但求安然;今生,心作尘,用绵长的时光,写下" +
                    "一份浅淡,缓缓落墨,轻轻收笔。走过流年悲喜沉浮,历阅尘世沧海桑田,在" +
                    "繁盛与荒凉的交替中,在升华和坠落的更迭中,我们体会过人生中的喜悦和欢愉," +
                    "也浅尝到流年里的无奈和忧伤,终于懂得,一些经历带来的不仅仅是或深或浅的回忆" +
                    ",也许还有一辈子都刻画在心头的轻痕。很多东西,虽然还是有些放不下," +
                    "但是我们学会了把它放在心的另一个位置,浅浅抚慰。握一份懂得与感知," +
                    "盈一怀暖意与淡泊,穿行于浮华俗世,以一袭最温婉的姿态,于淡淡的疼痛中," +
                    "温暖清寒岁月,轻数时光,向暖流年,许浅冬一季暗香。当流年的风,或喜或悲," +
                    "从指尖滑过,转角街头的灯火阑珊,已在光阴的扉页上泛黄,生命的旅程中," +
                    "没有什么不会在岁月中老去。携一缕暖意,让心没有疏离与荒凉,把那些千回百转的" +
                    "念,凝结成心香,尘封收藏。最好的放下,不是刻意的去忘记,而是让彼此安然。" +
                    "温一盏岁月的暗香,在平静中回味,那些浅浅淡淡的过往,便是岁月留给我们的风景" +
                    "。行一程山水,书一抹眷恋,任走过心间的那缕清韵,在记忆中飞扬。铺一张素笺," +
                    "将斑驳零散的欢愉,细细描绘,于心之一隅,妥帖安放。寻一处清幽,让那千回百转" +
                    "的念,开成一朵心花,在风中流转。";
            mInput.setText(text);
        }
        // 合成前可以修改参数:
        // Map params = getParams();
        // synthesizer.setParams(params);
        List> texts = new ArrayList>();
        if(text.length()>500){
            int count=text.length()/500+1;
            for (int i = 0; i < count; i++) {
                if(i==(count-1)){
                    texts.add(new Pair(text.substring(i*500,text.length()),(i+1)+""));
                }else{
                    texts.add(new Pair(text.substring(i*500,(i+1)*500),(i+1)+""));
                }
            }
            int result = synthesizer.batchSpeak(texts);
            checkResult(result, "batchSpeak");
        }else{
            int result = synthesizer.speak(text);
            checkResult(result, "speak");
        }

    }
收藏
点赞
0
个赞
共5条回复 最后由用户已被禁言回复于2022-04
#6用户已被禁言回复于2019-02
#5 181*****210回复
我也不确定啊   就是不定时的会出现自动切换问题 

先找一个稳定的网络排除一下。有可能是网络好时用在线,为女声,网络不好是切换到离线模式为其他声音。

0
#5181*****210回复于2019-02
#4 用户已被禁言回复
是否也是网络问题?

我也不确定啊   就是不定时的会出现自动切换问题 

0
#4用户已被禁言回复于2019-02
#3 181*****210回复
您好,请问解决了吗?我也遇到了男女生音色自动切换的问题

是否也是网络问题?

0
#3181*****210回复于2019-02

您好,请问解决了吗?我也遇到了男女生音色自动切换的问题

0
#2阿萨德去23123回复于2018-12

男女声切换可能是网络不好,离线和在线模式来回切换

0
TOP
切换版块