oss 믹서에서 alsa로 동일한 기능을 포팅하려고하지만 지금 장치 채널에 캡처 마스크가 있는지 확인하는 방법은 없습니다. OSS에 대한 코드 :레코드 장치 설정 alsa
이 기능은 믹서 장치
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 믹서에이 코드를 필요로 처리합니다.
function "mixer_set_rec_device()"는 채널 믹서가 사용자가 녹음을 활성화하면 녹음 할 수 있는지 확인하는 데 사용됩니다. 여기서 settings.mixer는 사용자가 채널을 선택합니다.
if (!mixer_set_rec_device()) {
fprintf(stderr, "Could not set \"%s\" as recording Source", settings.mixer);
return -1;
}
이 API는 SoundBlaster 카드 용으로 설계된 API입니다. 많은 사운드 장치에는 캡처 마스크가 없습니다. 그렇다면 프로그램은 무엇을해야합니까? –
예를 들어 채널 CD를 선택하면 녹음 할 수 있는지 확인할 수 있습니다. – user1840007