// returns bytes read, else -1 if error (0 is OK) int AmAudio::get(unsigned long long system_ts, unsigned char* buffer, int output_sample_rate, unsigned int nb_samples) { int size = calcBytesToRead((int)((float)nb_samples * (float)getSampleRate() / (float)output_sample_rate)); unsigned int rd_ts = scaleSystemTS(system_ts); //DBG("\tread(rd_ts = %10.u; size = %u)\n",rd_ts,size); size = read(rd_ts,size); if(size <= 0){ return size; } size = decode(size); if(size < 0) { DBG("decode returned %i\n",size); return -1; } size = downMix(size); size = resampleOutput((unsigned char*)samples, size, getSampleRate(), output_sample_rate); if(size>0) memcpy(buffer,(unsigned char*)samples,size); return size; }
// returns bytes read, else -1 if error (0 is OK) int RtmpAudio::get(unsigned long long system_ts, unsigned char* buffer, int output_sample_rate, unsigned int nb_samples) { // - buffer RTMP audio // - read from RTMP recv buffer unsigned int user_ts = scaleSystemTS(system_ts); //DBG("get(%u, %u)\n",user_ts,nb_samples); process_recv_queue(user_ts); nb_samples = (unsigned int)((float)nb_samples * (float)getSampleRate() / (float)output_sample_rate); u_int32_t size = PCM16_S2B(playout_buffer.read(user_ts, (ShortSample*)((unsigned char*)samples), nb_samples)); if(output_sample_rate != getSampleRate()) { size = resampleOutput((unsigned char*)samples, size, getSampleRate(), output_sample_rate); } memcpy(buffer,(unsigned char*)samples,size); return size; }
int AmRtpAudio::get(unsigned long long system_ts, unsigned char* buffer, int output_sample_rate, unsigned int nb_samples) { if (!(receiving || getPassiveMode())) return 0; // like nothing received int ret = receive(system_ts); if(ret < 0) return ret; // like nothing received? if (!active) return 0; unsigned int user_ts = scaleSystemTS(system_ts); nb_samples = (unsigned int)((float)nb_samples * (float)getSampleRate() / (float)output_sample_rate); u_int32_t size = PCM16_S2B(playout_buffer->read(user_ts, (ShortSample*)((unsigned char*)samples), nb_samples)); if(output_sample_rate != getSampleRate()) { size = resampleOutput((unsigned char*)samples, size, getSampleRate(), output_sample_rate); } memcpy(buffer,(unsigned char*)samples,size); return size; }