QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 821|回复: 2

修改了一下reciteword

[复制链接]
发表于 2005-12-13 19:28:03 | 显示全部楼层 |阅读模式
原来下载了一个rpm包的reciteword,虽然是可以装上且能运行,但是发出的声音有爆音(原因是它使用了esd,而我没有使用esd吧),难听死了.也想过下载源代码自己编绎一下.但是因为它有在gtk2.4以上编绎出错的问题,一直没有成功.
        今天受不了了,决定到网上找找.找到了解决编绎问题的方法之一,就是修改Makefile
将118行开始的INCLUDE改成这样:
[code:1]
INCLUDES = \
    $(RECITEWORD_CFLAGS)                        \
    -DRECITEWORD_DATA_DIR=\""$(datadir)/reciteword"\"        \
    -DRECITEWORD_LOCALEDIR=\""$(prefix)/$(DATADIRNAME)/locale"\"
[/code:1]
也就是把后面几行删了就行.
这样就可以编绎通过了.但是声音还是一样有问题呀.决定除去用esd播放的部分,换成alsa的
方法: 打开sndserv.cpp,将play_file函数改成这样
[code:1]
void play_file(const char *filename,PLAY_METHOD method)
{
    if ((!g_pReciteWord->sndserv.canplay)||(g_pReciteWord->sndserv.disable))
        return;

    //esd_play_file ("reciteword", filename, 1);  //it can't return quickly :( when in typing,press wrong key will cause freezing.
      
    // the system() function is inefficiency, should change to use thread to call esd_play_file().
    /*gchar command[256];
    sprintf(command,"esdplay %s &",filename);
    system(command);*/
   
    switch (method)
    {
        case PM_MIX:
        {
#ifdef G_OS_WIN32
        PlaySound(filename, 0, SND_ASYNC | SND_FILENAME);
#else
            //GThread * thread;
            //gchar *dup_filename = g_strdup(filename); //as in the new thread, filename may have already be freeed.
            //thread = g_thread_create(play_file_mix,(gpointer)dup_filename,false,NULL);  //use GThreadPool may be more efficient.
            gchar *command=g_strdup_printf("aplay %s &",filename);
            system(command);      
#endif
            break;
        }
        case PM_STOP_PRE:   // it is hard to done,may need write my own esd_play_file.
        {
            break;
        }
        case PM_AFTER_PRE:  // use GThreadPool can do this,but,it does seems very useful before PM_STOP_PRE is done.
        {
            //GThreadPool *threadpool;
           
            break;
        }
    }
}
[/code:1]
这样,播放声音就有aplay程序来放.重新编绎一下,安装.成功了
哈哈.这就是linux的优势.想改就改
 楼主| 发表于 2005-12-13 19:29:04 | 显示全部楼层
忘了一点,在sndserv.cpp文件头还要加上引用
#include <stdlib.h>
回复

使用道具 举报

发表于 2005-12-13 22:54:49 | 显示全部楼层
哈哈,强悍,回头我也试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-25 14:41 , Processed in 0.044022 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表