Bu derste basit ses çalıcısını bir sesin belirli bir bölümünü çaldıktan sonra duracak şekilde ayarlıyoruz
Bu derste ses çalıcısını ileri sarıp belirli bir süre çaldıktan sonra durmasını istiyoruz.
Örneğin 71. saniyeden başlasın. 16 saniye çalsın. Daha sonra uygulama sona ersin.
Aşağıdaki kütüğü dorduncu.c
olarak kaydediniz.
#include <gst/gst.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <locale.h>
char* birlestir(const char *ilk, const char *ikinci)
{
char *sonuc = malloc(strlen(ilk) + strlen(ikinci) + 1);
strcpy(sonuc, ilk);
strcat(sonuc, ikinci);
return sonuc;
}
static void iletiyiIsle(GstMessage *ileti);
int main(int argc, char *argv[])
{
setlocale(LC_ALL, "tr_TR.utf8");
GstElement *oynatici;
GstBus *veriYolu;
GstMessage *ileti;
gboolean sonlandir = FALSE;
static gint sayac = 0;
gst_init(&argc, &argv);
char* dosyaAc = "playbin uri=file://";
char* kutuk = "ses.mp3";
char* sonuc = birlestir(dosyaAc, kutuk);
printf("Birleştikten sonra %s\n", sonuc);
oynatici = gst_parse_launch(sonuc, NULL);
/* durakla */
gst_element_set_state(oynatici, GST_STATE_PAUSED);
/* gerekiyor */
gst_element_get_state(oynatici, NULL, NULL, GST_CLOCK_TIME_NONE);
long birSaniye = 1000000000;
long sarmaZamani = 71 * birSaniye;
/* ileri sar */
if (!gst_element_seek (oynatici,
1.0,
GST_FORMAT_TIME,
GST_SEEK_FLAG_FLUSH | GST_SEEK_FLAG_SEGMENT |
GST_SEEK_FLAG_ACCURATE,
GST_SEEK_TYPE_SET,
sarmaZamani,
GST_SEEK_TYPE_NONE,
-1))
{
g_print ("Sarma başarısız!\n");
}
gst_element_set_state(oynatici, GST_STATE_PLAYING);
veriYolu = gst_element_get_bus(oynatici);
do
{
ileti = gst_bus_timed_pop_filtered (veriYolu,
1000 * GST_MSECOND,
GST_MESSAGE_ERROR |
GST_MESSAGE_EOS);
if (ileti != NULL)
{
iletiyiIsle(ileti);
}
else
{
sayac = sayac + 1;
g_print("Sayaç %d\n", sayac);
if (sayac == 16)
{
g_print("Uygulamadan çıkıyorum\n");
/* Kaynakları geri ver */
gst_object_unref(veriYolu);
gst_element_set_state(oynatici, GST_STATE_NULL);
gst_object_unref(oynatici);
return 0;
}
g_print("1 saniye geçti\n");
}
} while (!sonlandir);
/* Kaynakları geri ver */
gst_object_unref(veriYolu);
gst_element_set_state(oynatici, GST_STATE_NULL);
gst_object_unref(oynatici);
return 0;
}
static void iletiyiIsle (GstMessage *ileti)
{
switch (GST_MESSAGE_TYPE (ileti))
{
case GST_MESSAGE_ERROR:
g_error("Bir hata oluştu\n");
break;
default:
break;
}
}
Eğer bash
kabuğu kullanıyorsanız C kodunu aşağıdaki gibi derleyebilirsiniz.
gcc dorduncu.c -o dorduncu `pkg-config --cflags --libs gstreamer-1.0`
Eğer 'fish' kabuğu kullanıyorsanız ~/.config/fish/functions/
dizininde derle.fish
isminde bir işlev oluşturunuz.
İçine aşağıdakileri giriniz.
function derle
set kutuk (string join '' $argv[1] .c)
gcc $kutuk -o $argv[1] (pkg-config --cflags --libs gstreamer-1.0 | string split -n " ")
end
Artık kaynak kodunu derle dorduncu
yazarak derleyebilirsiniz.
Yorumlar