Exemplo n.º 1
0
PcmDevice *
openPcmDevice (int errorLevel, const char *device) {
#ifdef HAVE_HPUX_AUDIO
  PcmDevice *pcm;
  if ((pcm = malloc(sizeof(*pcm)))) {
    long status;
    AudioAttrMask mask = 0;
    AudioAttributes attributes;
    SSPlayParams parameters;
  
    if (!audioServer) {
      char *server = "";
      audioServer = AOpenAudio(server, &status);
      if (status != AENoError) {
        logAudioError(errorLevel, status, "AOpenAudio");
        audioServer = NULL;
        goto noServer;
      }
      logMessage(LOG_DEBUG, "connected to audio server: %s", AAudioString(audioServer));
  
      ASetCloseDownMode(audioServer, AKeepTransactions, &status);
      if (status != AENoError) {
        logAudioError(errorLevel, status, "ASetCloseDownMode");
      }
    }
  
    memset(&attributes, 0, sizeof(attributes));
  
    parameters.gain_matrix = *ASimplePlayer(audioServer);
    parameters.play_volume = AUnityGain;
    parameters.priority = APriorityUrgent;
    parameters.event_mask = 0;
  
    pcm->transaction = APlaySStream(audioServer, mask, &attributes, &parameters, &pcm->stream, &status);
    if (status == AENoError) {
      if ((pcm->socket = socket(AF_INET, SOCK_STREAM, 0)) != -1) {
        if (connect(pcm->socket, (struct sockaddr *)&pcm->stream.tcp_sockaddr, sizeof(pcm->stream.tcp_sockaddr)) != -1) {
          return pcm;
        } else {
          logSystemError("PCM socket connection");
        }
        close(pcm->socket);
      } else {
        logSystemError("PCM socket creation");
      }
    } else {
      logAudioError(errorLevel, status, "APlaySStream");
    }

  noServer:
    free(pcm);
  } else {
    logSystemError("PCM device allocation");
  }
#endif /* HAVE_HPUX_AUDIO */
  return NULL;
}
Exemplo n.º 2
0
Arquivo: alib.c Projeto: 5py/libmpg123
/* return on error leaves stuff dirty here... */
static int open_alib(audio_output_t *ao)
{
	AudioAttributes Attribs;
	AudioAttrMask   AttribsMask;
	AGainEntry      gainEntry[4];
	SSPlayParams    playParams;
	SStream	  audioStream;
	AErrorHandler   prevHandler;
	char		  server[1];
	int		  i;
	long            status;
	
	if (audioServer) {
		error("openAudio: audio already open");
		return -1;
	}
	
	prevHandler = ASetErrorHandler(myHandler);
	
	server[0] = '\0';
	audioServer = AOpenAudio( server, NULL );
	if (audioServer==NULL) {
		error("Error: could not open audio\n");
		return -1;
	}
	
	ao->fn = socket( AF_INET, SOCK_STREAM, 0 );
	if(ao->fn<0) {
		error("Socket creation failed");
		return -1;
	}
	
	Attribs.type = ATSampled;
	Attribs.attr.sampled_attr.sampling_rate = ao->rate;
	Attribs.attr.sampled_attr.channels	  = ao->channels;
	Attribs.attr.sampled_attr.data_format	  = ADFLin16;
	AttribsMask = ASSamplingRateMask | ASChannelsMask  | ASDataFormatMask;
	
	gainEntry[0].gain = AUnityGain;
	gainEntry[0].u.o.out_ch  = AOCTMono;
	gainEntry[0].u.o.out_dst = AODTDefaultOutput;
	
	playParams.gain_matrix.type = AGMTOutput;  /* gain matrix */
	playParams.gain_matrix.num_entries = 1;
	playParams.gain_matrix.gain_entries = gainEntry;
	playParams.play_volume = AUnityGain;       /* play volume */
	playParams.priority = APriorityNormal;     /* normal priority */
	playParams.event_mask = 0;                 /* don't solicit any events */
	
	xid=APlaySStream(audioServer,AttribsMask,&Attribs,
	&playParams,&audioStream,NULL);
	
	status=connect(ao->fn,
	(struct sockaddr *) &audioStream.tcp_sockaddr,
	sizeof(struct sockaddr_in) );
	if (status<0) {
		error("Connect failed");
		return -1;
	}
	
	i=-1;
	tcpProtocolEntry=getprotobyname("tcp");
	setsockopt(ao->fn,tcpProtocolEntry->p_proto,TCP_NODELAY,&i,sizeof(i));
	
	return ao->fn;
}