Lawe ʻia ka mea o ka ʻatikala mai kaʻu
Ke hana ʻana i kahi mea hana leo
I ka mua
I kēia lā e hana mākou i kahi noi e hiki ke hoʻopuka i kahi hōʻailona leo ma kahi kāleka kani. No ka hoʻoponopono ʻana i kēia pilikia, pono mākou e hoʻopili i nā kānana i loko o ke kaapuni mīkini kani i hōʻike ʻia ma lalo nei.
Heluhelu mākou i ke kiʻikuhi mai ka hema a i ka ʻākau, ʻo ia ke ala e neʻe ai kā mākou ʻikepili. Hōʻike pū nā pua i kēia. Hōʻike nā rectangles i nā kānana e hana ana i nā poloka o ka ʻikepili a hoʻopuka i ka hopena. I loko o ka rectangle, hōʻike ʻia kona kuleana a hōʻike ʻia ke ʻano kānana ma nā hua nui ma lalo iho. ʻO nā pua e hoʻopili ana i nā ʻāpana ʻāpana he mau queue ʻikepili kahi e lawe ʻia ai nā poloka o ka ʻikepili mai kānana a kānana. Ma keʻano laulā, hiki i kahi kānana ke loaʻa nā mea hoʻokomo a me nā mea hoʻopuka.
Hoʻomaka ia me ke kumu uaki, kahi e hoʻonohonoho ai i ka manawa i helu ʻia ai ka ʻikepili i nā kānana. E like me kona pōʻaiapuni uaki, hoʻoponopono kēlā me kēia kānana i nā poloka ʻikepili a pau i kona hoʻokomo. A waiho i nā poloka me ka hopena i waho i ka pila. ʻO ka mea mua,ʻo ka kānana kokoke loa i ke kumu o ka uaki e hana i nā helu, a laila ua pili nā kānana i kāna mau mea hoʻopuka (hiki ke loaʻa nā huahana he nui), a pēlā aku. Ma hope o ka hoʻopau ʻana o ka kānana hope loa i ke kaulahao, pau ka hoʻokō ʻana a hiki i kahi uaki hou. ʻO nā kuʻi, ma ka paʻamau, e hahai i kahi manawa o 10 milliseconds.
E hoʻi kāua i kā mākou kiʻi. Hiki mai nā pōʻaiapuni o ka uaki i ka hoʻokomo ʻana o ke kumu hāmau; he kānana kēia, kahi e hana nei i kahi poloka o ka ʻikepili i loaʻa nā zeros ma kāna puka no kēlā me kēia pōʻai uaki. Inā mākou e noʻonoʻo i kēia poloka ma ke ʻano he poloka o nā laʻana leo, a laila ʻaʻohe mea ʻē aʻe ma mua o ka hāmau. I ka nānā mua ʻana, he mea kupanaha ka hoʻopuka ʻana i nā poloka ʻikepili me ka leo ʻole - ma hope o nā mea a pau, ʻaʻole hiki ke lohe ʻia, akā pono kēia mau poloka no ka hana ʻana o ka mīkini hōʻailona leo. Hoʻohana ka mīkini hana i kēia mau poloka e like me kahi pepa paʻa ʻole, e hoʻopaʻa ana i nā mea kani i loko o lākou. Ma kona kūlana maʻamau, ua pio ka mīkini hana a hoʻouna wale i nā poloka komo i ka puka. No laila, hele ʻole nā poloka o ka hāmau ma ke kaapuni holoʻokoʻa mai ka hema a i ka ʻākau, e pau ana i ke kāleka kani. Ka mea e lawe malie i nā poloka mai ka pila i hoʻopili ʻia i kāna hoʻokomo.
Akā, hoʻololi nā mea a pau inā hāʻawi ʻia ka mea hana i ke kauoha e pāʻani i ke kani, hoʻomaka ia e hana i nā laʻana kani a hoʻololi iā lākou me nā laʻana i loko o nā poloka hoʻokomo a kau i nā poloka i hoʻololi ʻia i ka puka. Hoʻomaka ke kani kani i ke kani. Aia ma lalo kahi papahana e hoʻokō i ka papahana hana i hōʻike ʻia ma luna.
/* Файл mstest2.c */
#include <mediastreamer2/msfilter.h>
#include <mediastreamer2/msticker.h>
#include <mediastreamer2/dtmfgen.h>
#include <mediastreamer2/mssndcard.h>
int main()
{
ms_init();
/* Создаем экземпляры фильтров. */
MSFilter *voidsource = ms_filter_new(MS_VOID_SOURCE_ID);
MSFilter *dtmfgen = ms_filter_new(MS_DTMF_GEN_ID);
MSSndCard *card_playback = ms_snd_card_manager_get_default_card(ms_snd_card_manager_get());
MSFilter *snd_card_write = ms_snd_card_create_writer(card_playback);
/* Создаем тикер. */
MSTicker *ticker = ms_ticker_new();
/* Соединяем фильтры в цепочку. */
ms_filter_link(voidsource, 0, dtmfgen, 0);
ms_filter_link(dtmfgen, 0, snd_card_write, 0);
/* Подключаем источник тактов. */
ms_ticker_attach(ticker, voidsource);
/* Включаем звуковой генератор. */
char key='1';
ms_filter_call_method(dtmfgen, MS_DTMF_GEN_PLAY, (void*)&key);
/* Даем, время, чтобы все блоки данных были получены звуковой картой.*/
ms_sleep(2);
}
Ma hope o ka hoʻomaka ʻana i ka streamer media, hana ʻia ʻekolu kānana: voidsource, dtmfgen, snd_card_write. Hana ʻia kahi kumu uaki.
A laila pono ʻoe e hoʻopili i nā kānana e like me kā mākou kaapuni, a pono e hoʻopili ʻia ke kumu o ka uaki hope, ʻoiai ma hope o kēia e hoʻomaka koke ka hana. Inā hoʻohui ʻoe i kahi kumu uaki i kahi kaapuni i hoʻopau ʻole ʻia, hāʻule paha ka streamer media inā ʻike ʻo ia i hoʻokahi kānana ma ke kaulahao me nā mea hoʻokomo a i ʻole nā mea hoʻopuka āpau "e kau ana i ka lewa" (ʻaʻole pili).
Hoʻopili ʻia nā kānana me ka hoʻohana ʻana i ka hana
ms_filter_link(src, src_out, dst, dst_in)
kahi i kuhikuhi ai ka hoʻopaʻapaʻa mua i ke kānana kumu, ʻo ka pane ʻelua ka helu kumu kumu (e hoʻomaopopo i ka helu ʻana i nā mea hoʻokomo a me nā mea hoʻopuka e hoʻomaka ana mai ka ʻole). ʻO ke kolu o ka hoʻopaʻapaʻa he kuhikuhi i ka kānana hoʻokipa, ʻo ka hā ka helu hoʻokomo mea hoʻokipa.
Hoʻopili ʻia nā kānana a pau a hoʻopili ʻia ke kumu uaki hope loa (ma hope aku e kapa mākou iā ia he ticker). Ma hope o ka hoʻomaka ʻana o kā mākou kaapuni kani, akā ʻaʻohe mea e hiki ke lohe ʻia i loko o nā mea haʻi'ōlelo kamepiula - ua pio ka mea hoʻoheheʻe kani a hele wale i nā poloka ʻikepili hoʻokomo me ka hāmau. No ka hoʻomaka ʻana i kahi leo, pono ʻoe e holo i ke ʻano kānana generator.
E hana mākou i kahi hōʻailona ʻelua-leo (DTMF) e like me ke kaomi ʻana i ke pihi "1" ma ke kelepona. No ka hana ʻana i kēia, hoʻohana mākou i ka hana ms_filter_call_method() Kāhea mākou i ke ʻano MS_DTMF_GEN_PLAY, me ka hāʻawi ʻana iā ia ma ke ʻano he hoʻopaʻapaʻa he kuhikuhi i ke code e kūpono ai ka hōʻailona pāʻani.
ʻO nā mea a pau i koe e hōʻuluʻulu i ka papahana:
$ gcc mstest2.c -o mstest2 `pkg-config mediastreamer --libs --cflags`
A holo:
$ ./mstest2
Ma hope o ka hoʻomaka ʻana i ka papahana, e lohe ʻoe i kahi hōʻailona leo pōkole me ʻelua mau leo i loko o ka leo kamepiula.
Ua kūkulu mākou a hoʻomaka i kā mākou kaapuni kani mua. Ua ʻike mākou pehea e hana ai i nā mea kānana, pehea e hoʻopili ai iā lākou a pehea e kāhea ai i kā lākou mau ala. ʻOiai ʻoliʻoli mākou i kā mākou holomua mua, pono mākou e hoʻolohe i ka ʻoiaʻiʻo ʻaʻole hoʻokuʻu kā mākou papahana i ka hoʻomanaʻo i hāʻawi ʻia ma mua o ka puka ʻana. I ka wā e hiki mai ana
Source: www.habr.com