mirror of
				https://github.com/cookiengineer/audacity
				synced 2025-10-31 14:13:50 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			94 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			94 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include <stdio.h>
 | |
| 
 | |
| #include "portmixer.h"
 | |
| #include "portaudio.h"
 | |
| 
 | |
| static int DummyCallbackFunc(const void *input, void *output,
 | |
|                              unsigned long frameCount,
 | |
|                              const PaStreamCallbackTimeInfo* timeInfo,
 | |
|                              PaStreamCallbackFlags statusFlags, void *userData)
 | |
| {
 | |
|    return 0;
 | |
| }
 | |
| 
 | |
| int main(int argc, char **argv)
 | |
| {
 | |
|    int num_mixers;
 | |
|    int i;
 | |
|    PaError error;
 | |
|    PaStream *stream;
 | |
|    PaStreamParameters inputParameters;
 | |
|    PaStreamParameters outputParameters;
 | |
|    int recDeviceNum;
 | |
|    int playDeviceNum;
 | |
|    int inputChannels = 2;
 | |
| 
 | |
|    recDeviceNum = Pa_GetDefaultInputDevice();
 | |
|    playDeviceNum = Pa_GetDefaultOutputDevice();
 | |
| 
 | |
|    inputParameters.device = recDeviceNum;
 | |
|    inputParameters.channelCount = inputChannels;
 | |
|    inputParameters.sampleFormat = paFloat32;
 | |
|    inputParameters.suggestedLatency = 0;
 | |
|    inputParameters.hostApiSpecificStreamInfo = NULL;
 | |
| 
 | |
|    outputParameters.device = paNoDevice;
 | |
|    outputParameters.channelCount = 0;
 | |
|    outputParameters.sampleFormat = paFloat32;
 | |
|    outputParameters.suggestedLatency = 0;
 | |
|    outputParameters.hostApiSpecificStreamInfo = NULL;
 | |
| 
 | |
|    error = Pa_OpenStream(&stream, &inputParameters, &outputParameters, 44101,
 | |
|                          512, paClipOff | paDitherOff, DummyCallbackFunc, NULL);
 | |
| 
 | |
|    if (error) {
 | |
|       printf("PortAudio error %d: %s\n", error,
 | |
|              Pa_GetErrorText(error));
 | |
|       return -1;
 | |
|    }
 | |
|    
 | |
|    num_mixers = Px_GetNumMixers(stream);
 | |
|    printf("Number of mixers: %d\n", num_mixers);
 | |
|    for(i=0; i<num_mixers; i++) {
 | |
|       PxMixer *mixer;
 | |
|       int num;
 | |
|       int j;
 | |
| 
 | |
|       printf("Mixer %d: %s\n", i, Px_GetMixerName(stream, i));
 | |
|       mixer = Px_OpenMixer(stream, i);
 | |
|       if (!mixer) {
 | |
|          printf("  Could not open mixer!\n");
 | |
|          continue;
 | |
|       }
 | |
|       
 | |
|       printf("  Master volume: %.2f\n", Px_GetMasterVolume(mixer));
 | |
|       printf("  PCM output volume: %.2f\n", Px_GetPCMOutputVolume(mixer));
 | |
| 
 | |
|       num = Px_GetNumOutputVolumes(mixer);
 | |
|       printf("  Num outputs: %d\n", num);
 | |
|       for(j=0; j<num; j++) {
 | |
|          printf("    Output %d (%s): %.2f\n",
 | |
|                 j,
 | |
|                 Px_GetOutputVolumeName(mixer, j),
 | |
|                 Px_GetOutputVolume(mixer, j));
 | |
|       }
 | |
| 
 | |
|       num = Px_GetNumInputSources(mixer);
 | |
|       printf("  Num input sources: %d\n", num);
 | |
|       for(j=0; j<num; j++) {
 | |
|          printf("    Input %d (%s) %s\n",
 | |
|                 j,
 | |
|                 Px_GetInputSourceName(mixer, j),
 | |
|                 (Px_GetCurrentInputSource(mixer)==j?
 | |
|                  "SELECTED": ""));
 | |
|       }
 | |
|       printf("  Input volume: %.2f\n", Px_GetInputVolume(mixer));
 | |
| 
 | |
|       Px_CloseMixer(mixer);
 | |
|    }
 | |
| 
 | |
|    Pa_CloseStream(stream);
 | |
| 
 | |
|    return 0;
 | |
| }
 |