当前位置: 编程技术>移动开发
本页文章导读:
▪对音频文件的操作 录音跟播放 对音频文件的操作 录音和播放
录音,并且把录影文件放在了外存储设备sdcard中:
package com.quidng.practice;
import java.io.File;
import java.io.IOException;
import android.app.Activity;
import android.media.MediaRecorder;.........
▪ GOOGLE打开了潘多拉匣子 GOOGLE打开了潘多拉盒子
手机系统大战 算不算 GOOGLE打开了潘多拉盒子
开发者的噩梦啊
......
▪ Matrix容易使用 Matrix简单使用
Matrix是一个3*3的矩阵:平移的矩阵计算:现设点P0(x0, y0)进行平移后,移到P(x,y),其中x方向的平移量为△x,y方向的平移量为△y,那么,点P(x,y)的坐标为:x = x0.........
[1]对音频文件的操作 录音跟播放
来源: 互联网 发布时间: 2014-02-18
对音频文件的操作 录音和播放
录音,并且把录影文件放在了外存储设备sdcard中:
package com.quidng.practice; import java.io.File; import java.io.IOException; import android.app.Activity; import android.media.MediaRecorder; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.AdapterView; import android.widget.Button; public class RecordSound extends Activity implements OnClickListener{ private Button btnRecord,btnStop; private MediaRecorder recorder; private File soundFile; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.record_sound); btnRecord = (Button) findViewById(R.id.record_sound_record); btnRecord.setOnClickListener(this); btnStop = (Button) findViewById(R.id.record_sound_stop); btnStop.setOnClickListener(this); } @Override protected void onDestroy() { super.onDestroy(); if(soundFile != null && soundFile.exists() && recorder != null){ recorder.stop(); //**停止录音** recorder.release(); //**释放资源** recorder = null; } } @Override public void onClick(View v) { if(v.getId() == R.id.record_sound_record){ try { //直接存储到了sdcard中 soundFile = new File(Environment.getExternalStorageDirectory().getCanonicalFile() + "/sound1.amr"); recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); //录制的声音的来源 // recorder.setVideoSource(video_source); //录制视频 recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //录制的声音的输出格式(必须在设置声音的编码格式之前设置) recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //设置声音的编码格式 recorder.setOutputFile(soundFile.getAbsolutePath()); //设置声音的保存位置 recorder.prepare(); //**准备录音** recorder.start(); //**开始录音** } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }else if(v.getId() == R.id.record_sound_stop){ if(soundFile != null && soundFile.exists()){ recorder.stop(); //**停止录音** recorder.release(); //**释放资源** recorder = null; } } } }
播放音乐:
package com.quding.widget.musicplayer; import java.io.IOException; import android.app.Service; import android.content.Intent; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; import android.media.MediaPlayer; import android.os.Bundle; import android.os.IBinder; import android.util.Log; public class MusicPlayerService extends Service{ private MediaPlayer player; private AssetFileDescriptor asserAssetFileDescriptor; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); AssetManager assetManager = this.getAssets(); //获得一个assert资源管理器的实例 try { asserAssetFileDescriptor = assetManager.openFd("run_with_myself.mp3"); //获取一个raw资源 } catch (IOException e) { e.printStackTrace(); } player = new MediaPlayer(); //播放assert中的文件 // player = MediaPlayer.create(getApplicationContext(), R.raw.run_with_myself); //这个是播放raw中的音频文加 // player = new MediaPlayer(); //播放sdcard中的文件 // try { // player.setDataSource("/sdcard/sound1.arm"); //指明路径 // player.prepare(); //装载音频文件 // } catch (Exception e) { // e.printStackTrace(); // } Log.i("tag", "service已经存在"); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); if(intent != null){ Log.i("tag", intent.getData().toString()); int operator = Integer.parseInt(intent.getData().toString()); //operate带着具体的操作信息 switch (operator) { case 1 : //打开 playMusic(); break; case 2 : //暂停 pauseMusic(); break; case 3 : //停止 stopMusic(); break; } } } private void playMusic() { if(player != null && !player.isPlaying()){ try { //设置资源 player.setDataSource(asserAssetFileDescriptor.getFileDescriptor(), asserAssetFileDescriptor.getStartOffset(), asserAssetFileDescriptor.getLength()); player.prepare(); //加载资源 player.start(); Log.i("tag", "播放音乐"); } catch (Exception e) { e.printStackTrace(); } } } private void pauseMusic(){ if(player != null && player.isPlaying()){ player.pause(); Log.i("tag", "暂停"); } } private void stopMusic(){ player.stop(); Log.i("tag", "停止"); try { player.reset(); //使mediaPlayer会回到初始化之前的地方,需要重新加载文加, player.setDataSource(asserAssetFileDescriptor.getFileDescriptor(), asserAssetFileDescriptor.getStartOffset(), asserAssetFileDescriptor.getLength()); player.prepare(); //加载资源 Log.i("tag", "重新加载文件"); } catch (IOException ex) { ex.printStackTrace(); } } }
[2] GOOGLE打开了潘多拉匣子
来源: 互联网 发布时间: 2014-02-18
GOOGLE打开了潘多拉盒子
手机系统大战 算不算 GOOGLE打开了潘多拉盒子
开发者的噩梦啊
[3] Matrix容易使用
来源: 互联网 发布时间: 2014-02-18
Matrix简单使用
Matrix是一个3*3的矩阵:
平移的矩阵计算:
现设点P0(x0, y0)进行平移后,移到P(x,y),其中x方向的平移量为△x,y方向的平移量为△y,那么,点P(x,y)的坐标为:
x = x0 + △x
y = y0 + △y
采用矩阵表达上述如下:
图像旋转的矩阵计算:
现设点P0(x0, y0)旋转θ角后的对有点为P(x, y)。通过使用向量,我们得到如下:
x0 = r cosα
y0 = r sinα
x = r cos(α-θ) = x0 cosθ+ y0 sinθ
y = r sia(α-θ) = -x0 sinθ+y0 cosθ
于是我们得到矩阵:
矩阵的放大缩小:
放大缩小是利用最下面的一行数值改变实现的。右下角的数值n>1表示缩放n,n<1表示扩展n倍
旋转和放大缩小是以当前左上角进行的。因此如果要以某点(x,y)旋转或者缩放,需要进行:
执行顺序-->平移元素,将点(x,y)移动到元素左上角,缩小元素为原来的一半,将元素平移到原来的位置。
旋转也是用同样的方式。注意先后顺序。
Matrix是一个3*3的矩阵:
平移的矩阵计算:
现设点P0(x0, y0)进行平移后,移到P(x,y),其中x方向的平移量为△x,y方向的平移量为△y,那么,点P(x,y)的坐标为:
x = x0 + △x
y = y0 + △y
采用矩阵表达上述如下:
图像旋转的矩阵计算:
现设点P0(x0, y0)旋转θ角后的对有点为P(x, y)。通过使用向量,我们得到如下:
x0 = r cosα
y0 = r sinα
x = r cos(α-θ) = x0 cosθ+ y0 sinθ
y = r sia(α-θ) = -x0 sinθ+y0 cosθ
于是我们得到矩阵:
矩阵的放大缩小:
放大缩小是利用最下面的一行数值改变实现的。右下角的数值n>1表示缩放n,n<1表示扩展n倍
旋转和放大缩小是以当前左上角进行的。因此如果要以某点(x,y)旋转或者缩放,需要进行:
matrix.setScale(0.5f,0.5f); matrix.preTranslate(-x,-y); matrix.postTranslate(x,y);
执行顺序-->平移元素,将点(x,y)移动到元素左上角,缩小元素为原来的一半,将元素平移到原来的位置。
旋转也是用同样的方式。注意先后顺序。
1 楼
lipeng88213
2011-10-12
问一下 楼主
现设点P0(x0, y0)旋转θ角后的对有点为P(x, y)。通过使用向量,我们得到如下:
x0 = r cosα
y0 = r sinα
这个是怎么算的啊
现设点P0(x0, y0)旋转θ角后的对有点为P(x, y)。通过使用向量,我们得到如下:
x0 = r cosα
y0 = r sinα
这个是怎么算的啊
最新技术文章: