19 Temmuz 2019 Cuma

ALSA

Speaker
Eski PC'lerde speaker bulunurdu. Speaker yerine daha sonra buzzer'lar geldi.

Bu speaker Windows'ta Beep () metodu ile ses çıkarırdı.
Bu metod kaldırıldı sonra yeniden eklendi. Şöyle kullanılır.
Beep(261, 100)
Beep yerine MessageBeep kullanılabilir.

Intel 8254 Çipi
Açıklaması şöyle.
The original IBM PC and later variants used an Intel 8253 or 8254 as a sound chip.
Bu çipte 3 tane timer var. Bunlardan bir tanesi ses için kullanılabiliyor. Açıklaması şöyle
The 8253 is a timer circuit, containing three timers able to generate timed interrupts or square-wave output with programmed frequencies. On the PC the third timer's output is, via an amplifier, connected to a simple speaker.
Beep metodu 8254 programlanabilir çipini kullanarak belli bir frekansta belli bir süre ses çıkartmak içindi. Metodun frequency parametresinin açıklaması şöyle
Also, the only frequencies that can be selected are those that result from dividing the base frequency (1,193,181.8 Hz) by an integer in the range of 1–65535.
8254 aynı zamanda monotonic saatlerde de kullanılır.

Speaker Yerine Ses Kartı
Speaker kullanarak ses kartının işlevini gerçekleştirme denemeleri de oluyordu. Bu speaker'ı hızlıca açıp kapayarak yapılıyordu. Açıklaması şöyle.
it's really only designed to make beeps of various frequencies, all the same volume level. But by quickly turning the speaker on and off, you can play 1-bit PCM audio.
Tabi ses doğal gelmiyordu kulağa. Açıklaması şöyle
Since it's a digital output, no level control is available. Only on or off is possible. At best this results in rather nasty sounding square waves. There is no provision to smooth the signal (beside the inertia of the speaker membrane).
Bir ses kartı ise farklı işleve sahiptir. Açıklaması şöyle
A sound chip will need programmable oscillators for different wave forms and at least some analogue ciruitry to make a smooth, more natural sound.
Ses Kartı Yerine GPU
GPU'da ses işlemi için kullanılamiyor. Açıklaması şöyle
Sorry, going to disappoint you straight away. I have tried using NVidia CUDA (the native library) for audio processing, using neural networks. It's what my company does for a living, so we're pretty competent. We found that the typical NVidia card has too much latency. They're fast, that's not the problem, but that means they can do many million operations in a millisecond. However, the DMA engine feeding data to the card typically has latencies that are many milliseconds. Not so bad for video, bad for audio - video often is 60 Hz whereas audio can be 48000 Hz.
Nyquist Teoremi
Nyquist Teoremi yazısına taşıdım.

Örnekleme Frekansı
Örnekleme frekansı (rate) sesi kaydederken veya sesi çalarken kullanılır. Örnekte Raspberry Pi cihazında rate görülebilir.
$ cat /proc/asound/card0/pcm0p/sub0/hw_params 
access: RW_INTERLEAVED
format: S16_LE
subformat: STD
channels: 2
rate: 48000 (48000/1)
period_size: 4096
buffer_size: 16384
Ses kalitesi daha iyi olsun istenirse daha yüksek örnekleme frekansı kullanılabilir. Örneğin çok kullanılan frekanslar 8,000, 11,025, 16,000, 22,050, 24,000, 32,000, 44,100, ve 48,000 Hz'dir.

Örneğin 44,100 Hz  ile örnekleme yaparsak insan kulağının hassasiyetine göre en düşük 100 ve 600 Hz ile en yüksek  20,000 ve 20,500 Hz'lik sesleri duyarız diye anlıyorum.

44,100 Hz 22.05 Hz genişliği ile insan kulağının duyabileceğinden az bir şey daha fazlasını örnekliyor. Bu rakam 2'nin katı olduğu için ve çiplerin geliştirmesinde kolaylık sağlayacağı için Sony tarafından seçilmiş.
44100 = 2^2 * 3^2 * 5^2 * 7^2

ALSA ile örnekleme frekansını atamak için snd_pcm_hw_params_set_rate_near() metodu kullanılabilir.Örnek:
snd_pcm_hw_params_t *hwparams;
snd_pcm_hw_params_alloca(&hwparams);

unsigned int rrate = 44100;
snd_pcm_hw_params_set_rate_near(handle, params, &rrate, 0);
Örnekleme Büyüklükleri
Yukarıda 8 bitlik bir büyüklükten bahsettik ancak ses kalitesini artırmak için 8, 16, 20 veya 24 bitlik örnekleme büyüklükleri de kullanılabilir.

PCM
Pulse-code modulation yani PCM, (G.711 olarak ta bilinir) 64Kbps data olarak sayısallaştırılmış ses sinyalidir. Ses sıkıştırması için de G.729 codec'i kullanılır.

Java
Audio yazısına taşıdım.

Hiç yorum yok:

Yorum Gönder