diff --git a/dnn/fwgan.c b/dnn/fwgan.c
index cd64d8217d53873e87bc96e06d0878c62b266628..b349fe20843338f64fde0d2f2011aa34d25c144e 100644
--- a/dnn/fwgan.c
+++ b/dnn/fwgan.c
@@ -301,3 +301,11 @@ void fwgan_synthesize(FWGANState *st, float *pcm, const float *features)
   OPUS_COPY(&pcm[FWGAN_FRAME_SIZE-SUBFRAME_SIZE], new_pcm, SUBFRAME_SIZE);
   OPUS_COPY(st->pcm_buf, &new_pcm[SUBFRAME_SIZE], FWGAN_FRAME_SIZE-SUBFRAME_SIZE);
 }
+
+void fwgan_synthesize_int(FWGANState *st, opus_int16 *pcm, const float *features)
+{
+  int i;
+  float fpcm[FWGAN_FRAME_SIZE];
+  fwgan_synthesize(st, fpcm, features);
+  for (i=0;i<LPCNET_FRAME_SIZE;i++) pcm[i] = (int)floor(.5 + MIN32(32767, MAX32(-32767, 32768.f*fpcm[i])));
+}
diff --git a/dnn/fwgan.h b/dnn/fwgan.h
index 4f33ddbe535a5f7f09d1849fba39828fccbf3593..b7fe28c0d48870adcd65e38778dd3eb5163ec813 100644
--- a/dnn/fwgan.h
+++ b/dnn/fwgan.h
@@ -76,6 +76,7 @@ void fwgan_init(FWGANState *st);
 void fwgan_cont(FWGANState *st, const float *pcm0, const float *features0);
 
 void fwgan_synthesize(FWGANState *st, float *pcm, const float *features);
+void fwgan_synthesize_int(FWGANState *st, opus_int16 *pcm, const float *features);
 
 
 #endif /* FWGAN_H */