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();
	}
}
Exemple #2
0
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;
}
Exemple #6
0
}
//
//- (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();