
portaudio
Leabharlann C Foinse Oscailte le haghaidh I/O Fuaime
Ionchur & Aschur Fuaime Fíor-am ar fud Windows, macOS, Linux, agus Tuilleadh trí API C Foinse Oscailte.
Cad é portaudio?
Is leabharlann C saor, foinse oscailte, tras-ardán é PortAudio a chuireann ar chumas forbróirí feidhmchláir fuaime inbhogtha a scríobh le cumais ionchur agus aschur fíor-ama. Déanann sé a bhreithniú ar fho-chórais fuaime atá speisialta don ardán mar ASIO, CoreAudio, ALSA, WASAPI, agus JACK, ag tabhairt deis d'I/O fuaime comhsheasmhach ar fud Windows, macOS, Linux, agus córais oibriúcháin eile. Tacaíonn an leabharlann le formáidí fuaime iolracha — lena n-áirítear point snámh 32-giotán — agus déileálann sé le hathrú formáide go hintrí. Le API simplí ach cumhachtach, úsáidtear PortAudio go forleathan i bhbogearraí fuaime, breiseáin, uirlisí oideachais, agus tionscnaimh taighde a éilíonn próiseáil fuaime le lagú ama íseal agus feidhmíocht ard.
Soláthraíonn PortAudio dhá mhodh príomhúla oibriúcháin: bunaithe ar aisghlaoch (do shruthú íseal-latency) agus léamh/scríobh blocála (do I/O sioncrónach níos simplí). Cuimsíonn sé doiciméadú fairsing, cláir shamplacha, agus uirlisí tástála chun cabhrú le forbairtóirí tosú go tapa. Tá an leabharlann á chothabháil ag pobal domhanda agus tá sé faoi cheadúnas MIT, rud a fhágann go bhfuil sé oiriúnach do fheidhmchláir foinse oscailte agus tráchtála araon. Cibé an bhfuil tú ag tógáil post oibre fuaime digiteach, uirlis aitheantais gutha, nó feidhmchlár ceoil idirghníomhach, tugann PortAudio bonn iontaofa, éadrom le haghaidh forbairt fuaime tras-ardáin.
Ag tosú le portaudio
Chun PortAudio a thosú, is féidir leat é a thógáil ó bhunfhhoinse nó a shuiteáil trí bhainisteoirí pacáistí. I gcás formhór na bhforbróirí, is é an modh is éasca an stór portaudio GitHub oifigiúil a chlónú agus a thiomsú ag baint úsáide as CMake nó autotools. Ar Linux, suiteáil trí `apt install portaudio19-dev`; ar macOS, bain úsáid as `brew install portaudio`; ar Windows, íosluchtaigh bináir réamhthógtha nó bain úsáid as vcpkg (`vcpkg install portaudio`). Tar éis an tsuiteála, cuir `portaudio.h` san áireamh agus nasc leabharlann (`-lportaudio`). Tá an leabharlann éadrom agus tá spleáchais íseal ann, rud a fhágann go bhfuil comhtháthú simplí do fheidhmchláir fuaime fíor-ama.
Suiteáil PortAudio trí Bhainisteoirí Pacáistí
# Linux (Debian/Ubuntu)
sudo apt install portaudio19-dev
# macOS (Homebrew)
brew install portaudio
# Windows (vcpkg)
vcpkg install portaudio
Sruthú Fuaime Fíor-ama le Glaochanna Ar Ais
Is mód sruthú bunaithe ar aisghlaoch ó PortAudio an-ideálach le haghaidh próiseála fuaime le latency íseal agus fíor-am. Nuair a thosaítear sruth, glaonn PortAudio go tréimhsiúil ar d'fheidhm aisghlaoch chun sonraí fuaime a iarraidh nó a sholáthar. Cuireann an mód seo smacht chruinne ort ar an amlíne agus laghdaíonn sé ídithe bufa. Faigheann an aisghlaoch bufaí ionchurtha agus aschurtha, comhaireamh frámaí, eolas ama, agus bratacha stádais — rud a chuireann ar chumas giniúint fuaime dinimiciúil, próiseáil éifeachtaí, nó anailís. Ós rud é go ritheann an aisghlaoch i snáithe ard-tosaíochta, caithfidh sé rith go tapa (de ghnáth faoi 10ms) chun mí-chruinneas a sheachaint. Léiríonn sé seo go bhfuil sé foirfe do fheidhmchláir fuaime beo mar synthéiseoirí, peadail éifeachtaí giotár, nó córais cumarsáide gutha áit a bhfuil feidhmíocht cinntitheach ríthábhachtach.
Gineadóir Ton Siné Fíor-ama trí Glaoch ar ais
typedef struct {
float phase;
float phase_increment;
} paTestData;
int patestCallback(const void *input, void *output,
unsigned long frameCount,
const PaStreamCallbackTimeInfo* timeInfo,
PaStreamCallbackFlags statusFlags,
void *userData)
{
paTestData *data = (paTestData*)userData;
float *out = (float*)output;
for (unsigned long i = 0; i < frameCount; i++) {
*out++ = sinf(data->phase);
data->phase += data->phase_increment;
if (data->phase >= M_PI * 2) data->phase -= M_PI * 2;
}
return paContinue;
}
Liostú Gléasanna agus Iarratas
Soláthraíonn PortAudio APIanna láidre chun na gléasanna fuaime atá ar fáil a liostú agus a scrúdú — lena n-áirítear gléasanna ionchurtha agus aschurtha — agus a gcumasanna. Is féidir le forbróirí ainmneacha gléasanna, líon na gcainéil, rátaí sampla réamhshocraithe, agus luachanna latency a cheist ag baint úsáide as feidhmeanna mar `Pa_GetDeviceCount()`, `Pa_GetDeviceInfo()`, agus `Pa_GetDefaultInputDeviceID()`. Ligeann sé seo d'iarratais úsáideoirí a chur ar fáil le liosta de ghléasanna bailí agus sruthanna a chumrú go héifeachtach. Is féidir leat freisin gléasanna réamhshocraithe a bhrath, rátaí sampla tacaithe a sheiceáil, agus latency íosta/uasta a chinneadh. Tá an solúbthacht seo riachtanach chun uirlisí fuaime inathraithe, DAWanna, nó taifeadóirí gutha a thógáil a oiriúnú do shocruithe crua-earraí éagsúla gan cumraíocht láimhe.
Liostáil gach gléas fuaime atá ar fáil
PaError err;
err = Pa_Initialize();
if (err != paNoError) goto error;
int numDevices = Pa_GetDeviceCount();
for (int i = 0; i < numDevices; i++) {
const PaDeviceInfo *info = Pa_GetDeviceInfo(i);
printf("%d: %s (in: %d, out: %d)\n",
i, info->name,
info->maxInputChannels,
info->maxOutputChannels);
}
Pa_Terminate();
Tacaíocht API Óstach Tras-ardáin
Déantar PortAudio a bhunú ar APIanna fuaime atá speisialta do na hardáin trí chur i bhfeidhm modúil ar APIanna óstach, ag cinntiú iompair chomhleanach ar fud na gcórais oibriúcháin. Ar Windows, tacaíonn sé le ASIO (do fhuaim pro), WASAPI (Vista+), DirectSound, agus MME oidhreachta. Úsáideann macOS Core Audio le laghdú ama an-íseal, agus tacaíonn Linux le ALSA, JACK, agus PulseAudio. Úsáideann córais BSD OSS nó sndio. Scríobhann forbróirí uair amháin agus leagann siad i bhfeidhm i ngach áit—ní gá tiomsú coinníollach don loighic bhunúsach. Roghnaíonn an leabharlann go huathoibríoch an API óstach is fearr atá ar fáil nó ligeann sé duit ceann amháin a shonrú go sainráite. Cuireann an uilechoiteannacht seo ar fáil PortAudio mar uirlisí fuaime inaistrithe, bogearraí oideachais, agus creatlaí taighde a chaithfidh rith go iontaofa ar chrua-earraí agus cumraíochtaí OS éagsúla.
Fórsáil úsáid API óstach JACK ar Linux
PaStreamParameters inputParam, outputParam;
PaError err;
inputParam.device = Pa_GetHostApiInfoByType(paJACK)->defaultInputDevice;
inputParam.channelCount = 2;
inputParam.sampleFormat = paFloat32;
// ... configure outputParam similarly ...
PaStream *stream;
err = Pa_OpenStream(&stream, &inputParam, &outputParam,
44100, 256, paNoFlag, callback, NULL);
Comhshóireacht Formáid Fuaime agus Dithering
Déileálann PortAudio le comhshó formáide samplaí inmheánach go trédhearcach, ag ligean do chliaint formáidí áisiúla a úsáid mar shampla 32-giotán snámhphointe cé go n-úsáideann an córas bunúsach formáidí slánuimhir dhúchasacha (m.sh., 16-giotán PCM). Tacaíonn sé le comhshó idir formáidí slánuimhir 8-, 16-, 24- agus 32-giotán, chomh maith le 32-giotán snámhphointe. Ina theannta sin, cuireann sé ar fáil dithering roghnach le linn laghdú doimhneachta giotán chun torann cainteachta a laghdú — gné bhog ach ríthábhachtach do fheidhmchláir fuaime ard-dhílis. Cothaíonn dithering caighdeán fuaime a fheictear nuair a athraítear ó doimhneachtaí giotán níos airde go dtí na cinn íseal. Cinntíonn na cumais seo dílisíocht fuaime chomhshaoil ar fud na n-ardán gan a bheith ag éileamh ar fhorbróirí chun loighic chasta láimhseála formáide a chur i bhfeidhm iad féin.
Cumraigh Ionchur Snámh 32-giotán le Dithering
PaStreamParameters inputParam = {0};
inputParam.device = Pa_GetDefaultInputDevice();
inputParam.channelCount = 2;
inputParam.sampleFormat = paFloat32;
inputParam.suggestedLatency = Pa_GetDeviceInfo(inputParam.device)->defaultLowInputLatency;
// Enable dithering for output conversion
PaStream *stream;
Pa_OpenStream(&stream, &inputParam, NULL, 44100, 128,
paClipOff | paDitherOff, NULL, NULL);
// Note: paDitherOff disables dithering; omit for default dithering
