0

同じ機能をossミキサーからalsaに移植したいのですが、デバイスチャネルにキャプチャマスクがあるかどうかを確認する方法がわかりません。OSSのコード:

これらの関数はミキサーデバイスを処理します

static int mixer_fd = -1, mixer_src = -1;

int mixer_init(char *mixer_device, char *mixer_source)
{
    int i;  
    mixer_src = -1; 
    for (i=0;i<SOUND_MIXER_NRDEVICES;i++)
        if (strcmp(mixer_source, devices[i]) == 0) 
            mixer_src = i;

    mixer_fd = open(mixer_device, O_RDWR);
    if (mixer_src < 0)  
        return -1;          
    if (mixer_fd < 0)
        return 0;
    return 1;
}

char** mixer_get_rec_devices(void)
{
    int i, o, devmask, res;
    char** result;

    if ((ioctl(mixer_fd, SOUND_MIXER_READ_RECMASK, &devmask)) == -1)
    return NULL;
    else
    {
        result = malloc(sizeof(char*)*SOUND_MIXER_NRDEVICES);
        o = 0;
        for (i=0;i<SOUND_MIXER_NRDEVICES;i++)
            {
            res = (devmask >> i)%2;
                if (res)
            {
                result[o] = malloc(strlen(devices[i])+1);
                sprintf(result[o], "%s", devices[i]);
                o++;
            }
            result[o] = NULL;   
        }
    }
    return result;
}

int mixer_set_rec_device(void)
{
    int devmask, recmask;

    if (mixer_fd <= 0)
        return 0;

    if (mixer_src < 0)
        return 0;

    if ((ioctl(mixer_fd, SOUND_MIXER_READ_RECMASK, &devmask)) == -1)
        return 0;

    recmask = 1 << mixer_src;
    if (!(recmask & devmask))
        return 0;

    if ((ioctl(mixer_fd, SOUND_MIXER_WRITE_RECSRC, &recmask)) == -1)
        return 0;
    return 1;
}

このコードをALSAミキサーに移植するのに助けが必要です。

関数"mixer_set_rec_device()"は、ユーザーが録音をアクティブにした場合にチャンネルミキサーが録音できるかどうかを確認するために使用されます。ここで、settings.mixerはユーザーがチャンネルを選択します。

if (!mixer_set_rec_device()) {
        fprintf(stderr, "Could not set \"%s\" as recording Source", settings.mixer);
        return -1;
    }
4

1 に答える 1

0

一部のデバイスは、複数のソースからキャプチャできます。これらのデバイスには通常、という名前のブールミキサーコントロールがいくつかありますxxxxx Capture Switch

一部のデバイスは、1つのソースからのみキャプチャできます。これらのデバイスには通常、という名前の列挙型ミキサーコントロールがありCapture Sourceます。

一般的なケースでは、デバイスのミキサーはまったく異なる動作をする可能性があります。

いずれにせよ、汎用アプリケーションはユーザーのミキサー構成を変更することはなく、PCMデバイスから記録するだけです。ミキサーの構成は、ユーザーが行うか、ハードウェアを知っている特殊なミキサーアプリケーションが行う必要があります。

于 2013-02-04T15:44:20.787 に答える