Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ShoutcastConnector.cpp@2:9abcdc65c5b5, 2011-01-12 (annotated)
- Committer:
- FrankWeissenborn
- Date:
- Wed Jan 12 13:18:21 2011 +0000
- Revision:
- 2:9abcdc65c5b5
- Parent:
- 1:25ceaa587f6b
- Child:
- 3:87023c28aff5
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| FrankWeissenborn | 1:25ceaa587f6b | 1 | #include "ShoutcastConnector.h" |
| FrankWeissenborn | 1:25ceaa587f6b | 2 | |
| FrankWeissenborn | 1:25ceaa587f6b | 3 | |
| FrankWeissenborn | 1:25ceaa587f6b | 4 | enum wSTATE {NOP,PUT_HEADER} WriteState; |
| FrankWeissenborn | 1:25ceaa587f6b | 5 | enum rSTATE {GET_RESPONSE,GET_STREAM} ReadState; |
| FrankWeissenborn | 1:25ceaa587f6b | 6 | |
| FrankWeissenborn | 1:25ceaa587f6b | 7 | |
| FrankWeissenborn | 1:25ceaa587f6b | 8 | char inbuf[BUFFER_Z]; // IP input buffer |
| FrankWeissenborn | 1:25ceaa587f6b | 9 | char sResponse[800]; // keeps Stream Response |
| FrankWeissenborn | 1:25ceaa587f6b | 10 | bool play; |
| FrankWeissenborn | 1:25ceaa587f6b | 11 | |
| FrankWeissenborn | 1:25ceaa587f6b | 12 | |
| FrankWeissenborn | 1:25ceaa587f6b | 13 | |
| FrankWeissenborn | 1:25ceaa587f6b | 14 | void statisticsOutput(); |
| FrankWeissenborn | 1:25ceaa587f6b | 15 | |
| FrankWeissenborn | 1:25ceaa587f6b | 16 | int kb = 0; |
| FrankWeissenborn | 1:25ceaa587f6b | 17 | int readed = 0;int size = 0; |
| FrankWeissenborn | 1:25ceaa587f6b | 18 | int metaint=0; // metadate interval |
| FrankWeissenborn | 1:25ceaa587f6b | 19 | |
| FrankWeissenborn | 1:25ceaa587f6b | 20 | |
| FrankWeissenborn | 1:25ceaa587f6b | 21 | |
| FrankWeissenborn | 1:25ceaa587f6b | 22 | |
| FrankWeissenborn | 1:25ceaa587f6b | 23 | ShoutcastConnector::ShoutcastConnector(VS1053* mp3, myCallBack_pfn callback) |
| FrankWeissenborn | 1:25ceaa587f6b | 24 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 25 | _mp3 = mp3; |
| FrankWeissenborn | 1:25ceaa587f6b | 26 | _callback = callback; |
| FrankWeissenborn | 1:25ceaa587f6b | 27 | |
| FrankWeissenborn | 1:25ceaa587f6b | 28 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 29 | |
| FrankWeissenborn | 1:25ceaa587f6b | 30 | int ShoutcastConnector::Connect(IpAddr address, int port) |
| FrankWeissenborn | 1:25ceaa587f6b | 31 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 32 | ReadState=GET_RESPONSE; |
| FrankWeissenborn | 1:25ceaa587f6b | 33 | WriteState=PUT_HEADER; |
| FrankWeissenborn | 1:25ceaa587f6b | 34 | |
| FrankWeissenborn | 1:25ceaa587f6b | 35 | kb = 0; |
| FrankWeissenborn | 1:25ceaa587f6b | 36 | readed = 0; |
| FrankWeissenborn | 1:25ceaa587f6b | 37 | size = 0; |
| FrankWeissenborn | 1:25ceaa587f6b | 38 | metaint=0; // metadate interval |
| FrankWeissenborn | 1:25ceaa587f6b | 39 | play=false; |
| FrankWeissenborn | 1:25ceaa587f6b | 40 | |
| FrankWeissenborn | 1:25ceaa587f6b | 41 | Host server(address, port); // 128k mp3 |
| FrankWeissenborn | 1:25ceaa587f6b | 42 | IpAddr serverIp = server.getIp(); |
| FrankWeissenborn | 1:25ceaa587f6b | 43 | |
| FrankWeissenborn | 1:25ceaa587f6b | 44 | printf("Connecting... %d.%d.%d.%d:%d\r\n", |
| FrankWeissenborn | 1:25ceaa587f6b | 45 | serverIp[0],serverIp[1],serverIp[2],serverIp[3],port); |
| FrankWeissenborn | 1:25ceaa587f6b | 46 | |
| FrankWeissenborn | 1:25ceaa587f6b | 47 | |
| FrankWeissenborn | 1:25ceaa587f6b | 48 | sock.setOnEvent(this, &ShoutcastConnector::onTCPSocketEvent); |
| FrankWeissenborn | 1:25ceaa587f6b | 49 | TCPSocketErr bindErr = sock.connect(server); |
| FrankWeissenborn | 1:25ceaa587f6b | 50 | |
| FrankWeissenborn | 1:25ceaa587f6b | 51 | if (TCPSOCKET_OK != bindErr) { |
| FrankWeissenborn | 1:25ceaa587f6b | 52 | printf("Error %d in sock.connect().\r\n", bindErr); |
| FrankWeissenborn | 1:25ceaa587f6b | 53 | return -1; |
| FrankWeissenborn | 1:25ceaa587f6b | 54 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 55 | return 0; |
| FrankWeissenborn | 1:25ceaa587f6b | 56 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 57 | |
| FrankWeissenborn | 1:25ceaa587f6b | 58 | int ShoutcastConnector::Disconnect() |
| FrankWeissenborn | 1:25ceaa587f6b | 59 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 60 | TCPSocketErr err = sock.close(); |
| FrankWeissenborn | 1:25ceaa587f6b | 61 | |
| FrankWeissenborn | 1:25ceaa587f6b | 62 | if (TCPSOCKET_OK != err) { |
| FrankWeissenborn | 1:25ceaa587f6b | 63 | printf("Error %d in ShoutcastConnector: Disconnect().\r\n", err); |
| FrankWeissenborn | 1:25ceaa587f6b | 64 | return -1; |
| FrankWeissenborn | 1:25ceaa587f6b | 65 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 66 | else { |
| FrankWeissenborn | 1:25ceaa587f6b | 67 | printf("ShoutcastConnector disconnected"); |
| FrankWeissenborn | 1:25ceaa587f6b | 68 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 69 | return 0; |
| FrankWeissenborn | 1:25ceaa587f6b | 70 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 71 | |
| FrankWeissenborn | 1:25ceaa587f6b | 72 | void ShoutcastConnector::onTCPSocketEvent(TCPSocketEvent e) { |
| FrankWeissenborn | 1:25ceaa587f6b | 73 | switch (e) { |
| FrankWeissenborn | 1:25ceaa587f6b | 74 | case TCPSOCKET_CONNECTED: |
| FrankWeissenborn | 1:25ceaa587f6b | 75 | // DEBUGOUT("TCP Socket Connected\r\n"); // this printf disturb socket work correctly |
| FrankWeissenborn | 1:25ceaa587f6b | 76 | Writeable(); |
| FrankWeissenborn | 1:25ceaa587f6b | 77 | break; // we must comment out ? |
| FrankWeissenborn | 1:25ceaa587f6b | 78 | case TCPSOCKET_WRITEABLE: |
| FrankWeissenborn | 1:25ceaa587f6b | 79 | // DEBUGOUT("TCP Socket Writeable\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 80 | break; |
| FrankWeissenborn | 1:25ceaa587f6b | 81 | case TCPSOCKET_READABLE: |
| FrankWeissenborn | 1:25ceaa587f6b | 82 | //Can now read some data... |
| FrankWeissenborn | 1:25ceaa587f6b | 83 | // DEBUGOUT("TCP Socket Readable\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 84 | Readable(); |
| FrankWeissenborn | 1:25ceaa587f6b | 85 | break;// |
| FrankWeissenborn | 1:25ceaa587f6b | 86 | case TCPSOCKET_CONTIMEOUT: |
| FrankWeissenborn | 1:25ceaa587f6b | 87 | DEBUGOUT("TCP Socket Timeout\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 88 | break; |
| FrankWeissenborn | 1:25ceaa587f6b | 89 | case TCPSOCKET_CONRST: |
| FrankWeissenborn | 1:25ceaa587f6b | 90 | DEBUGOUT("TCP Socket CONRST\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 91 | break; |
| FrankWeissenborn | 1:25ceaa587f6b | 92 | case TCPSOCKET_CONABRT: |
| FrankWeissenborn | 1:25ceaa587f6b | 93 | DEBUGOUT("TCP Socket CONABRT\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 94 | DEBUGOUT("Maybe Server Down...\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 95 | break; |
| FrankWeissenborn | 1:25ceaa587f6b | 96 | case TCPSOCKET_ERROR: |
| FrankWeissenborn | 1:25ceaa587f6b | 97 | DEBUGOUT("TCP Socket Error\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 98 | break; |
| FrankWeissenborn | 1:25ceaa587f6b | 99 | case TCPSOCKET_DISCONNECTED: |
| FrankWeissenborn | 1:25ceaa587f6b | 100 | //Close socket... |
| FrankWeissenborn | 1:25ceaa587f6b | 101 | DEBUGOUT("ShoutcastConnector Disconnected\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 102 | sock.close(); |
| FrankWeissenborn | 1:25ceaa587f6b | 103 | break; |
| FrankWeissenborn | 1:25ceaa587f6b | 104 | }// switch(e) |
| FrankWeissenborn | 1:25ceaa587f6b | 105 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 106 | |
| FrankWeissenborn | 1:25ceaa587f6b | 107 | void ShoutcastConnector::Writeable() { |
| FrankWeissenborn | 1:25ceaa587f6b | 108 | //Can now write some data... |
| FrankWeissenborn | 1:25ceaa587f6b | 109 | // printf("TCP Socket Writable\r\n"); // debug |
| FrankWeissenborn | 1:25ceaa587f6b | 110 | switch (WriteState) { |
| FrankWeissenborn | 1:25ceaa587f6b | 111 | case PUT_HEADER: |
| FrankWeissenborn | 1:25ceaa587f6b | 112 | const char* str = |
| FrankWeissenborn | 1:25ceaa587f6b | 113 | // "GET /live HTTP/1.0\r\n" // use this if solopiano |
| FrankWeissenborn | 1:25ceaa587f6b | 114 | "GET / HTTP/1.0\r\n" |
| FrankWeissenborn | 1:25ceaa587f6b | 115 | "Host: gw\r\n" |
| FrankWeissenborn | 1:25ceaa587f6b | 116 | "Accept: */*\r\n" |
| FrankWeissenborn | 1:25ceaa587f6b | 117 | "User-Agent: mbed\r\n" |
| FrankWeissenborn | 1:25ceaa587f6b | 118 | //#ifdef METADATA |
| FrankWeissenborn | 1:25ceaa587f6b | 119 | "Icy-MetaData: 1\r\n" // send this if you want Metadata |
| FrankWeissenborn | 1:25ceaa587f6b | 120 | //#endif |
| FrankWeissenborn | 1:25ceaa587f6b | 121 | // "Connection: close\r\n" |
| FrankWeissenborn | 1:25ceaa587f6b | 122 | "\r\n" |
| FrankWeissenborn | 1:25ceaa587f6b | 123 | ; |
| FrankWeissenborn | 1:25ceaa587f6b | 124 | sock.send(str, strlen(str)); |
| FrankWeissenborn | 1:25ceaa587f6b | 125 | DEBUGOUT("\r\nHEADER:\r\n%s\r\n", str); // display PUT_HEADER |
| FrankWeissenborn | 1:25ceaa587f6b | 126 | WriteState=NOP; |
| FrankWeissenborn | 1:25ceaa587f6b | 127 | ReadState=GET_RESPONSE; |
| FrankWeissenborn | 1:25ceaa587f6b | 128 | break; |
| FrankWeissenborn | 1:25ceaa587f6b | 129 | case NOP: |
| FrankWeissenborn | 1:25ceaa587f6b | 130 | break; |
| FrankWeissenborn | 1:25ceaa587f6b | 131 | } // switch(WriteState) |
| FrankWeissenborn | 1:25ceaa587f6b | 132 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 133 | |
| FrankWeissenborn | 1:25ceaa587f6b | 134 | |
| FrankWeissenborn | 1:25ceaa587f6b | 135 | void ShoutcastConnector::Readable() { |
| FrankWeissenborn | 1:25ceaa587f6b | 136 | int len = 0, i=0; |
| FrankWeissenborn | 1:25ceaa587f6b | 137 | char* cp; |
| FrankWeissenborn | 1:25ceaa587f6b | 138 | |
| FrankWeissenborn | 1:25ceaa587f6b | 139 | switch (ReadState) { |
| FrankWeissenborn | 1:25ceaa587f6b | 140 | case GET_RESPONSE: |
| FrankWeissenborn | 1:25ceaa587f6b | 141 | len=sock.recv(inbuf, sizeof inbuf); |
| FrankWeissenborn | 1:25ceaa587f6b | 142 | cp=strstr(inbuf,"\r\n\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 143 | if (cp==NULL) { |
| FrankWeissenborn | 1:25ceaa587f6b | 144 | inbuf[len]=0; |
| FrankWeissenborn | 1:25ceaa587f6b | 145 | DEBUGOUT("%s",inbuf); // debug |
| FrankWeissenborn | 1:25ceaa587f6b | 146 | //sprintf(sResponse,"%s",inbuf); |
| FrankWeissenborn | 1:25ceaa587f6b | 147 | return; // still read response again |
| FrankWeissenborn | 1:25ceaa587f6b | 148 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 149 | // |
| FrankWeissenborn | 1:25ceaa587f6b | 150 | *cp=0; |
| FrankWeissenborn | 1:25ceaa587f6b | 151 | sprintf(sResponse+strlen(sResponse),"%s\r\n\r\n",inbuf); |
| FrankWeissenborn | 1:25ceaa587f6b | 152 | DEBUGOUT("RESPONSE:\r\n%s",sResponse); |
| FrankWeissenborn | 1:25ceaa587f6b | 153 | // get metaint value |
| FrankWeissenborn | 1:25ceaa587f6b | 154 | cp=strstr(sResponse,"icy-metaint:"); |
| FrankWeissenborn | 1:25ceaa587f6b | 155 | if (cp==NULL) metaint=0; |
| FrankWeissenborn | 1:25ceaa587f6b | 156 | else sscanf(cp+strlen("icy-metaint:"),"%d",&metaint); |
| FrankWeissenborn | 1:25ceaa587f6b | 157 | DEBUGOUT("\r\nmetaint: %d\r\n\r\n",metaint); //debug |
| FrankWeissenborn | 1:25ceaa587f6b | 158 | // |
| FrankWeissenborn | 1:25ceaa587f6b | 159 | |
| FrankWeissenborn | 1:25ceaa587f6b | 160 | DEBUGOUT("HeaderLen:%d",len); |
| FrankWeissenborn | 1:25ceaa587f6b | 161 | |
| FrankWeissenborn | 1:25ceaa587f6b | 162 | i=strlen(inbuf)+4; // bump bitstream right after response |
| FrankWeissenborn | 1:25ceaa587f6b | 163 | ReadState=GET_STREAM; |
| FrankWeissenborn | 1:25ceaa587f6b | 164 | //initDec(); |
| FrankWeissenborn | 1:25ceaa587f6b | 165 | // |
| FrankWeissenborn | 1:25ceaa587f6b | 166 | while (i<len) { |
| FrankWeissenborn | 1:25ceaa587f6b | 167 | // write one bye |
| FrankWeissenborn | 1:25ceaa587f6b | 168 | // sbuf.PutByte(inbuf[i]); |
| FrankWeissenborn | 1:25ceaa587f6b | 169 | i++; |
| FrankWeissenborn | 1:25ceaa587f6b | 170 | readed++; |
| FrankWeissenborn | 1:25ceaa587f6b | 171 | }; |
| FrankWeissenborn | 1:25ceaa587f6b | 172 | return; |
| FrankWeissenborn | 1:25ceaa587f6b | 173 | // |
| FrankWeissenborn | 1:25ceaa587f6b | 174 | case GET_STREAM: |
| FrankWeissenborn | 1:25ceaa587f6b | 175 | // receive data ****repeatedly**** |
| FrankWeissenborn | 1:25ceaa587f6b | 176 | while (len=sock.recv(inbuf, sizeof inbuf)) { |
| FrankWeissenborn | 1:25ceaa587f6b | 177 | //DEBUGOUT("in") |
| FrankWeissenborn | 1:25ceaa587f6b | 178 | //DEBUGOUT("%d\r\n",len) |
| FrankWeissenborn | 1:25ceaa587f6b | 179 | |
| FrankWeissenborn | 1:25ceaa587f6b | 180 | kb += len; |
| FrankWeissenborn | 1:25ceaa587f6b | 181 | |
| FrankWeissenborn | 1:25ceaa587f6b | 182 | |
| FrankWeissenborn | 1:25ceaa587f6b | 183 | if(metaint > 0) |
| FrankWeissenborn | 1:25ceaa587f6b | 184 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 185 | if(readed + len > metaint) |
| FrankWeissenborn | 1:25ceaa587f6b | 186 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 187 | //XXX |
| FrankWeissenborn | 1:25ceaa587f6b | 188 | int startindex = metaint-readed; |
| FrankWeissenborn | 1:25ceaa587f6b | 189 | size = inbuf[startindex]; |
| FrankWeissenborn | 1:25ceaa587f6b | 190 | //DEBUGOUT("MetaData: %d,%d,%d\r\n",metaint,readed,len); |
| FrankWeissenborn | 1:25ceaa587f6b | 191 | //DEBUGOUT("MetaData: %d\r\n",size); |
| FrankWeissenborn | 1:25ceaa587f6b | 192 | //Send first part of data |
| FrankWeissenborn | 1:25ceaa587f6b | 193 | while(_mp3->bufferFree() < startindex) |
| FrankWeissenborn | 1:25ceaa587f6b | 194 | ; // wait |
| FrankWeissenborn | 1:25ceaa587f6b | 195 | _mp3->bufferPutStream(inbuf, startindex); |
| FrankWeissenborn | 1:25ceaa587f6b | 196 | |
| FrankWeissenborn | 1:25ceaa587f6b | 197 | if(size>0) |
| FrankWeissenborn | 1:25ceaa587f6b | 198 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 199 | //1.Fall : (metaint-readed)+size <= len |
| FrankWeissenborn | 1:25ceaa587f6b | 200 | //Text ausgeben |
| FrankWeissenborn | 1:25ceaa587f6b | 201 | //rest an mp3 codec |
| FrankWeissenborn | 1:25ceaa587f6b | 202 | if((metaint-readed)+size <= len) |
| FrankWeissenborn | 1:25ceaa587f6b | 203 | { |
| FrankWeissenborn | 2:9abcdc65c5b5 | 204 | // for(i=0; i<size*16; i++) |
| FrankWeissenborn | 2:9abcdc65c5b5 | 205 | // DEBUGOUT("%c",inbuf[startindex + 1 + i]); |
| FrankWeissenborn | 2:9abcdc65c5b5 | 206 | _callback(&inbuf[startindex + 1], size*16); |
| FrankWeissenborn | 1:25ceaa587f6b | 207 | //Send last part of data |
| FrankWeissenborn | 1:25ceaa587f6b | 208 | while(_mp3->bufferFree() < len-(startindex+1+size*16)) |
| FrankWeissenborn | 1:25ceaa587f6b | 209 | ; // wait |
| FrankWeissenborn | 1:25ceaa587f6b | 210 | readed = len-(startindex+1+size*16); |
| FrankWeissenborn | 1:25ceaa587f6b | 211 | _mp3->bufferPutStream(&inbuf[startindex+1+size*16], readed); |
| FrankWeissenborn | 1:25ceaa587f6b | 212 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 213 | else |
| FrankWeissenborn | 1:25ceaa587f6b | 214 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 215 | DEBUGOUT("Muh") |
| FrankWeissenborn | 1:25ceaa587f6b | 216 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 217 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 218 | else |
| FrankWeissenborn | 1:25ceaa587f6b | 219 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 220 | // DEBUGOUT("Title hasn't changed since the last metadata message\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 221 | //Send second part of data |
| FrankWeissenborn | 1:25ceaa587f6b | 222 | //XXX |
| FrankWeissenborn | 1:25ceaa587f6b | 223 | while(_mp3->bufferFree() < len-(startindex+1)) |
| FrankWeissenborn | 1:25ceaa587f6b | 224 | ; // wait |
| FrankWeissenborn | 1:25ceaa587f6b | 225 | //XXX |
| FrankWeissenborn | 1:25ceaa587f6b | 226 | readed = len-(startindex+1); |
| FrankWeissenborn | 1:25ceaa587f6b | 227 | _mp3->bufferPutStream(&inbuf[startindex+1], len-(startindex+1)); |
| FrankWeissenborn | 1:25ceaa587f6b | 228 | |
| FrankWeissenborn | 1:25ceaa587f6b | 229 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 230 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 231 | else |
| FrankWeissenborn | 1:25ceaa587f6b | 232 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 233 | readed += len; |
| FrankWeissenborn | 1:25ceaa587f6b | 234 | while(_mp3->bufferFree() < len) |
| FrankWeissenborn | 1:25ceaa587f6b | 235 | ; // wait |
| FrankWeissenborn | 1:25ceaa587f6b | 236 | _mp3->bufferPutStream(inbuf, len); |
| FrankWeissenborn | 1:25ceaa587f6b | 237 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 238 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 239 | else |
| FrankWeissenborn | 1:25ceaa587f6b | 240 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 241 | while(_mp3->bufferFree() < len) |
| FrankWeissenborn | 1:25ceaa587f6b | 242 | ; // wait |
| FrankWeissenborn | 1:25ceaa587f6b | 243 | _mp3->bufferPutStream(inbuf, len); |
| FrankWeissenborn | 1:25ceaa587f6b | 244 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 245 | // save len bytes |
| FrankWeissenborn | 1:25ceaa587f6b | 246 | |
| FrankWeissenborn | 1:25ceaa587f6b | 247 | |
| FrankWeissenborn | 1:25ceaa587f6b | 248 | |
| FrankWeissenborn | 1:25ceaa587f6b | 249 | if(!play && _mp3->bufferCount() > 0.8 * BUFFER_SIZE){ |
| FrankWeissenborn | 1:25ceaa587f6b | 250 | _mp3->play(); |
| FrankWeissenborn | 1:25ceaa587f6b | 251 | play = true; |
| FrankWeissenborn | 1:25ceaa587f6b | 252 | statisticsOutput(); |
| FrankWeissenborn | 1:25ceaa587f6b | 253 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 254 | |
| FrankWeissenborn | 1:25ceaa587f6b | 255 | if(play && _mp3->bufferCount() < 0.1 * BUFFER_SIZE) |
| FrankWeissenborn | 1:25ceaa587f6b | 256 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 257 | _mp3->pause(); |
| FrankWeissenborn | 1:25ceaa587f6b | 258 | play = false; |
| FrankWeissenborn | 1:25ceaa587f6b | 259 | statisticsOutput(); |
| FrankWeissenborn | 1:25ceaa587f6b | 260 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 261 | |
| FrankWeissenborn | 1:25ceaa587f6b | 262 | |
| FrankWeissenborn | 1:25ceaa587f6b | 263 | } // while (len=sock...) |
| FrankWeissenborn | 1:25ceaa587f6b | 264 | |
| FrankWeissenborn | 1:25ceaa587f6b | 265 | /*len=sock.recv(inbuf, sizeof inbuf); |
| FrankWeissenborn | 1:25ceaa587f6b | 266 | while (i<len) { |
| FrankWeissenborn | 1:25ceaa587f6b | 267 | //sbuf.PutByte(inbuf[i]);i++; |
| FrankWeissenborn | 1:25ceaa587f6b | 268 | mp3.bufferSetByte(inbuf[i]); |
| FrankWeissenborn | 1:25ceaa587f6b | 269 | i++; |
| FrankWeissenborn | 1:25ceaa587f6b | 270 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 271 | */ |
| FrankWeissenborn | 1:25ceaa587f6b | 272 | //DEBUGOUT("out\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 273 | /* i=0; |
| FrankWeissenborn | 1:25ceaa587f6b | 274 | while (i<BUFFER_Z) { |
| FrankWeissenborn | 1:25ceaa587f6b | 275 | // sbuf.PutByte(inbuf[i]);i++; |
| FrankWeissenborn | 1:25ceaa587f6b | 276 | //DEBUGOUT("%d",inbuf[i]); //debug |
| FrankWeissenborn | 1:25ceaa587f6b | 277 | while( == false) { |
| FrankWeissenborn | 1:25ceaa587f6b | 278 | DEBUGOUT("false %d", i); |
| FrankWeissenborn | 1:25ceaa587f6b | 279 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 280 | i++; |
| FrankWeissenborn | 1:25ceaa587f6b | 281 | }//while |
| FrankWeissenborn | 1:25ceaa587f6b | 282 | */ |
| FrankWeissenborn | 1:25ceaa587f6b | 283 | // if(mp3.bufferPutStream(&inbuf[0], BUFFER_Z) == false) { |
| FrankWeissenborn | 1:25ceaa587f6b | 284 | // DEBUGOUT("false") |
| FrankWeissenborn | 1:25ceaa587f6b | 285 | // } |
| FrankWeissenborn | 1:25ceaa587f6b | 286 | |
| FrankWeissenborn | 1:25ceaa587f6b | 287 | |
| FrankWeissenborn | 1:25ceaa587f6b | 288 | |
| FrankWeissenborn | 1:25ceaa587f6b | 289 | return; // get more strea |
| FrankWeissenborn | 1:25ceaa587f6b | 290 | // |
| FrankWeissenborn | 1:25ceaa587f6b | 291 | } // switch (ReadState) |
| FrankWeissenborn | 1:25ceaa587f6b | 292 | } |
| FrankWeissenborn | 1:25ceaa587f6b | 293 | |
| FrankWeissenborn | 1:25ceaa587f6b | 294 | void statisticsOutput() |
| FrankWeissenborn | 1:25ceaa587f6b | 295 | { |
| FrankWeissenborn | 1:25ceaa587f6b | 296 | printf("Statistics\r\n"); |
| FrankWeissenborn | 1:25ceaa587f6b | 297 | // printf("Buffer - Size: %i, Free: %i, Loaded: %i\r\n", BUFFER_SIZE, _mp3.bufferFree(), mp3.bufferCount()); |
| FrankWeissenborn | 1:25ceaa587f6b | 298 | |
| FrankWeissenborn | 1:25ceaa587f6b | 299 | //mp3.getAudioInfo(); |
| FrankWeissenborn | 1:25ceaa587f6b | 300 | } |