Sürekli olarak ses kaydetmek gerektiğinde en iyi yöntem sadece ortamda ses olduğunda kayıtı başlatmaktır. SoX sahip olduğu filtre özellikleri ile ortamdaki ses belli bir düzeyin (threshold) üzerine çıktığında kayıt yapmak üzere ayarlanabilir. Bunun için öncelikle sesin hangi eşiğin üzerine çıktığında kayıt yapılacağını tespit etmekir. SoX stat filtresi kaydın ses seviyesi hakkında istatistiksel bilgiler sunar. Aşağıdaki komutu çalıştırın ve istatistik çıktısındaki Minumum amplitude değerini izleyin. Bu değer, 1 saniyelik süre dilimleri içerisinde ortamda rastlanan ses şiddeti seviyesinin en küçük değerini verir. Bu değeri kullanarak ayarlayabileceğiniz bir amplitude değeri, kaydı başlatmak için eşik değeri olarak da kullanılabilir.
pi@raspberry:~ $ sox -t alsa plughw:1 -n stat trim 0 00:00:01 : restart
Maximum amplitude: 0.020538
Minimum amplitude: -0.019592
Midline amplitude: 0.000473
Mean norm: 0.002086
Mean amplitude: 0.000037
RMS amplitude: 0.002916
Maximum delta: 0.007935
Mean delta: 0.000086
RMS delta: 0.000158
Rough frequency: 414
Volume adjustment: 48.689
Yukarıdaki komut ile SoX 1sn’lik kayıt örnekleri alarak, bu süre zarfında rastlanan en yüksek, en düşük ve ortalama ses şiddeti gibi değerleri ekrana basılır. Ayrıca bu örneklemeler restart direktifi sayesinde, her saniye tekrarlanır. Kaydı sonlandırmak için Ctrl+C tuş bileşimini kullanabilirsiniz.
Aşağıdaki bash betiği temel olarak birer saniye ses örneği alarak, örnekteki sesin tanımlanan eşikten büyük olup olmadığına bakar ve eğer büyükse 5dk’lık bir kayıt başlatır. 5dk’lık kayıt bittiğinde her saniye başında ortamdaki ses düzeyini izlemeye devam ederek kontrolünü tekrarlar. Eşik tespit edildiğinde hem ekrana hem de /var/log/messages günlük dosyasına eşiğin geçildiğine ve kaydın başladığına dair bir mesaj yazar (logger). Betiği kaydetmek için nano editörünü kullanabilirsiniz. Kaydettikten sonra betiğe çalıştırma izni vermeyi unutmayın (chmod +x).
pi@raspberry:~ $
nano otokayit.sh
#!/bin/bash
#
# Raspberry Pi icin ayarlanabilir esik seviyeli
# otomatik ses kaydedici script.
# Script’in calisabilmesi icin ayarlayin: chmod +x ~/otokayit.sh to
ESIK_DEGERI=0.014000
gurultu_karsilastir() {
awk -v GURULTU=$1 -v ESIK_DEGERI=$2 ‘BEGIN {if (GURULTU > ESIK_DEGERI) exit 0; exit 1}’
}
while true ; do
GURULTU=$(sox -t alsa plughw:1,0 -n stat trim 0 00:00:01 2>&1 > /dev/null | grep ‘Maximum amplitude’ | cut -d ‘:’ -f 2 | tr -d ‘ ‘)
if gurultu_karsilastir $GURULTU $ESIK_DEGERI; then
logger -s “Gurultu esigi ($GURULTU/$ESIK_DEGERI): 5dk kayit baslayiyor.”
sox -c 1 -v 30 -t alsa plughw:1,0 $(date +%Y%m%d-%H%M%S).ogg trim 0 00:05:00 treble +10
fi
done
pi@raspberry:~ $ chmod 755 otokayit.sh
Yukarıdaki betik temel olarak ortamdaki ses şiddetinin ayarlanan düzeyin üzerine çıktığı durumlarda herhangi bir işlevi yerine getirmek için de kullanılabilir. Bir alarmı tetiklemek, kameradan fotoğraf çekmek veya bir mail ya da sms göndermek için de kullanılabilir. Örneğin evde olmadığınız zamanlarda; kapınızın gözetleme deliğine yerleştirdiğiniz bir kamera, kapıya vurulduğunda ya da zile basıldığında kişinin fotoğrafını çekerek size mail atabilir. Ses şiddeti seviyesine bağlı tetiklemeyi kullanarak gerçekleştirebilecekleriniz hayal gücünüzle sınırlı.
Eşik değerini sağlıklı olarak belirleyebilmek için ortamdaki ses seviyesini bir süre izlemeniz ve eşik kabul edilebilecek değere karar vermeniz gerekir. Bunun için aşağıdaki betiği kullanabilirsiniz. Betik ortamdaki sesi 2 saniyelik sürelerle örnekleyerek, sesin en yüksek, en düşük ve ortalama değerlerini sürekli olarak ekrana basar.
pi@raspberry:~ $
nano ses_olcumle.sh
BOS=’ ‘
printf “Varsayılan ses giriş aygıtı dinleniyor…\n”
printf “\n”
printf ” Max/Min/Midline Amplidudes (2sn)\n”
printf ” MAKS MIN MID\n”
printf ” ——– ——— ———\n”;
while true; do
ORN=$(sox -t alsa plughw:1,0 -n stat trim 0 00:00:02 2>&1 > /dev/null)
MAK=$(echo “$ORN” | grep ‘Maximum amplitude’|cut -d ‘:’ -f 2 | tr -d ‘ ‘)
MIN=$(echo “$ORN” | grep ‘Minimum amplitude’ | cut -d ‘:’ -f 2 | tr -d ‘ ‘)
ORT=$(echo “$ORN” | grep ‘Midline amplitude’ | cut -d ‘:’ -f 2 | tr -d ‘ ‘)
printf “%s %s %s %s %s %s\n” “${BOS:${#MAK}}” $MAK “${BOS:${#MIN}}” $MIN “${ BOS:${#ORT}}” $ORT
done
Daha önceki örnekte (otokayit.sh) ses eşik seviyesi olarak Maximum amplitude değeri kontrol edilmekteydi. Genellikle negatif değerlerde olan Minimum amplitude değeri de kayıt tetiklemek için kullanılabilir. Ses ortamına göre Maximum, Minimum ve Midle line değerlerinden hangisini kullanacağınıza karar verebilirsiniz. Yukarıdaki betiğin ekran çıktısı aşağıdaki gibidir. Son üç kayıtta ortamdaki ses hacmi artırılmıştır:
pi@raspberry:~ $ chmod 755 ses_olcumle.sh
pi@raspberry:~ $ ./ses_olcumle.sh
Varsayılan ses giriş aygıtı dinleniyor…
Max/Min/Midline Amplidudes (2sn)
MAKS MIN MID
——– ——— ———
0.015717 -0.014648 0.000534
0.016846 -0.015747 0.000549
0.016907 -0.014862 0.001022
0.016266 -0.014954 0.000656
0.021881 -0.023743 -0.000931
0.022400 -0.021790 0.000305
0.023438 -0.022217 0.000610
KULLANIM SARTLARI
Bu web sitesinin içeriginin tüm haklari saklidir. Kitabin/site içeriginin hiçbir bölümü, yazarinin yazili izni olmaksizin tekrar üretilemez, bir erisim sisteminde tutulamaz, herhangi bir biçimde elektronik, mekanik, fotokopi, ses kayit ya da diger yollarla iletilemez. Ancak istisna olarak; ticari olmayan amaçlar için yazara önceden bilgi vermek ve raspberrypikitabi.com adresini kaynak göstermek kaydiyla 10 sayfaya kadar kullanilabilir. Kitapta kullanilan logolar, firmalarin tescilli logolaridir. Raspberry Pi, Raspberry Pi Vakfi'nin ticari markasidir.
BILGILENDIRME
Bu kitapta Raspberry Pi, çesitli çevre birimleri ile düsük voltaj elektronik bilesenlerin bir arada kullanildigi uygulamalar yer almaktadir. Uygulamalarin tamami Raspberry Pi'in üzerinde kosan Linux çekirdegi ve açik kaynak kod özgür yazilimlar kullanilarak gerçeklestirilmistir. Uygulamalar gerçeklestirilirken ortaya çikabilecek elektriksel sorunlar veya kullanici hatalari nedeniyle cihazlar zarar görebilir veya veri kaybi yasanabilir. Ayrica, kitapta anlatilan konularin uygulanmasi sonucu ortaya çikabilecek her türlü lisans ihlali/kanuni ihlal ve zararin sorumlulugu uygulayan kisiye aittir. Olusabilecek herhangi bir zarardan yazar sorumlu tutulamaz.