[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