<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3788780998256913722</id><updated>2024-09-20T04:22:38.939+08:00</updated><category term="audio"/><category term="socket"/><category term="software"/><category term="tutorial"/><category term="udp"/><category term="Pengaturcaraan"/><category term="Programming"/><category term="Technology"/><category term="Teknologi"/><category term="informasi"/><title type='text'>DNX Group</title><subtitle type='html'>Learn and Share the knowledge together. Focused on Multimedia, Graphics, Programming and Information Technology.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://dnxgroup.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://dnxgroup.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Syahmi Azhar</name><uri>http://www.blogger.com/profile/14781246766009267942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>5</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3788780998256913722.post-2413955477022656370</id><published>2011-12-01T14:50:00.001+08:00</published><updated>2011-12-01T16:07:11.775+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Programming"/><category scheme="http://www.blogger.com/atom/ns#" term="socket"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial"/><category scheme="http://www.blogger.com/atom/ns#" term="udp"/><title type='text'>Sending file through UDP Socket</title><content type='html'>&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDT4sWNrRJu1oKjOJiSJbLqmYEBau6bgiipCp5g4ZCMvkAb_EoUDBqPQLnHJOxgxz2dhbMInVEZ40hRtLJ8zSlfwHd4d8CTa4LNfQzCXR2am8jUhly-Vki-nLXjo414ydR4sgr_kn2br4/s1600/xcantik.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;105&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDT4sWNrRJu1oKjOJiSJbLqmYEBau6bgiipCp5g4ZCMvkAb_EoUDBqPQLnHJOxgxz2dhbMInVEZ40hRtLJ8zSlfwHd4d8CTa4LNfQzCXR2am8jUhly-Vki-nLXjo414ydR4sgr_kn2br4/s200/xcantik.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;User Datagram Protocol or UDP is a simple protocol. This protocol is unreliable - when a data packet is sent, it cannot be not known if it will reach its destination or not. There is no acknowledgement, retransmission, or timeout. When multiple data is sent at once, the order which they arrive cannot be predicted. They might be out of order. The data that is sent with sequence 1,2,3 might be recieved as 2,3,1. So, sending files through UDP socket is a bit difficult.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Normally in a realtime game such as FPS, UDP protocol is used to send player location and behaviour. This data will be send continuously to provide a realtime player action to other player. But when the data is not arrived, the data will be skipped without retransmission so that the gameplay will be realtime, and not delayed. When sending files, a new protocol must be constructed as the file data must be sent completely. It cannot be skipped as it will corrupt the file.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;About This Project&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
This is a simple project to demonstrate sending a file through UDP Socket. The code here might not perfect and may contains several flaws and bugs which might prevent the file from being sent perfectly.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.mediafire.com/?ouc216vhvamtbtp&quot; target=&quot;_blank&quot;&gt;Download Project file + Demo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;UDP&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
To start this project, a simple UDP socket class must be constructed to assists sending and&amp;nbsp;receiving data packet through UDP socket. This class will be named CSockUDP and will contain this method:&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;class CSockUDP
{
public:
 static int InitWinsock();
 static void DestroyWinsock();

 void SetCallback(cbDataRecieved fnRecieved);
 int CreateSocket(int nPort = 31313);

 void StartListen();
 void StopListen();

 bool SetServerAddress(char* szServer, int nPort);
 int SendData(LPVOID lpData, int nSize);
 int ResendData();
}&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: normal;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff2cc; font-family: monospace; white-space: pre;&quot;&gt;InitWinsock()&lt;/span&gt;&amp;nbsp;and&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff2cc; font-family: monospace; white-space: pre;&quot;&gt;DestroyWinsock()&lt;/span&gt;&amp;nbsp;is a call to WinsockAPI to initiates and stop the use of Winsock Dll. It must be called on very early when the program is started and on the very end before the program terminated.&lt;br /&gt;
&lt;br /&gt;
A call to&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff2cc; font-family: monospace; white-space: pre;&quot;&gt;CreateSocket()&lt;/span&gt;&amp;nbsp;will create a new UDP socket and assign it with a port number. Then,&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff2cc; font-family: monospace; white-space: pre;&quot;&gt;SetCallback()&lt;/span&gt;&amp;nbsp;is called to set&amp;nbsp;receive&amp;nbsp;event function.&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fff2cc; font-family: monospace; white-space: pre;&quot;&gt;StartListen()&lt;/span&gt;&amp;nbsp;will create a new thread which will executes a loop code and listen for any incoming data. Other method is self explanation.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
To send files through UDP socket, firstly a protocol must be constructed. Every data packet that is sent must have some sort of acknowledgement and identification so the receiver can understand what is it and what should it do. We can start by creating a data header followed by the data itself.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;struct TUDPHeader
{
 char szID[3]; // &#39;IKH&#39; - unique id
 DWORD dwCRC32; // Checksum of Data
 char type;  // eDataType
 int nLength; // Data length

 // Data (TUDPFileHeader/TUDPFileReply/TUDPFileTransfer)
};&lt;/pre&gt;
Inside this header,&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;szID&lt;/span&gt;&amp;nbsp;is an identification. It will contain unique data, &quot;IKH&quot; in this case and send it to the receiver. When the receiver read the data and found that the first 3 bytes is equal to &quot;IKH&quot;, it will continue read the packet but when it different, the packet will simply be skipped as it might come from other software that is also sending a data to the same port.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;dwCRC32&lt;/span&gt;&amp;nbsp;will contain a data checksum (not including&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;TUDPHeader&lt;/span&gt;). The sender will calculate the data checksum and fill&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;dwCRC32&lt;/span&gt;&amp;nbsp;with it. When it arrives at destination, the receiver will calculate the data checksum again and compare it with&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;dwCRC32&lt;/span&gt;. If the checksum calculated by receiver differ from what is sent by sender, it will indicates that the data is corrupted or altered before its reach its destination. If this happen, the receiver will request that the data must be sent back again.&lt;br /&gt;
&lt;br /&gt;
type explains to the receiver what must it do with the data.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;enum eDataType
{
 eDataTypeConnect,   // ping
 eDataTypeConnected,   // Reply if server got connect message
 eDataTypeResend,   // Corrupted data, request for resend
 eDataTypeQuit,    // Exit the program, client and server

 eDataTypeFileHeader,  // TUDPFileHeader
 eDataTypeFileTransfer,  // TUDPFileTransfer

 eDataTypeFileReplyAccept, // Accept the file send request
 eDataTypeFileReplyReject, // Denied the file send request
 eDataTypeFileReplyOK,  // Proceed to next stream
 eDataTypeFileReplyFinish // Finished transfer
};
&lt;/pre&gt;
&lt;br /&gt;
Lastly inside this header (&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;TUDPHeader&lt;/span&gt;), is&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;nLength&lt;/span&gt;.&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;nLength &lt;/span&gt;will tell how big is the data sent by sender. Without it, the receiver does not know when the data end.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When a file is being sent, a packet is constructed from&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;TUDPHeader&lt;/span&gt;&amp;nbsp;followed by&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;TUDPFileHeader&lt;/span&gt;. It will send a file name followed by size of the file in bytes.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;struct TUDPFileHeader
{
 char szFileName[128];
 int nFileSize;
};&lt;/pre&gt;
&lt;br /&gt;
After that, receiver will reply either to accept the file or reject it like we can see in&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;eDataType&lt;/span&gt;, &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #cfe2f3;&quot;&gt;eDataTypeFileReplyAccept&lt;/span&gt;/&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #cfe2f3;&quot;&gt;eDataTypeFileReplyReject&lt;/span&gt;. &lt;/span&gt;If the file is accepted, the receiver will create a new file and the sender will immediately send the file data using&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; white-space: pre;&quot;&gt;TUDPFileTransfer &lt;/span&gt;which contain file offset, data size and the file data itself.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;struct TUDPFileTransfer
{
 int nFileOffset;
 int nLength;
 char szData[2048];
};&lt;/pre&gt;
&lt;br /&gt;
The receiver then writes the newly created file with the data its received in&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;TUDPFileTransfer&lt;/span&gt;&amp;nbsp;until the file completed.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFycp7IJ_hHptHHYQ3ENEB5kG_Sp1fyLoivMfVO6suKi5vVFUeLgPuCTmXsjLj52V1To0reos2-1Sp8JE4xRGMs6Nex1n3xglrkWMa1c2v1xrwIeAwg61kEF-6K8jaXFiFmmTG_QWYT0M/s1600/TUDPHeaderTUDPFileHeader.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;198&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFycp7IJ_hHptHHYQ3ENEB5kG_Sp1fyLoivMfVO6suKi5vVFUeLgPuCTmXsjLj52V1To0reos2-1Sp8JE4xRGMs6Nex1n3xglrkWMa1c2v1xrwIeAwg61kEF-6K8jaXFiFmmTG_QWYT0M/s400/TUDPHeaderTUDPFileHeader.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 13px;&quot;&gt;Example of sending data packet with TUDPHeader + TUDPFileHeader&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
Artikel ini juga boleh didapati dalam Bahasa Melayu: &lt;a href=&quot;http://dnxgroup.blogspot.com/2011/11/menghantar-file-menggunakan-soket-udp.html&quot;&gt;Klik disini&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://dnxgroup.blogspot.com/feeds/2413955477022656370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dnxgroup.blogspot.com/2011/12/sending-file-through-udp-socket.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/2413955477022656370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/2413955477022656370'/><link rel='alternate' type='text/html' href='http://dnxgroup.blogspot.com/2011/12/sending-file-through-udp-socket.html' title='Sending file through UDP Socket'/><author><name>Syahmi Azhar</name><uri>http://www.blogger.com/profile/14781246766009267942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDT4sWNrRJu1oKjOJiSJbLqmYEBau6bgiipCp5g4ZCMvkAb_EoUDBqPQLnHJOxgxz2dhbMInVEZ40hRtLJ8zSlfwHd4d8CTa4LNfQzCXR2am8jUhly-Vki-nLXjo414ydR4sgr_kn2br4/s72-c/xcantik.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3788780998256913722.post-1222495032101315785</id><published>2011-11-27T07:34:00.001+08:00</published><updated>2011-12-01T16:13:12.454+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Pengaturcaraan"/><category scheme="http://www.blogger.com/atom/ns#" term="socket"/><category scheme="http://www.blogger.com/atom/ns#" term="tutorial"/><category scheme="http://www.blogger.com/atom/ns#" term="udp"/><title type='text'>Menghantar file menggunakan Soket UDP</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Pengenalan&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDT4sWNrRJu1oKjOJiSJbLqmYEBau6bgiipCp5g4ZCMvkAb_EoUDBqPQLnHJOxgxz2dhbMInVEZ40hRtLJ8zSlfwHd4d8CTa4LNfQzCXR2am8jUhly-Vki-nLXjo414ydR4sgr_kn2br4/s1600/xcantik.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;105&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDT4sWNrRJu1oKjOJiSJbLqmYEBau6bgiipCp5g4ZCMvkAb_EoUDBqPQLnHJOxgxz2dhbMInVEZ40hRtLJ8zSlfwHd4d8CTa4LNfQzCXR2am8jUhly-Vki-nLXjo414ydR4sgr_kn2br4/s200/xcantik.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;User Datagram Protocol atau UDP merupakan protokol yang ringkas. Protokol ini tidak boleh dipercayai - Apabila data dihantar, ia tidak dapat dipastikan sama ada data yang dihantar itu tadi sampai ataupun tidak. Pada protokol ini, tiada konsep pengakuan(acknowledgement), penghantaran semula(retransmission) ataupun masa tamat(timeout). Apabila data dihantar, kemungkinan data yang sampai tidak tersusun. Data dalam susunan 1,2,3 dihantar kemungkinan diterima dalam susunan 2,3,1. Oleh itu, penghantaran fail menggunakan protokol UDP adalah sedikit susah.&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Biasanya dalam permainan komputer FPS, protokol UDP digunakan untuk menghantar lokasi dan aksi si pemain. Data-data ini akan dihantar berterusan kepada pemain lain. Namun, apabila data yang dihantar tidak sampai, ia akan dibiarkan tanpa dihantar semula agar permainan itu tidak kelihatan lewat atau lambat. Lain pula apabila menghantar fail, protokol baru perlu dibina diatas UDP bagi memastikan data yang dihantar lengkap dan mencukupi.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;Tentang Projek Ini&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Ini adalah satu projek ringkas untuk menunjukkan penghantaran fail melalui UDP. Kemungkinan kod-kod yang dipaparkan disini mempunyai ralat dan mungkin tidak dapat untuk menghantar fail dengan sempurna.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.mediafire.com/?ouc216vhvamtbtp&quot; target=&quot;_blank&quot;&gt;Download Fail Projek + Demo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;&lt;b&gt;UDP&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
Bagi memulakan projek ini, satu kelas ringkas bagi soket UDP perlu dihasilkan. Kelas ini dinamakan&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd;&quot;&gt;CSockUDP&lt;/span&gt; &lt;/span&gt;dan mempunyai method-method berikut:&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;class CSockUDP
{
public:
 static int InitWinsock();
 static void DestroyWinsock();

 void SetCallback(cbDataRecieved fnRecieved);
 int CreateSocket(int nPort = 31313);

 void StartListen();
 void StopListen();

 bool SetServerAddress(char* szServer, int nPort);
 int SendData(LPVOID lpData, int nSize);
 int ResendData();
}&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Times New Roman&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: normal;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Metod&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #ffe599; font-family: monospace; white-space: pre;&quot;&gt;InitWinsock()&lt;/span&gt;&amp;nbsp;dan&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #ffe599; font-family: monospace; white-space: pre;&quot;&gt;DestroyWinsock()&lt;/span&gt;&amp;nbsp;adalah panggilan ke WinsockAPI untuk memulakan penggunaan Winsock DLL dan menghentikannya. Ia perlu dipanggil awal semasa program baru berjalan dan juga sebelum program berakhir.&lt;br /&gt;
&lt;br /&gt;
Panggilan kepada&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #ffe599; font-family: monospace; white-space: pre;&quot;&gt;CreateSocket()&lt;/span&gt;&amp;nbsp;akan membuat satu soket UDP dengan port yang ditetapkan. Selepas itu, metod&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #ffe599; font-family: monospace; white-space: pre;&quot;&gt;SetCallback()&lt;/span&gt;&amp;nbsp;perlu dipanggil untuk penerimaan data.&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #ffe599; font-family: monospace; white-space: pre;&quot;&gt;StartListen()&lt;/span&gt;&amp;nbsp;akan membina satu bebenang baru bagi melaksanakan satu fungsi gelung untuk memeriksa jika ada data masuk. Metod-metod yang lain jelas maksudnya dan rasanya tidak memerlukan penerangan.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Untuk menghantar fail melalui UDP, pertama sekali protokol untuk penghantaran fail perlu dibina. Setiap data yang dihantar mestilah mempunyai pengenalan supaya penerima faham apakah yang baru diterimanya itu dan apa yang perlu dibuat pada data yang baru diterimanya itu. Untuk itu kita akan membuat satu struktur bagi data header dengan disusuli oleh data yang hendak dihantar.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;struct TUDPHeader
{
 char szID[3]; // &#39;IKH&#39; - unique id
 DWORD dwCRC32; // Checksum of Data
 char type;  // eDataType
 int nLength; // Data length

 // Data (TUDPFileHeader/TUDPFileReply/TUDPFileTransfer)
};&lt;/pre&gt;
Didalam header ini ada satu pengenalan,&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;szID&lt;/span&gt;&amp;nbsp;yang akan mempunyai data &quot;IKH&quot; untuk pengenalan kepada penerima. Jika paket yang diterimanya lain daripada &quot;IKH&quot; tadi, paket data tersebut akan terus diabaikan tanpa dibaca kerana kemungkinan ianya datang daripada software yang lain.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;dwCRC32&lt;/span&gt;&amp;nbsp;akan diisi dengan checksum bagi keseluruhan data (tidak termasuk&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;TUDPHeader&lt;/span&gt;). Penghantar akan mengira checksum bagi data-data yang akan dihantar dan dimasukkan kedalam&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;dwCRC32&lt;/span&gt;. Penerima, setelah menerima paket akan mengira semula checksum bagi data dan membandingkan dengan&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;dwCRC32&lt;/span&gt;&amp;nbsp;&amp;nbsp;yang dihantar. Jika terdapat perbezaan, kemungkinan data yang dihantar korup atau rosak ataupun telah diubah. Penerima akan meminta data tersebut dihantar semula.&lt;br /&gt;
&lt;br /&gt;
type fungsinya menjelaskan kepada penerima jenis data apakah yang dihantar.
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;enum eDataType
{
 eDataTypeConnect,   // ping
 eDataTypeConnected,   // Reply if server got connect message
 eDataTypeResend,   // Corrupted data, request for resend
 eDataTypeQuit,    // Exit the program, client and server

 eDataTypeFileHeader,  // TUDPFileHeader
 eDataTypeFileTransfer,  // TUDPFileTransfer

 eDataTypeFileReplyAccept, // Accept the file send request
 eDataTypeFileReplyReject, // Denied the file send request
 eDataTypeFileReplyOK,  // Proceed to next stream
 eDataTypeFileReplyFinish // Finished transfer
};
&lt;/pre&gt;
&lt;br /&gt;
Kemudian, akhir sekali pada Header adalah&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #d9ead3; font-family: monospace; white-space: pre;&quot;&gt;nLength&lt;/span&gt;, yang akan memberitahu penerima berapa besar saiz data yang dihantar agar penerima tahu dimanakah data tersebut tamat.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Sewaktu fail hendak dihantar, satu paket data akan dibina menggunakan&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;TUDPHeader&lt;/span&gt;&amp;nbsp;diikuti dengan&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;TUDPFileHeader&lt;/span&gt;. Ia akan menghantar nama fail diikuti dengan panjang fail tersebut dalam unit bytes.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;struct TUDPFileHeader
{
 char szFileName[128];
 int nFileSize;
};&lt;/pre&gt;
&lt;br /&gt;
Setelah itu, penerima akan membalas sama ada untuk menerimanya atau tidak seperti yang boleh dilihat di&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;eDataType&lt;/span&gt;,&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #cfe2f3;&quot;&gt;eDataTypeFileReplyAccept&lt;/span&gt;/&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: monospace; white-space: pre;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #cfe2f3;&quot;&gt;eDataTypeFileReplyReject&lt;/span&gt;. &lt;/span&gt;Jika diterima, penerima akan membina satu fail dan penghantar akan terus menghantar fail tersebut menggunakan&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: #fce5cd; font-family: monospace; white-space: pre;&quot;&gt;TUDPFileTransfer&lt;/span&gt;&amp;nbsp;yang mengandungi offset, saiz data, dan data fail itu sendiri.&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: cpp&quot;&gt;struct TUDPFileTransfer
{
 int nFileOffset;
 int nLength;
 char szData[2048];
};&lt;/pre&gt;
&lt;br /&gt;
Penerima pula akan menulis fail yang dibinanya tadi dengan data yang dibekalkan sehingga lengkap.&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFycp7IJ_hHptHHYQ3ENEB5kG_Sp1fyLoivMfVO6suKi5vVFUeLgPuCTmXsjLj52V1To0reos2-1Sp8JE4xRGMs6Nex1n3xglrkWMa1c2v1xrwIeAwg61kEF-6K8jaXFiFmmTG_QWYT0M/s1600/TUDPHeaderTUDPFileHeader.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;198&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFycp7IJ_hHptHHYQ3ENEB5kG_Sp1fyLoivMfVO6suKi5vVFUeLgPuCTmXsjLj52V1To0reos2-1Sp8JE4xRGMs6Nex1n3xglrkWMa1c2v1xrwIeAwg61kEF-6K8jaXFiFmmTG_QWYT0M/s400/TUDPHeaderTUDPFileHeader.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;Contoh menghantar TUDPHeader + TUDPFileHeader&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
This article also available in English: &lt;a href=&quot;http://dnxgroup.blogspot.com/2011/12/sending-file-through-udp-socket.html&quot;&gt;Click Here&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://dnxgroup.blogspot.com/feeds/1222495032101315785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dnxgroup.blogspot.com/2011/11/menghantar-file-menggunakan-soket-udp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/1222495032101315785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/1222495032101315785'/><link rel='alternate' type='text/html' href='http://dnxgroup.blogspot.com/2011/11/menghantar-file-menggunakan-soket-udp.html' title='Menghantar file menggunakan Soket UDP'/><author><name>Syahmi Azhar</name><uri>http://www.blogger.com/profile/14781246766009267942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDT4sWNrRJu1oKjOJiSJbLqmYEBau6bgiipCp5g4ZCMvkAb_EoUDBqPQLnHJOxgxz2dhbMInVEZ40hRtLJ8zSlfwHd4d8CTa4LNfQzCXR2am8jUhly-Vki-nLXjo414ydR4sgr_kn2br4/s72-c/xcantik.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3788780998256913722.post-3809420895104017805</id><published>2011-11-17T23:40:00.001+08:00</published><updated>2011-12-01T16:08:32.879+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="audio"/><category scheme="http://www.blogger.com/atom/ns#" term="software"/><category scheme="http://www.blogger.com/atom/ns#" term="Technology"/><title type='text'>Sing with Songsmith</title><content type='html'>&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilTbztBNdzqzibNI1uSSnyZ1YMxliicc2G0ocOoZDe9ZxTSowJo8HWVDCHNHDUMcmIhwaNdF2_80GyJcA4-_m4UvuVifCgKIkyXcnMMgFjZWZ6dxcfBmz8BTlNPFNf1siKWjRaeCTlYmg/s1600/Songsmith_logo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilTbztBNdzqzibNI1uSSnyZ1YMxliicc2G0ocOoZDe9ZxTSowJo8HWVDCHNHDUMcmIhwaNdF2_80GyJcA4-_m4UvuVifCgKIkyXcnMMgFjZWZ6dxcfBmz8BTlNPFNf1siKWjRaeCTlYmg/s200/Songsmith_logo.png&quot; width=&quot;151&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Even sing alone? Ever thought about writing your own music? Most people never get a chance to try. But,&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/&quot; target=&quot;_blank&quot;&gt;Microsoft Research&lt;/a&gt;&amp;nbsp;with their partners:&amp;nbsp;&lt;a href=&quot;http://www.garritan.com/&quot; target=&quot;_blank&quot;&gt;Garritan&lt;/a&gt;,&amp;nbsp;&lt;a href=&quot;http://www.plogue.com/&quot; target=&quot;_blank&quot;&gt;Plogue&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;http://www.pgmusic.com/&quot; target=&quot;_blank&quot;&gt;PGMusic&lt;span id=&quot;goog_1834350780&quot;&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;developed a computer applications, called Songsmith to help you created a fresh song complete with musical instrument.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/index.html&quot; target=&quot;_blank&quot;&gt;Songsmith&lt;/a&gt;&amp;nbsp;is an application that can help you to create your own song by just only singing. You will only needed to open the Songsmith, choose music style and press Record button, then sing any song you like. After that, pressing the Stop button will not only stop the recording, but it will automatically generate musical accompaniment to match your voice. Not just that, your song and musical accompaniment can be saved as audio format and can be played back for someone beloved such as your mother or you can save it to your MP3 player. :)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy7CcbQnz3fe60dcjKYqb4KDoJ_98P9bZWUwcEMRb7kIyR3HAhWlnIAxXHP91MUBHS-jqL77Zt2X1gDHFCb6e7qCZPofGiRIMNoO-hLxP2ZYeve4RhH-4krbIqmddmXenmZcRlVyLaAic/s1600/songsmith_mainwindow.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;187&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy7CcbQnz3fe60dcjKYqb4KDoJ_98P9bZWUwcEMRb7kIyR3HAhWlnIAxXHP91MUBHS-jqL77Zt2X1gDHFCb6e7qCZPofGiRIMNoO-hLxP2ZYeve4RhH-4krbIqmddmXenmZcRlVyLaAic/s320/songsmith_mainwindow.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Interesting? You can download the application here:&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/download.html&quot;&gt;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/download.html&lt;/a&gt;&lt;br /&gt;
Note: The free trial version can be used only for 6 hours.&lt;br /&gt;
&lt;br /&gt;
Songsmith requires a Windows based Operating System and Microsoft .NET Framework 3.0 (for Windows XP only). You will needed a microphone too.&lt;br /&gt;
&lt;br /&gt;
If you are more interested in how the application works, you can go to&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/en-us/um/people/dan/mysong/&quot; target=&quot;_blank&quot;&gt;MySong project&lt;/a&gt;&amp;nbsp;to read the research paper there. It was a collaboration of&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/en-us/um/people/dan/&quot; target=&quot;_blank&quot;&gt;Dan Morris&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/en-us/um/people/sumitb/&quot; target=&quot;_blank&quot;&gt;Sumit Basu&lt;/a&gt;&amp;nbsp;from Microsoft Reasearch with&amp;nbsp;&lt;a href=&quot;http://www.iansimon.org/&quot; target=&quot;_blank&quot;&gt;Ian Simon&lt;/a&gt;, from University of Washington.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Homepage:&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/index.html&quot;&gt;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/index.html&lt;/a&gt;&lt;br /&gt;
Download Link:&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/download.html&quot;&gt;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/download.html&lt;/a&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;a href=&quot;http://dnxgroup.blogspot.com/2011/11/bernyanyi-bersama-songsmith.html&quot;&gt;Artikel ini juga terdapat dalam Bahasa Melayu&lt;/a&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://dnxgroup.blogspot.com/feeds/3809420895104017805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dnxgroup.blogspot.com/2011/11/sing-with-songsmith.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/3809420895104017805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/3809420895104017805'/><link rel='alternate' type='text/html' href='http://dnxgroup.blogspot.com/2011/11/sing-with-songsmith.html' title='Sing with Songsmith'/><author><name>Syahmi Azhar</name><uri>http://www.blogger.com/profile/14781246766009267942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilTbztBNdzqzibNI1uSSnyZ1YMxliicc2G0ocOoZDe9ZxTSowJo8HWVDCHNHDUMcmIhwaNdF2_80GyJcA4-_m4UvuVifCgKIkyXcnMMgFjZWZ6dxcfBmz8BTlNPFNf1siKWjRaeCTlYmg/s72-c/Songsmith_logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3788780998256913722.post-2329970622113553486</id><published>2011-11-17T22:41:00.001+08:00</published><updated>2011-12-01T16:08:53.800+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="audio"/><category scheme="http://www.blogger.com/atom/ns#" term="software"/><category scheme="http://www.blogger.com/atom/ns#" term="Teknologi"/><title type='text'>Bernyanyi bersama Songsmith</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilTbztBNdzqzibNI1uSSnyZ1YMxliicc2G0ocOoZDe9ZxTSowJo8HWVDCHNHDUMcmIhwaNdF2_80GyJcA4-_m4UvuVifCgKIkyXcnMMgFjZWZ6dxcfBmz8BTlNPFNf1siKWjRaeCTlYmg/s1600/Songsmith_logo.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilTbztBNdzqzibNI1uSSnyZ1YMxliicc2G0ocOoZDe9ZxTSowJo8HWVDCHNHDUMcmIhwaNdF2_80GyJcA4-_m4UvuVifCgKIkyXcnMMgFjZWZ6dxcfBmz8BTlNPFNf1siKWjRaeCTlYmg/s200/Songsmith_logo.png&quot; width=&quot;151&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
Pernahkah anda menyanyi atau bersenandung sendirian? Pernah terfikir untuk menulis seni lagu anda sendiri? Kebanyakan orang tidak berpeluang untuk mencubanya. Namun, &lt;a href=&quot;http://research.microsoft.com/&quot; target=&quot;_blank&quot;&gt;Microsoft Research&lt;/a&gt; dengan usahasama &lt;a href=&quot;http://www.garritan.com/&quot; target=&quot;_blank&quot;&gt;Garritan&lt;/a&gt;, &lt;a href=&quot;http://www.plogue.com/&quot; target=&quot;_blank&quot;&gt;Plogue&lt;/a&gt; serta &lt;a href=&quot;http://www.pgmusic.com/&quot; target=&quot;_blank&quot;&gt;&lt;span id=&quot;goog_1834350779&quot;&gt;&lt;/span&gt;PGMusic&lt;span id=&quot;goog_1834350780&quot;&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;telah membangunkan applikasi komputer Songsmith bertujuan untuk anda mereka lagu lengkap dengan alatan muzik.&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/index.html&quot; target=&quot;_blank&quot;&gt;Songsmith&lt;/a&gt; adalah applikasi yang boleh membantu anda mencipta lagu dengan hanya merakam suara anda bernyanyi. Anda hanya perlu membuka applikasi Songsmith, pilih gaya muzik yang disukai dan klik butang rakam, kemudian nyanyilah apa-apa lagu yang anda suka. Selesai menyanyi, dengan hanya menekan butang Stop, Songsmith secara automatik akan mencipta iringan muzik serasi dengan suara nyanyian anda. Bukan setakat itu, nyanyian anda beserta iringan muzik yang baru dicipta boleh disimpan sebagai format audio dan boleh didendangkan kepada orang tersayang seperti ibu anda :)&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy7CcbQnz3fe60dcjKYqb4KDoJ_98P9bZWUwcEMRb7kIyR3HAhWlnIAxXHP91MUBHS-jqL77Zt2X1gDHFCb6e7qCZPofGiRIMNoO-hLxP2ZYeve4RhH-4krbIqmddmXenmZcRlVyLaAic/s1600/songsmith_mainwindow.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;187&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy7CcbQnz3fe60dcjKYqb4KDoJ_98P9bZWUwcEMRb7kIyR3HAhWlnIAxXHP91MUBHS-jqL77Zt2X1gDHFCb6e7qCZPofGiRIMNoO-hLxP2ZYeve4RhH-4krbIqmddmXenmZcRlVyLaAic/s320/songsmith_mainwindow.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
Berminat? Anda boleh memuat turun percuma applikasi Songsmith di URL berikut:&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/download.html&quot;&gt;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/download.html&lt;/a&gt;&lt;br /&gt;
Songsmith versi percuma hanya membenarkan penggunaan selama 6 jam.&lt;br /&gt;
&lt;br /&gt;
Songsmith memerlukan sistem operasi Windows dan memerlukan Microsoft .NET Framework 3.0 (bagi Windows XP sahaja). Anda tidak memerlukan peranti tambahan selain daripada mikrofon.&lt;br /&gt;
&lt;br /&gt;
Jika anda berminat untuk mengetahui bagaimana Songsmith berfungsi, anda boleh ke laman &lt;a href=&quot;http://research.microsoft.com/en-us/um/people/dan/mysong/&quot; target=&quot;_blank&quot;&gt;MySong project&lt;/a&gt;&amp;nbsp;untuk membaca kertas penyelidikan hasil kerjasama &lt;a href=&quot;http://research.microsoft.com/en-us/um/people/dan/&quot; target=&quot;_blank&quot;&gt;Dan Morris&lt;/a&gt; dan &lt;a href=&quot;http://research.microsoft.com/en-us/um/people/sumitb/&quot; target=&quot;_blank&quot;&gt;Sumit Basu&lt;/a&gt;&amp;nbsp;daripada&amp;nbsp;Microsoft Reasearch serta &lt;a href=&quot;http://www.iansimon.org/&quot; target=&quot;_blank&quot;&gt;Ian Simon&lt;/a&gt;, daripada University of Washington.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Homepage:&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/index.html&quot;&gt;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/index.html&lt;/a&gt;&lt;br /&gt;
Download Link:&amp;nbsp;&lt;a href=&quot;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/download.html&quot;&gt;http://research.microsoft.com/en-us/um/redmond/projects/songsmith/download.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://dnxgroup.blogspot.com/2011/11/sing-with-songsmith.html&quot;&gt;This article also available in English&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://dnxgroup.blogspot.com/feeds/2329970622113553486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dnxgroup.blogspot.com/2011/11/bernyanyi-bersama-songsmith.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/2329970622113553486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/2329970622113553486'/><link rel='alternate' type='text/html' href='http://dnxgroup.blogspot.com/2011/11/bernyanyi-bersama-songsmith.html' title='Bernyanyi bersama Songsmith'/><author><name>Syahmi Azhar</name><uri>http://www.blogger.com/profile/14781246766009267942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilTbztBNdzqzibNI1uSSnyZ1YMxliicc2G0ocOoZDe9ZxTSowJo8HWVDCHNHDUMcmIhwaNdF2_80GyJcA4-_m4UvuVifCgKIkyXcnMMgFjZWZ6dxcfBmz8BTlNPFNf1siKWjRaeCTlYmg/s72-c/Songsmith_logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3788780998256913722.post-2269611856372268497</id><published>2011-11-17T11:15:00.000+08:00</published><updated>2011-11-17T23:55:47.886+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="informasi"/><title type='text'>Malaysia Creative Pitch</title><content type='html'>Bersempena dengan Festival Filem Malaysia ke-24, Gabungan Persatuan Karyawan Filem Malaysia (Gafim dengan kerjasama Persatuan Penulis Skrin Malaysia (SWAM) buat pertama kalinya telah menganjurkan Malaysia Creative Pitch (MC Pitch) yang akan berlangsung di Kompleks Studio Merdeka, Perbadanan Kemajuan Filem Nasional (Finas), Hulu Klang, pada 17 November ini.&lt;br /&gt;
&lt;br /&gt;
Program ini terbuka kepada sesiapa sahaja dan bertujuan untuk orang ramai memberi idea-idea kreatif dan bermutu kepada penerbit bagi tujuan untuk dikomersilkan. Dengan ini, secara tidak langsung akan membuka peluang kepada sesiapa sahaja untuk terlibat didalam bidang penerbitan.</content><link rel='replies' type='application/atom+xml' href='http://dnxgroup.blogspot.com/feeds/2269611856372268497/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://dnxgroup.blogspot.com/2011/11/malaysia-creative-pitch.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/2269611856372268497'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3788780998256913722/posts/default/2269611856372268497'/><link rel='alternate' type='text/html' href='http://dnxgroup.blogspot.com/2011/11/malaysia-creative-pitch.html' title='Malaysia Creative Pitch'/><author><name>Syahmi Azhar</name><uri>http://www.blogger.com/profile/14781246766009267942</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>