1. Məhsullar
  2.   Audio
  3.   C++
  4.   portaudio

portaudio

 
 

Audio I/O üçün Açıq Mənbəli C Kitabxanası

Windows, macOS, Linux və digər platformalarda Açıq Mənbəli C API vasitəsilə Real‑Zamanlı Audio Giriş və Çıxış.

PortAudio nədir?

PortAudio pulsuz, açıq mənbəli, çoxplatformalı C kitabxanasıdır və inkişafçılara real‑zamanlı giriş və çıxış imkanları ilə daşına bilən audio tətbiqləri yazmağa imkan verir. O, ASIO, CoreAudio, ALSA, WASAPI və JACK kimi platforma‑spesifik audio alt sistemlərini abstraktlaşdıraraq Windows, macOS, Linux və digər əməliyyat sistemləri üzrə ardıcıl audio G/Ç təmin edir. Kitabxana bir neçə audio formatını dəstəkləyir — 32‑bit üzən nöqtə daxil olmaqla — və format çevrimini daxili olaraq idarə edir. Sadə, lakin güclü API‑si ilə PortAudio aşağı gecikməli, yüksək performanslı audio emalı tələb edən audio proqramlar, plaginlər, tədris alətləri və tədqiqat layihələrində geniş istifadə olunur.

PortAudio iki əsas işləmə rejimini təmin edir: geri çağırışa əsaslanan (aşağı gecikməli axın üçün) və bloklama oxuma/yazma (daha sadə sinxron I/O üçün). O, geniş sənədləşdirmə, nümunə proqramlar və test alətləri ilə təchiz olunmuşdur ki, inkişafçılar sürətlə başlaya bilsinlər. Kitabxana qlobal icma tərəfindən saxlanılır və MIT lisenziyası altında lisenziyalaşdırılıb, bu da onu həm açıq mənbəli, həm də kommersiya tətbiqləri üçün uyğun edir. Rəqəmsal audio iş stansiyası, səs tanıma aləti və ya interaktiv musiqi tətbiqi yaratsanız da, PortAudio platformalararası audio inkişafı üçün etibarlı, yüngül bir təməl təqdim edir.

Previous Next

PortAudio ilə Başlamaq

PortAudio-dan istifadə etməyə başlamaq üçün onu mənbə kodundan yığa və ya paket menecerləri vasitəsilə quraşdıra bilərsiniz. Əksər inkişafçılar üçün ən asan üsul rəsmi portaudio GitHub deposunu klonlamaq və CMake və ya autotools ilə tərtib etməkdir. Linux-da `apt install portaudio19-dev`; macOS-da `brew install portaudio`; Windows-da əvvəlcədən hazırlanmış ikili faylları yükləyin və ya vcpkg (`vcpkg install portaudio`) istifadə edin. Quraşdırmadan sonra `portaudio.h` daxil edin və kitabxanaya (`-lportaudio`) bağlayın. Kitabxana yüngüldür və minimal asılılıqlara malikdir, bu da real‑zamanlı audio tətbiqləri üçün inteqrasiyanı asanlaşdırır.

PortAudio‑ı Paket Menecerləri vasitəsilə quraşdırın

# Linux (Debian/Ubuntu)
sudo apt install portaudio19-dev

# macOS (Homebrew)
brew install portaudio

# Windows (vcpkg)
vcpkg install portaudio

Geri Çağırışlarla Real‑Zamanlı Səs Axını

PortAudio‑nin geri çağırışa əsaslanan axın rejimi aşağı gecikməli, real‑vaxtlı səs emalı üçün idealdır. Axın başladıqda, PortAudio periodik olaraq sizin geri çağırış funksiyanızı səs məlumatını tələb etmək və ya təmin etmək üçün işə salır. Bu rejim sizə zamanlama üzərində dəqiq nəzarət verir və tamponun çatışmazlıqlarını minimuma endirir. Geri çağırış giriş və çıxış tamponlarını, kadr sayını, zaman məlumatını və status bayraqlarını alır — dinamik səs yaradılması, effektlərin emalı və ya təhlili mümkün edir. Geri çağırış yüksək prioritetli bir ipdə işlədiyi üçün, qüsurlardan qaçmaq məqsədilə (adətən 10 ms‑dən az) sürətlə icra olunmalıdır. Bu, sintezatorlar, gitara effekt pedalları və ya səs rabitə sistemləri kimi canlı səs tətbiqləri üçün, təyin edilə bilən performansın vacib olduğu hallarda mükəmməldir.

Geri Çağırışla Real‑Zamanlı Sinus Dalğa Generatoru

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

Cihazların Siyahıya Alınması və Sorğulanması

PortAudio mövcud audio cihazlarını—giriş və çıxış cihazları daxil olmaqla—saymaq və yoxlamaq üçün güclü API-lər təqdim edir, həmçinin onların imkanları ilə. İnkişafçılar cihaz adlarını, kanal sayını, standart nümunə sürətlərini və gecikmə dəyərlərini `Pa_GetDeviceCount()`, `Pa_GetDeviceInfo()` və `Pa_GetDefaultInputDeviceID()` kimi funksiyalar vasitəsilə soruşa bilərlər. Bu, tətbiqlərə istifadəçilərə etibarlı cihazların siyahısını təqdim etməyə və axınları optimal şəkildə konfiqurasiya etməyə imkan verir. Həmçinin standart cihazları aşkar edə, dəstəklənən nümunə sürətlərini yoxlaya və minimum/maksimum gecikmələri müəyyənləşdirə bilərsiniz. Bu çeviklik, müxtəlif avadanlıq qurğularına əl ilə konfiqurasiya etmədən uyğunlaşan konfiqurasiya edilə bilən audio alətləri, DAW-lar və ya səs yazıcıları yaratmaq üçün vacibdir.

Bütün Mövcud Audio Cihazlarını Siyahıya Al

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();

Çoxplatformalı Host API Dəstəyi

PortAudio platforma-özəl audio API-ləri modul host API tətbiqləri vasitəsilə abstraktlaşdırır, əməliyyat sistemləri arasında ardıcıl davranışı təmin edir. Windows-da ASIO (peşəkar audio üçün), WASAPI (Vista+), DirectSound və köhnə MME dəstəklənir. macOS ultra-aşağı gecikmə üçün Core Audio-dan istifadə edir, Linux isə ALSA, JACK və PulseAudio dəstəkləyir. BSD sistemləri OSS və ya sndio istifadə edir. İnkişafçılar bir dəfə yazıb hər yerdə yerləşdirə bilirlər — əsas məntiq üçün şərti tərtibata ehtiyac yoxdur. Kitabxana avtomatik olaraq ən yaxşı mövcud host API-ni seçir və ya onu açıq şəkildə təyin etməyə imkan verir. Bu universalitet PortAudio‑nu daşınabilir audio alətləri, tədris proqramları və müxtəlif avadanlıq və OS konfiqurasiyalarında etibarlı işləməli tədqiqat çərçivələri üçün ideal edir.

Linux-da JACK Host API-nın İstifadəsini Zorla

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

Səs Formatının Çevrilməsi və Ditherləmə

PortAudio daxili nümunə formatı konvertasiyasını şəffaf şəkildə idarə edir, müştərilərə 32-bit floating point kimi rahat formatlardan istifadə etməyə imkan verir, halbuki əsas sistem yerli integer formatlarından (məsələn, 16-bit PCM) istifadə edir. O, 8-, 16-, 24- və 32-bit integer formatları arasında, həmçinin 32-bit float arasında konvertasiyanı dəstəkləyir. Bundan əlavə, kvantlaşdırma səs-küyünü minimuma endirmək üçün bit-dərinliyi azaldılması zamanı isteğe bağlı dithering təklif edir — yüksək keyfiyyətli audio tətbiqləri üçün incə, lakin vacib bir xüsusiyyət. Dithering, daha yüksək bit dərinliyindən aşağı bit dərinliyinə konvertasiya zamanı qavranılan audio keyfiyyətini qoruyur. Bu imkanlar, inkişafçılardan mürəkkəb format idarəetmə məntiqini özləri həyata keçirmələrini tələb etmədən, platformalar arasında ardıcıl audio sadiqliyini təmin edir.

Dithering ilə 32-bit Float Girişini Konfiqurasiya Et

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
 Azəri