В дистрибутиве portaudio есть документация в виде примеров программ на C.Они находятся в каталоге test
и обычно называются patest_...
.Там много хорошего материала, и в документах содержится обзор с очень коротким описанием ,
. Вы хотите посмотреть на patest_record
, который выполняет асинхронную запись через вызов.назад.Это путь, если вы хотите сделать что-то серьезное, ИМХО.Но есть также patest_read_record.c
, который выполняет синхронный (блокирующий) ввод-вывод.
Код на самом деле очень прост, вот соответствующие части (много не учтено): 1 / вы используете malloc буфер 2 /Вы устанавливаете обратный вызов 3 / в обратном вызове, вы копируете данные в свой буфер
/* 1 */
data.recordedSamples = (SAMPLE *) malloc( numBytes );
/* 2 */
err = Pa_OpenStream(
&stream,
&inputParameters,
NULL, /* &outputParameters, */
SAMPLE_RATE,
FRAMES_PER_BUFFER,
paClipOff,
recordCallback,
&data );
/* 3, in recordCallBack with rptr the input data and wptr our buffer */
for( i=0; i<framesLeft; i++ )
{
*wptr++ = *rptr++; /* left */
if( NUM_CHANNELS == 2 ) *wptr++ = *rptr++; /* right */
}
Опять же, это упрощается, но вы поймете идею.Существует большое количество бухгалтерии, и пример кода не самый чистый, но его легко адаптировать к вашим целям.