Android: MediaPlayer.setDataSource(FileDescriptor fd) vs MediaPlayer.setDataSource(FileDescriptor fd, long offset, long length)
Android: MediaPlayer.setDataSource(FileDescriptor fd) vs MediaPlayer.setDataSource(FileDescriptor fd, long offset, long length)
我已经创建了 3 个声音的 3 个资产文件描述符(放入 res/raw)
AssetFileDescriptor afd1 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_1);
AssetFileDescriptor afd2 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_2);
AssetFileDescriptor afd3 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_3);
然后我把它们放到一个数组中:
array.add(afd1);
array.add(afd2);
array.add(afd3);
然后我创建一个 MediaPlayer 实例,让它只播放数组中的第一个声音
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(array.get(0).getFileDescriptor());
mp.prepare();
mp.start()
但是,数组中的3个声音都播放了。
然后我尝试使用 setDataSource(FileDescriptor, long, long) 而不是 setDataSource(FileDescriptor fd),mp 只播放我想要的数组中的第一个声音。
AssetFileDescriptor afd = array.get(0);
mp.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
我的问题是上面的两个 setDataSource 方法有什么区别?使用我在此处包含的代码,为什么 setDataSource(array.get(0)) 播放数组中的所有 3 种声音?
非常感谢。
第二个被告知长度(和偏移量),而第一个播放只要文件描述符 returns 一些数据。资源通常存储在存档中,因此从文件描述符中继续读取第一首歌曲,然后找到第二首歌曲,然后是第三首歌曲。
我已经创建了 3 个声音的 3 个资产文件描述符(放入 res/raw)
AssetFileDescriptor afd1 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_1);
AssetFileDescriptor afd2 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_2);
AssetFileDescriptor afd3 = mContext.getResources().openRawResourceFd(R.raw.mp3_file_3);
然后我把它们放到一个数组中:
array.add(afd1);
array.add(afd2);
array.add(afd3);
然后我创建一个 MediaPlayer 实例,让它只播放数组中的第一个声音
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(array.get(0).getFileDescriptor());
mp.prepare();
mp.start()
但是,数组中的3个声音都播放了。 然后我尝试使用 setDataSource(FileDescriptor, long, long) 而不是 setDataSource(FileDescriptor fd),mp 只播放我想要的数组中的第一个声音。
AssetFileDescriptor afd = array.get(0);
mp.setDataSource(afd.getFileDescriptor(),
afd.getStartOffset(), afd.getLength());
我的问题是上面的两个 setDataSource 方法有什么区别?使用我在此处包含的代码,为什么 setDataSource(array.get(0)) 播放数组中的所有 3 种声音?
非常感谢。
第二个被告知长度(和偏移量),而第一个播放只要文件描述符 returns 一些数据。资源通常存储在存档中,因此从文件描述符中继续读取第一首歌曲,然后找到第二首歌曲,然后是第三首歌曲。