static private int packet_tcp_frameMP3(byte[] _send_buff, MP3_frame _mp3_reader, int _frameSend) { headerPacket HeaderPacket = new headerPacket(); //reset packet header HeaderPacket.NumOffFrame = 0; HeaderPacket.TotalLength = HeaderPacket.Length; while (HeaderPacket.NumOffFrame < 41) { if (_mp3_reader.ReadNextFrame() == false) { break; } Buffer.BlockCopy(_mp3_reader.Mp3_buff, _mp3_reader.Start_frame, _send_buff, HeaderPacket.TotalLength, _mp3_reader.Frame_size); HeaderPacket.TotalLength += (UInt16)(_mp3_reader.Frame_size); HeaderPacket.NumOffFrame++; } if (HeaderPacket.NumOffFrame < 41) { Console.WriteLine("hh"); } //copy header to _send_buff HeaderPacket.copyHeaderToBuffer(_send_buff); //sizeOfPacket = HeaderPacket.TotalLength; //increase IDframe //HeaderPacket.IDframe++; return(HeaderPacket.NumOffFrame); }
public static int sendPacketMP3(Socket _socketSend, byte[] mp3_buff, int mp3_buff_length) { double timePoint, mark_time = 0; MP3_frame mp3_reader = new MP3_frame(mp3_buff, mp3_buff_length); if (!mp3_reader.IsValidMp3()) { return(-1); } //const double framemp3_time = (double)1152.0 * 1000.0 / 44100.0; //ms double framemp3_time = mp3_reader.TimePerFrame_ms; //count total Frame of mp3 //duration_song_s = mp3_reader.countFrame() * (int)mp3_reader.TimePerFrame_ms / 1000; const int FrameSend = 41; int numOfFrame, sizeOfPacket = FrameSend * 144 + 12; //int size = 7000; byte[] sendBuffer = new byte[sizeOfPacket]; //SocketFlags socketFlag = new SocketFlags(); //launch timer Stopwatch stopWatchSend = new Stopwatch(); stopWatchSend.Start(); while (true) { numOfFrame = packet_tcp_frameMP3(sendBuffer, mp3_reader, FrameSend); if (numOfFrame < FrameSend) { sizeOfPacket = numOfFrame * 144 + 12; byte[] sendBufferTMP = new byte[sizeOfPacket]; Buffer.BlockCopy(sendBuffer, 0, sendBufferTMP, 0, sizeOfPacket); _socketSend.Send(sendBufferTMP); Thread.Sleep(1000); break; } _socketSend.Send(sendBuffer); mark_time += framemp3_time * numOfFrame; //point to next time frame //get current time playing //timePlaying_song_s = (int)mark_time / 1000; //second timePoint = mark_time - stopWatchSend.Elapsed.TotalMilliseconds; if ((int)timePoint > 0) { Thread.Sleep((int)timePoint); } } //done a song stopWatchSend.Stop(); return(0); }