コード例 #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
static gc_int32 gauX_mixThreadFunc(void* in_context)
{
  gau_Manager* ctx = (gau_Manager*)in_context;
  ga_Mixer* m = ctx->mixer;
  gc_int32 sampleSize = ga_format_sampleSize(&ctx->format);
  while(!ctx->killThreads)
  {
    gc_int32 numToQueue = ga_device_check(ctx->device);
    while(numToQueue--)
    {
      ga_mixer_mix(m, ctx->mixBuffer);
      ga_device_queue(ctx->device, ctx->mixBuffer);
    }
    gc_thread_sleep(5);
  }
  return 0;
}
コード例 #3
0
ファイル: gau.c プロジェクト: dazzlex27/S3DGE
void gau_manager_update(gau_Manager* in_mgr)
{
  if(in_mgr->threadPolicy == GAU_THREAD_POLICY_SINGLE)
  {
    gc_int16* buf = in_mgr->mixBuffer;
    ga_Mixer* mixer = in_mgr->mixer;
    ga_Device* dev = in_mgr->device;
    ga_Format* fmt = &in_mgr->format;
    gc_int32 numToQueue = ga_device_check(dev);
    while(numToQueue--)
    {
      ga_mixer_mix(mixer, buf);
      ga_device_queue(dev, buf);
    }
    ga_stream_manager_buffer(in_mgr->streamMgr);
  }
  ga_mixer_dispatch(in_mgr->mixer);
}