static void au_detect(MSSndCardManager *m){ ms_debug("au_detect"); MSSndCard *card=au_card_new(AU_CARD_RECEIVER); ms_snd_card_manager_add_card(m,card); card=au_card_new(AU_CARD_SPEAKER); ms_snd_card_manager_add_card(m,card); }
static void oss_detect(MSSndCardManager *m){ int i; char pcmdev[sizeof(DSP_NAME)+3]; char mixdev[sizeof(MIXER_NAME)+3]; if (access(DSP_NAME,F_OK)==0){ MSSndCard *card=oss_card_new(DSP_NAME,MIXER_NAME); ms_snd_card_manager_add_card(m,card); } for(i=0;i<10;i++){ snprintf(pcmdev,sizeof(pcmdev),"%s%i",DSP_NAME,i); snprintf(mixdev,sizeof(mixdev),"%s%i",MIXER_NAME,i); if (access(pcmdev,F_OK)==0){ MSSndCard *card=oss_card_new(pcmdev,mixdev); ms_snd_card_manager_add_card(m,card); } } }
static void alsa_card_detect(MSSndCardManager *m){ int i; for (i=-1;i<10;i++){ MSSndCard *card=alsa_card_new(i); if (card!=NULL) ms_snd_card_manager_add_card(m,card); } }
static void alsa_card_detect(MSSndCardManager *m){ int i; for (i=-1;i<10;i++){ MSSndCard *card=alsa_card_new(i); if (card!=NULL) ms_snd_card_manager_add_card(m,card); } atexit((void(*)(void))snd_config_update_free_global); }
static void pulse_card_detect(MSSndCardManager *m){ MSSndCard *card=ms_snd_card_new(&pulse_card_desc); if (card!=NULL){ card->name=ms_strdup("default"); card->capabilities=MS_SND_CARD_CAP_CAPTURE|MS_SND_CARD_CAP_PLAYBACK; ms_snd_card_manager_add_card(m,card); init_pulse_context(); } }
static void winsnd_detect(MSSndCardManager *m){ MMRESULT mr = NOERROR; unsigned int nInDevices = waveInGetNumDevs (); unsigned int item; char pcmdev[1024]; char mixdev[1024]; for (item = 0; item < nInDevices; item++) { WAVEINCAPS caps; mr = waveInGetDevCaps (item, &caps, sizeof (WAVEINCAPS)); if (mr == MMSYSERR_NOERROR) { MSSndCard *card; snprintf(pcmdev,sizeof(pcmdev),"%s",caps.szPname); snprintf(mixdev,sizeof(mixdev),"%s",caps.szPname); if (item == 0) { card=winsnd_card_new(pcmdev,mixdev, item-1); ms_snd_card_manager_add_card(m,card); } card=winsnd_card_new(pcmdev,mixdev, item); ms_snd_card_manager_add_card(m,card); } } #if 0 nInDevices = mixerGetNumDevs (); for (item = 0; item < nInDevices; item++) { MIXERCAPS caps; mr = mixerGetDevCaps (item, &caps, sizeof (MIXERCAPS)); if (mr == MMSYSERR_NOERROR) { snprintf(pcmdev,sizeof(pcmdev),"%s",caps.szPname); snprintf(mixdev,sizeof(mixdev),"%s",caps.szPname); } } #endif }
static void au_card_detect(MSSndCardManager * m) { OSStatus err; UInt32 slen; int count; Boolean writable; int i; writable = 0; slen = 0; err = AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &slen, &writable); if (err != kAudioHardwareNoError) { ms_error("get kAudioHardwarePropertyDevices error %ld", err); return; } AudioDeviceID devices[slen / sizeof(AudioDeviceID)]; err = AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &slen, devices); if (err != kAudioHardwareNoError) { ms_error("get kAudioHardwarePropertyDevices error %ld", err); return; } /*first, add Default AudioUnit does not work: why ? */ /*ms_snd_card_manager_add_card(m,ca_card_new("Default", "",-1, MS_SND_CARD_CAP_CAPTURE|MS_SND_CARD_CAP_PLAYBACK)); */ count = slen / sizeof(AudioDeviceID); for (i = 0; i < count; i++) { MSSndCard *card; char uidname[256]= {0},devname[256]= {0}; int card_capacity=0; if (check_card_capability(devices[i],FALSE,devname,uidname,sizeof(uidname))) { card_capacity|=MS_SND_CARD_CAP_PLAYBACK; } if (check_card_capability(devices[i],TRUE,devname,uidname,sizeof(uidname))) { card_capacity|=MS_SND_CARD_CAP_CAPTURE; } if (card_capacity) { card=ca_card_new(devname, uidname, devices[i], card_capacity); ms_snd_card_manager_add_card(m, card); } } }
static void add_or_update_card(MSSndCardManager *m, const char *name, int indev, int outdev, unsigned int capability){ MSSndCard *card; const MSList *elem=ms_snd_card_manager_get_list(m); for(;elem!=NULL;elem=elem->next){ card=(MSSndCard*)elem->data; if (strcmp(card->name,name)==0){ /*update already entered card */ WinSndCard *d=(WinSndCard*)card->data; card->capabilities|=capability; if (indev!=-1) d->in_devid=indev; if (outdev!=-1) d->out_devid=outdev; return; } } /* add this new card:*/ ms_snd_card_manager_add_card(m,winsndcard_new(name,indev,outdev,capability)); }
void msandroid_sound_detect(MSSndCardManager *m){ ms_debug("msandroid_sound_detect"); MSSndCard *card=msandroid_sound_card_new(); ms_snd_card_manager_add_card(m,card); }
int main(int argc, char *argv[]){ MSFilter *f1,*f2; MSSndCard *card_capture; MSSndCard *card_playback; MSTicker *ticker; MSFactory *factory; char *capt_card=NULL,*play_card=NULL; int rate = 8000; int i; #ifdef __linux const char *alsadev=NULL; #endif ortp_init(); ortp_set_log_level_mask(ORTP_LOG_DOMAIN, ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); factory = ms_factory_new_with_voip(); #ifndef _WIN32_WCE signal(SIGINT,stop); #endif #ifdef __linux alsadev=getenv("MS2_ALSADEV"); if (alsadev!=NULL){ ms_snd_card_manager_add_card( ms_factory_get_snd_card_manager(factory), ms_alsa_card_new_custom (alsadev,alsadev)); } #endif for(i=1;i<argc;++i){ if (strcmp(argv[i],"--help")==0){ print_usage(); }else if (strcmp(argv[i],"--card")==0){ i++; capt_card=play_card=argv[i]; }else if (strcmp(argv[i],"--capt-card")==0){ i++; capt_card=argv[i]; }else if (strcmp(argv[i],"--play-card")==0){ i++; play_card=argv[i]; } } if (capt_card) card_capture = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(factory),capt_card); else card_capture = ms_snd_card_manager_get_default_capture_card(ms_factory_get_snd_card_manager(factory)); if (play_card) card_playback = ms_snd_card_manager_get_card(ms_factory_get_snd_card_manager(factory),play_card); else card_playback = ms_snd_card_manager_get_default_playback_card(ms_factory_get_snd_card_manager(factory)); if (card_playback==NULL || card_capture==NULL){ ms_error("No card."); return -1; } f1=ms_snd_card_create_reader(card_capture); f2=ms_snd_card_create_writer(card_playback); ms_filter_call_method (f1, MS_FILTER_SET_SAMPLE_RATE, &rate); ms_filter_call_method (f2, MS_FILTER_SET_SAMPLE_RATE, &rate); ticker=ms_ticker_new(); ms_filter_link(f1,0,f2,0); ms_ticker_attach(ticker,f1); #ifndef _WIN32_WCE while(run) ms_sleep(1); #else ms_sleep(5); #endif ms_ticker_detach(ticker,f1); ms_ticker_destroy(ticker); ms_filter_unlink(f1,0,f2,0); ms_filter_destroy(f1); ms_filter_destroy(f2); ms_factory_destroy(factory); return 0; }
static void aqcard_detect(MSSndCardManager * m) { #ifndef TARGET_OS_IPHONE OSStatus err; UInt32 slen; int count; Boolean writable; int i; writable = 0; slen = 0; err = AudioHardwareGetPropertyInfo(kAudioHardwarePropertyDevices, &slen, &writable); if (err != kAudioHardwareNoError) { ms_error("get kAudioHardwarePropertyDevices error %ld", err); return; } AudioDeviceID V[slen / sizeof(AudioDeviceID)]; err = AudioHardwareGetProperty(kAudioHardwarePropertyDevices, &slen, V); if (err != kAudioHardwareNoError) { ms_error("get kAudioHardwarePropertyDevices error %ld", err); return; } count = slen / sizeof(AudioDeviceID); for (i = 0; i < count; i++) { char devname_in[256]; char uidname_in[256]; char devname_out[256]; char uidname_out[256]; int cap = 0; /* OUTPUT CARDS */ slen = 256; err = AudioDeviceGetProperty(V[i], 0, FALSE, kAudioDevicePropertyDeviceName, &slen, devname_out); if (err != kAudioHardwareNoError) { ms_error("get kAudioDevicePropertyDeviceName error %ld", err); continue; } slen = strlen(devname_out); /* trim whitespace */ while ((slen > 0) && (devname_out[slen - 1] == ' ')) { slen--; } devname_out[slen] = '\0'; err = AudioDeviceGetPropertyInfo(V[i], 0, FALSE, kAudioDevicePropertyStreamConfiguration, &slen, &writable); if (err != kAudioHardwareNoError) { ms_error("get kAudioDevicePropertyDeviceName error %ld", err); continue; } AudioBufferList *buflist = ms_malloc(slen); if (buflist == NULL) { ms_error("alloc AudioBufferList %ld", err); continue; } err = AudioDeviceGetProperty(V[i], 0, FALSE, kAudioDevicePropertyStreamConfiguration, &slen, buflist); if (err != kAudioHardwareNoError) { ms_error("get kAudioDevicePropertyDeviceName error %ld", err); ms_free(buflist); continue; } UInt32 j; for (j = 0; j < buflist->mNumberBuffers; j++) { if (buflist->mBuffers[j].mNumberChannels > 0) { cap = MS_SND_CARD_CAP_PLAYBACK; break; } } ms_free(buflist); /* INPUT CARDS */ slen = 256; err = AudioDeviceGetProperty(V[i], 0, TRUE, kAudioDevicePropertyDeviceName, &slen, devname_in); if (err != kAudioHardwareNoError) { ms_error("get kAudioDevicePropertyDeviceName error %ld", err); continue; } slen = strlen(devname_in); /* trim whitespace */ while ((slen > 0) && (devname_in[slen - 1] == ' ')) { slen--; } devname_in[slen] = '\0'; err = AudioDeviceGetPropertyInfo(V[i], 0, TRUE, kAudioDevicePropertyStreamConfiguration, &slen, &writable); if (err != kAudioHardwareNoError) { ms_error("get kAudioDevicePropertyDeviceName error %ld", err); continue; } err = AudioDeviceGetPropertyInfo(V[i], 0, TRUE, kAudioDevicePropertyStreamConfiguration, &slen, &writable); if (err != kAudioHardwareNoError) { ms_error("get kAudioDevicePropertyDeviceName error %ld", err); continue; } buflist = ms_malloc(slen); if (buflist == NULL) { ms_error("alloc error %ld", err); continue; } err = AudioDeviceGetProperty(V[i], 0, TRUE, kAudioDevicePropertyStreamConfiguration, &slen, buflist); if (err != kAudioHardwareNoError) { ms_error("get kAudioDevicePropertyDeviceName error %ld", err); ms_free(buflist); continue; } for (j = 0; j < buflist->mNumberBuffers; j++) { if (buflist->mBuffers[j].mNumberChannels > 0) { cap |= MS_SND_CARD_CAP_CAPTURE; break; } } ms_free(buflist); if (cap & MS_SND_CARD_CAP_PLAYBACK) { CFStringRef dUID_out; dUID_out = NULL; slen = sizeof(CFStringRef); err = AudioDeviceGetProperty(V[i], 0, false, kAudioDevicePropertyDeviceUID, &slen, &dUID_out); if (err != kAudioHardwareNoError) { ms_error("get kAudioHardwarePropertyDevices error %ld", err); continue; } CFStringGetCString(dUID_out, uidname_out, 256, CFStringGetSystemEncoding()); ms_message("AQ: devname_out:%s uidname_out:%s", devname_out, uidname_out); AudioStreamBasicDescription devicewriteFormat; slen = sizeof(devicewriteFormat); err = AudioDeviceGetProperty(V[i], 0, false, kAudioDevicePropertyStreamFormat, &slen, &devicewriteFormat); if (err == kAudioHardwareNoError) { show_format("output device", &devicewriteFormat); } MSSndCard *card = aq_card_new(devname_out, dUID_out, NULL, &devicewriteFormat, MS_SND_CARD_CAP_PLAYBACK); ms_snd_card_manager_add_card(m, card); } if (cap & MS_SND_CARD_CAP_CAPTURE) { CFStringRef dUID_in; dUID_in = NULL; slen = sizeof(CFStringRef); err = AudioDeviceGetProperty(V[i], 0, true, kAudioDevicePropertyDeviceUID, &slen, &dUID_in); if (err != kAudioHardwareNoError) { ms_error("get kAudioHardwarePropertyDevices error %ld", err); continue; } CFStringGetCString(dUID_in, uidname_in, 256, CFStringGetSystemEncoding()); ms_message("AQ: devname_in:%s uidname_in:%s", devname_in, uidname_in); AudioStreamBasicDescription devicereadFormat; slen = sizeof(devicereadFormat); err = AudioDeviceGetProperty(V[i], 0, true, kAudioDevicePropertyStreamFormat, &slen, &devicereadFormat); if (err == kAudioHardwareNoError) { show_format("input device", &devicereadFormat); } MSSndCard *card = aq_card_new(devname_in, dUID_in, &devicereadFormat, NULL, MS_SND_CARD_CAP_CAPTURE); ms_snd_card_manager_add_card(m, card); } } #else AudioStreamBasicDescription deviceFormat; memset(&deviceFormat, 0, sizeof(AudioStreamBasicDescription)); MSSndCard *card = aq_card_new("Audio Queue Device", NULL, &deviceFormat, &deviceFormat, MS_SND_CARD_CAP_PLAYBACK|MS_SND_CARD_CAP_CAPTURE); ms_snd_card_manager_add_card(m, card); #endif }
int main(int argc, char *argv[]){ MSFilter *f1,*f2,*g729en,*g729de; MSSndCard *card_capture; MSSndCard *card_playback; MSTicker *ticker; char *capt_card=NULL,*play_card=NULL; int rate = 8000; int loop = -2; int i; const char *name="test.wav"; #ifdef __linux const char *alsadev=NULL; #endif ortp_init(); ortp_set_log_level_mask(ORTP_MESSAGE|ORTP_WARNING|ORTP_ERROR|ORTP_FATAL); ms_init(); #ifndef _WIN32_WCE signal(SIGINT,stop); #endif #ifdef __linux alsadev=getenv("MS2_ALSADEV"); if (alsadev!=NULL){ ms_snd_card_manager_add_card(ms_snd_card_manager_get(), ms_alsa_card_new_custom (alsadev,alsadev)); } #endif for(i=1;i<argc;++i){ if (strcmp(argv[i],"--help")==0){ print_usage(); }else if (strcmp(argv[i],"--card")==0){ i++; capt_card=play_card=argv[i]; }else if (strcmp(argv[i],"--capt-card")==0){ i++; capt_card=argv[i]; }else if (strcmp(argv[i],"--file-name")==0){ i++; name=argv[i]; }else if (strcmp(argv[i],"--play-card")==0){ i++; play_card=argv[i]; } } if (capt_card) card_capture = ms_snd_card_manager_get_card(ms_snd_card_manager_get(),capt_card); else card_capture = ms_snd_card_manager_get_default_capture_card(ms_snd_card_manager_get()); if (play_card) card_playback = ms_snd_card_manager_get_card(ms_snd_card_manager_get(),play_card); else card_playback = ms_snd_card_manager_get_default_playback_card(ms_snd_card_manager_get()); if (card_playback==NULL || card_capture==NULL){ ms_error("No card."); return -1; } f1=ms_filter_new(MS_FILE_PLAYER_ID); f2=ms_snd_card_create_writer(card_playback); g729de=ms_filter_create_decoder("G729"); ms_filter_call_method (f1, MS_FILTER_SET_SAMPLE_RATE, &rate); ms_filter_call_method (f2, MS_FILTER_SET_SAMPLE_RATE, &rate); ms_filter_call_method(g729de, MS_FILTER_SET_SAMPLE_RATE, &rate); ms_filter_call_method_noarg(f1,MS_FILE_PLAYER_CLOSE); ms_filter_call_method(f1,MS_FILE_PLAYER_OPEN,(void*)name); ms_filter_call_method_noarg(f1,MS_FILE_PLAYER_START); ms_filter_call_method(f1,MS_FILE_PLAYER_LOOP,&loop); ticker=ms_ticker_new(); ms_filter_link(f1,0,g729de,0); ms_filter_link(g729de,0,f2,0); ms_ticker_attach(ticker,f1); #ifndef _WIN32_WCE while(run) ms_sleep(1); #else ms_sleep(5); #endif ms_ticker_detach(ticker,f1); ms_ticker_destroy(ticker); ms_filter_unlink(g729de,0,f2,0); ms_filter_unlink(f1,0,g729de,0); ms_filter_destroy(f1); ms_filter_destroy(g729de); ms_filter_destroy(f2); return 0; }