当前位置: 编程技术>移动开发
本页文章导读:
▪对音频文件的操作 录音跟播放 对音频文件的操作 录音和播放
录音,并且把录影文件放在了外存储设备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α
这个是怎么算的啊
最新技术文章: