Revision: 21718
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21718
Author:   nexyon
Date:     2009-07-20 14:05:18 +0200 (Mon, 20 Jul 2009)

Log Message:
-----------
audaspace update including build system adoptions for linux, all other OSs are 
not expected to work yet due to missing libsamplerate aka SRC

Modified Paths:
--------------
    branches/soundsystem/CMakeLists.txt
    branches/soundsystem/config/darwin-config.py
    branches/soundsystem/config/irix6-config.py
    branches/soundsystem/config/linux2-config.py
    branches/soundsystem/config/linuxcross-config.py
    branches/soundsystem/config/openbsd3-config.py
    branches/soundsystem/config/sunos5-config.py
    branches/soundsystem/config/win32-mingw-config.py
    branches/soundsystem/config/win32-vc-config.py
    branches/soundsystem/config/win64-vc-config.py
    branches/soundsystem/intern/audaspace/AUD_C-API.h
    branches/soundsystem/intern/audaspace/CMakeLists.txt
    branches/soundsystem/intern/audaspace/SConscript
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLDevice.cpp
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLDevice.h
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLMixerFactory.cpp
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLMixerFactory.h
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLMixerReader.cpp
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLMixerReader.h
    branches/soundsystem/intern/audaspace/ffmpeg/AUD_FFMPEGFactory.cpp
    branches/soundsystem/intern/audaspace/ffmpeg/AUD_FFMPEGReader.cpp
    branches/soundsystem/intern/audaspace/ffmpeg/AUD_FFMPEGReader.h
    branches/soundsystem/intern/audaspace/intern/AUD_Buffer.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_Buffer.h
    branches/soundsystem/intern/audaspace/intern/AUD_BufferReader.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_BufferReader.h
    branches/soundsystem/intern/audaspace/intern/AUD_C-API.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_IDevice.h
    branches/soundsystem/intern/audaspace/intern/AUD_IReader.h
    branches/soundsystem/intern/audaspace/intern/AUD_MixerFactory.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_MixerFactory.h
    branches/soundsystem/intern/audaspace/intern/AUD_Reference.h
    branches/soundsystem/intern/audaspace/intern/AUD_SinusReader.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_SinusReader.h
    branches/soundsystem/intern/audaspace/intern/AUD_SoftwareDevice.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_SoftwareDevice.h
    branches/soundsystem/intern/audaspace/intern/AUD_Space.h
    branches/soundsystem/intern/audaspace/intern/AUD_StreamBufferFactory.cpp
    branches/soundsystem/source/gameengine/Ketsji/KX_SoundActuator.cpp
    branches/soundsystem/tools/Blender.py
    branches/soundsystem/tools/btools.py

Added Paths:
-----------
    branches/soundsystem/intern/audaspace/FX/
    branches/soundsystem/intern/audaspace/FX/AUD_DelayFactory.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_DelayFactory.h
    branches/soundsystem/intern/audaspace/FX/AUD_DelayReader.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_DelayReader.h
    branches/soundsystem/intern/audaspace/FX/AUD_DoubleReader.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_DoubleReader.h
    branches/soundsystem/intern/audaspace/FX/AUD_EffectFactory.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_EffectFactory.h
    branches/soundsystem/intern/audaspace/FX/AUD_EffectReader.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_EffectReader.h
    branches/soundsystem/intern/audaspace/FX/AUD_FaderFactory.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_FaderFactory.h
    branches/soundsystem/intern/audaspace/FX/AUD_FaderReader.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_FaderReader.h
    branches/soundsystem/intern/audaspace/FX/AUD_LimiterFactory.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_LimiterFactory.h
    branches/soundsystem/intern/audaspace/FX/AUD_LimiterReader.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_LimiterReader.h
    branches/soundsystem/intern/audaspace/FX/AUD_LoopFactory.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_LoopFactory.h
    branches/soundsystem/intern/audaspace/FX/AUD_LoopReader.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_LoopReader.h
    branches/soundsystem/intern/audaspace/FX/AUD_PingPongFactory.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_PingPongFactory.h
    branches/soundsystem/intern/audaspace/FX/AUD_PitchFactory.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_PitchFactory.h
    branches/soundsystem/intern/audaspace/FX/AUD_PitchReader.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_PitchReader.h
    branches/soundsystem/intern/audaspace/FX/AUD_ReverseFactory.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_ReverseFactory.h
    branches/soundsystem/intern/audaspace/FX/AUD_ReverseReader.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_ReverseReader.h
    branches/soundsystem/intern/audaspace/FX/AUD_VolumeFactory.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_VolumeFactory.h
    branches/soundsystem/intern/audaspace/FX/AUD_VolumeReader.cpp
    branches/soundsystem/intern/audaspace/FX/AUD_VolumeReader.h
    branches/soundsystem/intern/audaspace/OpenAL/
    branches/soundsystem/intern/audaspace/OpenAL/AUD_OpenALDevice.cpp
    branches/soundsystem/intern/audaspace/OpenAL/AUD_OpenALDevice.h
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLMixer.cpp
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLMixer.h
    branches/soundsystem/intern/audaspace/SRC/
    branches/soundsystem/intern/audaspace/SRC/AUD_SRCResampleFactory.cpp
    branches/soundsystem/intern/audaspace/SRC/AUD_SRCResampleFactory.h
    branches/soundsystem/intern/audaspace/SRC/AUD_SRCResampleReader.cpp
    branches/soundsystem/intern/audaspace/SRC/AUD_SRCResampleReader.h
    branches/soundsystem/intern/audaspace/intern/AUD_ChannelMapperFactory.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_ChannelMapperFactory.h
    branches/soundsystem/intern/audaspace/intern/AUD_ChannelMapperReader.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_ChannelMapperReader.h
    branches/soundsystem/intern/audaspace/intern/AUD_ConverterFactory.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_ConverterFactory.h
    branches/soundsystem/intern/audaspace/intern/AUD_ConverterFunctions.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_ConverterFunctions.h
    branches/soundsystem/intern/audaspace/intern/AUD_ConverterReader.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_ConverterReader.h
    branches/soundsystem/intern/audaspace/intern/AUD_FloatMixer.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_FloatMixer.h
    branches/soundsystem/intern/audaspace/intern/AUD_I3DDevice.h
    branches/soundsystem/intern/audaspace/intern/AUD_IMixer.h
    branches/soundsystem/intern/audaspace/intern/AUD_NULLDevice.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_NULLDevice.h
    branches/soundsystem/intern/audaspace/intern/AUD_ReadDevice.cpp
    branches/soundsystem/intern/audaspace/intern/AUD_ReadDevice.h
    branches/soundsystem/intern/audaspace/intern/AUD_ResampleFactory.h
    branches/soundsystem/intern/audaspace/intern/AUD_SourceCaps.h

Removed Paths:
-------------
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLSuperposer.cpp
    branches/soundsystem/intern/audaspace/SDL/AUD_SDLSuperposer.h
    branches/soundsystem/intern/audaspace/intern/AUD_ISuperposer.h

Modified: branches/soundsystem/CMakeLists.txt
===================================================================
--- branches/soundsystem/CMakeLists.txt 2009-07-20 11:30:27 UTC (rev 21717)
+++ branches/soundsystem/CMakeLists.txt 2009-07-20 12:05:18 UTC (rev 21718)
@@ -66,6 +66,7 @@
 OPTION(WITH_OPENJPEG           "Enable OpenJpeg Support 
(http://www.openjpeg.org/)"    OFF)
 OPTION(WITH_OPENAL             "Enable OpenAL Support (http://www.openal.org)" 
        ON)
 OPTION(WITH_OPENMP             "Enable OpenMP (has to be supported by the 
compiler)"   OFF)
+OPTION(WITH_SDL                "Enable SDL Support(http://www.libsdl.org/)"    
ON)
 OPTION(WITH_WEBPLUGIN          "Enable Web Plugin (Unix only)"                 
        OFF)
 
 IF(NOT WITH_GAMEENGINE AND WITH_PLAYER)
@@ -154,6 +155,11 @@
   SET(FFMPEG_LIB avformat avcodec avutil avdevice swscale)
   SET(FFMPEG_LIBPATH ${FFMPEG}/lib)
 
+  SET(LIBSAMPLERATE /usr)
+  SET(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include)
+  SET(LIBSAMPLERATE_LIB samplerate)
+  SET(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib)
+
   FIND_PACKAGE(JPEG REQUIRED)
 
   FIND_PACKAGE(PNG REQUIRED)
@@ -268,6 +274,11 @@
   SET(FFMPEG_LIB avcodec-52 avformat-52 avdevice-52 avutil-50 swscale-0)
   SET(FFMPEG_LIBPATH ${FFMPEG}/lib)
 
+  SET(LIBSAMPLERATE ${LIBDIR}/SRC)
+  SET(LIBSAMPLERATE_INC ${LIBSAMPLERATE}/include)
+  SET(LIBSAMPLERATE_LIB samplerate)
+  SET(LIBSAMPLERATE_LIBPATH ${LIBSAMPLERATE}/lib)
+
   IF(CMAKE_CL_64)
   SET(LLIBS kernel32 user32 vfw32 winmm ws2_32 )
   ELSE(CMAKE_CL_64)

Modified: branches/soundsystem/config/darwin-config.py
===================================================================
--- branches/soundsystem/config/darwin-config.py        2009-07-20 11:30:27 UTC 
(rev 21717)
+++ branches/soundsystem/config/darwin-config.py        2009-07-20 12:05:18 UTC 
(rev 21718)
@@ -94,6 +94,11 @@
 WITH_BF_STATICCXX = False
 BF_CXX_LIB_STATIC = '${BF_CXX}/lib/libstdc++.a'
 
+BF_LIBSAMPLERATE = LIBDIR + '/SRC'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
 WITH_BF_SDL = True
 BF_SDL = LIBDIR + '/sdl' #$(shell sdl-config --prefix)
 BF_SDL_INC = '${BF_SDL}/include' #$(shell $(BF_SDL)/bin/sdl-config --cflags)

Modified: branches/soundsystem/config/irix6-config.py
===================================================================
--- branches/soundsystem/config/irix6-config.py 2009-07-20 11:30:27 UTC (rev 
21717)
+++ branches/soundsystem/config/irix6-config.py 2009-07-20 12:05:18 UTC (rev 
21718)
@@ -24,6 +24,11 @@
 WITH_BF_STATICCXX = 'false'
 BF_CXX_LIB_STATIC = '${BF_CXX}/lib/libstdc++.a'
 
+BF_LIBSAMPLERATE = LCGDIR+'/SRC'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
 WITH_BF_SDL = 'true'
 BF_SDL = LCGDIR+'/sdl' #$(shell sdl-config --prefix)
 BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config 
--cflags)

Modified: branches/soundsystem/config/linux2-config.py
===================================================================
--- branches/soundsystem/config/linux2-config.py        2009-07-20 11:30:27 UTC 
(rev 21717)
+++ branches/soundsystem/config/linux2-config.py        2009-07-20 12:05:18 UTC 
(rev 21718)
@@ -22,7 +22,7 @@
 WITH_BF_OPENAL = True
 WITH_BF_STATICOPENAL = False
 BF_OPENAL = '/usr'
-BF_OPENAL_INC = '${BF_OPENAL}/include'
+BF_OPENAL_INC = '${BF_OPENAL}/include/AL'
 BF_OPENAL_LIB = 'openal'
 BF_OPENAL_LIB_STATIC = '${BF_OPENAL}/lib/libopenal.a'
 
@@ -30,6 +30,11 @@
 WITH_BF_STATICCXX = False
 BF_CXX_LIB_STATIC = '${BF_CXX}/lib/libstdc++.a'
 
+BF_LIBSAMPLERATE = '/usr'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
 WITH_BF_SDL = True
 BF_SDL = '/usr' #$(shell sdl-config --prefix)
 BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config 
--cflags)

Modified: branches/soundsystem/config/linuxcross-config.py
===================================================================
--- branches/soundsystem/config/linuxcross-config.py    2009-07-20 11:30:27 UTC 
(rev 21717)
+++ branches/soundsystem/config/linuxcross-config.py    2009-07-20 12:05:18 UTC 
(rev 21718)
@@ -22,6 +22,11 @@
 WITH_BF_STATICCXX = False
 BF_CXX_LIB_STATIC = '${BF_CXX}/lib/libstdc++.a'
 
+BF_LIBSAMPLERATE = LIBDIR + '/SRC'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
 WITH_BF_SDL = True
 BF_SDL = LIBDIR + '/sdl'
 BF_SDL_INC = '${BF_SDL}/include'

Modified: branches/soundsystem/config/openbsd3-config.py
===================================================================
--- branches/soundsystem/config/openbsd3-config.py      2009-07-20 11:30:27 UTC 
(rev 21717)
+++ branches/soundsystem/config/openbsd3-config.py      2009-07-20 12:05:18 UTC 
(rev 21718)
@@ -16,6 +16,11 @@
 #BF_OPENAL_LIBPATH = '${BF_OPENAL}/lib'
 #BF_OPENAL_LIB_STATIC = '${BF_OPENAL}/lib/libopenal.a'
 
+BF_LIBSAMPLERATE = '/usr/local'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
 WITH_BF_SDL = True
 BF_SDL = '/usr/local' #$(shell sdl-config --prefix)
 BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config 
--cflags)

Modified: branches/soundsystem/config/sunos5-config.py
===================================================================
--- branches/soundsystem/config/sunos5-config.py        2009-07-20 11:30:27 UTC 
(rev 21717)
+++ branches/soundsystem/config/sunos5-config.py        2009-07-20 12:05:18 UTC 
(rev 21718)
@@ -22,6 +22,11 @@
 WITH_BF_STATICCXX = False
 BF_CXX_LIB_STATIC = '${BF_CXX}/lib/libstdc++.a'
 
+BF_LIBSAMPLERATE = '/usr/local'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
 WITH_BF_SDL = True
 BF_SDL = '/usr/local' #$(shell sdl-config --prefix)
 BF_SDL_INC = '${BF_SDL}/include/SDL' #$(shell $(BF_SDL)/bin/sdl-config 
--cflags)

Modified: branches/soundsystem/config/win32-mingw-config.py
===================================================================
--- branches/soundsystem/config/win32-mingw-config.py   2009-07-20 11:30:27 UTC 
(rev 21717)
+++ branches/soundsystem/config/win32-mingw-config.py   2009-07-20 12:05:18 UTC 
(rev 21718)
@@ -28,6 +28,11 @@
 BF_FFMPEG_LIBPATH = LIBDIR + '/gcc/ffmpeg/lib'
 BF_FFMPEG_INC =  LIBDIR + '/gcc/ffmpeg/include'
 
+BF_LIBSAMPLERATE = LIBDIR + '/SRC'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
 WITH_BF_SDL = True
 BF_SDL = LIBDIR + '/sdl'
 BF_SDL_INC = '${BF_SDL}/include'

Modified: branches/soundsystem/config/win32-vc-config.py
===================================================================
--- branches/soundsystem/config/win32-vc-config.py      2009-07-20 11:30:27 UTC 
(rev 21717)
+++ branches/soundsystem/config/win32-vc-config.py      2009-07-20 12:05:18 UTC 
(rev 21718)
@@ -35,6 +35,11 @@
 BF_ICONV_LIB = 'iconv'
 BF_ICONV_LIBPATH = '${BF_ICONV}/lib'
 
+BF_LIBSAMPLERATE = LIBDIR + '/SRC'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
 WITH_BF_SDL = True
 BF_SDL = LIBDIR + '/sdl'
 BF_SDL_INC = '${BF_SDL}/include'

Modified: branches/soundsystem/config/win64-vc-config.py
===================================================================
--- branches/soundsystem/config/win64-vc-config.py      2009-07-20 11:30:27 UTC 
(rev 21717)
+++ branches/soundsystem/config/win64-vc-config.py      2009-07-20 12:05:18 UTC 
(rev 21718)
@@ -35,6 +35,11 @@
 BF_ICONV_LIB = 'iconv'
 BF_ICONV_LIBPATH = '${BF_ICONV}/lib'
 
+BF_LIBSAMPLERATE = LIBDIR + '/SRC'
+BF_LIBSAMPLERATE_INC = '${BF_LIBSAMPLERATE}/include'
+BF_LIBSAMPLERATE_LIB = 'samplerate'
+BF_LIBSAMPLERATE_LIBPATH = '${BF_LIBSAMPLERATE}/lib'
+
 WITH_BF_SDL = True
 BF_SDL = LIBDIR + '/sdl'
 BF_SDL_INC = '${BF_SDL}/include'

Modified: branches/soundsystem/intern/audaspace/AUD_C-API.h
===================================================================
--- branches/soundsystem/intern/audaspace/AUD_C-API.h   2009-07-20 11:30:27 UTC 
(rev 21717)
+++ branches/soundsystem/intern/audaspace/AUD_C-API.h   2009-07-20 12:05:18 UTC 
(rev 21718)
@@ -72,16 +72,11 @@
 /**
  * Plays back a sound file.
  * \param sound The handle of the sound file.
- * \param endBehaviour The behaviour after the end of the sound file has been
- *                     reached.
- * \param seekTo From where the sound file should be played back in seconds.
- *               A negative value indicates the seconds that should be waited
- *               before playback starts.
+ * \param keep When keep is true the sound source will not be deleted but set 
to
+ *             paused when its end has been reached.
  * \return A handle to the played back sound.
  */
-extern AUD_Handle* AUD_play(AUD_Sound* sound,
-                                                       AUD_EndBehaviour 
endBehaviour,
-                                                       double seekTo);
+extern AUD_Handle* AUD_play(AUD_Sound* sound, int keep);
 
 /**
  * Pauses a played back sound.
@@ -107,11 +102,11 @@
 /**
  * Sets the end behaviour of a playing or paused sound.
  * \param handle The handle to the sound.
- * \param endBehaviour The behaviour after the end of the file has been 
reached.
+ * \param keep When keep is true the sound source will not be deleted but set 
to
+ *             paused when its end has been reached.
  * \return Whether the handle has been valid or not.
  */
-extern int AUD_setEndBehaviour(AUD_Handle* handle,
-                                                               
AUD_EndBehaviour endBehaviour);
+extern int AUD_setKeep(AUD_Handle* handle, int keep);
 
 /**
  * Seeks a playing or paused sound.

Modified: branches/soundsystem/intern/audaspace/CMakeLists.txt
===================================================================
--- branches/soundsystem/intern/audaspace/CMakeLists.txt        2009-07-20 
11:30:27 UTC (rev 21717)
+++ branches/soundsystem/intern/audaspace/CMakeLists.txt        2009-07-20 
12:05:18 UTC (rev 21718)
@@ -20,14 +20,33 @@
 #
 # ***** END LGPL LICENSE BLOCK *****
 
-SET(INC . intern SDL ffmpeg)
+SET(INC . intern FX SRC ${PTHREADS_INC} ${LIBSAMPLERATE_INC})
 
+FILE(GLOB SRC intern/*.cpp intern/*.h FX/*.cpp SRC/*.cpp)
+
 IF(WITH_FFMPEG)
-  FILE(GLOB SRC ffmpeg/*.cpp SDL/*.cpp intern/*.cpp intern/*.h)
-  INCLUDE_DIRECTORIES(${SDL_INC} ${FFMPEG_INC} ${PTHREADS_INC})
-ELSE(WITH_FFMPEG)
-  FILE(GLOB SRC SDL/*.cpp intern/*.cpp intern/*.h)

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to