コード例 #1
0
ファイル: main.c プロジェクト: huairen/gorilla-audio
int main(int argc, char** argv)
{
  ga_Format fmt;
  ga_Device* dev;
  gc_int16* buf;
  gc_int32 numSamples;
  gc_int32 sampleSize;
  gc_int32 numToQueue;
  gc_int32 i;
  gc_int16 sample;
  gc_float32 pan = 1.0f;
  gc_float32 t = 0.0f;

  /* Initialize library + device */
  gc_initialize(0);
  memset(&fmt, 0, sizeof(ga_Format));
  fmt.bitsPerSample = 16;
  fmt.numChannels = 2;
  fmt.sampleRate = 44100;
  numSamples = 2048;
  sampleSize = ga_format_sampleSize(&fmt);
  dev = ga_device_open(GA_DEVICE_TYPE_DEFAULT, 2, 2048, &fmt);
  if(!dev)
    return 1;

  /* Allocate buffer */
  buf = (gc_int16*)malloc(numSamples * sampleSize);

  /* Infinite mix loop */
  while(1)
  {
    numToQueue = ga_device_check(dev);
    while(numToQueue--)
    {
      for(i = 0; i < numSamples * 2; i = i + 2)
      {
        sample = (gc_int16)(sin(t) * 32768);
        sample = (sample > -32768 ? (sample < 32767 ? sample : 32767) : -32768);
        pan = (gc_float32)sin(t / 300) / 2.0f + 0.5f;
        buf[i] = (gc_int16)(sample * pan);
        buf[i + 1] = (gc_int16)(sample * (1.0f - pan));
        t = t + 0.03f;
        if(t > 3.14159265f)
          t -= 3.14159265f;
      }
      ga_device_queue(dev, (char*)buf);
    }
  }

  /* Clean up device + library */
  ga_device_close(dev);
  gc_shutdown();

  /* Free buffer */
  free(buf);

  return 0;
}
コード例 #2
0
ファイル: gau.c プロジェクト: dazzlex27/S3DGE
gau_Manager* gau_manager_create_custom(gc_int32 in_devType,
                                       gc_int32 in_threadPolicy,
                                       gc_int32 in_numBuffers,
                                       gc_int32 in_bufferSamples)
{
  gau_Manager* ret = gcX_ops->allocFunc(sizeof(gau_Manager));

  assert(in_threadPolicy == GAU_THREAD_POLICY_SINGLE ||
         in_threadPolicy == GAU_THREAD_POLICY_MULTI);
  assert(in_bufferSamples > 128);
  assert(in_numBuffers >= 2);

  /* Open device */
  memset(&ret->format, 0, sizeof(ga_Format));
  ret->format.bitsPerSample = 16;
  ret->format.numChannels = 2;
  ret->format.sampleRate = 44100;
  ret->device = ga_device_open(in_devType, in_numBuffers, in_bufferSamples, &ret->format);
  assert(ret->device);

  /* Initialize mixer */
  ret->mixer = ga_mixer_create(&ret->format, in_bufferSamples);
  ret->streamMgr = ga_stream_manager_create();
  ret->sampleSize = ga_format_sampleSize(&ret->format);
  ret->mixBuffer = (gc_int16*)gcX_ops->allocFunc(ret->mixer->numSamples * ret->sampleSize);

  /* Create and run mixer and stream threads */
  ret->threadPolicy = in_threadPolicy;
  ret->killThreads = 0;
  if(ret->threadPolicy == GAU_THREAD_POLICY_MULTI)
  {
    ret->mixThread = gc_thread_create(gauX_mixThreadFunc, ret, GC_THREAD_PRIORITY_HIGH, 64 * 1024);
    ret->streamThread = gc_thread_create(gauX_streamThreadFunc, ret, GC_THREAD_PRIORITY_HIGH, 64 * 1024);
    gc_thread_run(ret->mixThread);
    gc_thread_run(ret->streamThread);
  }
  else
  {
    ret->mixThread = 0;
    ret->streamThread = 0;
  }

  return ret;
}