android AudioRecord类使用setRecordPositionUpdateListener疑问?

UncleQiong 2011-09-15 01:46:15
1.关于AudioRecord中缓冲区的大小大家如何设置
2.设置了setRecordPositionUpdateListener为何没有被调用到
3.setPositionNotificationPeriod(int periodInFrames)这个peroidInFrames参数如何设置
...全文
663 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zippy_KIRA 2011-11-18
  • 打赏
  • 举报
回复
楼主搞定没阿,你说的这个博客http://blog.csdn.net/wildwolf_007/article/details/6635120,我一直用这个方法,并在大部分机器上都可以用,不过手头上有台中兴xt920怎么也搞不定,只有在framePeriod设为1024的时候才会回调几次,然后就又不回调了,模拟器上应该是不能做的,貌似是不支持音频录制呢.
UncleQiong 2011-09-15
  • 打赏
  • 举报
回复
自己顶顶吧,不然帖子都沉了!!
UncleQiong 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fishmen26 的回复:]

hope this can help you.

Java code

public void testAudioRecordOP() throws Exception {
227 final int SLEEP_TIME = 10;
228 final int RECORD_TIME = 10000;
229 ass……
[/Quote]
谢谢你这么仔细的回答,我现在没有机器可以测试,我想问一下,是否可以
int periodInFrames = mAudioRecord.getSampleRate();
assertEquals(AudioRecord.SUCCESS,mAudioRecord.setPositionNotificationPeriod(periodInFrames));
这个会不会导致在不同的机器出现不同结果,而导致缓冲区溢出呢?是否有更好的计算方式?
http://blog.csdn.net/wildwolf_007/article/details/6635120
我发现了这个博客,但是里面的回调函数却没法被调用到?你能看下吗?
fishmen26 2011-09-15
  • 打赏
  • 举报
回复
hope this can help you.


public void testAudioRecordOP() throws Exception {
227 final int SLEEP_TIME = 10;
228 final int RECORD_TIME = 10000;
229 assertEquals(AudioRecord.STATE_INITIALIZED, mAudioRecord.getState());
230
231 int markerInFrames = mAudioRecord.getSampleRate() / 2;
232 assertEquals(AudioRecord.SUCCESS,
233 mAudioRecord.setNotificationMarkerPosition(markerInFrames));
234 assertEquals(markerInFrames, mAudioRecord.getNotificationMarkerPosition());
235 int periodInFrames = mAudioRecord.getSampleRate();
236 assertEquals(AudioRecord.SUCCESS,
237 mAudioRecord.setPositionNotificationPeriod(periodInFrames));
238 assertEquals(periodInFrames, mAudioRecord.getPositionNotificationPeriod());
239 OnRecordPositionUpdateListener listener = new OnRecordPositionUpdateListener() {
240
241 public void onMarkerReached(AudioRecord recorder) {
242 mIsOnMarkerReachedCalled = true;
243 }
244
245 public void onPeriodicNotification(AudioRecord recorder) {
246 mIsOnPeriodicNotificationCalled = true;
247 }
248 };
249 mAudioRecord.setRecordPositionUpdateListener(listener);
250
251 // use byte array as buffer
252 final int BUFFER_SIZE = 102400;
253 byte[] byteData = new byte[BUFFER_SIZE];
254 long time = System.currentTimeMillis();
255 mAudioRecord.startRecording();
256 assertEquals(AudioRecord.RECORDSTATE_RECORDING, mAudioRecord.getRecordingState());
257 while (System.currentTimeMillis() - time < RECORD_TIME) {
258 Thread.sleep(SLEEP_TIME);
259 mAudioRecord.read(byteData, 0, BUFFER_SIZE);
260 }
261 mAudioRecord.stop();
262 assertEquals(AudioRecord.RECORDSTATE_STOPPED, mAudioRecord.getRecordingState());
263 assertTrue(mIsOnMarkerReachedCalled);
264 assertTrue(mIsOnPeriodicNotificationCalled);
265 reset();
266
267 // use short array as buffer
268 short[] shortData = new short[BUFFER_SIZE];
269 time = System.currentTimeMillis();
270 mAudioRecord.startRecording();
271 assertEquals(AudioRecord.RECORDSTATE_RECORDING, mAudioRecord.getRecordingState());
272 while (System.currentTimeMillis() - time < RECORD_TIME) {
273 Thread.sleep(SLEEP_TIME);
274 mAudioRecord.read(shortData, 0, BUFFER_SIZE);
275 }
276 mAudioRecord.stop();
277 assertEquals(AudioRecord.RECORDSTATE_STOPPED, mAudioRecord.getRecordingState());
278 assertTrue(mIsOnMarkerReachedCalled);
279 assertTrue(mIsOnPeriodicNotificationCalled);
280 reset();
281
282 // use ByteBuffer as buffer
283 ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER_SIZE);
284 time = System.currentTimeMillis();
285 mAudioRecord.startRecording();
286 assertEquals(AudioRecord.RECORDSTATE_RECORDING, mAudioRecord.getRecordingState());
287 while (System.currentTimeMillis() - time < RECORD_TIME) {
288 Thread.sleep(SLEEP_TIME);
289 mAudioRecord.read(byteBuffer, BUFFER_SIZE);
290 }
291 mAudioRecord.stop();
292 assertEquals(AudioRecord.RECORDSTATE_STOPPED, mAudioRecord.getRecordingState());
293 assertTrue(mIsOnMarkerReachedCalled);
294 assertTrue(mIsOnPeriodicNotificationCalled);
295 reset();
296
297 // use handler
298 final Handler handler = new Handler(Looper.getMainLooper()) {
299 @Override
300 public void handleMessage(Message msg) {
301 mIsHandleMessageCalled = true;
302 super.handleMessage(msg);
303 }
304 };
305
306 mAudioRecord.setRecordPositionUpdateListener(listener, handler);
307 time = System.currentTimeMillis();
308 mAudioRecord.startRecording();
309 assertEquals(AudioRecord.RECORDSTATE_RECORDING, mAudioRecord.getRecordingState());
310 while (System.currentTimeMillis() - time < RECORD_TIME) {
311 Thread.sleep(SLEEP_TIME);
312 mAudioRecord.read(byteData, 0, BUFFER_SIZE);
313 }
314 mAudioRecord.stop();
315 assertEquals(AudioRecord.RECORDSTATE_STOPPED, mAudioRecord.getRecordingState());
316 assertTrue(mIsOnMarkerReachedCalled);
317 assertTrue(mIsOnPeriodicNotificationCalled);
318 // The handler argument is only ever used for getting the associated Looper
319 assertFalse(mIsHandleMessageCalled);
320
321 mAudioRecord.release();
322 assertEquals(AudioRecord.STATE_UNINITIALIZED, mAudioRecord.getState());
323 }
UncleQiong 2011-09-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 fishmen26 的回复:]

http://blog.csdn.net/hellogv/article/details/6026455
[/Quote]

你给的这一份不是使用设置listenner来解决的,而且他参数都是写死的,缓冲区大小用getMin..
fishmen26 2011-09-15
  • 打赏
  • 举报
回复
http://blog.csdn.net/hellogv/article/details/6026455
UncleQiong 2011-09-15
  • 打赏
  • 举报
回复
自己顶一下吧,快沉了,求各位帮忙啊

80,350

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧