android 多媒体和相机详解_音箱_音频应用论坛 - Powered by AUIOAPP

音频应用论坛

 找回密码
 快速注册

QQ登录

只需一步,快速开始

搜索
热搜: 音频应用

[其它相关] android 多媒体和相机详解

[复制链接]
李书馨 发表于 2006-2-26 17:18:00

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?快速注册

x
android 多媒体和相机详解/ g1 P! `- Q& j* q% z- a0 _
处理AUDIO_BECOMING_NOISYIntent
4 N9 k0 w5 M3 Z* V: S& ?  很多良好的音频播放的应用都会在那些导致声音变为噪音(通过外部扬声器输出)的事件发生时自动停止播放.例如,这可能发生在当一个用户用耳机听音乐时忽然断开了耳机连接.音频从扬声器播放可能不是用户期望的.4 u- ]8 b# N8 |! u; S

& l( [) L+ s5 U5 J" Q6 s/ Q5 h
4 {/ X- o% R4 }; N' c$ \" I
0 R% d9 Y  u' V3 U1 g6 m  a4 S+ W+ n* }7 F
. v) [% }0 `- Q8 D- {2 Y( J
  你可以通过处理ACTION_AUDIO_BECOMING_NOISYintent 来保证你的应用在此情况下停止播放音乐,你可以把如下代码添加到你的manifest来注册一个receiver:" G9 I6 c) k. I8 _% }$ q/ w, Z5 N
6 w5 n! }2 L6 J# [

4 k$ u7 e- Q- @3 g7 B[java]0 |/ V5 Y, Z  @% Q: j9 k( s
<receiver android:name=".MusicIntentReceiver">
, O# x4 M9 }6 u: {+ o   <intent-filter> - m  B2 z  V' ?$ a0 C8 Z* T! V5 g) T
      <action android:name="android.media.AUDIO_BECOMING_NOISY" />
1 k4 t4 f: C* f% }' x4 z4 Y* z   </intent-filter>
3 g" u: k1 x. s, m</receiver>
. \+ b& G# b) W" M" P. P6 o' \4 f" J4 z
<receiver android:name=".MusicIntentReceiver">
0 e) f9 v2 @2 b' X: h3 b5 T   <intent-filter>/ h, q1 f1 ]2 n! M
      <action android:name="android.media.AUDIO_BECOMING_NOISY" />
( z3 K, x" a6 X# N" N   </intent-filter>
7 {6 e( [4 ]) e" E  e</receiver># f- ~( M; i  t) h  ?( i
& J9 A$ @% Q" g( @5 ?
此段把MusicIntentReceiver类作为这个intent的一个广播接收器(broadcastreceiver)进行注册,下面就是要实现这个类:
& T+ b4 p7 J! v5 ~- d* E" m: v+ C# B& `, p6 ~$ a+ N7 r* X
3 Z  J3 B% q% Y5 o3 S
[java]
3 |! w, _+ A8 z' g% G0 d8 Opublic class MusicIntentReceiver implements android.content.BroadcastReceiver { : U, f5 j0 s- T, o4 Y2 `# O
   @Override
7 W* o! ]; M7 P( Y   public void onReceive(Context ctx, Intent intent) { 4 f+ {8 x  Y4 N
      if (intent.getAction().equals( ! B! V( j, w, ~
                    android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) { % `3 u( i1 Q, L7 r/ N2 }
          // 通知你的service停止播放  
- f9 `% M( @8 n; d' E          // (比如通过一个Intent)  
  |: }, h" d3 Q# f0 T      } / o* ]7 l+ z; q
   }
  o8 S; p( M9 m+ m' C}
+ d4 {9 T$ f! r- X+ |( i9 {( `6 a. U( l& x' d
public class MusicIntentReceiver implements android.content.BroadcastReceiver {. m' o, F4 i2 ]' X3 \. N
   @Override
8 e. }- y* ]7 n$ p7 l! r   public void onReceive(Context ctx, Intent intent) {
2 Z& K0 O4 l6 [      if (intent.getAction().equals(
2 H2 S) R- r* b$ L3 u                    android.media.AudioManager.ACTION_AUDIO_BECOMING_NOISY)) {1 }( `+ z" c; o! k
          // 通知你的service停止播放1 b$ A, D( {6 T0 q, ^
          // (比如通过一个Intent)
. P5 `' q+ Y" ^* B2 w1 H' ~      }* v: a5 x" x9 q) o$ R9 `( r
   }
) a. ^7 a, v* q) ]7 V- [4 o, z}从一个ContentResolver获取媒体
8 {* i7 Q* x1 S1 H- n) R
$ H: O* M$ x9 V6 a6 o0 T  \; M$ T6 r. p$ p3 p" E, b; @6 p
  媒体播放应用的是另一个有用的特性是检索用户存放在设备上的音乐.你可以通过从ContentResolver查询媒体来做到:
/ ^7 a) R, ^4 e( O$ x/ x6 v
( U1 ?7 v/ P$ P4 a' ^
, r# N; z. B4 P[java]% }0 s9 Z* s7 m9 O6 e7 Q
ContentResolver contentResolver = getContentResolver();
. |$ @( C6 B  p' YUri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
4 C0 b9 Z$ z& Z# @7 ]7 m. ^Cursor cursor = contentResolver.query(uri, null, null, null, null);
. f# G0 q+ j8 I5 W+ ~- Yif (cursor == null) {
9 @2 c+ \$ i3 r4 x! g: h: r. P    // 查询失败,处理错误  
$ M5 L5 H) ~8 B/ B& [} else if (!cursor.moveToFirst()) {
, ~5 P6 A/ p6 D  `" A    // 设备上没有媒体  ! d: j+ v$ m- N( D8 m
} else {
9 k5 l# G. a% c1 C( v* `1 G    int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
4 {. K( v2 O& M: H, J7 Y) F0 l    int idColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID); 8 |/ ~. M8 o4 g( `8 E$ t9 w
    do {
8 w' N  T$ F% `! d4 w3 ^$ X, H       long thisId = cursor.getLong(idColumn);
# S- b  R! `  r, d* d/ |& Z       String thisTitle = cursor.getString(titleColumn); ! m* Z- k: U2 V8 F0 e0 V
       // ...process entry...  ! |9 U4 V- |9 D, ~
    } while (cursor.moveToNext()); 5 S4 `! o" i9 y) t4 Y5 z; U1 g# K: r
} - p/ T" w7 x) H3 A; |/ [
: K) T; }) U/ \
ContentResolver contentResolver = getContentResolver();
' s* T$ `: K5 V1 q! c: }Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;% ~) X% ?% t: o( x  d& P+ L6 c
Cursor cursor = contentResolver.query(uri, null, null, null, null);
" U: V5 t/ U/ i  Z2 kif (cursor == null) {: W* M: y# d, m1 a1 X6 C
    // 查询失败,处理错误. k! r4 s) E3 y5 l2 ~/ s
} else if (!cursor.moveToFirst()) {
; r6 u3 m$ V; f- y( v    // 设备上没有媒体% U0 O+ S5 @$ {: L. Q
} else {
0 q: F. y& M; |" A- }' ^  P    int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
8 M* w5 K4 g) r    int idColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);) ]- s. ?: e* b, G: r( g
    do {
' q2 }+ p/ t$ m4 ~       long thisId = cursor.getLong(idColumn);
+ `  x; Q  f# _) g+ `; m       String thisTitle = cursor.getString(titleColumn);# o' R. r% ^/ r9 n3 x
       // ...process entry...; A. G: ?- w4 E9 F: T
    } while (cursor.moveToNext());
2 {0 N8 h2 {6 a7 A. u5 O}
- }1 t9 j3 F8 K& o$ u, u5 v; G
) K$ J. H8 X+ [+ i$ |8 u. A* ~) ]$ S0 W5 W

4 M+ |7 ]1 A6 B  a4 w- U要在MediaPlayer中播放获取到的媒体,你可以这样做:
% p  P+ H. X; J' E. l1 ~0 v/ d" G1 Y/ ^. \* V* ?
5 [! v4 b$ R$ @: ^
[java]* j, y( w$ u  @; r8 d5 }
long id = /* 上面获取到的某个条目的id */; 7 h+ b8 ~& k8 j5 T& r" M- W, P) u
Uri contentUri = ContentUris.withAppendedId(
/ `' j! p: J5 _, e  {0 K9 E- m. S3 R4 C        android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
! f% i6 c" i8 ~/ i$ R
! t6 J& F0 _! t& \7 _mMediaPlayer = new MediaPlayer();
4 e0 O: Q, L" |/ r' h' ?  |mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 3 J7 c7 F& g9 j8 h% ~  E* H
mMediaPlayer.setDataSource(getApplicationContext(), contentUri); ; l: T4 R" h  H# ~. q
; G" r  A7 ~' `) ]7 U
// ...prepare and start...
4 t5 V9 B5 {# R3 b( V/ y7 w! R5 s* }. S' \1 a# D/ K* E
long id = /* 上面获取到的某个条目的id */;
& u5 v7 i+ X! ~; ]4 d" gUri contentUri = ContentUris.withAppendedId(! w8 b" y) E6 v6 `
        android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);% c4 Q( v" n1 ^: Y% k* x9 v
0 @  j+ d& \* Z& T1 ^
mMediaPlayer = new MediaPlayer();
& m; V! q- m$ R3 P9 B; fmMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);& H' @, ], N8 ~$ F6 Q
mMediaPlayer.setDataSource(getApplicationContext(), contentUri);4 m+ C& M( D4 f& a* r

+ Y: D; _) k" J. j( A. z3 I* o// ...prepare and start...1 c2 n2 ~8 p$ \2 Z
& l2 }% ?0 A9 F
1 @# V6 V+ V* L

2 A  @! d" p/ |% Z  [+ sJetPlayer9 B! D7 N9 X! Y' W) K. v  V' a$ w5 D
  Android平台包含一个JET引擎,用它可以添加交互式播放的JET音频内容到你的应用.你可以使用SDK所带的JetCreator应用来创建JET内容.要播放和管理JET内容,使用JetPlayer类.
; V+ b6 p; y4 X  S' d/ n  Q# y5 a  X5 x
9 x) k! [1 C% C8 a0 u* q3 C

; c# q/ S5 i" b; R# [7 @* p6 z0 s
播放JET内容
3 z3 R. g4 U  H7 p$ W  本节教给你如何写出,配置和播放JET内容.JET的概念,介绍以及如何使用JetCreator工具创建JET内容,请看JetCreator用户手册,这里不叨叨.这个工具可以在Windows,OS X, 和Linux平台(Linux上不能像Windows和OSX上那样对导入的资产进行试听)上使用.+ `. B5 ]5 P# g2 S( V) a6 U6 v& j$ P8 W
# r3 T6 l# P* l- M5 R0 g
  A7 U0 }6 v, y4 z9 o
下面是如何对存储在SD卡上的一个.jet文件配置JET回放:! s  E1 I. y2 A% k$ N8 V2 N

( j+ W8 d) Y5 [6 U) w  y- [# c
/ o& v) h  a1 q7 ?# t) _[java]  JetPlayer jetPlayer = JetPlayer.getJetPlayer();
, _1 }) r+ ]$ E. D, BjetPlayer.loadJetFile("/sdcard/level1.jet");
0 q# G7 @5 }( D2 d! y5 b$ ^4 J6 qbyte segmentId = 0;
- g1 @  E3 s: _! b3 x' ~- P8 z0 ]2 x4 Z. ?# l$ ~
// queue segment 5, repeat once, use General MIDI, transpose by -1 octave  
- q8 M9 K4 p# u9 G& O4 Z- Y0 [jetPlayer.queueJetSegment(5, -1, 1, -1, 0, segmentId++); 8 i. m# [- t7 E5 E
// queue segment 2  
1 c# K8 K+ f4 T8 \* G$ H- b& K! ^jetPlayer.queueJetSegment(2, -1, 0, 0, 0, segmentId++);
+ H+ H% `! W8 ~+ {8 S0 @$ D7 a- Y& \7 t8 f( k; H  k" ?  t. Q
jetPlayer.play(); www.2cto.com3 C4 u, j) t' _( A& w0 b5 R4 R' m# B
: z% k$ d/ d3 K* N9 A: ^1 o  U! w+ y/ n
JetPlayer jetPlayer = JetPlayer.getJetPlayer();$ H7 f1 v! r# O6 O  c
jetPlayer.loadJetFile("/sdcard/level1.jet");
9 V9 I  k7 Z3 pbyte segmentId = 0;6 V1 v" v, V( W% ?4 R# a$ B+ A5 [
( X6 ^4 W3 H7 ]  ]
// queue segment 5, repeat once, use General MIDI, transpose by -1 octave
! j6 S# F7 R- G) q, V8 _' w, X, MjetPlayer.queueJetSegment(5, -1, 1, -1, 0, segmentId++);* N  O" s. L9 z' d# w/ ]+ r5 E2 X
// queue segment 2
% c$ }6 @( d- U0 F" Q' d6 qjetPlayer.queueJetSegment(2, -1, 0, 0, 0, segmentId++);& g/ v+ Y" P8 p4 J, W
# m7 S- ^4 f, V* T
jetPlayer.play();
- Z- W; z* s4 d+ V. E! k" u" d& N+ h) o6 \- o1 p

3 b% g) M8 Z0 L5 n: n) T- zSDK包含一个例子— JetBoy —它向你演示了如何使用JetPlayer在你的游戏中创建一个交互式音轨.它也演示了如何使用JET事件来同步音乐和游戏逻辑.+ R, ?" e2 Y9 |8 Z1 @

/ s, v$ W: v/ h0 H) P
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

软硬产品代理咨询服务:声卡:雅马哈UR22C、罗兰声卡、福克斯特、艾肯、阿波罗 、M-audio 、普瑞声纳 、福克斯特、 达思冠系列 音箱:吸顶NS-IW560C、吸顶NS-IW660 、NS-AW350、低音NS-SW050、低音NS-SW100;JBL 吸顶8124、CSS-8006BM;香蕉猴 gibbon系列;普瑞声纳E5XT、E4.5、 E3.5BT 有线话筒:舒尔PGA27、PGA48、MV51、mv88、mv88+、SM27 ;森海E945 、MK4、E835S;舒伯乐top248s;罗德NT1-A、VIDEOMIC、VIDEOMIC GO、VideoMicro、VideoMic NTG 无线领夹麦克风:罗德 wireless go II 一拖一、一拖二;猛犸lark150 耳机:森海HD300 pro、美奇 CR-Buds 、索尼7506、爱科技K240S、K240 MKII、K271 MKII、K52、K72、K92、先锋、飞利浦 1:飞利浦会务通/会议摄像头/全向麦克风/执法仪/录音笔 2:洋铭便携式移动演播室 / 切换台 / 摄控一体摄像机 / 虚拟演播室 / 微金课教室 / 色键器 3:逻兰音视频切换台 / 声卡 / 电子鼓 /电钢琴 /耳机 4:Blackmagic专业摄影机 /调色台 / 切换台/ 广播级转换器 / 监视器 / 采集卡 5:索尼专业摄像机/佳能专业摄像机/松下专业摄像机/ insta360专业摄像机 6:话筒:铁三角/ 舒尔/ 森海塞尔 / AKG / RODE/ BBS 7:音响:YAMAHA/ 声艺 / 皇冠 /JBL / 真力/咪宝/BOSE /美奇 8:声卡:RME/羚羊/IXI /艾肯/PreSonus普瑞声纳/Focusrite福克斯特/YAMAHA/雅马哈/ickb 9:耳机:铁三角/beyerdynamic拜亚动力/AKG爱科技/索尼/RunningMan/美技 10:思锐三脚架 /防潮箱 /米泊三脚架/意美捷三脚架/曼富图三脚架 11:XSW系列,300.500代理商,EWD数字系列代理,6000.9000定制产品,还包销了全国三个型号:XSW1-825,EW100 G4-945,EWD- kk 205

小黑屋|手机版|Archiver|音频应用 (鄂ICP备13005321号-1)

Powered by Audio app

快速回复 返回顶部 返回列表