Sadece Ortamda Ses Olduğunda Kayıt Yapmak

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.

Leave a comment

Your email address will not be published. Required fields are marked *