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

Eduardo Gurgel edgurgel at gmail.com
Tue Sep 30 00:53:26 CEST 2014


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ninenines.eu/archives/extend/attachments/20140930/6d952ce6/attachment-0001.html>


More information about the Extend mailing list