Page 1 of 1

is it possible to record from mic/line in?

Posted: Mon Feb 03, 2014 12:55 am
by majkol
Hi,

First of all: thank you so much, nightradio, for making pixilang available. I've only just started playing around with it this weekend, and so far it seems awesome!

And now to my total beginners question:

Is there a way to record audio from mic/line in? The only mention of anything related I can find in the manual is enable_audio_input(), but I suspect that won't take me all the way..

I'd be extremely greatful for any pointers in the right direction!

Re: is it possible to record from mic/line in?

Posted: Mon Feb 03, 2014 12:14 pm
by NightRadio
Hello!

Of course, it is possible :) The problem is there is no mic/line recording examples in Pixilang. But i will make it for you

Re: is it possible to record from mic/line in?

Posted: Mon Feb 03, 2014 12:51 pm
by NightRadio
First. Simple Input (Mic/Line) Visualizer

Code: Select all

fn audio_callback(
    $stream,
    $userdata,
    $channels,
    $frames,
    $output_time_in_system_ticks,
    $in_channels,
    $latency_in_frames )
{
    if $in_channels >= 0
    {
        copy( visual_buf, $in_channels[ 0 ] )
    }
    ret( 0 ) //output is empty
}

visual_buf = new( 256, 1, INT16 )
clean( visual_buf )

set_audio_callback( audio_callback, 0, 44100, INT16, 2 )
enable_audio_input( 1 )

xsize = get_xsize( get_screen() )
ysize = get_ysize( get_screen() )
hxsize = xsize / 2
hysize = ysize / 2

while 1
{
    transp( 64 );
    clear()
    transp( 256 );

    x = 0 while( x < 256 )
    {
        line( x - 128, 0, x - 128, visual_buf[ x ] / 512, GREEN )
        x + 1
    }

    while( get_event() ) { if EVT[ EVT_TYPE ] == EVT_QUIT { halt } }

    frame()
}
Second. Input to Output (feedback)

Code: Select all

fn audio_callback(
    $stream,
    $userdata,
    $channels,
    $frames,
    $output_time_in_system_ticks,
    $in_channels,
    $latency_in_frames )
{
    if $in_channels >= 0
    {
        //Copy input channels to the output:
        $ch = 0 while $ch < 2
        {
            copy( $channels[ $ch ], $in_channels[ $ch ], 0, 0, $frames )
            $ch + 1
        }

        //Visualization:
        copy( visual_buf, $in_channels[ 0 ] )

        ret( 1 ) //output is not empty
    }
    ret( 0 )
}

visual_buf = new( 256, 1, INT16 )
clean( visual_buf )

set_audio_callback( audio_callback, 0, 44100, INT16, 2 )
enable_audio_input( 1 )

xsize = get_xsize( get_screen() )
ysize = get_ysize( get_screen() )
hxsize = xsize / 2
hysize = ysize / 2

while 1
{
    transp( 64 );
    clear()
    transp( 256 );

    x = 0 while( x < 256 )
    {
        line( x - 128, 0, x - 128, visual_buf[ x ] / 512, GREEN )
        x + 1
    }

    while( get_event() ) { if EVT[ EVT_TYPE ] == EVT_QUIT { halt } }

    frame()
}

Re: is it possible to record from mic/line in?

Posted: Mon Feb 03, 2014 2:52 pm
by majkol
Hey! Thank you so much for the very quick reply, and even more for posting example code! It looks very easy to do something usable with audio in - I'll have a go at it tonight. This is exactly how you make people use your stuff! :good:

Re: is it possible to record from mic/line in?

Posted: Tue Feb 04, 2014 3:16 am
by majkol
Hi again,

I'm back, bothering you for more help... :oops:

I've managed to understand and run the example code on my nexus 5, and it works great. Now my problem is that i need to switch from recording from mic to recording from line in. On win7, that is easily done by selecting the proper input device in the prefs, but on the android version the only option seems to be "auto", which defaults to the mic. I can hear the sound i'm playing through line in, so i know the connection is ok, but the example program only reacts to the sound coming in via the mic. Is there a way of switching devices from within the code, or is it maybe a matter of selecting the proper x for $in_channels[ x ] in the audio callback? I tried x = 2 and x = 3, but that didn't seem to make any change... Please help, and big thanks in advance!

Re: is it possible to record from mic/line in?

Posted: Tue Feb 04, 2014 7:03 pm
by NightRadio
Hm... Nexus 5 has separate Line-in port? :) I've never seen Android devices with line-in.

Re: is it possible to record from mic/line in?

Posted: Tue Feb 04, 2014 7:32 pm
by majkol
Oh, no, it's a single 4-pole connection. What i mean is that even though the cable is inserted, pixilang records from the built in mic. Very weird, i agree. Maybe it's a hardware thing on my part?

Re: is it possible to record from mic/line in?

Posted: Tue Feb 04, 2014 7:33 pm
by majkol
I'll make sure that i can record sound via cable into other apps, and get back to you if the problem persists!

Re: is it possible to record from mic/line in?

Posted: Tue Feb 04, 2014 8:50 pm
by NightRadio
Ah, ok. Please try to insert the Line-in before Pixilang launch.

Re: is it possible to record from mic/line in?

Posted: Wed Feb 05, 2014 12:30 am
by majkol
Hi again,

This seems to be something that affects the phone in general, not just pixilang. Not sure if it's software or hardware, but after a couple of reboots and some disconnecting and reconnecting i finally get a signal from line in. Sorry to bother you about it when i should be bothering google (or possibly LG)! =)

Re: is it possible to record from mic/line in?

Posted: Wed Feb 05, 2014 8:45 am
by NightRadio
Ok :)
Pixilang and all my Android apps use the OpenSL for audio. OpenSL uses default system Audio Input and Output. So theoretically it should switch between the different audio ports automatically :) But unfortunately it is very dependent on device. My LG E510 does not work perfectly too

Re: is it possible to record from mic/line in?

Posted: Sat Oct 04, 2014 8:00 am
by kmatze
NightRadio wrote:First. Simple Input (Mic/Line) Visualizer

Code: Select all

...
}
Second. Input to Output (feedback)

Code: Select all

...
}
hi nightradio,
nice sample.
the second sample has a little echo.
i use standard audio on a notebook.
i test it with driver asio4all and the echo is less then the standard, but it is. I think thats a general problem with the latenz. is there a programming trick in pixilang to reduce the latenz?

greetings - kmatze

Re: is it possible to record from mic/line in?

Posted: Sun Oct 05, 2014 9:30 am
by NightRadio
In code - no. But you can change the audio parameters in the pixilang_config.ini
Format is the same as in SunVox: http://www.warmplace.ru/wiki/sunvox:man ... figuration