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; }
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; }
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; }