[99s-extend] Newbie, Cowboy + Websocket + Audio Recording

Juan Matías jmrepetti at gmail.com
Tue Sep 30 12:38:15 CEST 2014


Thanks, that fixed the error. Now I'm having other but I'll investigate.



On Tue, Sep 30, 2014 at 12:53 AM, Eduardo Gurgel <edgurgel at gmail.com> wrote:

> Looking on the output it says:
>
> *{reason,badarith} *on this line:
>
> RecorderPid ! {rec, _Frame/binary},
>
> This may help you somehow.
>
> BTW, variables starting with _ are usually used to show unused variables
> and stop warnings from the compiler.
>
> On 30 September 2014 05:52, Juan Matías <jmrepetti at gmail.com> wrote:
>
>> Hello list, I hope this is the right place to ask this.
>>
>> I'm learning Erlang, and I wanted to create a Cowboy app to record audio
>> from a web browser.
>>
>> Based on the websocket example in the Cowboy source code, I get the user
>> mic input and send this input to the websocket.
>>
>> I created a "recorder" module, which functionality is to save the data to
>> the a file.
>>
>>
>> *#rawe_handler.erl*-module(rawec_handler).
>> -behaviour(cowboy_websocket_handler).
>> ......
>> init(_, _, _) ->
>>   case whereis(recorder) of
>>     undefined ->
>>         RecorderPid = recorder:start(),
>>         register(recorder, RecorderPid);
>>     _ -> ok
>>   end,
>>     {upgrade, protocol, cowboy_websocket}.
>> .....
>> websocket_handle(_Frame, Req, State) ->
>>   RecorderPid = whereis(recorder),
>>   RecorderPid ! {rec, _Frame/binary},
>>     {ok, Req, State}.
>>
>> *#recorder.erl*
>> -module(recorder).
>>
>> -export([start/0, recorder_fun/1]).
>> -compile([debug_info]).
>>
>> recorder_fun(IoDevice) ->
>>   receive
>>     {rec, Data} ->
>>       ok = file:write(IoDevice, Data),
>>       io:format(Data),
>>       recorder_fun(IoDevice);
>>     {stop, _} ->
>>       %%Close file
>>       file:close(IoDevice)
>>     end.
>>
>> start() ->
>>   {ok, IoDevice} = file:open("/tmp/test_binary.wav", [write,
>> binary]),
>>   spawn(recorder, recorder_fun, [IoDevice]).
>>
>>
>> When I start the console, and allow the microphone on the browser, I see
>> this error on the console:
>>
>> =ERROR REPORT==== 29-Sep-2014::18:13:03 ===
>> Ranch listener http had connection process started with
>> cowboy_protocol:start_link/4 at <0.178.0> exit with reason:
>> *{[{reason,badarith},{mfa,{rawec_handler,websocket_handle,3*}},{stacktrace,[{rawec_handler,websocket_handle,3,[{file,"src/rawec_handler.erl"},{line,35}]},{cowboy_websocket,handler_call,7,[{file,"src/cowboy_websocket.erl"},{line,588}]},{cowboy_protocol,execute,4,[{file,"src/cowboy_protocol.erl"},{line,435}]}]},{msg,{binary,<<0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0....(ETC,
>> DATA STREAM CONTINUES)
>>
>> Probably my approach to do this is totally wrong. I there any obvious
>> problem here?
>> Can someone point me to a right direction?. Maybe I should write directly
>> to a file in the *websocket_handle *funcion, but how can I keep a file
>> opened during the streaming?
>>
>> The github repo is here: https://github.com/jmrepetti/rawec with the
>> whole source code if you want to take a look.
>>
>>
>> Thanks in advance,
>> Matias.
>>
>> _______________________________________________
>> Extend mailing list
>> Extend at lists.ninenines.eu
>> https://lists.ninenines.eu/listinfo/extend
>>
>>
>
>
> --
> Eduardo
>



-- 
Matías
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ninenines.eu/archives/extend/attachments/20140930/ef46837f/attachment.html>


More information about the Extend mailing list