mirror of
https://github.com/rhasspy/espeak-ng.git
synced 2026-10-31 05:35:35 +00:00
Merge branch 'master' into android
Conflicts: Makefile.am README.md
This commit is contained in:
@@ -5,6 +5,7 @@
|
||||
# intermediate build output:
|
||||
|
||||
*.o
|
||||
*.lo
|
||||
|
||||
# android build output:
|
||||
|
||||
@@ -34,24 +35,30 @@ INSTALL
|
||||
NEWS
|
||||
README
|
||||
|
||||
.deps/
|
||||
.libs/
|
||||
|
||||
Makefile
|
||||
Makefile.in
|
||||
aclocal.m4
|
||||
autom4te.cache/
|
||||
config.*
|
||||
configure
|
||||
depcomp
|
||||
install-sh
|
||||
libtool
|
||||
ltmain.sh
|
||||
m4/
|
||||
missing
|
||||
stamp-h1
|
||||
.dirstamp
|
||||
|
||||
# libraries
|
||||
|
||||
docs/speak_lib.h
|
||||
|
||||
libespeak.a
|
||||
libespeak.la
|
||||
libespeak.so*
|
||||
|
||||
# programs
|
||||
|
||||
+67
-35
@@ -1,15 +1,22 @@
|
||||
AUTOMAKE_OPTIONS = subdir-objects
|
||||
|
||||
PREFIX=@prefix@
|
||||
BINDIR=@bindir@
|
||||
INCDIR=@includedir@/espeak
|
||||
LIBDIR=@libdir@
|
||||
DATADIR=$(PREFIX)/share/espeak-data
|
||||
|
||||
PLATFORM=big_endian
|
||||
SHARED_VERSION=2:47:1 # = *.so.1.1.47
|
||||
|
||||
.PHONY: android all clean distclean espeak-phoneme-data
|
||||
MKDIR=mkdir -p
|
||||
|
||||
AM_CXXFLAGS = -Wall
|
||||
|
||||
EXTRA_DIST=
|
||||
|
||||
bin_PROGRAMS =
|
||||
lib_LTLIBRARIES =
|
||||
|
||||
##### ChangeLog:
|
||||
|
||||
ChangeLog:
|
||||
@@ -25,24 +32,29 @@ EXTRA_DIST += ChangeLog
|
||||
|
||||
all: jni espeakdata apk-release
|
||||
|
||||
install:
|
||||
cd src && make DESTDIR=$(DESTDIR) PREFIX=$(PREFIX) BINDIR=$(BINDIR) INCDIR=$(INCDIR) LIBDIR=$(LIBDIR) install && cd ..
|
||||
install -m 755 src/espeakedit $(DESTDIR)$(BINDIR)
|
||||
uninstall-hook:
|
||||
rm -rf $(DESTDIR)$(DATADIR)
|
||||
|
||||
clean:
|
||||
install-data-hook: uninstall-hook
|
||||
$(MKDIR) $(DESTDIR)$(DATADIR)
|
||||
cp -prf espeak-data/* $(DESTDIR)$(DATADIR)
|
||||
|
||||
clean-local:
|
||||
cd src && rm -f *.o *~ && cd ..
|
||||
cd android && gradle clean
|
||||
|
||||
distclean: clean
|
||||
cd src && rm -f libespeak.a libespeak.so.* speak espeak espeakedit && cd ..
|
||||
cd platforms/$(PLATFORM) && rm -f espeak-phoneme-data && cd ../..
|
||||
rm -rf espeak-data/dictsource espeak-data/phsource espeak-data/phondata-manifest
|
||||
cd espeak-data && rm -f *_dict && cd ..
|
||||
distclean-local:
|
||||
rm -rf espeak-data/phondata-manifest
|
||||
rm -f espeak-data/*_dict
|
||||
|
||||
check: apk-check
|
||||
|
||||
##### build targets:
|
||||
|
||||
libespeak_includedir = $(includedir)/espeak
|
||||
libespeak_include_HEADERS = \
|
||||
src/speak_lib.h
|
||||
|
||||
common_SOURCE = \
|
||||
src/compiledict.cpp \
|
||||
src/dictionary.cpp \
|
||||
@@ -67,9 +79,6 @@ libespeak_SOURCE = \
|
||||
src/espeak_command.cpp \
|
||||
src/event.cpp \
|
||||
src/fifo.cpp \
|
||||
src/wave.cpp \
|
||||
src/wave_pulse.cpp \
|
||||
src/wave_sada.cpp \
|
||||
src/debug.cpp
|
||||
|
||||
espeakedit_SOURCE = \
|
||||
@@ -87,38 +96,61 @@ espeakedit_SOURCE = \
|
||||
src/voicedlg.cpp \
|
||||
src/vowelchart.cpp
|
||||
|
||||
if AUDIO_RUNTIME
|
||||
wave_SOURCE = src/wave.cpp src/wave_pulse.cpp
|
||||
wave_LIBS = -lpulse -lpulse-simple -lportaudio
|
||||
wave_FLAGS = -DUSE_PULSEAUDIO -DUSE_PORTAUDIO
|
||||
else
|
||||
if AUDIO_PULSEAUDIO
|
||||
wave_SOURCE = src/wave_pulse.cpp
|
||||
wave_LIBS = -lpulse
|
||||
wave_FLAGS = -DUSE_PULSEAUDIO
|
||||
else
|
||||
if AUDIO_PORTAUDIO
|
||||
wave_SOURCE = src/wave.cpp
|
||||
wave_LIBS = -lportaudio
|
||||
wave_FLAGS = -DUSE_PORTAUDIO
|
||||
else
|
||||
if AUDIO_SADA
|
||||
wave_SOURCE = wave_sada.cpp
|
||||
wave_FLAGS = -DUSE_SADA
|
||||
else
|
||||
wave_SOURCE = src/wave.cpp
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
docs/speak_lib.h: src/speak_lib.h
|
||||
cp $< $@
|
||||
|
||||
src/libespeak.a: $(common_SOURCE) $(libespeak_SOURCE)
|
||||
cd src && make libespeak.a && cd ..
|
||||
lib_LTLIBRARIES += src/libespeak.la
|
||||
|
||||
src/libespeak.so: $(common_SOURCE) $(libespeak_SOURCE)
|
||||
cd src && make libespeak.so && cd ..
|
||||
src_libespeak_la_LDFLAGS = -version-info $(SHARED_VERSION) $(wave_LIBS) -lpthread
|
||||
src_libespeak_la_CXXFLAGS = $(wave_FLAGS) \
|
||||
-fpic -fvisibility=hidden -D LIBRARY \
|
||||
-pedantic -fno-exceptions -D PATH_ESPEAK_DATA=\"$(DATADIR)\"
|
||||
src_libespeak_la_SOURCES = $(common_SOURCE) $(libespeak_SOURCE) $(wave_SOURCE)
|
||||
|
||||
src/speak: $(common_SOURCE) src/speak.cpp
|
||||
cd src && make speak && cd ..
|
||||
bin_PROGRAMS += src/speak
|
||||
|
||||
src/espeak: src/libespeak.so src/espeak.cpp
|
||||
cd src && make espeak && cd ..
|
||||
src_speak_LDFLAGS = $(wave_LIBS) -lpthread
|
||||
src_speak_CXXFLAGS = $(wave_FLAGS)
|
||||
src_speak_SOURCES = src/speak.cpp $(common_SOURCE) $(wave_SOURCE)
|
||||
|
||||
src/espeakedit: $(common_SOURCE) $(libespeak_SOURCE) $(espeakedit_SOURCE)
|
||||
cd src && make espeakedit && cd ..
|
||||
bin_PROGRAMS += src/espeak
|
||||
|
||||
espeak-phoneme-data:
|
||||
cd platforms/$(PLATFORM) && make PREFIX=$(PREFIX) && cd ../..
|
||||
src_espeak_LDADD = src/libespeak.la
|
||||
src_espeak_SOURCES = src/espeak.cpp
|
||||
|
||||
espeak-data/dictsource/dir.stamp: dictsource/*
|
||||
rm -rf espeak-data/dictsource
|
||||
./shadowdir $(PWD)/dictsource $(PWD)/espeak-data/dictsource
|
||||
touch espeak-data/dictsource/dir.stamp
|
||||
bin_PROGRAMS += src/espeakedit
|
||||
|
||||
espeak-data/phsource/dir.stamp: phsource/ph_* phsource/phonemes phsource/intonation
|
||||
rm -rf espeak-data/phsource
|
||||
./shadowdir $(PWD)/phsource $(PWD)/espeak-data/phsource
|
||||
touch espeak-data/phsource/dir.stamp
|
||||
src_espeakedit_LDFLAGS = $(wave_LIBS) ${WX_LIBS}
|
||||
src_espeakedit_CXXFLAGS = ${WX_CXXFLAGS} $(wave_FLAGS) \
|
||||
-D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA -D_ESPEAKEDIT
|
||||
src_espeakedit_SOURCES = $(common_SOURCE) $(libespeak_SOURCE) $(espeakedit_SOURCE) $(wave_SOURCE)
|
||||
|
||||
espeak-data/phontab: src/espeakedit espeak-data/dictsource/dir.stamp espeak-data/phsource/dir.stamp
|
||||
espeak-data/phontab: src/espeakedit
|
||||
ESPEAK_DATA_PATH=$(PWD) src/espeakedit --compile
|
||||
|
||||
##### android targets:
|
||||
|
||||
@@ -1,5 +1,15 @@
|
||||
# Android Port of eSpeak Text-to-Speech
|
||||
|
||||
- [Prerequisites](#prerequisites)
|
||||
- [Building with Gradle](#building-with-gradle)
|
||||
- [Building with Eclipse](#building-with-eclipse)
|
||||
- [Building with Ant](#building-with-ant)
|
||||
- [Signing the APK](#signing-the-apk)
|
||||
- [Installing the APK](#installing-the-apk)
|
||||
- [Enabling eSpeak on the Device](#enabling-espeak-on-the-device)
|
||||
|
||||
----------
|
||||
|
||||
This branch contains the files needed to build espeak on the android platform.
|
||||
It is derived from the eyes-free project.
|
||||
|
||||
|
||||
+15
-4
@@ -1,5 +1,5 @@
|
||||
AC_PREREQ([2.63])
|
||||
AC_INIT([eSpeak], [1.46], [https://github.com/rhdunn/espeak/issues], [espeak], [https://github.com/rhdunn/espeak])
|
||||
AC_INIT([eSpeak], [1.47], [https://github.com/rhdunn/espeak/issues], [espeak], [https://github.com/rhdunn/espeak])
|
||||
AM_INIT_AUTOMAKE()
|
||||
|
||||
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES])
|
||||
@@ -91,6 +91,16 @@ dnl ================================================================
|
||||
dnl Audio checks.
|
||||
dnl ================================================================
|
||||
|
||||
AC_ARG_WITH([sada],
|
||||
[AS_HELP_STRING([--with-sada], [use the Solaris SADA audio API @<:@default=no@:>@])],
|
||||
[])
|
||||
|
||||
if test "$with_sada" = "yes" ; then
|
||||
have_sada=yes
|
||||
else
|
||||
have_sada=no
|
||||
fi
|
||||
|
||||
if test "$have_portaudio" = 18 -o "$have_portaudio" = 19 ; then
|
||||
if test "$have_pulseaudio" = yes ; then
|
||||
PKG_CHECK_MODULES(PULSEAUDIO_SIMPLE, [libpulse-simple >= 0.9],
|
||||
@@ -106,6 +116,8 @@ if test "$have_portaudio" = 18 -o "$have_portaudio" = 19 ; then
|
||||
fi
|
||||
elif test "$have_pulseaudio" = yes ; then
|
||||
AUDIO=pulseaudio
|
||||
elif test "$have_sada" = yes ; then
|
||||
AUDIO=sada
|
||||
else
|
||||
AUDIO=disabled
|
||||
fi
|
||||
@@ -115,8 +127,6 @@ AC_SUBST(AUDIO)
|
||||
AM_CONDITIONAL(AUDIO_RUNTIME, [test x"$AUDIO" = xruntime])
|
||||
AM_CONDITIONAL(AUDIO_PULSEAUDIO, [test x"$AUDIO" = xpulseaudio])
|
||||
AM_CONDITIONAL(AUDIO_PORTAUDIO, [test x"$AUDIO" = xportaudio])
|
||||
AM_CONDITIONAL(AUDIO_PORTAUDIO0, [test x"$AUDIO" = xportaudio0])
|
||||
AM_CONDITIONAL(AUDIO_PORTAUDIO2, [test x"$AUDIO" = xportaudio2])
|
||||
AM_CONDITIONAL(AUDIO_SADA, [test x"$AUDIO" = xsada])
|
||||
|
||||
dnl ================================================================
|
||||
@@ -139,7 +149,7 @@ dnl ================================================================
|
||||
dnl Generate output.
|
||||
dnl ================================================================
|
||||
|
||||
AC_CONFIG_FILES([Makefile src/Makefile])
|
||||
AC_CONFIG_FILES([Makefile])
|
||||
AC_OUTPUT
|
||||
|
||||
AC_MSG_NOTICE([
|
||||
@@ -154,5 +164,6 @@ AC_MSG_NOTICE([
|
||||
wxWidgets: ${WX_VERSION}
|
||||
pulseaudio: ${have_pulseaudio}
|
||||
portaudio: ${have_portaudio}
|
||||
sada: ${have_sada}
|
||||
audio configuration: ${AUDIO}
|
||||
])
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/usr/bin/python
|
||||
#
|
||||
# Copyright (C) 2011 Reece H. Dunn
|
||||
# Licence: GPLv3
|
||||
#
|
||||
# A script for shadowing a directory tree to another (equivalent to lndir).
|
||||
|
||||
import sys
|
||||
import os
|
||||
|
||||
def shadow(src, dst):
|
||||
if not os.path.exists(dst):
|
||||
os.makedirs(dst)
|
||||
for fn in os.listdir(src):
|
||||
srcpath = os.path.join(src, fn)
|
||||
dstpath = os.path.join(dst, fn)
|
||||
if os.path.isdir(srcpath):
|
||||
shadow(srcpath, dstpath)
|
||||
else:
|
||||
os.symlink(srcpath, dstpath)
|
||||
|
||||
shadow(sys.argv[1], sys.argv[2])
|
||||
-150
@@ -1,150 +0,0 @@
|
||||
PREFIX=@prefix@
|
||||
BINDIR=@bindir@
|
||||
INCDIR=@includedir@/espeak
|
||||
LIBDIR=@libdir@
|
||||
DATADIR=${PREFIX}/share/espeak-data
|
||||
|
||||
# remove -fno-exceptions if it causes problems with stdio library on some platforms (ARM)
|
||||
|
||||
RELEASE = 1.47
|
||||
SPEAK = speak
|
||||
ESPEAK = espeak
|
||||
ESPEAKEDIT = espeakedit
|
||||
LIBESPEAK = libespeak.so
|
||||
STATIC_LIBESPEAK = libespeak.a
|
||||
LIB_VERSION = 1
|
||||
LIBTAG = $(LIB_VERSION).$(RELEASE)
|
||||
|
||||
# Use SONAME_OPT=-Wl,h, on Solaris
|
||||
SONAME_OPT=-Wl,-soname,
|
||||
|
||||
# Use EXTRA_LIBS=-lm on Solaris
|
||||
EXTRA_LIBS =
|
||||
|
||||
INSTALL = install
|
||||
LN_SF = /bin/ln -sf
|
||||
MKDIR = mkdir -p
|
||||
|
||||
# AUDIO='runtime' uses pulseaudio if it is running, else uses portaudio
|
||||
|
||||
if AUDIO_RUNTIME
|
||||
WAVE=wave.cpp wave_pulse.cpp
|
||||
LIB_AUDIO=-lpulse -lpulse-simple -lportaudio
|
||||
USE_AUDIO=-DUSE_PULSEAUDIO -DUSE_PORTAUDIO
|
||||
else
|
||||
if AUDIO_PULSEAUDIO
|
||||
WAVE=wave_pulse.cpp
|
||||
LIB_AUDIO=-lpulse
|
||||
USE_AUDIO=-DUSE_PULSEAUDIO
|
||||
else
|
||||
if AUDIO_PORTAUDIO
|
||||
WAVE=wave.cpp
|
||||
LIB_AUDIO=-lportaudio
|
||||
USE_AUDIO=-DUSE_PORTAUDIO
|
||||
else
|
||||
if AUDIO_PORTAUDIO0
|
||||
WAVE=wave.cpp
|
||||
LIB_AUDIO=/usr/lib/libportaudio.so.0
|
||||
USE_AUDIO=-DUSE_PORTAUDIO
|
||||
else
|
||||
if AUDIO_PORTAUDIO2
|
||||
WAVE=wave.cpp
|
||||
LIB_AUDIO=/usr/lib/libportaudio.so.2
|
||||
USE_AUDIO=-DUSE_PORTAUDIO
|
||||
else
|
||||
if AUDIO_SADA
|
||||
WAVE=wave_sada.cpp
|
||||
USE_AUDIO=-DUSE_SADA
|
||||
else
|
||||
WAVE=wave.cpp
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
endif
|
||||
|
||||
CXXFLAGS ?= -O2 -Wall
|
||||
CPPFLAGS = -pedantic -fno-exceptions -D PATH_ESPEAK_DATA=\"$(DATADIR)\"
|
||||
|
||||
.cpp.o:
|
||||
$(CXX) -c $(CXXFLAGS) $(USE_AUDIO) -I. $(CPPFLAGS) $<
|
||||
|
||||
e_%.o: %.cpp
|
||||
$(CXX) -c $(CXXFLAGS) $(espeakedit_CXXFLAGS) $(USE_AUDIO) $(CPPFLAGS) -I. $< -o e_$*.o
|
||||
|
||||
x_%.o: %.cpp
|
||||
$(CXX) -c $(CXXFLAGS) $(USE_AUDIO) -fpic -fvisibility=hidden \
|
||||
-I. -D LIBRARY $(CPPFLAGS) $< -o x_$*.o
|
||||
|
||||
all: $(SPEAK) $(LIBESPEAK) $(STATIC_LIBESPEAK) $(ESPEAK) $(ESPEAKEDIT)
|
||||
|
||||
common_SOURCE = compiledict.cpp dictionary.cpp intonation.cpp \
|
||||
klatt.cpp mbrowrap.cpp numbers.cpp readclause.cpp \
|
||||
phonemelist.cpp setlengths.cpp sonic.cpp \
|
||||
synthdata.cpp synthesize.cpp synth_mbrola.cpp \
|
||||
translate.cpp tr_languages.cpp voices.cpp wavegen.cpp
|
||||
|
||||
speak_SOURCE = speak.cpp $(common_SOURCE)
|
||||
speak_OBJS = ${speak_SOURCE:%.cpp=%.o}
|
||||
speak_LIBS = -lstdc++ $(LIB_AUDIO) -lpthread $(EXTRA_LIBS)
|
||||
$(SPEAK): $(speak_OBJS)
|
||||
$(CXX) $(LDFLAGS) -o $@ $(speak_OBJS) $(speak_LIBS)
|
||||
|
||||
espeak_SOURCE = espeak.cpp
|
||||
espeak_OBJS = ${espeak_SOURCE:%.cpp=%.o}
|
||||
espeak_LIBS = -lstdc++ -L . -lespeak
|
||||
$(ESPEAK): $(espeak_OBJS) $(LIB_NAME)
|
||||
$(CXX) $(LDFLAGS) -o $@ $(espeak_OBJS) $(espeak_LIBS)
|
||||
|
||||
libespeak_SOURCE = speak_lib.cpp $(common_SOURCE) \
|
||||
espeak_command.cpp event.cpp fifo.cpp $(WAVE) debug.cpp
|
||||
libespeak_OBJS = ${libespeak_SOURCE:%.cpp=x_%.o}
|
||||
libespeak_LIBS = -lstdc++ $(LIB_AUDIO) -lpthread
|
||||
$(LIBESPEAK): $(libespeak_OBJS)
|
||||
$(CXX) $(LDFLAGS) -shared $(SONAME_OPT)$(LIBESPEAK).$(LIB_VERSION) -o $@ \
|
||||
$(libespeak_OBJS) $(libespeak_LIBS)
|
||||
mv $(LIBESPEAK) $(LIBESPEAK).$(LIBTAG)
|
||||
$(LN_SF) $(LIBESPEAK).$(LIBTAG) $(LIBESPEAK).$(LIB_VERSION)
|
||||
$(LN_SF) $(LIBESPEAK).$(LIB_VERSION) $(LIBESPEAK)
|
||||
|
||||
$(STATIC_LIBESPEAK): $(libespeak_OBJS)
|
||||
$(AR) cqs $(STATIC_LIBESPEAK) $(libespeak_OBJS)
|
||||
|
||||
|
||||
espeakedit_SOURCE = $(common_SOURCE) compiledata.cpp debug.cpp espeakedit.cpp \
|
||||
event.cpp extras.cpp fifo.cpp formantdlg.cpp \
|
||||
menus.cpp options.cpp prosodydisplay.cpp \
|
||||
espeak_command.cpp speak_lib.cpp spect.cpp \
|
||||
spectdisplay.cpp spectseq.cpp \
|
||||
transldlg.cpp voicedlg.cpp vowelchart.cpp $(WAVE)
|
||||
espeakedit_OBJS=${espeakedit_SOURCE:%.cpp=e_%.o}
|
||||
espeakedit_LIBS=-lstdc++ $(LIB_AUDIO)
|
||||
espeakedit_CXXFLAGS = ${WX_CXXFLAGS} -D_LARGEFILE_SOURCE=1 -DNO_GCC_PRAGMA -D_ESPEAKEDIT
|
||||
$(ESPEAKEDIT): $(espeakedit_OBJS)
|
||||
$(CXX) $(LDFLAGS) -o $@ $(espeakedit_OBJS) $(espeakedit_LIBS) ${WX_LIBS}
|
||||
|
||||
clean:
|
||||
rm -f *.o *.a *~
|
||||
|
||||
distclean: clean
|
||||
rm -f $(SPEAK)
|
||||
rm -f $(ESPEAK)
|
||||
rm -f $(LIBESPEAK)*
|
||||
rm -f $(STATIC_LIBESPEAK)
|
||||
rm -f $(ESPEAKEDIT)
|
||||
|
||||
install:
|
||||
rm -rf $(DESTDIR)$(DATADIR)
|
||||
$(MKDIR) $(DESTDIR)$(BINDIR)
|
||||
$(MKDIR) $(DESTDIR)$(LIBDIR)
|
||||
$(MKDIR) $(DESTDIR)$(INCDIR)
|
||||
$(MKDIR) $(DESTDIR)$(DATADIR)
|
||||
$(INSTALL) -m 755 $(ESPEAK) $(DESTDIR)$(BINDIR)
|
||||
$(INSTALL) -m 755 $(LIBESPEAK).$(LIBTAG) $(DESTDIR)$(LIBDIR)
|
||||
$(INSTALL) -m 755 $(STATIC_LIBESPEAK) $(DESTDIR)$(LIBDIR)
|
||||
$(LN_SF) $(LIBESPEAK).$(LIBTAG) $(DESTDIR)$(LIBDIR)/$(LIBESPEAK).$(LIB_VERSION)
|
||||
$(LN_SF) $(LIBESPEAK).$(LIB_VERSION) $(DESTDIR)$(LIBDIR)/$(LIBESPEAK)
|
||||
$(INSTALL) -pm 644 speak_lib.h $(DESTDIR)$(INCDIR)
|
||||
cp -prf ../espeak-data/* $(DESTDIR)$(DATADIR)
|
||||
|
||||
+4
-4
@@ -167,12 +167,12 @@ void ConfigInit(bool use_defaults)
|
||||
basedir = wxString(path_base,wxConvLocal); // this is only used to set defaults for other paths if they are not in the config file
|
||||
if (use_defaults)
|
||||
{
|
||||
path_spectload = basedir + _T("/phsource");
|
||||
path_spectload2 = basedir + _T("/phsource");
|
||||
path_spectload = basedir + _T("/../phsource");
|
||||
path_spectload2 = basedir + _T("/../phsource");
|
||||
path_pitches = basedir + _T("/pitch");
|
||||
path_phsource = basedir + _T("/phsource");
|
||||
path_phsource = basedir + _T("/../phsource");
|
||||
path_phfile = path_phsource + _T("/phonemes");
|
||||
path_dictsource = basedir + _T("/dictsource");
|
||||
path_dictsource = basedir + _T("/../dictsource");
|
||||
path_modifiervoice = basedir;
|
||||
path_dir1 = basedir;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user