<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Verdana
}
--></style>
</head>
<body class='hmmessage'>
I'm not sure if this is the right 'forum' for this, but it seems to be the best I can find. If theres a better place or&nbsp;an example or a google term I should have tried, feel free to tell me to stuff it and 'go X'. Just want a point in the right direction. App development seems a dark corner in terms of available info :)<BR>&nbsp;<BR>What I'm trying to to: use soxlib to pull audio from a file and play it on&nbsp;a channel, allowing on the fly conversion.<BR>Limitations of what I have right now: I'm aware it will only work with single channel audio, and only with the right sample rate etc etc. Just proof of concept at this point. I also am aware it uses several bad coding practices, goal right now is functional :)<BR>&nbsp;<BR>Whats it do: pulls samples at 160 samples per frame, puts them on the channel, after 25&nbsp;frames&nbsp;(25*160*2(bytes) = 8000, buffer size?) asterisk segfaults. It seems to be putting the frames in to fast. I hear like the first second of audio right before this happens.<BR>&nbsp;<BR>The sox stuff actually seems to work perfectly based on the fact what I hear does sound like my audio file.<BR>Only posted the relevent section the app itself does work, I had a version I did that preconveted using sox, but its that delay to do that I'm trying to get rid of.<BR>&nbsp;<BR>while (((res = ast_waitfor(chan, -1)) &gt; -1) &amp;&amp; (f = ast_read(chan))) {&nbsp; <BR>&nbsp; &nbsp;&nbsp;&nbsp;blocks++;<BR>&nbsp; &nbsp;&nbsp;&nbsp;ast_verbose(VERBOSE_PREFIX_3 "Start: %i\n",blocks);&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp; &nbsp;&nbsp;if (f-&gt;frametype != AST_FRAME_VOICE || f-&gt;subclass != AST_FORMAT_SLINEAR) <BR>&nbsp; &nbsp;&nbsp;&nbsp;continue;<BR>&nbsp; &nbsp;&nbsp;&nbsp;ast_verbose(VERBOSE_PREFIX_3 "frame is mine:\n");&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp; &nbsp;size_t i;&nbsp;&nbsp;&nbsp; &nbsp;<BR>&nbsp;&nbsp;&nbsp;block_size = f-&gt;samples;<BR>&nbsp;&nbsp;&nbsp;f-&gt;delivery.tv_sec = 0;<BR>&nbsp;&nbsp;&nbsp;f-&gt;delivery.tv_usec = 0;<BR>&nbsp;&nbsp;&nbsp;if(option_verbose &gt; 2) <BR>&nbsp;&nbsp;&nbsp;&nbsp;ast_verbose(VERBOSE_PREFIX_3 "Playback block size: %i\n",block_size);&nbsp;&nbsp;&nbsp;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;if(sox_read(in, buf, block_size) != block_size) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;// EOF, I think<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(option_verbose &gt; 2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ast_verbose(VERBOSE_PREFIX_3 "Playback hit EOF: %i\n",blocks);<BR>&nbsp;&nbsp;&nbsp;&nbsp;break;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;short *sdata;<BR>&nbsp;&nbsp;&nbsp;sdata = (short*)f-&gt;data;<BR>&nbsp;&nbsp;&nbsp;i = f-&gt;samples;<BR>&nbsp;&nbsp;&nbsp;while(i--) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;SOX_SAMPLE_LOCALS;<BR>&nbsp;&nbsp;&nbsp;&nbsp;*sdata++ = SOX_SAMPLE_TO_SIGNED_16BIT(buf[i],in-&gt;clips); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;ast_write(chan, f);<BR>&nbsp;&nbsp;&nbsp;ast_frfree(f);&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;}&nbsp; &nbsp;&nbsp;&nbsp;<BR><BR>I also had a version where I tried making my own frames, with similar effects.<BR>&nbsp;&nbsp;for (i = 0; i &lt; block_size; ++i) {<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;SOX_SAMPLE_LOCALS;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;//double sample = SOX_SAMPLE_TO_FLOAT_64BIT(buf[i],);<BR>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;short newsample = SOX_SAMPLE_TO_SIGNED_16BIT(buf[i],in-&gt;clips); <BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;newbuff[i] = newsample;<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;<BR>&nbsp; &nbsp; &nbsp;&nbsp;}<BR>&nbsp; &nbsp; &nbsp;&nbsp;*/<BR>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;// build our own frame?<BR>&nbsp;&nbsp;&nbsp;&nbsp; /*<BR>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;fr = malloc(sizeof(struct ast_frame));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;fr-&gt;frametype = AST_FRAME_VOICE;<BR>&nbsp;&nbsp;&nbsp;&nbsp;fr-&gt;subclass = AST_FORMAT_SLINEAR;<BR>&nbsp;&nbsp;&nbsp;&nbsp;fr-&gt;samples = block_size;<BR>&nbsp;&nbsp;&nbsp;&nbsp;fr-&gt;data = &amp;newbuff;<BR>&nbsp;&nbsp;&nbsp;&nbsp;fr-&gt;datalen = sizeof(newbuff);&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;ast_write(chan,fr);<BR>&nbsp;&nbsp;&nbsp;&nbsp;*/<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;//&nbsp;blocks++;&nbsp;&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;//ast_frfree(fr);<BR>&nbsp;&nbsp;//&nbsp;}<BR>&nbsp;<BR>Please let me know if theres somewhere I should I look method I could try, where I should go from here :)<BR>I'm not worried about multichannel/changing sample rate, I've got all the resources I need to figure that out, once I can get the playback working in asterisk without the segfaults.                                               <br /><hr />Take your contacts everywhere.  <a href='http://go.microsoft.com/?linkid=9712958' target='_new'>Try Messenger for mobile</a></body>
</html>