Thanks for the advice. With complexity=1, bit rates 5950,8000 and 15000 (CBR only), I'm still getting 30-50 seconds encoding time for a 10-second file. To anyone who has made this work in ARMv4, or knows how to, can I get some advice on the settings? FIXED_POINT is already defined in all relevant files. My source code is patterned after sampleenc and I haven't tried using Ogg..  my source code is attached below in case anyone's interested. I wonder what I'm doing wrong.. Appreciate any help, thanks a lot.
<br><br>Mon<br><br>int PCMToSpx (BSTR FileOpen, BSTR FileSave, bool VAD, short BitRateChoice)<br>{<br>&nbsp;&nbsp;&nbsp; __int8 Speex [6];<br>&nbsp;&nbsp;&nbsp; __int16 SamplingRate = 8000;<br>&nbsp;&nbsp;&nbsp; __int8 BitsPerSampleX8 = 2 /* ie 2*8=16-bit */, NumBytes /*aka nBytes or nbBytes */;
<br><br>&nbsp;&nbsp;&nbsp; FILE *fin, *fout;<br>&nbsp;&nbsp;&nbsp; void *state;<br>&nbsp;&nbsp;&nbsp; int FrameSize, NumFrames = 0;<br>&nbsp;&nbsp;&nbsp; int BitRate, temp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; __int16 in [MaxFrameSize];<br>&nbsp;&nbsp;&nbsp; __int8 cbits [MaxFrameBytes];<br>&nbsp;&nbsp;&nbsp; SpeexBits bits;<br><br>// ********************************** Program Statements **********************************//
<br><br>&nbsp;&nbsp;&nbsp; Speex[0] = 'S';<br>&nbsp;&nbsp;&nbsp; Speex[1] = 'p';<br>&nbsp;&nbsp;&nbsp; Speex[2] = 'e';<br>&nbsp;&nbsp;&nbsp; Speex[3] = 'e';<br>&nbsp;&nbsp;&nbsp; Speex[4] = 'x';<br><br>&nbsp;&nbsp;&nbsp; state = speex_encoder_init (&amp;speex_nb_mode);<br><br>&nbsp;&nbsp;&nbsp; fout = _wfopen ((LPCTSTR)FileSave, L&quot;wb&quot;);
<br>&nbsp;&nbsp;&nbsp; if (fout == NULL)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 1;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; fin = _wfopen ((LPCTSTR) FileOpen, L&quot;rb&quot;);<br>&nbsp;&nbsp;&nbsp; if (fin == NULL)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return 2;<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; switch (BitRateChoice)
<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case '1':<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BitRate = 6000;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case '2':<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BitRate = 8000;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; case '3':<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BitRate = 15000;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; default:<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; BitRate = 8000;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; speex_encoder_ctl (state, SPEEX_SET_BITRATE, &amp;BitRate);<br><br>&nbsp;&nbsp;&nbsp; if (VAD)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp = 1;<br>&nbsp;&nbsp;&nbsp; else<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; temp = 0;
<br><br>&nbsp;&nbsp;&nbsp; speex_encoder_ctl (state, SPEEX_SET_VAD, &amp;temp);<br><br>&nbsp;&nbsp;&nbsp; speex_encoder_ctl (state, SPEEX_GET_FRAME_SIZE, &amp;FrameSize);<br><br>&nbsp;&nbsp;&nbsp; temp = 1;<br>&nbsp;&nbsp;&nbsp; speex_encoder_ctl (state, SPEEX_SET_COMPLEXITY, &amp;temp);
<br>&nbsp;&nbsp;&nbsp; temp = 0; // Just making sure VBR is off. Probably unnecessary.<br>&nbsp;&nbsp;&nbsp; speex_encoder_ctl (state, SPEEX_SET_VBR, &amp;temp); <br>&nbsp;&nbsp;&nbsp; temp = 8000;<br>&nbsp;&nbsp;&nbsp; speex_encoder_ctl (state, SPEEX_SET_SAMPLING_RATE, &amp;temp);
<br><br>&nbsp;&nbsp;&nbsp; fwrite (Speex, 1, 5, fout);<br>&nbsp;&nbsp;&nbsp; fwrite (&amp;SamplingRate, 2, 1, fout);<br>&nbsp;&nbsp;&nbsp; fwrite (&amp;BitsPerSampleX8, 1, 1, fout);<br><br>&nbsp;&nbsp;&nbsp; fseek(fout,8, SEEK_SET);<br>&nbsp;&nbsp;&nbsp; fseek(fin,0, SEEK_SET);<br><br>&nbsp;&nbsp;&nbsp; speex_bits_init (&amp;bits);
<br><br>&nbsp;&nbsp;&nbsp; while (1)<br>&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (feof(fin))<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fread (in, sizeof (short), FrameSize, fin); //place 160 shorts in &quot;in&quot; (1 frame)<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_bits_reset (&amp;bits);
<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; speex_encode_int (state, in, &amp;bits);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; NumBytes = speex_bits_write (&amp;bits, cbits, 300);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if (NumFrames == 0)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fwrite (&amp;NumBytes, 1, 1, fout);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; fwrite (cbits, 1, NumBytes, fout);
<br>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; NumFrames++; /**/<br>&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; speex_encoder_destroy (state);<br>&nbsp;&nbsp;&nbsp; speex_bits_destroy (&amp;bits);<br>&nbsp;&nbsp;&nbsp; fclose (fin);<br>&nbsp;&nbsp;&nbsp; fclose (fout);<br><br>&nbsp;&nbsp;&nbsp; return NumFrames;<br>}<br><br><div><span class="gmail_quote">
On 12/12/05, <b class="gmail_sendername">Jean-Marc Valin</b> &lt;<a href="mailto:Jean-Marc.Valin@usherbrooke.ca">Jean-Marc.Valin@usherbrooke.ca</a>&gt; wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
You should definitely be able to do narrowband in realtime. For<br>wideband, it depends on the mode and complexity setting. Try setting the<br>complexity to one:<br><br>int tmp = 1;<br>speex_encoder_ctl(encoder, SPEEX_SET_COMPLEXITY, &amp;tmp);
<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Jean-Marc<br><br>Le lundi 12 décembre 2005 à 15:33 +0800, Mo Win a écrit :<br>&gt; Hi. I tried encoding a raw PCM file to Speex in my Windows Mobile<br>&gt; device and it took about 45 seconds to encode a 10-second file. I had
<br>&gt; FIXED_POINT defined and used speex_encode_int. The device has an ARMV4<br>&gt; 400 MHz processor. Question: Is this behavior expected or is it<br>&gt; possible to encode speech to speex real-time such that I can record
<br>&gt; speech directly as speex in my device? What, if any, can be done to<br>&gt; speed up encoding time? As expected, decoding was no problem. I was<br>&gt; using version 1.1.10.<br>&gt;<br>&gt; Thank you for all the help,
<br>&gt; Monica<br>&gt; _______________________________________________<br>&gt; Speex-dev mailing list<br>&gt; <a href="mailto:Speex-dev@xiph.org">Speex-dev@xiph.org</a><br>&gt; <a href="http://lists.xiph.org/mailman/listinfo/speex-dev">
http://lists.xiph.org/mailman/listinfo/speex-dev</a><br></blockquote></div><br>