예제 #1
0
파일: oss.c 프로젝트: iokto/newton-dynamics
void alc_oss_probe(enum DevProbe type)
{
    switch(type)
    {
        case ALL_DEVICE_PROBE:
        {
#ifdef HAVE_STAT
            struct stat buf;
            if(stat(oss_device, &buf) == 0)
#endif
                AppendAllDeviceList(oss_device);
        }
        break;

        case CAPTURE_DEVICE_PROBE:
        {
#ifdef HAVE_STAT
            struct stat buf;
            if(stat(oss_capture, &buf) == 0)
#endif
                AppendCaptureDeviceList(oss_device);
        }
        break;
    }
}
예제 #2
0
파일: alsa.c 프로젝트: 3dseals/furseal
void alc_alsa_probe(int type)
{
    ALuint i;

    if(!alsa_load())
        return;

    if(type == DEVICE_PROBE)
        AppendDeviceList(alsaDevice);
    else if(type == ALL_DEVICE_PROBE)
    {
        for(i = 0;i < numDevNames;++i)
            free(allDevNameMap[i].name);

        free(allDevNameMap);
        allDevNameMap = probe_devices(SND_PCM_STREAM_PLAYBACK, &numDevNames);

        for(i = 0;i < numDevNames;++i)
            AppendAllDeviceList(allDevNameMap[i].name);
    }
    else if(type == CAPTURE_DEVICE_PROBE)
    {
        for(i = 0;i < numCaptureDevNames;++i)
            free(allCaptureDevNameMap[i].name);

        free(allCaptureDevNameMap);
        allCaptureDevNameMap = probe_devices(SND_PCM_STREAM_CAPTURE, &numCaptureDevNames);

        for(i = 0;i < numCaptureDevNames;++i)
            AppendCaptureDeviceList(allCaptureDevNameMap[i].name);
    }
}
예제 #3
0
void alcWinMMProbe(enum DevProbe type)
{
    ALuint i;

    switch(type)
    {
        case ALL_DEVICE_PROBE:
            ProbePlaybackDevices();
            for(i = 0;i < NumPlaybackDevices;i++)
            {
                if(PlaybackDeviceList[i])
                    AppendAllDeviceList(PlaybackDeviceList[i]);
            }
            break;

        case CAPTURE_DEVICE_PROBE:
            ProbeCaptureDevices();
            for(i = 0;i < NumCaptureDevices;i++)
            {
                if(CaptureDeviceList[i])
                    AppendCaptureDeviceList(CaptureDeviceList[i]);
            }
            break;
    }
}
void alc_oss_probe( int type )
{
	if ( type == DEVICE_PROBE )
	{
#ifdef HAVE_STAT
		struct stat buf;

		if ( stat( GetConfigValue( "oss", "device", "/dev/dsp" ), &buf ) == 0 )
#endif
			AppendDeviceList( oss_device );
	}
	else if ( type == ALL_DEVICE_PROBE )
	{
#ifdef HAVE_STAT
		struct stat buf;

		if ( stat( GetConfigValue( "oss", "device", "/dev/dsp" ), &buf ) == 0 )
#endif
			AppendAllDeviceList( oss_device );
	}
	else if ( type == CAPTURE_DEVICE_PROBE )
	{
#ifdef HAVE_STAT
		struct stat buf;

		if ( stat( GetConfigValue( "oss", "capture", "/dev/dsp" ), &buf ) == 0 )
#endif
			AppendCaptureDeviceList( oss_device );
	}
}
예제 #5
0
파일: alsa.c 프로젝트: LighFusion/surreal
void alc_alsa_probe(enum DevProbe type)
{
    ALuint i;

    switch(type)
    {
        case ALL_DEVICE_PROBE:
            for(i = 0;i < numDevNames;++i)
            {
                free(allDevNameMap[i].name);
                free(allDevNameMap[i].device);
            }

            free(allDevNameMap);
            allDevNameMap = probe_devices(SND_PCM_STREAM_PLAYBACK, &numDevNames);

            for(i = 0;i < numDevNames;++i)
                AppendAllDeviceList(allDevNameMap[i].name);
            break;

        case CAPTURE_DEVICE_PROBE:
            for(i = 0;i < numCaptureDevNames;++i)
            {
                free(allCaptureDevNameMap[i].name);
                free(allCaptureDevNameMap[i].device);
            }

            free(allCaptureDevNameMap);
            allCaptureDevNameMap = probe_devices(SND_PCM_STREAM_CAPTURE, &numCaptureDevNames);

            for(i = 0;i < numCaptureDevNames;++i)
                AppendCaptureDeviceList(allCaptureDevNameMap[i].name);
            break;
    }
}
예제 #6
0
void alcWinMMProbe(int type)
{
    ALuint i;

    if(type == DEVICE_PROBE)
    {
        ProbePlaybackDevices();
        if(NumPlaybackDevices > 0)
            AppendDeviceList(woDefault);
    }
    else if(type == ALL_DEVICE_PROBE)
    {
        ProbePlaybackDevices();
        if(NumPlaybackDevices > 0)
            AppendAllDeviceList(woDefault);
        for(i = 0;i < NumPlaybackDevices;i++)
        {
            if(PlaybackDeviceList[i])
                AppendAllDeviceList(PlaybackDeviceList[i]);
        }
    }
    else if(type == CAPTURE_DEVICE_PROBE)
    {
        ProbeCaptureDevices();
        for(i = 0;i < NumCaptureDevices;i++)
        {
            if(CaptureDeviceList[i])
                AppendCaptureDeviceList(CaptureDeviceList[i]);
        }
    }
}
예제 #7
0
파일: oss.c 프로젝트: ghoulsblade/vegaogre
void alc_oss_init(BackendFuncs *func_list)
{
    *func_list = oss_funcs;

    oss_device = AppendDeviceList("OSS Software");
    AppendAllDeviceList(oss_device);

    oss_device_capture = AppendCaptureDeviceList("OSS Capture");
}
예제 #8
0
파일: portaudio.c 프로젝트: 3dseals/furseal
void alc_pa_probe(int type)
{
    if(!pa_load()) return;

    if(type == DEVICE_PROBE)
        AppendDeviceList(pa_device);
    else if(type == ALL_DEVICE_PROBE)
        AppendAllDeviceList(pa_device);
    else if(type == CAPTURE_DEVICE_PROBE)
        AppendCaptureDeviceList(pa_device);
}
예제 #9
0
void alc_pulse_probe(int type) //{{{
{
    if(!pa_handle) alc_pulse_init(NULL);
    if(!pa_handle) return;

    if(type == DEVICE_PROBE)
        AppendDeviceList(pulse_device);
    else if(type == ALL_DEVICE_PROBE)
        AppendAllDeviceList(pulse_device);
    else if(type == CAPTURE_DEVICE_PROBE)
        AppendCaptureDeviceList(pulse_capture_device);
} //}}}
예제 #10
0
void alc_ca_probe(enum DevProbe type)
{
    switch(type)
    {
        case ALL_DEVICE_PROBE:
            AppendAllDevicesList(ca_device);
            break;
        case CAPTURE_DEVICE_PROBE:
            AppendCaptureDeviceList(ca_device);
            break;
    }
}
예제 #11
0
void alc_pulse_probe(int type) //{{{
{
    if(!pulse_load()) return;

    if(type == DEVICE_PROBE)
        AppendDeviceList(pulse_device);
    else if(type == ALL_DEVICE_PROBE)
        AppendAllDeviceList(pulse_device);
    else if(type == CAPTURE_DEVICE_PROBE)
        AppendCaptureDeviceList(pulse_capture_device);

    pulse_unload();
} //}}}
void alc_pulse_probe( int type ) //{{{
{
	if ( !pulse_load() ) { return; }

	if ( type == DEVICE_PROBE )
	{
		AppendDeviceList( pulse_device );
	}
	else if ( type == ALL_DEVICE_PROBE )
	{
		ALuint i;

		for ( i = 0; i < numDevNames; ++i )
		{
			free( allDevNameMap[i].name );
			free( allDevNameMap[i].device_name );
		}

		free( allDevNameMap );
		allDevNameMap = NULL;
		numDevNames = 0;

		probe_devices( AL_FALSE );

		for ( i = 0; i < numDevNames; i++ )
		{
			AppendAllDeviceList( allDevNameMap[i].name );
		}
	}
	else if ( type == CAPTURE_DEVICE_PROBE )
	{
		ALuint i;

		for ( i = 0; i < numCaptureDevNames; ++i )
		{
			free( allCaptureDevNameMap[i].name );
			free( allCaptureDevNameMap[i].device_name );
		}

		free( allCaptureDevNameMap );
		allCaptureDevNameMap = NULL;
		numCaptureDevNames = 0;

		probe_devices( AL_TRUE );

		for ( i = 0; i < numCaptureDevNames; i++ )
		{
			AppendCaptureDeviceList( allCaptureDevNameMap[i].name );
		}
	}
} //}}}
예제 #13
0
void alcWinMMProbe(int type)
{
    ALuint i;

    if(type != CAPTURE_DEVICE_PROBE)
        return;

    ProbeDevices();
    for(i = 0;i < NumCaptureDevices;i++)
    {
        if(CaptureDeviceList[i])
            AppendCaptureDeviceList(CaptureDeviceList[i]);
    }
}
예제 #14
0
void alcDSoundProbe(enum DevProbe type)
{
    HRESULT hr, hrcom;
    ALuint i;

    switch(type)
    {
        case ALL_DEVICE_PROBE:
            for(i = 0;i < NumPlaybackDevices;++i)
                free(PlaybackDeviceList[i].name);
            free(PlaybackDeviceList);
            PlaybackDeviceList = NULL;
            NumPlaybackDevices = 0;

            hr = DirectSoundEnumerateA(DSoundEnumPlaybackDevices, NULL);
            if(FAILED(hr))
                ERR("Error enumerating DirectSound playback devices (%#x)!\n", (unsigned int)hr);
            else
            {
                for(i = 0;i < NumPlaybackDevices;i++)
                    AppendAllDevicesList(PlaybackDeviceList[i].name);
            }
            break;

        case CAPTURE_DEVICE_PROBE:
            for(i = 0;i < NumCaptureDevices;++i)
                free(CaptureDeviceList[i].name);
            free(CaptureDeviceList);
            CaptureDeviceList = NULL;
            NumCaptureDevices = 0;

            /* Initialize COM to prevent name truncation */
            hrcom = CoInitialize(NULL);
            hr = DirectSoundCaptureEnumerateA(DSoundEnumCaptureDevices, NULL);
            if(FAILED(hr))
                ERR("Error enumerating DirectSound capture devices (%#x)!\n", (unsigned int)hr);
            else
            {
                for(i = 0;i < NumCaptureDevices;i++)
                    AppendCaptureDeviceList(CaptureDeviceList[i].name);
            }
            if(SUCCEEDED(hrcom))
                CoUninitialize();
            break;
    }
}
예제 #15
0
파일: winmm.c 프로젝트: xiaobinshe/multitv
void alcWinMMInit(BackendFuncs *FuncList)
{
    ALint lNumDevs;
    ALint lLoop;

    *FuncList = WinMMFuncs;

    lNumDevs = waveInGetNumDevs();
    for (lLoop = 0; lLoop < lNumDevs; lLoop++)
    {
        WAVEINCAPS WaveInCaps;
        if(waveInGetDevCaps(lLoop, &WaveInCaps, sizeof(WAVEINCAPS)) == MMSYSERR_NOERROR)
        {
            char name[128];
            snprintf(name, sizeof(name), "WaveIn on %s", WaveInCaps.szPname);
            CaptureDeviceList[lLoop] = AppendCaptureDeviceList(name);
        }
    }
}
예제 #16
0
void alc_pulse_probe(enum DevProbe type)
{
    ALuint i;

    switch(type)
    {
        case ALL_DEVICE_PROBE:
            for(i = 0;i < numDevNames;++i)
            {
                free(allDevNameMap[i].name);
                free(allDevNameMap[i].device_name);
            }
            free(allDevNameMap);
            allDevNameMap = NULL;
            numDevNames = 0;

            probe_devices(AL_FALSE);

            for(i = 0;i < numDevNames;i++)
                AppendAllDeviceList(allDevNameMap[i].name);
            break;

        case CAPTURE_DEVICE_PROBE:
            for(i = 0;i < numCaptureDevNames;++i)
            {
                free(allCaptureDevNameMap[i].name);
                free(allCaptureDevNameMap[i].device_name);
            }
            free(allCaptureDevNameMap);
            allCaptureDevNameMap = NULL;
            numCaptureDevNames = 0;

            probe_devices(AL_TRUE);

            for(i = 0;i < numCaptureDevNames;i++)
                AppendCaptureDeviceList(allCaptureDevNameMap[i].name);
            break;
    }
}
예제 #17
0
void alc_alsa_probe(int type)
{
    snd_ctl_t *handle;
    int card, err, dev, idx;
    snd_ctl_card_info_t *info;
    snd_pcm_info_t *pcminfo;
    snd_pcm_stream_t stream;
    char name[128];
    ALuint i;

    if(!alsa_handle) alc_alsa_init(NULL);
    if(!alsa_handle) return;

    psnd_ctl_card_info_malloc(&info);
    psnd_pcm_info_malloc(&pcminfo);

    if(type == DEVICE_PROBE)
        AppendDeviceList(alsaDevice);
    else if(type == ALL_DEVICE_PROBE)
    {
        stream = SND_PCM_STREAM_PLAYBACK;
        card = -1;
        if(psnd_card_next(&card) < 0 || card < 0) {
            AL_PRINT("no playback cards found...\n");
            psnd_pcm_info_free(pcminfo);
            psnd_ctl_card_info_free(info);
            return;
        }

        for(i = 0;i < numDevNames;++i)
            free(allDevNameMap[i].name);

        allDevNameMap = realloc(allDevNameMap, sizeof(DevMap) * 1);
        allDevNameMap[0].name = strdup("ALSA Software on default");
        AppendAllDeviceList(allDevNameMap[0].name);

        idx = 1;
        while(card >= 0) {
            sprintf(name, "hw:%d", card);
            if ((err = psnd_ctl_open(&handle, name, 0)) < 0) {
                AL_PRINT("control open (%i): %s\n", card, psnd_strerror(err));
                goto next_card;
            }
            if ((err = psnd_ctl_card_info(handle, info)) < 0) {
                AL_PRINT("control hardware info (%i): %s\n", card, psnd_strerror(err));
                psnd_ctl_close(handle);
                goto next_card;
            }

            dev = -1;
            while(1) {
                const char *cname, *dname;
                void *temp;

                if (psnd_ctl_pcm_next_device(handle, &dev)<0)
                    AL_PRINT("snd_ctl_pcm_next_device failed\n");
                if (dev < 0)
                    break;

                psnd_pcm_info_set_device(pcminfo, dev);
                psnd_pcm_info_set_subdevice(pcminfo, 0);
                psnd_pcm_info_set_stream(pcminfo, stream);
                if ((err = psnd_ctl_pcm_info(handle, pcminfo)) < 0) {
                    if (err != -ENOENT)
                        AL_PRINT("control digital audio info (%i): %s\n", card, psnd_strerror(err));
                    continue;
                }

                temp = realloc(allDevNameMap, sizeof(DevMap) * (idx+1));
                if(temp)
                {
                    allDevNameMap = temp;
                    cname = psnd_ctl_card_info_get_name(info);
                    dname = psnd_pcm_info_get_name(pcminfo);
                    snprintf(name, sizeof(name), "ALSA Software on %s [%s] (hw:%d,%d)",
                             cname, dname, card, dev);
                    AppendAllDeviceList(name);
                    allDevNameMap[idx].name = strdup(name);
                    allDevNameMap[idx].card = card;
                    allDevNameMap[idx].dev = dev;
                    idx++;
                }
            }
            psnd_ctl_close(handle);
        next_card:
            if(psnd_card_next(&card) < 0) {
                AL_PRINT("snd_card_next failed\n");
                break;
            }
        }
        numDevNames = idx;
    }
    else if(type == CAPTURE_DEVICE_PROBE)
    {
        stream = SND_PCM_STREAM_CAPTURE;
        card = -1;
        if(psnd_card_next(&card) < 0 || card < 0) {
            AL_PRINT("no capture cards found...\n");
            psnd_pcm_info_free(pcminfo);
            psnd_ctl_card_info_free(info);
            return;
        }

        for(i = 0;i < numCaptureDevNames;++i)
            free(allCaptureDevNameMap[i].name);

        allCaptureDevNameMap = realloc(allCaptureDevNameMap, sizeof(DevMap) * 1);
        allCaptureDevNameMap[0].name = strdup("ALSA Capture on default");
        AppendCaptureDeviceList(allCaptureDevNameMap[0].name);

        idx = 1;
        while (card >= 0) {
            sprintf(name, "hw:%d", card);
            handle = NULL;
            if ((err = psnd_ctl_open(&handle, name, 0)) < 0) {
                AL_PRINT("control open (%i): %s\n", card, psnd_strerror(err));
            }
            if (err >= 0 && (err = psnd_ctl_card_info(handle, info)) < 0) {
                AL_PRINT("control hardware info (%i): %s\n", card, psnd_strerror(err));
            }
            else if (err >= 0)
            {
                dev = -1;
                while(1) {
                    const char *cname, *dname;
                    void *temp;

                    if (psnd_ctl_pcm_next_device(handle, &dev)<0)
                        AL_PRINT("snd_ctl_pcm_next_device failed\n");
                    if (dev < 0)
                        break;
                    psnd_pcm_info_set_device(pcminfo, dev);
                    psnd_pcm_info_set_subdevice(pcminfo, 0);
                    psnd_pcm_info_set_stream(pcminfo, stream);
                    if ((err = psnd_ctl_pcm_info(handle, pcminfo)) < 0) {
                        if (err != -ENOENT)
                            AL_PRINT("control digital audio info (%i): %s\n", card, psnd_strerror(err));
                        continue;
                    }

                    temp = realloc(allCaptureDevNameMap, sizeof(DevMap) * (idx+1));
                    if(temp)
                    {
                        allCaptureDevNameMap = temp;
                        cname = psnd_ctl_card_info_get_name(info);
                        dname = psnd_pcm_info_get_name(pcminfo);
                        snprintf(name, sizeof(name), "ALSA Capture on %s [%s] (hw:%d,%d)",
                                 cname, dname, card, dev);
                        AppendCaptureDeviceList(name);
                        allCaptureDevNameMap[idx].name = strdup(name);
                        allCaptureDevNameMap[idx].card = card;
                        allCaptureDevNameMap[idx].dev = dev;
                        idx++;
                    }
                }
            }
            if(handle) psnd_ctl_close(handle);
            if(psnd_card_next(&card) < 0) {
                AL_PRINT("snd_card_next failed\n");
                break;
            }
        }
        numCaptureDevNames = idx;
    }

    psnd_pcm_info_free(pcminfo);
    psnd_ctl_card_info_free(info);
}
예제 #18
0
static inline void AppendCaptureDeviceList2(const al_string *name)
{
    if(!al_string_empty(*name))
        AppendCaptureDeviceList(al_string_get_cstr(*name));
}
예제 #19
0
void alc_pulse_probe(enum DevProbe type) //{{{
{
    pa_threaded_mainloop *loop;
    ALuint i;

    switch(type)
    {
        case DEVICE_PROBE:
            if((loop=pa_threaded_mainloop_new()) &&
               pa_threaded_mainloop_start(loop) >= 0)
            {
                pa_context *context;

                pa_threaded_mainloop_lock(loop);
                context = connect_context(loop, AL_FALSE);
                if(context)
                {
                    AppendDeviceList(pulse_device);

                    pa_context_disconnect(context);
                    pa_context_unref(context);
                }
                pa_threaded_mainloop_unlock(loop);
                pa_threaded_mainloop_stop(loop);
            }
            if(loop)
                pa_threaded_mainloop_free(loop);
            break;

        case ALL_DEVICE_PROBE:
            for(i = 0;i < numDevNames;++i)
            {
                free(allDevNameMap[i].name);
                free(allDevNameMap[i].device_name);
            }
            free(allDevNameMap);
            allDevNameMap = NULL;
            numDevNames = 0;

            probe_devices(AL_FALSE);

            for(i = 0;i < numDevNames;i++)
                AppendAllDeviceList(allDevNameMap[i].name);
            break;

        case CAPTURE_DEVICE_PROBE:
            for(i = 0;i < numCaptureDevNames;++i)
            {
                free(allCaptureDevNameMap[i].name);
                free(allCaptureDevNameMap[i].device_name);
            }
            free(allCaptureDevNameMap);
            allCaptureDevNameMap = NULL;
            numCaptureDevNames = 0;

            probe_devices(AL_TRUE);

            for(i = 0;i < numCaptureDevNames;i++)
                AppendCaptureDeviceList(allCaptureDevNameMap[i].name);
            break;
    }
} //}}}