当前位置:  编程技术>移动开发
本页文章导读:
    ▪JAVA 计算随意两个日期之间的天数.        JAVA 计算任意两个日期之间的天数.... public static int dispersionDay(String strDate1, String strDate2) {  int iDay = 0;//记录相差的天数     try {   int index1,index2;   index1=strDate1.indexOf('-');   index2=strDate1.l.........
    ▪ 用MP3或WAV制作人声铃声的简略教程        用MP3或WAV制作人声铃声的简单教程 前言:不少朋友都喜欢人声铃声,毕竟单纯的和弦铃声还是单调了一些。可是限于制作的复杂,和没有较好的教程而不能自己制作铃声。现在我把制作方法.........
    ▪ java 兑现的公式计算       java 实现的公式计算 发个我写的计算公式代码:   package org.yangzc.math; import java.util.Stack; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 数据计算公式 * @author yangzc * */ public class MathE.........

[1]JAVA 计算随意两个日期之间的天数.
    来源: 互联网  发布时间: 2014-02-18
JAVA 计算任意两个日期之间的天数....
public static int dispersionDay(String strDate1, String strDate2) {
  int iDay = 0;//记录相差的天数  
  try {
   int index1,index2;
   index1=strDate1.indexOf('-');
   index2=strDate1.lastIndexOf('-');
   int nYear, nMonth, nDay;
   nYear = Integer.parseInt(strDate1.substring(0, index1));
   nMonth = Integer.parseInt(strDate1.substring(index1+1, index2));
   nDay = Integer.parseInt(strDate1.substring(index2+1));
   Calendar objCalendarDate1 = Calendar.getInstance();//此函数new   GregorianCalendar()  
   objCalendarDate1.set(nYear, nMonth, nDay);
           
   index1=strDate2.indexOf('-');
   index2=strDate2.lastIndexOf('-');
  
   nYear = Integer.parseInt(strDate2.substring(0, index1));
   nMonth = Integer.parseInt(strDate2.substring(index1+1, index2));
   nDay = Integer.parseInt(strDate2.substring(index2+1));
   Calendar objCalendarDate2 = Calendar.getInstance();
   objCalendarDate2.set(nYear, nMonth, nDay);

   if (objCalendarDate2.equals(objCalendarDate1))
    return 0;

   if (objCalendarDate2.after(objCalendarDate1))//如果strDate2>strDate1  
   {
    while (!objCalendarDate2.equals(objCalendarDate1)) {
     objCalendarDate1.add(objCalendarDate1.DATE, 1);
     iDay++;
    }
    iDay = -iDay;// 负号代表 还相距几天,正号代表已过去几天。。。
   } else//如果strDate1>strDate2  
   {
    while (!objCalendarDate2.equals(objCalendarDate1)) {
     objCalendarDate2.add(objCalendarDate2.DATE, 1);
     iDay++;
    }
   }
  } catch (Exception e) {
  }
  return iDay;
}



/////////////////////////////使用简单的方法二///////////////////////

Calendar c1=new  GregorianCalendar(2008,7,8);
Calendar c2=new  GregorianCalendar(2008,1,2);
System.out.println(">>>>>>>>>>>>>>>>==="+(c1.getTimeInMillis()-c2.getTimeInMillis())/(1000*60*60*24));

////////////注意点////////////

》》》》》月份是0-11

》》》》》new GregorianCalendar()参数为空代表系统所在时间。。。

如果换为 new Date()且参数为空,那么计算出来结果为错误的。。。。。

改正方案是:new Date(int ,int ,int)带参构造函数。。。。

    
[2] 用MP3或WAV制作人声铃声的简略教程
    来源: 互联网  发布时间: 2014-02-18
用MP3或WAV制作人声铃声的简单教程

前言:不少朋友都喜欢人声铃声,毕竟单纯的和弦铃声还是单调了一些。可是限于制作的复杂,和没有较好的教程而不能自己制作铃声。现在我把制作方法简单的说一下,相信对软件上手快的朋友看了后就可以自己制作铃声了。

  (虽然现在有pcsync的软件,可以很简单的生成MMF人声,但是由于上限只有200K,而且是固定的16000采样,如果想做小铃声的话也不行,所以限制了大或者小铃声的使用)

  先来说明一下需要的步骤:

  1 、对声音的采样;

  2 、调整单 PCM 模板 MIDI 的长度以配合声音的长度;

  3 、把调整的 MIDI 加载声音来合成 MMF 铃声。

  第一步:对声源的采样

  需要下载Cool Edit Pro 2.0以及Sound Forge 6.0,这两个软件网上很多,大家可以去找找。

  这一步很重要,声音的裁剪是否正好就看这一步。当然这一步可以说是最繁琐的一步。所需软件 Cool Edit Pro 或者 Sound Forge 这两个比较实用。在这里只对 Cool Edit Pro 进行介绍,后者也很方便,喜欢的人可以自己试试。 【建议不要用汉化,因为汉化后,将会有软件使用的BUG】

  运行 Cool Edit Pro 软件,打开声音源,这里一般用 WAV 或者标准的 MP3 (注:非标准的 MP3 打开时,会出现一个对话框,让你选择频率深度等;建议先用软件吧 MP3 转换为 WAV 后再打开!)。打开后如下图所视

  

  

  

  

  我对常用的按钮和注意点都进行了说明,并用箭头指出了。选择你准备做铃声的一段,可以用放大按钮把波形放大,那就能看的很清楚。选择好后,在选好的波形上点击右键选择复制为新的,如下图。

  

  

  

  

  复制到新的后,就可以采样了。点击采样按钮(图一上已经指出)进行采样设置,40和弦的采样率只能选择 8000 、 11025 、 16000 三种格式,必须选择单声道,采样深度只能选择 16 位!然后选择确定进行采样。完毕后,选择另存为即可!采样设置如下图

  

  

  

  

  另外,对软件右下角的6个时间进行一下说明:如图

  

  

  

  

  第一行从左到右分别为:选定范围的起始时间、选定范围的结束时间、选定范围的时间长度;

  第二行从左到右分别为:当前窗口显示的起始时间、当前窗口显示的结束时间、当前窗口显示的时间长度。

  

  

  

  

  第二步:单 PCM 模板 MIDI 的长度调节

  要用 CAKEWALK SONAR 或者 Cakewalk Music Creator Pro24 2004 软件对一个单 PCM 模板 MIDI 音轨进行调节,因为我用的是后者,所以在这里介绍后者的使用方法,其实前者也是差不多的用法。操作几乎没有什么太大的区别。

  运行 Cakewalk Music Creator Pro24 2004 软件,打开那个单 PCM 模板 MIDI 音轨。然后点击文件菜单( File )选择 Import 中的 Audio… 来导入做好的 WAV 文件。

  然后点击波形,再点击音轨 2 ,然后点击钢琴卷帘,如下图

  

  

  

  

  在出现的钢琴卷帘窗口中可以看到上面有排黑的,那个就是波形文件的长度。一般刚刚下载的单 PCM 模板 MIDI 都是有好多块的,必须用橡皮先把多余的都删除,留下一个 C0 中最前面的一个,然后点击箭头,把它拉到 1 的位置,然后在那个音轨上点击右键,弹出音轨长度调节窗口,如图

  

  

  

  

  在音轨调节窗口中可以看见有很多选项,都不需要动,只要对 Duration 中的数字进行修改即可,原来的数字是比例,有些人就认为也必须输入比例数,其实没有必要,直接输入 4 位数或者 5 位数就可以了。多试试就可以大概掌握了。长度只要比上面的黑的部分稍微长一点就可以了。如下图

  

  

  

  

  设置好了后,关闭钢琴卷帘,然后在刚刚的位置可以看到 MIDI 音轨的长度可能还是和原来的不一样,那只要在用鼠标拉短就可以了。如下图

  

  

  

  

  全部弄好后,删除波形文件然后保存 MIDI 音轨就可以了,删除方法如下图

  

  

  

  

  第三步:单 PCM 模板 MIDI 加载 WAV 波形合并生成 MMF 文件。

  ATS-MA5-SMAF 软件也需要大家进行下载。

  这个只能用 YAMAHA 提供的 ATS-MA5-SMAF 软件来进行合并工作。该软件最新的已经是中文版了。

  运行 ATS-MA5-SMAF 软件,先进行设置:点击“选项”菜单,选择“首选”出来设置窗口,在“ AT 模式”中选择“ MA - 3 ”;“内容模式”中选择“ FM32 ”;在“预留 PCM 流”中选择“ 2 Voice Reserved ”;其他的不用做改动,然后点击确定,如下图【这里以40和弦的设置为例,另外说明:新版的MA5中已经没有“预留 PCM 流”选项,那就不用选择了。】

  

  

  

  

  打开单 PCM 模板 MIDI ,然后点击“窗口”菜单中的“ PCM 流分配图”也可以直接点击下面的工具按钮,弹出 PCM 流分配图窗口;在 FS-1 的位置点击鼠标右键,选择“新建”导入做好的 WAV 波形文件,然后点击保存即可!如下图

  

  

  

  

  好了,一个人声铃声就这样做成了,赶快双击一下听听吧,嘿嘿。

  另外补充说明一下:降噪问题比较难说,只能靠各位自己琢磨一下了。可以用Cool Edit Pro 自带的降噪。也可以用T-Racks或者iZotope Ozone对采样好的WAV进行音质加工。


    
[3] java 兑现的公式计算
    来源: 互联网  发布时间: 2014-02-18
java 实现的公式计算

发个我写的计算公式代码:

 

package org.yangzc.math;

import java.util.Stack;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 数据计算公式
 * @author yangzc
 *
 */
public class MathEval {

	public static char PLUS = '+';
	public static char MINUS = '-';
	public static char MULTI = '*';
	public static char DEVIDE = '/';
	
	public static char BRACKET_LEFT = '(';
	public static char BRACKET_RIGHT = ')';
	
	/**
	 * 计算带小括号的公式
	 * @param line
	 * @return
	 */
	public static double eval(String line){
		while(line.indexOf(BRACKET_LEFT) != -1){
			Pattern pattern = Pattern.compile("\\(([^\\(\\)]*?)\\)");
			Matcher matcher = pattern.matcher(line);
			while(matcher.find()){
				double result = simpleEval(matcher.group(1));
				line = line.replace(matcher.group(), result+"");
			}
		}
		return simpleEval(line);
	}
	
	/**
	 * 计算不带括号的公式
	 * @param line
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public static double simpleEval(String line){
		Stack<Double> valueStack = new Stack<Double>();//保存值的堆栈
		Stack<Character> markStack = new Stack<Character>();//保存符号的堆栈
		
		char ch[] = line.toCharArray();
		
		//计算乘除操作
		String tmpValue = "";
		boolean isOper = false;
		for(int i=0; i< ch.length; i++){
			if( ch[i] == PLUS || ch[i] == MINUS || ch[i] == MULTI || ch[i] == DEVIDE) {
				double dv = Double.valueOf(tmpValue).doubleValue();
				if(isOper){
					double dv1 = valueStack.pop();
					char op = markStack.pop();
					double result = simpleTwoEval(op, dv1, dv);
					dv = result;
				}
				valueStack.push(dv);
				markStack.push(ch[i]);
				tmpValue = "";
				isOper = false;
				if( ch[i] == MULTI || ch[i] == DEVIDE )
					isOper = true;
			}else{
				tmpValue += ch[i] + "";
				
				if(i == ch.length -1){
					double dv = Double.valueOf(tmpValue).doubleValue();
					if(isOper){
						double dv1 = valueStack.pop();
						char op = markStack.pop();
						double result = simpleTwoEval(op, dv1, dv);
						dv = result;
					}
					valueStack.push(dv);
				}
			}
		}
//		for(int i=0; i< valueStack.size(); i++){
//			System.out.println(valueStack.get(i));
//		}
//		for(int i=0; i< markStack.size(); i++){
//			System.out.println(markStack.get(i));
//		}
		
		//计算加减操作
		valueStack = (Stack<Double>) reverseStack(valueStack);
		markStack = (Stack<Character>) reverseStack(markStack);
		while(valueStack.size() > 1){
			double v1 = valueStack.pop();
			double v2 = valueStack.pop();
			char op = markStack.pop();
			double result = simpleTwoEval(op, v1, v2);
			valueStack.push(result);
		}
		return valueStack.get(0);
	}
	
	/**
	 * 把整个堆栈翻转
	 * @param stack
	 * @return
	 */
	@SuppressWarnings("unchecked")
	private static Stack<?> reverseStack(Stack<?> stack){
		Stack reverse = new Stack();
		int stackSize = stack.size();
		for(int i=0; i< stackSize; i++){
			reverse.push(stack.pop());
		}
		return reverse;
	}
	
	/**
	 * 只计算简单的两个数结果
	 * @param op
	 * @param value1
	 * @param value2
	 * @return
	 */
	private static double simpleTwoEval(char op, double value1, double value2){
		if(op == PLUS){
			return value1 + value2;
		}else if(op == MINUS){
			return value1 - value2;
		}else if(op == MULTI){
			return value1 * value2;
		}else if(op == DEVIDE){
			return value1 / value2;
		}
		return 0;
	}
	
	public static void main(String[] args) {
		double result = MathEval.eval("1+(2*(3+2))-6+(3/2)+4/2");
		System.out.println();
		System.out.println(result);
	}
}
 

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3