void Transmitter::setup(int srate, int quality, int abr, int vbr, float vbr_quality, int complexity, int vad, int dtx, int txstop) { if (recording) { recorder->end(); stop(); } SpeexMode *mode = NULL; switch (srate) { case 32000: mode = (SpeexMode *) &speex_uwb_mode; speexmode = DRTA_INFO_MODE_ULTRAWIDE; break; case 16000: mode = (SpeexMode *) &speex_wb_mode; speexmode = DRTA_INFO_MODE_WIDE; break; case 8000: mode = (SpeexMode *) &speex_nb_mode; speexmode = DRTA_INFO_MODE_NARROW; break; } if (state) speex_encoder_destroy(state); state = speex_encoder_init(mode); speex_encoder_ctl(state, SPEEX_SET_SAMPLING_RATE, &srate); speex_encoder_ctl(state, SPEEX_SET_COMPLEXITY, &complexity); if (vbr) { speex_encoder_ctl(state, SPEEX_SET_VBR, &vbr); speex_encoder_ctl(state, SPEEX_SET_VBR_QUALITY, &vbr_quality); } else { speex_encoder_ctl(state, SPEEX_SET_QUALITY, &quality); speex_encoder_ctl(state, SPEEX_SET_VAD, &vad); } if (abr) speex_encoder_ctl(state, SPEEX_SET_ABR, &abr); speex_encoder_ctl(state, SPEEX_SET_DTX, &dtx); speex_encoder_ctl(state, SPEEX_GET_FRAME_SIZE, &frame_size); stoptx = (int) ((srate / frame_size)*txstop); speex_bits_init(&bits); rate = srate; if (recording) { initRecorder(); go(); } }
void AudioRecorder::startRecord() { initRecorder(m_filePath.toUtf8().data()); m_recordDevice = alcCaptureOpenDevice(NULL, 16000, AL_FORMAT_MONO16, 1024 * 8); alcCaptureStart(m_recordDevice); m_updateRecordTimer.start(20); }
int Transmitter::call(QString host, int port, int prot) { init(prot); int sd = -1; sa.sin_port = htons(port); if (inet_aton(host.ascii(), &sa.sin_addr) == 0) { struct hostent *he; he = gethostbyname(host.ascii()); if (he == NULL) throw Error(tr("can't resolve ") + host.ascii()); sa.sin_addr = *(struct in_addr *) he ->h_addr; } int type = 0; switch(protocol) { case DRTA_UDP: type = SOCK_DGRAM; break; case DRTA_TCP: case DRTA_SCTP: type = SOCK_STREAM; break; case DRTA_SCTP_UDP: type = SOCK_SEQPACKET; break; default: throw Error("unknown protocol"); } if ((sd = socket(AF_INET, type, 0)) == -1) throw Error(tr("can't initalize socket (") + strerror(errno)+ tr(")")); if ((::connect(sd, (struct sockaddr *)&sa, sizeof(sa)))==-1) throw Error(strerror(errno)); start(sd); initRecorder(); return sd; }
void Transmitter::changeStatus(transmitter_status newstatus) { status = newstatus; switch (status) { case TRANSMITTER_STATUS_MUTE: recorder->end(); break; default: if (working && recording) { if (!recorder->isWorking()) initRecorder(); emit message("Audio input started."); } break; } ledOn(false); }
int Transmitter::Callx(QStrList host_list, int port, int prot) { // Transmitter's initial init(prot); int sd = -1; // return value struct hostent *hostInfo = NULL; int adr_size = host_list . count(); struct sockaddr_in *ip_list= new sockaddr_in[adr_size]; for(int i = 0 ; i < adr_size ; i++){ debug("Transmitter callx - ip %d - %s",i , host_list.at(i)); hostInfo = ::gethostbyname( host_list.at(i) ); if(hostInfo == NULL) throw Error(tr("can't resolve ") + host_list.at(i)); ip_list[i] . sin_family = hostInfo->h_addrtype; ip_list[i] . sin_port = htons(port); memcpy((char *) &ip_list[i] . sin_addr.s_addr, hostInfo->h_addr_list[0], hostInfo->h_length); } int type = 0; switch(protocol) { case DRTA_UDP: case DRTA_TCP: throw Error("should not use callx"); break; case DRTA_SCTP: type = SOCK_STREAM; break; case DRTA_SCTP_UDP: type = SOCK_SEQPACKET; break; default: throw Error("unknown protocol"); } if ((sd = socket(AF_INET, type, IPPROTO_SCTP)) == -1) throw Error(tr("can't initalize socket (") + strerror(errno)+ tr(")")); SctpSocketHandler::SctpEnable(sd); SctpSocketHandler::SctpSetMaxStream(sd,5); SctpSocketHandler::SctpSetNoDelay(sd); SctpSocketHandler::SctpSetRtoMax(sd , 10000); SctpSocketHandler::SctpSetRtoMin(sd , 1000); SctpSocketHandler::SctpTurnOnAllEvent(sd ); if( protocol == DRTA_SCTP_UDP ); SctpSocketHandler::SctpSetAutoClose(sd , true); if( ::sctp_connectx(sd , (struct sockaddr*) ip_list , adr_size ) < 0){ debug("callx :: connnection refuse?"); throw Error(strerror(errno)); } //TODO : free IP_LIST delete ip_list; start(sd); initRecorder(); return sd; }
} // //- (NSUInteger)encodedBytes //{ // return (NSUInteger)bytes_written; //} // //- (NSTimeInterval)encodedDuration //{ // return total_samples / (NSTimeInterval)coding_rate; //} JNIEXPORT int Java_com_droidkit_opus_OpusLib_startRecord(JNIEnv *env, jclass class, jstring path) { const char *pathStr = (*env)->GetStringUTFChars(env, path, 0); int result = initRecorder(pathStr); if (pathStr != 0) { (*env)->ReleaseStringUTFChars(env, path, pathStr); } return result; } JNIEXPORT int Java_com_droidkit_opus_OpusLib_writeFrame(JNIEnv *env, jclass class, jobject frame, jint len) { jbyte *frameBytes = (*env)->GetDirectBufferAddress(env, frame); return writeFrame(frameBytes, len); } JNIEXPORT void Java_com_droidkit_opus_OpusLib_stopRecord(JNIEnv *env, jclass class) { cleanupRecorder();