2013-02-04 2 views
0

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; 
    } 
+0

이 API는 SoundBlaster 카드 용으로 설계된 API입니다. 많은 사운드 장치에는 캡처 마스크가 없습니다. 그렇다면 프로그램은 무엇을해야합니까? –

+0

예를 들어 채널 CD를 선택하면 녹음 할 수 있는지 확인할 수 있습니다. – user1840007

답변

0

일부 장치는 여러 소스에서 캡처 할 수 있습니다. 이러한 장치에는 일반적으로 xxxxx Capture Switch이라는 부울 믹서 컨트롤이 여러 개 있습니다.

일부 장치는 하나의 원본에서만 캡처 할 수 있습니다. 이러한 장치에는 대개 Capture Source이라는 열거 형 혼합기 컨트롤이 있습니다.

일반적으로 장치의 믹서는 완전히 다른 방식으로 작동 할 수 있습니다.

어쨌든 범용 응용 프로그램은 사용자의 믹서 구성을 수정해서는 안되며 일부 PCM 장치에서 녹음해야합니다. 믹서의 설정은 사용자 또는 하드웨어를 알고있는 특수한 믹서 어플리케이션에 의해 행해져 야합니다.

+0

OK. 믹서가 채널을 선택하여 캡처 할 수 있는지 그리고 0을 반환 할 수 있는지 어떻게 알 수 있습니까? 감사합니다 – user1840007

+0

내가 언급 한 믹서 컨트롤을 검색하십시오. 그리고 이미 말했듯이 많은 사운드 장치에는 이러한 채널이 없으며 응용 프로그램의 경우 해당 구성을 변경하면 안됩니다. 왜 그들을 바꿀 필요가 있니? –

+0

변경하고 싶지 않습니다. 채널에 관한 메시지를 보내거나받을 수 없도록 할 수 있습니다. – user1840007