示例#1
0
文件: runningtest.c 项目: JSTLUV/ndt
/**
 * Get a description of the currently running test
 * @return descriptive name for the currently running test
 */
char *get_currenttestdesc() {
  enum TEST_ID currenttestId = NONE;
  char currenttestdesc[TEST_NAME_DESC_SIZE];
  switch (getCurrentTest()) {
    case TEST_MID:
      currenttestId = MIDDLEBOX;
      break;
    case TEST_C2S:
      currenttestId = C2S;
      break;
    case TEST_S2C:
      currenttestId = S2C;
      break;
    case TEST_SFW:
      currenttestId = SFW;
      break;
    case TEST_META:
      currenttestId = META;
      break;
    case TEST_NONE:
    default:
      currenttestId = NONE;
      break;
  }
  return get_testnamedesc(currenttestId, currenttestdesc);
}
示例#2
0
// ============================================================================================
void	TestLauncher::run()
{
	bool res = false;
	int bsize = audioDeviceSettings->getBufferSize();
	unsigned int deviceChan = audioDeviceSettings->getOutputChannels();
	int nbuff;
	int remsamples;
	double progressMax;

	releaseAudioData();

	for (int i = 0; i<stimCount; i++)
	{
                if (threadShouldExit())
                    break;
		
			/* Create input stream for the audio file */
			File af(getCurrentTest()->soundFiles[i]);
			wavReader = audioFormatManager.createReaderFor( af );

			dbgOut( L"Loading file " + af.getFullPathName() ); 	

			if (wavReader == NULL)
			{
				lastError = L"Unable to create reader for  " + getCurrentTest()->soundFiles[i];
				return ;
	
			}

			/* get length and number of channels */
			if (wavReader->numChannels > deviceChan)
			{
				lastError = L"The number of audio channels in stimuli files exceeds available device outputs.";
				return ;
			}

			chanCount = wavReader->numChannels;
			samplesCount = static_cast<unsigned int> ( wavReader->lengthInSamples );
			
			/* adjust to the integer number of audio buffers */
			nbuff = div(samplesCount,bsize).quot;
			remsamples = div(samplesCount,bsize).rem;
			
			if (remsamples > 0)
			{
				samplesCount = bsize*(nbuff+1);
				progressMax = stimCount*(nbuff+1);
			}
			else
			{
				progressMax = stimCount*nbuff;
			}
				

			/* create audio data buffers */
			currentData = new int* [chanCount];
			if (currentData == NULL)
			{
				lastError = L"Unable to allocate " + String(2*chanCount*sizeof(float*) + L"b of memory." );
				return ;
			}

			/* create an array of pointers to data buffers */
			for (int ch = 0; ch < chanCount; ch++)
			{
				currentData[ch] = new int[samplesCount];
				if (currentData[ch] == NULL)
				{
					lastError = L"Unable to allocate " + String(samplesCount*sizeof(float*) + L"b of memory." );
					/* clean up (data is massive) */
					for (int k = 0; k<ch; k++)
					{
						delete [] currentData[k];
					}
					delete [] currentData;
					releaseAudioData();
					return ;
				}
				/* clear memory */
				//zeromem(currentData[ch], sizeof(int)*samplesCount);
			}
			/* add array to audioStimData */
			audioStimData.add(currentData);

			/* read file in memory */			
			for (int k=0; k<nbuff; k++)
			{
				res = wavReader->readSamples( currentData, chanCount, bsize*k, bsize*k, bsize);
				if (!res)
				{
					releaseAudioData();
					lastError = L"Unable to read data from file " + getCurrentTest()->soundFiles[i];
					return ;
				}

				/* update progress bar */
				setProgress((i*nbuff + k)/progressMax);
			}
			/* read the last buffer and zero pad */
			if (remsamples > 0)
			{
				/* zero-padding is done by AudioFormatReader */
				res = wavReader->readSamples( currentData, chanCount, bsize*nbuff, bsize*nbuff, bsize);
				if (!res)
				{
					releaseAudioData();
					lastError = L"Unable to read data from file " + getCurrentTest()->soundFiles[i];
					return ;
				}
			}

			/* clean up */
			delete wavReader;
	}

	/*for (int k = 0; k<chanCount; k++)
	{		
		debugBuffer(getAudioData(0,k,48000), bsize*5, L"audio") + String(k));
	}*/

	setProgress(1.0);
	wait(500);
}