コード例 #1
0
ファイル: audiomac.c プロジェクト: ruthmagnus/audacity
int audio_flush(snd_type snd)
{
  buffer_state *data = (buffer_state *)snd->u.audio.descriptor;

  if (data->recording) {
    SPBStopRecording(data->refnum);
  }
  else {
    SCStatus status;
    OSErr err;

    data->flushing = 1;
    
    /* Start playback if we haven't already */
/*
    if (data->firstTime) {
      data->header.numFrames = data->curSize / data->frameSize;
      
      SndDoCommand(data->chan, &data->playCmd, true);
      
      data->firstTime = 0;
    }

    do {
      err = SndChannelStatus(data->chan, sizeof(status), &status);
    } while (!err && status.scChannelBusy);
*/

    data->flushing = 0;

  }

  return SND_SUCCESS;
}
コード例 #2
0
static PyObject *Snd_SPBStopRecording(PyObject *_self, PyObject *_args)
{
	PyObject *_res = NULL;
	OSErr _err;
	long inRefNum;
	if (!PyArg_ParseTuple(_args, "l",
	                      &inRefNum))
		return NULL;
	_err = SPBStopRecording(inRefNum);
	if (_err != noErr) return PyMac_Error(_err);
	Py_INCREF(Py_None);
	_res = Py_None;
	return _res;
}
コード例 #3
0
ファイル: audiomac.c プロジェクト: ruthmagnus/audacity
int audio_close(snd_node *n)
{
  buffer_state *data = (buffer_state *)n->u.audio.descriptor;
  OSErr err;
  
  if (data->recording) {
    SPBStopRecording(data->refnum);
    SPBCloseDevice(data->refnum);
    
    if (data->starved) {
      data->starved = 0;
    }
    
    #ifndef TARGET_CARBON
    DisposeRoutineDescriptor(data->params.interruptRoutine);
    #endif

    free((void *)data->recBuffer);
  }
  else {
    data->finished = 1;
    
    SndCallBackUPP callBack = data->chan->callBack;
    
    err = SndDisposeChannel(data->chan,
                            true         // quiets the channel now
                            );

    #ifndef TARGET_CARBON
    DisposeRoutineDescriptor(callBack);
    #endif
    
    free((void *)data->buffer);  
    free((void *)data->nextBuffer);
  }
  
  free((void *)data);

  return SND_SUCCESS;
}