⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 soundutils.cxx

📁 radius协议源码÷The Radius Stack will connect to a Radius Server. This stack implementation is built upo
💻 CXX
字号:
//// (c) Yuri Kiryanov, openh323@kiryanov.com// for www.Openh323.org by Equivalence//// Portions: 1998-1999, Be Incorporated//#include "SoundUtils.h"#include "math.h"// These two conversions seem to pop up all the time in media code.// I guess it's the curse of microsecond resolution... ;-)doubleus_to_s(bigtime_t usecs){	return (usecs / 1000000.0);}bigtime_ts_to_us(double secs){	return (bigtime_t) (secs * 1000000.0);}intbytes_per_frame(	const media_raw_audio_format & format){	//	The media_raw_audio_format format constants encode the	//	bytes-per-sample value in the low nybble. Having a fixed	//	number of bytes-per-sample, and no inter-sample relationships,	//	is what makes a format "raw".	int bytesPerSample = format.format & 0xf;	return bytesPerSample * format.channel_count;}intframes_per_buffer(	const media_raw_audio_format & format){	// This will give us the number of full-sized frames that will fit	// in a buffer. (Remember, integer division automatically rounds	// down.)	int frames = 0;	if (bytes_per_frame(format) > 0) {		frames = format.buffer_size / bytes_per_frame(format);	}	return frames;}bigtime_tbuffer_duration(	const media_raw_audio_format & format){	//	Figuring out duration is easy. We take extra precaution to	//	not divide by zero or return irrelevant results.	bigtime_t duration = 0;	if (format.buffer_size > 0 && format.frame_rate > 0 && bytes_per_frame(format) > 0) {		//	In these kinds of calculations, it's always useful to double-check		//	the unit conversions. (Anyone remember high school physics?)		//	bytes/(bytes/frame) / frames/sec		//	= frames * sec/frames		//	= secs                            which is what we want.		duration = s_to_us((format.buffer_size / bytes_per_frame(format)) / format.frame_rate);	}	return duration;}bigtime_tframes_duration(	const media_raw_audio_format & format, int64 num_frames){	//	Tells us how long in us it will take to produce num_frames,	//	with the given format.	bigtime_t duration = 0;	if (format.frame_rate > 0) {		duration = s_to_us(num_frames/format.frame_rate);	}	return duration;}intbuffers_for_duration(	const media_raw_audio_format & format, bigtime_t duration){	// Double-checking those unit conversions again:	// secs * ( (frames/sec) / (frames/buffer) ) = secs * (buffers/sec) = buffers	int buffers = 0;	if (frames_per_buffer(format) > 0) {		buffers = (int) ceil(us_to_s(duration)*(format.frame_rate/frames_per_buffer(format)));	}	return buffers;}int64frames_for_duration(	const media_raw_audio_format & format, bigtime_t duration){	return (int64) ceil(format.frame_rate*us_to_s(duration));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -