is it possible to record from mic/line in?

Pixilang programming language
majkol
Posts: 6
Joined: Mon Feb 03, 2014 12:46 am

is it possible to record from mic/line in?

Postby majkol » Mon Feb 03, 2014 12:55 am

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!

User avatar
NightRadio
Site Admin
Posts: 2758
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

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

Postby NightRadio » Mon Feb 03, 2014 12:14 pm

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

User avatar
NightRadio
Site Admin
Posts: 2758
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

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

Postby NightRadio » Mon Feb 03, 2014 12:51 pm

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()
}

majkol
Posts: 6
Joined: Mon Feb 03, 2014 12:46 am

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

Postby majkol » Mon Feb 03, 2014 2:52 pm

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:

majkol
Posts: 6
Joined: Mon Feb 03, 2014 12:46 am

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

Postby majkol » Tue Feb 04, 2014 3:16 am

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!

User avatar
NightRadio
Site Admin
Posts: 2758
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

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

Postby NightRadio » Tue Feb 04, 2014 7:03 pm

Hm... Nexus 5 has separate Line-in port? :) I've never seen Android devices with line-in.

majkol
Posts: 6
Joined: Mon Feb 03, 2014 12:46 am

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

Postby majkol » Tue Feb 04, 2014 7:32 pm

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?

majkol
Posts: 6
Joined: Mon Feb 03, 2014 12:46 am

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

Postby majkol » Tue Feb 04, 2014 7:33 pm

I'll make sure that i can record sound via cable into other apps, and get back to you if the problem persists!

User avatar
NightRadio
Site Admin
Posts: 2758
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

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

Postby NightRadio » Tue Feb 04, 2014 8:50 pm

Ah, ok. Please try to insert the Line-in before Pixilang launch.

majkol
Posts: 6
Joined: Mon Feb 03, 2014 12:46 am

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

Postby majkol » Wed Feb 05, 2014 12:30 am

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)! =)

User avatar
NightRadio
Site Admin
Posts: 2758
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

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

Postby NightRadio » Wed Feb 05, 2014 8:45 am

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

kmatze
Posts: 45
Joined: Wed Jun 22, 2011 12:36 am

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

Postby kmatze » Sat Oct 04, 2014 8:00 am

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

User avatar
NightRadio
Site Admin
Posts: 2758
Joined: Fri Jan 23, 2004 12:28 am
Location: Ekaterinburg. Russia
Contact:

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

Postby NightRadio » Sun Oct 05, 2014 9:30 am

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


Return to “Pixilang”

Who is online

Users browsing this forum: No registered users and 1 guest