You can use the data you have, the read will already be timed right
when you get a frame that has flag SFF_CNG you know that there was not a real frame to read but you should still write the size id determined from getting the read_impl and using read_impl->encoded_bytes_per_frame On Fri, Mar 26, 2010 at 12:23 PM, Francisco Scaramanga <sca...@hotmail.de>wrote: > ok, which is the best mechanism to controll the amount of data. Can you > recommend a timer? I use PCMA codec with 20 msec intervall. > > > ------------------------------ > Date: Fri, 26 Mar 2010 11:31:43 -0500 > > From: anthony.miness...@gmail.com > To: freeswitch-dev@lists.freeswitch.org > Subject: Re: [Freeswitch-dev] hooked functions are not called while using > one single session > > you can only write back the exact number of bytes you negotiated per > interval. > > > On Fri, Mar 26, 2010 at 7:27 AM, Francisco Scaramanga > <sca...@hotmail.de>wrote: > > Now I call switch_core_session_read_frame and > switch_core_session_write_frame in the same foreground loop. Then I write > audio into a file and as a result I see that there are many audio gaps. > > There seems to be a cross effect by using switch_core_session_write_frame > and switch_core_session_read_frame together. > If I only use switch_core_session_read_frame in the loop, there are no gaps > and everything sounds perfect! > > What could be the problem? > > > > while (1) > { > // READ > tstatus = switch_core_session_read_frame(session, &read_frame, > SWITCH_IO_FLAG_NONE, 0); > if (tstatus==SWITCH_STATUS_SUCCESS) > { // write audio in a testfile > fwrite((short *)(read_frame)->data, 2, > ((read_frame)->datalen)/2 ,tmp); > switch_size_t ts_rf=read_frame->timestamp; > } > > // WRITE > vector<unsigned char> vucIn; > if (getAudio(&vucAudio)) // get next audio and send it back > { > memcpy( write_frame.data, &vucIn[0], vucIn.size()); > write_frame.datalen=vucIn.size(); > tstatus = switch_core_session_write_frame(session, &write_frame, > SWITCH_IO_FLAG_NONE, 0); > } > //Sleep(1);//? > } > > ------------------------------ > Date: Mon, 22 Mar 2010 18:34:46 -0500 > > From: anthony.miness...@gmail.com > To: freeswitch-dev@lists.freeswitch.org > Subject: Re: [Freeswitch-dev] hooked functions are not called while using > one single session > > you don't use the hook functions you use a frame pointer > > switch_frame_t *read_frame; > > switch_core_session_read_frame(session, &read_frame, SWITCH_IO_FLAG_NONE, > 0); > > when i said to look at the stream file example i meant in the function > itself to see how > to read and write audio from a channel in a foreground loop. > > > > On Mon, Mar 22, 2010 at 6:23 PM, Francisco Scaramanga > <sca...@hotmail.de>wrote: > > I have an selfmade software which is controlled by a telephone call > (ISDN/CAPI). The user calls with his phone, gets > connected and can speak commands which are detected by an internal speech > recognizer. Furthermore the user can accept > or hangup incoming calls just by his voice command. It is also possible to > dial out. > > Now I am adding VOIP functionality to my system and decided to use > FreeSwitch. Therefore I wrote a FreeSwitch module which should be the VOIP > interface for my software. The module must be able to: > > 1. recognize an incoming call which is the users control session (single > session) > I do this in statehandler function channel_on_init. > 2. pick up another incoming call and intercept with my users control > session. > 3. Get the audio data from voip session (user control session) and send it > to my application (by own tcp-socket) > My idea is to use channel_write_frame to receive audio. > 3. Send audio data from my application to voip user control session so the > user can hear audio. > My idea is to use channel_read_frame. > > explanation for using hooks: > ---------------------------- > The endpoint interface callback functions where never called in my module, > even I tried to adapt the way it is done > in mod_portaudio. So my workaround was to set hook functions > channel_read_frame/channel_write_frame to handle audio. > > My problems: > ------------ > The hook functions are working fine if I have 2 sessions (put together by > switch_ivr_intercept_session), but if I only have the single user control > session no hooked function is called. In this case the only way to achieve > that hooks are called, is to play audio with switch_ivr_play_file. But then, > audio samples got lost sometimes. > > Maybe there is a better way to solve my requirements? > > > > > ------------------------------ > Date: Mon, 22 Mar 2010 11:55:42 -0500 > > From: anthony.miness...@gmail.com > To: freeswitch-dev@lists.freeswitch.org > Subject: Re: [Freeswitch-dev] hooked functions are not called while using > one single session > > Why do you even need the hooks? > What exactly are you trying to do? > Maybe you should explain it. > > > On Mon, Mar 22, 2010 at 5:33 AM, Francisco Scaramanga > <sca...@hotmail.de>wrote: > > I am now using the application interface and play a file after answering > the call. The call is not connected to a another session, it's just a single > session. > > SWITCH_STANDARD_APP(mod_my_function) > { > /* play audio file */ > switch_ivr_play_file(session, NULL, > "C:\\freeswitch1.0.4\\debug\\sounds\\music\\8000\\danza-espanola-op-37-h-142-xii-arabesca.wav", > NULL); > } > > Now the hooks for channel_write_frame and channel_read_frame are called! I > write the audio frames into a file for testing if everything is correct. The > data written in channel_write_frame seems to be perfect, but audio written > in channel_read_frame only seems to be good at first sight. If I record 20 > seconds of audio and listen to the audiofile I hear that 2 or 3 times short > parts are missing. > > static switch_status_t channel_write_frame(switch_core_session_t *session, > switch_frame_t *frame, switch_io_flag_t flags, int stream_id) > { > // Audio from danza-espanola-op-37-h-142-xii-arabesca.wav is written into > a file > fwrite((short *)frame->data, 2, frame->datalen/2 ,tmp); > > } > static switch_status_t channel_read_frame(switch_core_session_t *session, > switch_frame_t **frame, switch_io_flag_t flags, int stream_id) > { > // Spoken audio samples from my microphone are written, but sometimes > samples are missing > fwrite((short *)frame->data, 2, frame->datalen/2 ,tmp); > } > > Is it possible that I don't get all audio samples by hooked functions? why > audio recorded in channel_write_frame is brilliant and in channel_read_frame > not? > > > > > > > ------------------------------ > Date: Tue, 16 Mar 2010 13:59:28 -0500 > > From: anthony.miness...@gmail.com > To: freeswitch-dev@lists.freeswitch.org > Subject: Re: [Freeswitch-dev] hooked functions are not called while using > one single session > > you probably want to use the application interface and a while loop while > reading a frame. > > see most of the functions in switch_ivr_play_say > > > On Tue, Mar 16, 2010 at 8:51 AM, Francisco Scaramanga > <sca...@hotmail.de>wrote: > > The module I am writing should be an endpoint VOIP-interface for another > program. The module should answer a call and transport incoming audio into a > 3rd party application. Furthermore the 3rd party application sends audio > data back to the caller. This is why I hooked channel_read_frame and > channel_write_frame. > > How can I trigger the channel to do something that requires reading or > writing audio? Does it make a difference to use the endpoint interface > instead of the hooks? > > > ------------------------------ > Date: Tue, 16 Mar 2010 08:34:18 -0500 > From: anthony.miness...@gmail.com > To: freeswitch-dev@lists.freeswitch.org > Subject: Re: [Freeswitch-dev] hooked functions are not called while using > one single session > > > What exactly is your goal? > > those hooks will probably only be called if you send the channel to do > something that > requires reading and writing audio. > > > On Tue, Mar 16, 2010 at 6:47 AM, Francisco Scaramanga > <sca...@hotmail.de>wrote: > > Hello, > I am writing my own freeswitch module and have implemented 2 hooks for > reading and writing audio (I did not implement the endpoint interface). > My problem is that the channel_write_frame and channel_read_frame > callback-functions are only called if I make an intercept with another > session (switch_ivr_intercept_session), but my usecase has only one single > Session for getting and putting audio data in my module. > > How can I achieve this? > scaram > > /* on channel init I answer the session and set hooks */ > static switch_status_t channel_on_init(switch_core_session_t *session) > { > switch_channel_t *channel = switch_core_session_get_channel(session); > switch_channel_answer(channel); > > switch_channel_set_state(channel, CS_EXCHANGE_MEDIA); > switch_set_flag(tech_pvt, TFLAG_IO); > > switch_core_event_hook_add_write_frame(session, &channel_write_frame); > switch_core_event_hook_add_read_frame(session, &channel_read_frame); > } > > static switch_status_t channel_write_frame(switch_core_session_t *session, > switch_frame_t *frame, switch_io_flag_t flags, int stream_id) > { > /* is only called when I intercept 2 Sessions */ > } > static switch_status_t channel_read_frame(switch_core_session_t *session, > switch_frame_t *frame, switch_io_flag_t flags, int stream_id) > { > /* is only called when I intercept 2 Sessions */ > } > > > > ------------------------------ > Ein Postfach für Alles – bei Hotmail 5 E-Mail-Adressen online > verwalten!<http://redirect.gimas.net/?n=M1003HM5Adressen> > > _______________________________________________ > FreeSWITCH-dev mailing list > FreeSWITCH-dev@lists.freeswitch.org > http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev > UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev > http://www.freeswitch.org > > > > > -- > Anthony Minessale II > > FreeSWITCH http://www.freeswitch.org/ > ClueCon http://www.cluecon.com/ > Twitter: http://twitter.com/FreeSWITCH_wire > > AIM: anthm > MSN:anthony_miness...@hotmail.com > GTALK/JABBER/PAYPAL:anthony.miness...@gmail.com > IRC: irc.freenode.net #freeswitch > > FreeSWITCH Developer Conference > sip:8...@conference.freeswitch.org > iax:gu...@conference.freeswitch.org/888<http://conference.freeswitch.org/888> > googletalk:conf+...@conference.freeswitch.org<googletalk:conf%2b...@conference.freeswitch.org> > pstn:+19193869900 > > ------------------------------ > Alles in einem Postfach – Ich will > Hotmail!<http://redirect.gimas.net/?n=M1003Hotmail> > > _______________________________________________ > FreeSWITCH-dev mailing list > FreeSWITCH-dev@lists.freeswitch.org > http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev > UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev > http://www.freeswitch.org > > > > > -- > Anthony Minessale II > > FreeSWITCH http://www.freeswitch.org/ > ClueCon http://www.cluecon.com/ > Twitter: http://twitter.com/FreeSWITCH_wire > > AIM: anthm > MSN:anthony_miness...@hotmail.com > GTALK/JABBER/PAYPAL:anthony.miness...@gmail.com > IRC: irc.freenode.net #freeswitch > > FreeSWITCH Developer Conference > sip:8...@conference.freeswitch.org > iax:gu...@conference.freeswitch.org/888<http://conference.freeswitch.org/888> > googletalk:conf+...@conference.freeswitch.org<googletalk:conf%2b...@conference.freeswitch.org> > pstn:+19193869900 > > ------------------------------ > Treffe Freunde im Messenger > Videochat!<http://redirect.gimas.net/?n=M1003IMVideochat> > > _______________________________________________ > FreeSWITCH-dev mailing list > FreeSWITCH-dev@lists.freeswitch.org > http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev > UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev > http://www.freeswitch.org > > > > > -- > Anthony Minessale II > > FreeSWITCH http://www.freeswitch.org/ > ClueCon http://www.cluecon.com/ > Twitter: http://twitter.com/FreeSWITCH_wire > > AIM: anthm > MSN:anthony_miness...@hotmail.com > GTALK/JABBER/PAYPAL:anthony.miness...@gmail.com > IRC: irc.freenode.net #freeswitch > > FreeSWITCH Developer Conference > sip:8...@conference.freeswitch.org > iax:gu...@conference.freeswitch.org/888<http://conference.freeswitch.org/888> > googletalk:conf+...@conference.freeswitch.org<googletalk:conf%2b...@conference.freeswitch.org> > pstn:+19193869900 > > ------------------------------ > Alles in einem Postfach – Ich will > Hotmail!<http://redirect.gimas.net/?n=M1003Hotmail> > > _______________________________________________ > FreeSWITCH-dev mailing list > FreeSWITCH-dev@lists.freeswitch.org > http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev > UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev > http://www.freeswitch.org > > > > > -- > Anthony Minessale II > > FreeSWITCH http://www.freeswitch.org/ > ClueCon http://www.cluecon.com/ > Twitter: http://twitter.com/FreeSWITCH_wire > > AIM: anthm > MSN:anthony_miness...@hotmail.com > GTALK/JABBER/PAYPAL:anthony.miness...@gmail.com > IRC: irc.freenode.net #freeswitch > > FreeSWITCH Developer Conference > sip:8...@conference.freeswitch.org > googletalk:conf+...@conference.freeswitch.org<googletalk:conf%2b...@conference.freeswitch.org> > pstn:+19193869900 > > ------------------------------ > Treffe Freunde im Messenger > Videochat!<http://redirect.gimas.net/?n=M1003IMVideochat> > > _______________________________________________ > FreeSWITCH-dev mailing list > FreeSWITCH-dev@lists.freeswitch.org > http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev > UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev > http://www.freeswitch.org > > > > > -- > Anthony Minessale II > > FreeSWITCH http://www.freeswitch.org/ > ClueCon http://www.cluecon.com/ > Twitter: http://twitter.com/FreeSWITCH_wire > > AIM: anthm > MSN:anthony_miness...@hotmail.com > GTALK/JABBER/PAYPAL:anthony.miness...@gmail.com > IRC: irc.freenode.net #freeswitch > > FreeSWITCH Developer Conference > sip:8...@conference.freeswitch.org > googletalk:conf+...@conference.freeswitch.org<googletalk:conf%2b...@conference.freeswitch.org> > pstn:+19193869900 > > ------------------------------ > Alles in einem Postfach – Ich will > Hotmail!<http://redirect.gimas.net/?n=M1003Hotmail> > > _______________________________________________ > FreeSWITCH-dev mailing list > FreeSWITCH-dev@lists.freeswitch.org > http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev > UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev > http://www.freeswitch.org > > -- Anthony Minessale II FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire AIM: anthm MSN:anthony_miness...@hotmail.com <msn%3aanthony_miness...@hotmail.com> GTALK/JABBER/PAYPAL:anthony.miness...@gmail.com<paypal%3aanthony.miness...@gmail.com> IRC: irc.freenode.net #freeswitch FreeSWITCH Developer Conference sip:8...@conference.freeswitch.org <sip%3a...@conference.freeswitch.org> googletalk:conf+...@conference.freeswitch.org<googletalk%3aconf%2b...@conference.freeswitch.org> pstn:+19193869900
_______________________________________________ FreeSWITCH-dev mailing list FreeSWITCH-dev@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev http://www.freeswitch.org