1. Ürün:% s
  2.   Ses
  3.   C++
  4.   portaudio

portaudio

 
 

Ses Giriş/Çıkışı için Açık Kaynaklı C Kütüphanesi

Açık Kaynaklı C API aracılığıyla Windows, macOS, Linux ve daha fazlası üzerinde Gerçek Zamanlı Ses Giriş ve Çıkışı.

PortAudio nedir?

PortAudio, geliştiricilerin gerçek zamanlı giriş ve çıkış yeteneklerine sahip taşınabilir ses uygulamaları yazmasını sağlayan ücretsiz, açık kaynaklı, çok platformlu bir C kütüphanesidir. ASIO, CoreAudio, ALSA, WASAPI ve JACK gibi platforma özgü ses alt sistemlerini soyutlayarak Windows, macOS, Linux ve diğer işletim sistemlerinde tutarlı ses G/Ç'si sağlar. Kütüphane, 32-bit kayan nokta dahil olmak üzere birden fazla ses formatını destekler ve format dönüşümünü dahili olarak yönetir. Basit ama güçlü bir API'ye sahip olan PortAudio, düşük gecikmeli, yüksek performanslı ses işleme gerektiren ses yazılımları, eklentiler, eğitim araçları ve araştırma projelerinde yaygın olarak kullanılır.

PortAudio iki temel çalışma modunu sağlar: geri arama tabanlı (düşük gecikmeli akış için) ve engelleyen okuma/yazma (daha basit eşzamanlı G/Ç için). Geliştiricilerin hızlıca başlamasına yardımcı olmak için kapsamlı belgeler, örnek programlar ve test yardımcı programları içerir. Kütüphane küresel bir topluluk tarafından sürdürülmekte ve MIT lisansı altında lisanslanmıştır, bu da açık kaynak ve ticari uygulamalar için uygun olmasını sağlar. Dijital bir ses iş istasyonu, ses tanıma aracı veya etkileşimli bir müzik uygulaması geliştiriyor olun, PortAudio çapraz platform ses geliştirme için güvenilir, hafif bir temel sunar.

Previous Next

PortAudio ile Başlarken

PortAudio'yu kullanmaya başlamak için, ya kaynağından derleyebilir ya da paket yöneticileri aracılığıyla kurabilirsiniz. Çoğu geliştirici için en kolay yöntem, resmi portaudio GitHub deposunu klonlamak ve CMake ya da autotools kullanarak derlemektir. Linux'ta `apt install portaudio19-dev` komutuyla kurun; macOS'ta `brew install portaudio` kullanın; Windows'ta önceden derlenmiş ikili dosyaları indirin veya vcpkg (`vcpkg install portaudio`) kullanın. Kurulumdan sonra `portaudio.h` dosyasını dahil edin ve kütüphaneye (`-lportaudio`) bağlayın. Kütüphane hafiftir ve minimum bağımlılıklara sahiptir, bu da gerçek zamanlı ses uygulamaları için entegrasyonu sorunsuz hâle getirir.

PortAudio'yı Paket Yöneticileriyle Kurun

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

# macOS (Homebrew)
brew install portaudio

# Windows (vcpkg)
vcpkg install portaudio

Geri Çağrılarla Gerçek Zamanlı Ses Akışı

PortAudio'nun geri arama temelli akış modu, düşük gecikmeli, gerçek zamanlı ses işleme için idealdir. Bir akış başlatıldığında, PortAudio periyodik olarak geri arama fonksiyonunuzu ses verisi talep etmek veya sağlamak için çağırır. Bu mod, zamanlama üzerinde kesin kontrol sağlar ve tampon eksikliklerini en aza indirir. Geri arama, giriş ve çıkış tamponlarını, çerçeve sayısını, zaman bilgilerini ve durum bayraklarını alır—dinamik ses üretimi, efekt işleme veya analizine olanak tanır. Geri arama yüksek öncelikli bir iş parçacığında çalıştığından, hataları önlemek için hızlı bir şekilde (genellikle 10 ms'nin altında) yürütülmelidir. Bu, sentezleyiciler, gitar efekt pedalları veya belirleyici performansın kritik olduğu ses iletişim sistemleri gibi canlı ses uygulamaları için mükemmeldir.

Geri Çağrı ile Gerçek Zamanlı Sinüs Dalga Üreteci

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

Aygıt Sayımı ve Sorgulama

PortAudio, mevcut ses aygıtlarını—giriş ve çıkış aygıtları dahil—listelemek ve incelemek için sağlam API'ler sağlar ve bunların yeteneklerini sunar. Geliştiriciler, `Pa_GetDeviceCount()`, `Pa_GetDeviceInfo()` ve `Pa_GetDefaultInputDeviceID()` gibi işlevleri kullanarak aygıt adlarını, kanal sayılarını, varsayılan örnekleme oranlarını ve gecikme değerlerini sorgulayabilir. Bu, uygulamaların kullanıcılara geçerli aygıtların bir listesini sunmasını ve akışları en iyi şekilde yapılandırmasını sağlar. Ayrıca varsayılan aygıtları tespit edebilir, desteklenen örnekleme oranlarını kontrol edebilir ve minimum/maksimum gecikmeleri belirleyebilirsiniz. Bu esneklik, çeşitli donanım yapılandırmalarına manuel ayar gerektirmeden uyum sağlayan yapılandırılabilir ses araçları, DAW'lar veya ses kayıt cihazları oluşturmak için esastır.

Mevcut Tüm Ses Aygıtlarını Listele

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

Çapraz Platform Host API Desteği

PortAudio, platforma özgü ses API'lerini modüler host API uygulamaları aracılığıyla soyutlayarak işletim sistemleri arasında tutarlı davranış sağlar. Windows'ta ASIO (profesyonel ses için), WASAPI (Vista+), DirectSound ve eski MME'yi destekler. macOS, ultra düşük gecikme için Core Audio'i kullanırken, Linux ALSA, JACK ve PulseAudio'yu destekler. BSD sistemleri OSS veya sndio kullanır. Geliştiriciler bir kez yazar ve her yerde dağıtır—çekirdek mantık için koşullu derleme gerekmez. Kütüphane, mevcut en iyi host API'sini otomatik olarak seçer veya birini açıkça belirtmenize izin verir. Bu evrensellik, PortAudio'yu taşınabilir ses araçları, eğitim yazılımları ve çeşitli donanım ve OS yapılandırmalarında güvenilir çalışması gereken araştırma çerçeveleri için ideal kılar.

Linux'ta JACK Host API'sinin Kullanımını 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);

Ses Formatı Dönüştürme ve Ditherleme

PortAudio, dahili örnek biçimi dönüşümünü şeffaf bir şekilde yönetir; böylece istemciler, temel sistemin yerel tam sayı biçimlerini (ör. 16-bit PCM) kullanırken 32-bit kayan nokta gibi kullanışlı biçimleri tercih edebilir. 8-, 16-, 24- ve 32-bit tam sayı biçimleri ile 32-bit float arasında dönüşümü destekler. Ayrıca, bit derinliği azaltma sırasında kuantizasyon gürültüsünü en aza indirmek için isteğe bağlı titreme (dithering) sunar—bu, yüksek sadakatli ses uygulamaları için ince ama kritik bir özelliktir. Titreme, daha yüksek bit derinliklerinden daha düşük bit derinliklerine dönüştürürken algılanan ses kalitesini korur. Bu yetenekler, geliştiricilerin karmaşık biçim işleme mantığını kendileri uygulamasına gerek kalmadan platformlar arasında tutarlı ses sadakati sağlar.

32-bit Float Girişini Dithering ile Yapılandır

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
 Türkçe