Ubuntu üzerinde Ses azaltıp arttırma ve Media playerda Şarkı değiştirme C kodu

Başlatan Kaanx, 11 Nisan 2014 - 22:39:30

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

Kaanx

Merhaba arkadaşlar Ubuntu üzerinde yada Raspbian üzerinde C ile yazılmış ses azaltıp arttırcak kod yazmam gerekiyor. Bunu daha sonra Opencv ile cameradan kontrol ile sağlamaya çalışıcam. Bu konuda fikri olan var mı ?

sem

Uçbirim nimetlerinden faydalanmak serberst mi?

http://askubuntu.com/questions/97936/terminal-command-to-set-audio-volume

amixer uygulamasından yararlanabilirsiniz. Yok bu sayılmaz sen hazıra konmuşsun denilecekse amixer'in kodlarını incelemeye başlayabilirsiniz. Şurada bir şeyler var gibi duruyor;

https://gitorious.org/alsa/alsa-utils/source/87c58b59b5c443fe3244bd06417c451581d1f635:amixer/amixer.c
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Uç birim kullanamıyorum malesef Proje söyle özetliyeyim size. Bir frame içinde TV yayını var (TİVİBU misal) webcam üzerinden oluşturdugum panel ile sesi açıp kapama ve kanal değiştrime yapmam lazım. Yada Herhangi bir media player örnek VLC de oyanayan video listesindeki videoları değiştirip sesi aarrtırıp azaltmam gerekiyor.. Şuan ne durumdayım derseniz. Opencv ile webcam üzerinden renk tanıma yaparak belirli bölgelere koydugum butonların üzerine elimi getirdiğimde Bir işlem yapabiliyorum Mesela Raspberry üzerinde bir GPIO kullanımı yaptım suan fakat olay bu kiti akıllı TV haline getirmek :)

sem

Uç birim derken aslında C ile uçbirime hükmetmekten bahsediyorum. Sistem tarafının yönetimi için; ses işlemleri vs.   system(), exec() komutları ile. Aksi halde ikinci gönderdiğim bağlantıyı incelemeniz gerekmekte. Çünkü bu işlemi yapan bir uygulama yazılmış ve kodları bulunuyor =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Yazıdıgım C kodumda mesela su kısımda

if(piksel <240 && piksel 320 ){
Ses_arttır();


}
else if(piksel <240 && piksel 320 ){
Ses_azalt();


}

demem gerekiyor dediğiniz uç birimleri bu şekilde yazabilir miyim acaba ? yani çalışma.c file içinde uç birim komutlarını bu şekilde nasıl çalıştırabilrim ?

sem

Evet bu işlem ile yapabilirsiniz.

Öncelikle işlemi terminalden nasıl yapabileceğinizi öğreniniz. Terminalde yani BASH ile yapabildikten sonra; terminali açıp el ile komut vermek ile C ile


system("amixer -D pulse sset Master 5%+");


aynı anlama geliyor. Birisinde el ile yazıp çalıştırmış, diğerinde ise C programı içerisinden çalıştırmış oluyorsunuz.

Konu Dışı Öneri; Ekran boyutunuz sabitmiş gibi kod yazmışsınız. piksel yerine çözünürlük hesabı ile bir uzunluk birimi kullanmanızı tavsiye ederim. Aksi halde her bir ekran boyutu hatta aynı ekran boyutları için de farklı çözünürlükler için kod derlemeniz gerekir ki bu istenen bir şey değildir =)...

Kısacası istediğiniz işlemi yani C kodu içerisinden uçbirim kodu çalıştırma işlemini en basit hali ile system(); komutu ile yapabilirsiniz.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Önerileriniz için teşekkür ederim. Evet ekran boyutum sabit çünkü Opencv video capture işlemi yapıyorum ve bu vide oynarken üzerine o boyutta bir panel ekliyorum user için. ama dedğinizi değerlendircem henuz o konuda bir fikrim yok diyebilrim :)

Peki bu ses dosyalarını kullanabilmek için İnclude etmem gereken şeyler nedir ?




Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 12 Nisan 2014 - 11:59:17

şu örnekleri buldum hocam fakat çalıştıramadım yoksa kulagı tersten mi tutuyorum dersinz ?

https://gist.github.com/wolfg1969/3575700

http://stackoverflow.com/questions/6787318/set-alsa-master-volume-from-c-code

http://stackoverflow.com/questions/6787318/set-alsa-master-volume-from-c-code

http://alsa.opensrc.org/HowTo_access_a_mixer_control

http://jeffskinnerbox.wordpress.com/2012/11/15/getting-audio-out-working-on-the-raspberry-pi/

http://www.dronkert.net/rpi/vol.html

http://home.roadrunner.com/~jgglatt/tech/linuxapi.htm


sem

Merhaba,

system() komutu kullanarak bu işlemi yapacaksanız eğer, C tarafında herhangi bir başlık dosyaına include uygulamanız gerekmez. Kodu yazacağınız sistem yani Ubuntu ya da Raspbian üzerinde aşağıdaki kodu yürüttüğünüzde ne döndürüyor?


amixer -D pulse sset Master 5%+
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Terminal ekranından o komutları verdiğimde % 5 lik dilimler halinde ses artısları ve azalmalar oluyor burada ki referans verdiğiniz linke göre gittim hocam

http://askubuntu.com/questions/97936/terminal-command-to-set-audio-volume


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 12 Nisan 2014 - 12:28:25

hocam su programı yazarak bir deneme yaptım çalısıyor.

#include "stdio.h"

int main(){

int a,b,A,B;
        printf("Ses Kontrol Programi\n ");
        printf("Ses Arttirmak için A|a tusuna basiniz\n");
        printf("Ses Azaltmak için B|b tusuna basiniz\n");
        scanf("%d",&a,&b);
                if(a|A){

                        system("amixer -D pulse sset Master 5%+");
                }else if(b|B){
                        system("amixer -D pulse sset Master 5%-");
                }

}

sem


char* command = "amixer -D pulse sset Master %5\%+";
fprintf(stdout, "%s\n", command);
int result = system(command);


Yukarıdaki kod da, aynı işlemi C ile yapmalı. Böyle yaptığınızda nasıl bir tepki alıyorsunuz?




Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 12 Nisan 2014 - 12:36:32

Düzeltme: Ek mesajı şimdi gördüm. Zaten yazmışsınız.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

hocam söyle uyarladım

#include "stdio.h"

int main(){

char* command = "amixer -D pulse sset Master %5\%+";

int result = system(command);
int a,b,A,B;
        printf("Ses Kontrol Programi\n ");
        printf("Ses Arttirmak için A|a tusuna basiniz\n");
        printf("Ses Azaltmak için B|b tusuna basiniz\n");
        scanf("%d",&a);
        scanf("%d",&b);
                if(a|A){

                        //system("amixer -D pulse sset Master 5%+");
                        fprintf(stdout, "%s\n", command);

                }
                if(b|B){
                        system("amixer -D pulse sset Master 5%-");
                }

}




fakat a ya basınca ses arttırması gerekirken ses kısıyor :D

sem

int a,b,A,B;

demişsiniz fakat büyüklere değer atamamışsınız. Şu an bu nesneler stack'te olduğu için içlerin rastgele değer var; jargonda çöp değer denilen değerler. Ek olarak;

if(a|A)

ile kontrol ederseniz kullanıcı a tuşuna bassa dahi if'iniz doğru çalışmayacaktır.  A'nın 1 olması ya da olmamasına bakıyorsunuz gibi bir kod oluştmuş;


char a,
// kullanıcıdan a'yı al
if(a == 'a' ||a == ''A )
....




gibi bir şey yapmak istiyorsunuz sanırım.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

#include "stdio.h"

int main(){



char a,b,A,B,i;
        printf("Ses Kontrol Programi\n ");
        while(1){
        printf("Ses Arttirmak için A|a tusuna basiniz\n");

        printf("Ses Azaltmak için B|b tusuna basiniz\n");
        scanf("%c",&i);
        switch(i){
                case 'a':
                {

                        system("amixer -D pulse sset Master 5%+");
                        break;

                }
               case 'b':
                {
                        system("amixer -D pulse sset Master 5%-");
                        break;
                }
        }

}
        return 0;

}


Son durum olarak böyle bıraktım hocam suan işimi görüyor. Sizi yakalamışken bir iki soru daha sorayım bari :)

Ses acıp kapamayı yaptıgımıza göre VLC yada diğer media playerdaki playlistten sarkıyı nasıl değiştririz ?

sem

Merhabalar, forum kuralları gereği bir başlıkta bir konuyu konuşuyoruz.

Buralardayız biz  de =) Forum kuralları gereği çözülen başlıklarımızı;
https://forum.ubuntu-tr.net/index.php?topic=31789.0
bu şekilde etiketliyoruz. 

Yeni sorunuz için yeni başlık açabilirsiniz ve oradan devam edebiliriz.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Bilmem mi hocam hızlı çözüm olarak başlıgın adını "Ubuntu üzerinde Ses azaltıp arttırma ve Media playerda Şarkı değiştirme C kodu" olarak değiştrirsem sorun kalmaz diye dusundum :) Devam edebilir miyiz bu durumda ? :)


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 12 Nisan 2014 - 19:41:49

aslında mediaplayer üzrinde değil hocam olay şöyle benim projem smart tv yapmak. yani orada mp3 değiştrime yerine kanal değiştrime işlemi yapmam gerekiyor bu daha açık olucak sanırım :)

sem

VLC için API'ler mevcutmuş gördüğüm kadarı ile;

http://www.videolan.org/developers/vlc/doc/doxygen/html/group__libvlc__media__list.html

Bunun dışında komut satırı opsiyoları da var, bunlar da incelenebilir ama kanal değiştirme işlemi neye tekabul ediyor tam olarak kestiremiyorum şu an için =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Hocam Linux virtual moouse emülatör die arat diyenler oldu. Mantık söyle olucak mıs mesela ben kamerada bir alan seçiyorum ve elimi o bölgeye getirdiğimde Play olucak yani TV çalısıcak. Bu mantıkla ilerlenirse O bölgeye mouse bilgileri girilip bir neyi tıklama yaptırma işlemi yapılmalı diye düşünüdük biraz açamamış olabilirim konuyu kusuruma bakmayın  :)


sem

Ne konuştuğumuzu unutmuşum başlıkta, nereden nereye, nasıl buralara geldi diye ayrıca okumam gerekti maalesef =)

Farklı konular üzerinden gidince böyle oluyor maalesef.

Ekran dediğmiz nedir tam olarak burada. Hangi grafik kütüphanesini kullanıyorsunuz? GTK, QT, OpenGL gibi konulara atlayacağız gibi hissediyorum, amixer'den...

Kullandığnız ara birimi detaylandırabilir misiniz?
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

GTK kullanıyorum hocam bir kaç virtual mouse uygulaması in uygulamasında X11 libler kullanılmıs acaba bizimde böyle bişile ilgilenme durumumuz olabilir mi ?
Hocam Opencv kullanıyorum hani daha ince ayrıntı bilemedim sımdı :)

sem

Son iletinizi tam olarak anlayamadım. 

QT ve GTK kodlamışlığım var fakat X11 kütüphanelerini kullanmadım daha önceden.  

Yapılmak isteneni netleştirmek adına, örneğin 100x100 bir ekran olsun. Siz bunun örneğin sol üsten köşeden itibaren 10x10 (tamamen örnek bir lokasyon) kadarlık bir alana basıldığında bir olay tetiklemek istiyorsunuz doğru mu anlıyorum. Yani kullanıcının tıkladığı yeri hesaplayıp buna göre uygulama içerisinde bir şeyler yapmak istiyorsunuz. Doğru mudur?

Eğer doğru ise burada bahsettiğimiz 100x100 alan nedir? Sizin uygulama pencereniz mi yoksa masaüsü müdür? Üzerine gideceksek detaylara inelim =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

Tamda dediğiniz gibi hocam. O alan 640x480 lik bir frame sağ tarafında sesi acıp kapama işlemleri yapılacak üst kısımda ileri geri kanal değişimi. Herşey bnm uygulama penceremde yürüyecek

söyle bir örnek gösterebilirim. Paint yaptıgım ekrandan



http://i.hizliresim.com/glnbX3.png

Mesela O led yazan yerlerde ileri geri ve stop başlat butonları olucak. Ben orada GPIO sürme işlemi ypmıstım

sem

O zaman sorun o kadar da karışık olmuyor bu durumda. Eğer kendi pencereniz üzerinde işlem yapacaksanız ve GTK kullanıyorsanız GTK+ button nesnesi işinizi görüyor demektir. 

GTK ile buttonu ne şekilde yapmaya çalıştınız? Forumda GTK anlatımı vardı, bu konuyu okumuş muydunuz?

https://forum.ubuntu-tr.net/index.php?topic=24749.0
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

Kaanx

hocam bu konuya denk gelmemiştim okumalıyım hemen müsait bir zamanda fakat söyle sorum olucak size . Bunun ile istediğim komutu verdirebilir miyim cunku yayın bir IP uzerınden gelicek bana yada kafam karıstı benim :)

sem

=)

Her bir iletiniz yeni bir sürpriz. =) Bence bir sonraki iletinizde, sorununuzu en kısa sürede ulaştırmak adına, ihtiyaç duyulacak başka bir bilgi var mı diye düşünün. Hepsini bir kerede bildirin. Bizim fikir yürütmemiz daha kolay olur. =)

Kendimi bir DWH projesinde kaynak sistem analizi yapıyor gibi hissettim =), bir hataya ya da yeni bulguya rastlayıp sormadan kimse bir şey söylemez bu gibi kurumsal çalışmalarda da =)...

* Normalde size IP üzerinden bir akım geliyor yani bir stream gelecek. Siz bunu TV yayını olarak mı göstereceksiniz? Şu an yayını gösterebiliyor musunuz? Bu projede kanal değiştirme işlemi, IP değiştirerek farklı bir Stream'i okuma anlamına mı geliyor? Gelen Stream'i ne şekilde TV yayınına çeviriyorsunuz? VLC bu işin neresinde kalıyor tam olarak? VLC aracılığı ile hali hazırda izlenen bir yayına müdahale mi etmek istiyorsunuz? Bir uygulama penceresinde bir button oluşturmak istediğinizi söylemiştiniz, bu uygulama penceresi VLC mi yoksa kendi uygulamanız mı? vs. vs. vs...
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?