Ejemplo n.º 1
0
bool RDHPIRecordStream::GetStream()
{
  HW16 hpi_err;
  char hpi_text[100];

  if((hpi_err=
      HPI_InStreamOpen(hpi_subsys,card_number,stream_number,&hpi_stream))!=0) {
    if(debug) {
      HPI_GetErrorText(hpi_err,hpi_text);
      fprintf(stderr,"*** HPI Error: %s ***\n",hpi_text);
    }
    return false;
  }
  return true;
}
Ejemplo n.º 2
0
bool RDHPIRecordStream::formatSupported(RDWaveFile::Format format)
{
  HPI_FORMAT hformat;
  HPI_HISTREAM histream;
  bool found=false;

  if(card_number<0) {
    return false;
  }
  if(format==RDWaveFile::Vorbis) {
#ifdef HAVE_VORBIS
    return true;
#endif  // HAVE_VORBIS
    return false;
  }
  if(!is_open) {
    for(int i=0;i<sound_card->getCardInputStreams(card_number);i++) {
      if(HPI_InStreamOpen(hpi_subsys,card_number,i,&histream)==0) {
	found=true;
	break;
      }
    }
    if(!found) {
      return false;
    }
  }
  else {
    histream=hpi_stream;
  }
  switch(format) {
      case RDWaveFile::Pcm8:
	HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_PCM8_UNSIGNED,
			 getSamplesPerSec(),getHeadBitRate(),0);
	state=HPI_InStreamQueryFormat(hpi_subsys,histream,&hformat);
	break;

      case RDWaveFile::Pcm16:
	HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_PCM16_SIGNED,
			 getSamplesPerSec(),getHeadBitRate(),0);
	state=HPI_InStreamQueryFormat(hpi_subsys,histream,&hformat);
	break;

      case RDWaveFile::MpegL1:
	HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_MPEG_L1,
			 getSamplesPerSec(),getHeadBitRate(),0);
	state=HPI_InStreamQueryFormat(hpi_subsys,histream,&hformat);
	break;

      case RDWaveFile::MpegL2:
	HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_MPEG_L2,
			 getSamplesPerSec(),getHeadBitRate(),0);
	state=HPI_InStreamQueryFormat(hpi_subsys,histream,&hformat);
	break;

      case RDWaveFile::MpegL3:
	HPI_FormatCreate(&hformat,getChannels(),HPI_FORMAT_MPEG_L3,
			 getSamplesPerSec(),getHeadBitRate(),0);
	state=HPI_InStreamQueryFormat(hpi_subsys,histream,&hformat);
	break;

      default:
	state=1;
	break;
  }
  if(!is_open) {
    HPI_InStreamClose(hpi_subsys,histream);
  }
  if(state!=0) {
    return false;
  }
  return true;
}
Ejemplo n.º 3
0
bool AsiHpiDevice::start(QString *err)
{
#ifdef ASIHPI
    hpi_err_t herr;
    struct hpi_format fmt;
    uint16_t state=0;
    uint32_t buffer_size=0;
    uint32_t data_recorded=0;
    uint32_t samples_recorded=0;
    uint32_t aux_data_recorded=0;

    hpi_handle_t handle;
    short lvls[HPI_MAX_CHANNELS];

    //
    // Open Mixer
    //
    if(HpiLog(HPI_MixerOpen(NULL,asihpi_adapter_index,&asihpi_mixer))==0) {

        //
        // Input Gain
        //
        if(HPI_MixerGetControl(NULL,asihpi_mixer,
                               HPI_SOURCENODE_LINEIN,asihpi_input_index,
                               HPI_DESTNODE_NONE,0,HPI_CONTROL_VOLUME,
                               &handle)==0) {
            for(unsigned i=0; i<HPI_MAX_CHANNELS; i++) {
                lvls[i]=asihpi_input_gain*100;
            }
            HpiLog(HPI_VolumeSetGain(NULL,handle,lvls));
        }

        //
        // Input Source
        //
        if(HpiLog(HPI_MixerGetControl(NULL,asihpi_mixer,0,0,
                                      HPI_DESTNODE_ISTREAM,asihpi_input_index,
                                      HPI_CONTROL_MULTIPLEXER,&handle))==0) {
            HpiLog(HPI_Multiplexer_SetSource(NULL,handle,asihpi_input_source,
                                             asihpi_input_index));
        }

        //
        // Input Type
        //
        if((HpiLog(HPI_MixerGetControl(NULL,asihpi_mixer,
                                       HPI_SOURCENODE_LINEIN,asihpi_input_index,
                                       HPI_DESTNODE_NONE,0,
                                       HPI_CONTROL_MULTIPLEXER,&handle)))==0) {
            HpiLog(HPI_Multiplexer_SetSource(NULL,handle,asihpi_input_type,
                                             asihpi_input_index));
        }

        //
        // Channel Mode
        //
        if((HpiLog(HPI_MixerGetControl(NULL,asihpi_mixer,0,0,
                                       HPI_DESTNODE_ISTREAM,asihpi_input_index,
                                       HPI_CONTROL_CHANNEL_MODE,
                                       &handle)))==0) {
            HpiLog(HPI_ChannelModeSet(NULL,handle,asihpi_channel_mode));
        }

        //
        // Input Meter
        //
        if((HpiLog(HPI_MixerGetControl(NULL,asihpi_mixer,0,0,HPI_DESTNODE_ISTREAM,
                                       asihpi_input_index,HPI_CONTROL_METER,&asihpi_input_meter)))==0) {
            asihpi_meter_timer->start(100);
        }
    }

    //
    // Open Input Stream
    //
    if((herr=HPI_InStreamOpen(NULL,asihpi_adapter_index,asihpi_input_index,&asihpi_input_stream))!=0) {
        *err=tr("HPI error")+": "+hpi_strerror(herr);
        return false;
    }

    //
    // Find Supported Format
    //
    MakeFormat(&fmt,HPI_FORMAT_PCM32_FLOAT);
    if((herr=HPI_InStreamQueryFormat(NULL,asihpi_input_stream,&fmt))!=0) {
        *err=tr("HPI error")+": "+hpi_strerror(herr);
        return false;
    }

    //
    // Set Format
    //
    if((herr=HPI_InStreamSetFormat(NULL,asihpi_input_stream,&fmt))!=0) {
        *err=tr("HPI error")+": "+hpi_strerror(herr);
        return false;
    }

    //
    // Start input stream
    //
    if((herr=HPI_InStreamStart(NULL,asihpi_input_stream))!=0) {
        *err=tr("HPI error")+": "+hpi_strerror(herr);
        return false;
    }

    //
    // Create PCM buffer
    //
    if((herr=HPI_InStreamGetInfoEx(NULL,asihpi_input_stream,&state,&buffer_size,
                                   &data_recorded,&samples_recorded,
                                   &aux_data_recorded))!=0) {
        *err=tr("HPI error")+": "+hpi_strerror(herr);
        return false;
    }
    asihpi_pcm_buffer=new uint8_t[buffer_size];

    asihpi_read_timer->start(ASIHPI_READ_INTERVAL);

    return true;
#else
    return false;
#endif  // ASIHPI
}