Hi Mjijnck,
Thanks for the reply. I want my application to behave like the second case that 
you have mentioned.
See my answers below

Arie Muijnck wrote:
Prabhu,

Most codecs have only ONE analog to digital converter (ADC). That means you can 
only record ONE digital stream at a time (mono or stereo).
In front of the ADC there can be a mixer, combining some ANALOG signals.
Instead of a mixer there could also be a selector, that can select only one 
input at a time.

We still need to know something about your hardware and what you try to do:


*   Do you have two ADC's and do you want to record LINE on one ADC, MIC on the 
other ADC?

            We have one ADC separated as left channel ADC and right channel ADC.
            We want LINE and MIC to record on same ADC(Left Channel).

*   Or: do you have one ADC and do you want an analog mixer to combine the two 
analog signals, then send them to the ADC?
Then the SW driver will indicate that you have a LINE input and a MIC input, 
and in this case you can use them at the same time.
Also, don't forget to control the volumes of each input before mixing.

            Yes, We have one ADC and i want to mix the two analog signals 
through mixer and send it to ADC.

*   Or: do you have one ADC and an analog input selector, that can only select 
one input at a time?
Then the SW driver will indicate that you have a LINE input and a MIC input, 
but is does NOT mean you can use them at the same time.

*   Or: are you being creative and do you want to record LINE on the right 
channel, MIC on the left channel of a stereo ADC?
The software will most likelly not support this.

Maybe we could help you better if you specify the actual hardware ADC chip (and 
software driver) that you use.
   I am using TLV320AIC33 chip as audio codec and OSS as the driver. Kernel 
versio:2.6.10_mvl401-davinci_evm

Kind regards,
Arie de Muijnck

________________________________
From: 
[email protected]<mailto:[email protected]>
 [mailto:[email protected]] On Behalf Of Prabhu 
Kalyan Rout
Sent: Tuesday, March 10, 2009 12:43
To: Steve Chen
Cc: 
[email protected]<mailto:[email protected]>
Subject: Re: Need help

Hi Steve,
as i said my audio codec supports to select more then one recording source at a 
time. so i download one application and did some
changes to capture from both the surface at the same time by orring with both 
LINEIN and MIC.
But i got the below error

Failed to ask mixer for available recorders -- 1.
: Invalid argument

but recording from individual sources working fine. So what is the right way to 
select both the recording source at the same time. Below is the code
that i executed.
   /* Standard Linux headers */
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <signal.h>
#include <getopt.h>
#include <pthread.h>
#include <errno.h>

#include <linux/soundcard.h>

#define FAILURE                 -1
/* The number of channels of the audio codec */
#define NUM_CHANNELS           1

/* The sample rate of the audio codec */
#define SAMPLE_RATE            8000

/* The gain (0-100) of the left and right channels */
#define LEFT_GAIN              100
#define RIGHT_GAIN             100

/* Number of samples to process */
#define NUMSAMPLES             320

/* Mono 16 bit */
#define RAWBUFSIZE             NUMSAMPLES * 2

/* Stereo 16 bit */
#define INPUTBUFSIZE           NUMSAMPLES * 2

unsigned short rawbuf[RAWBUFSIZE],inputbuf[INPUTBUFSIZE];

int main()
{
    int     vol         = LEFT_GAIN | (RIGHT_GAIN << 8);
    int     channels    = NUM_CHANNELS;
    int     sampleRate  = SAMPLE_RATE;
        int format = AFMT_S16_LE;
    int     soundFd;
    int     mixerFd;
    int     recMask;

    /* Open the sound device for writing */
    if ((soundFd = open("/dev/dsp", O_RDWR)) == -1) {
        printf("Failed to open the sound device (/dev/dsp)\n");
        return FAILURE;
    }

    /* Set the sound format (only AFMT_S16_LE supported) */
    if (ioctl(soundFd, SNDCTL_DSP_SETFMT, &format) == -1) {
        printf("Could not set format %d\n", format);
        return FAILURE;
    }

    /* Set the number of channels */
    if (ioctl(soundFd, SNDCTL_DSP_CHANNELS, &channels) == -1) {
        printf("Could not set mixer to %d channels\n", channels);
        return FAILURE;
    }

    /* Set the sample rate */
    if (ioctl(soundFd, SNDCTL_DSP_SPEED, &sampleRate) == -1) {
        printf("Could not set sample rate (%d)\n", sampleRate);
        return FAILURE;
    }

    /* If we are sampling select the right capture device and volume */
    if ((mixerFd = open("/dev/mixer", O_RDONLY)) == -1) {
            printf("Failed to open /dev/mixer\n");
            return FAILURE;
   }

        recMask |= SOUND_MASK_MIC;
    recMask |= SOUND_MASK_LINE;
        if (ioctl(mixerFd, SOUND_MIXER_WRITE_RECSRC, &recMask) == -1) {
            perror("Failed to ask mixer for available recorders -- 1.\n");
            return FAILURE;
        }

        if (ioctl(mixerFd, SOUND_MIXER_READ_RECMASK, &recMask) == -1) {
            printf("Failed to ask mixer for available recorders -- 2.\n");
            return FAILURE;
        }

        if ((recMask & SOUND_MASK_MIC) == 0) {
            printf("Line input not a supported recorder.\n");
            return FAILURE;
        }
    if ((recMask & SOUND_MASK_LINE) == 0) {
                    printf("Failed to read the current recorder.\n");
            return FAILURE;
        }

        if (ioctl(mixerFd, SOUND_MIXER_WRITE_IGAIN, &vol) == -1) {
            printf("Failed to set the volume of line in.\n");
            return FAILURE;
        }

        close(mixerFd);

    printf("Audio sample rate set to %dHz\n", SAMPLE_RATE);
int outputFd = open("audio",O_WRONLY | O_CREAT | O_TRUNC, 00644);
int i=0,numBytes;
    if (outputFd == -1) {
        printf("Failed to open file for writing\n");
        exit(0);
    }
        while(i++<500)
        {
                numBytes=read(soundFd, inputbuf, INPUTBUFSIZE);
                if(numBytes==-1)
                {
                        printf("error\n");
                        exit(0);
                        close(outputFd);

                }
                else{
                        printf("numBytes=%d\n",numBytes);
                }
                usleep(10);
                write(soundFd, inputbuf, INPUTBUFSIZE);
        //stereoToMono(inputbuf, rawbuf, NUMSAMPLES);
       if (write(outputFd, inputbuf, INPUTBUFSIZE) == -1) {
            printf("Error writing the encoded \n");
                close(outputFd);
            exit(0);
        }
        }
close(outputFd);
        close(soundFd);

    return 0;
}




Steve Chen wrote:

On Mon, 2009-03-09 at 19:42 +0530, Prabhu Kalyan Rout wrote:



Actually i wanted to record from both MIC and LINE IN at the same

time. >From the





It would be difficult to record separate audio streams on mic and

line-in since both goes to the same ADC.







below code i found that my codec does supports that

 status = ioctl(fd, SOUND_MIXER_READ_CAPS, &caps);

 if (status == -1)

   perror("SOUND_MIXER_READ_CAPS ioctl failed");



if (!(caps & SOUND_CAP_EXCL_INPUT))



Thanks



Viral Sachde wrote:



On Mon, Mar 9, 2009 at 3:38 PM, Prabhu Kalyan Rout

<[email protected]><mailto:[email protected]> wrote:





Hi,

My requirement is to capture from both LINE IN and MIC. But current OSS

functionality does not allow us to do that

Can any body tell me how to achieve this functionality using OSS as the

driver?

Thanks







Do you mean, you wish two separate analog input support, one inserted

in Line-in, another in Mic ?









______________________________________________________________________

http://www.mindtree.com/email/disclaimer.html

_______________________________________________

Davinci-linux-open-source mailing list

[email protected]<mailto:[email protected]>

http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source







________________________________
http://www.mindtree.com/email/disclaimer.html

This message contains confidential information and is intended only for the 
individual named. If you are not the named addressee you should not 
disseminate, distribute or copy this e-mail. Please notify the sender 
immediately by e-mail if you have received this e-mail by mistake and delete 
this e-mail from your system. E-mail transmission cannot be guaranteed to be 
secure or error-free as information could be intercepted, corrupted, lost, 
destroyed, arrive late or incomplete, or contain viruses. The sender therefore 
does not accept liability for any errors or omissions in the contents of this 
message, which arise as a result of e-mail transmission. If verification is 
required please request a hard-copy version.

Please consider the environment before printing this email message


________________________________
http://www.mindtree.com/email/disclaimer.html
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to