当前位置:  开发笔记 > Android > 正文

即时音频输入和输出Android

如何解决《即时音频输入和输出Android》经验,为你挑选了0个好方法。

在我的Android应用程序中,我想从智能手机的麦克风中获取一些音频并立即播放,像麦克风一样直播,没有延迟.我目前正在考虑使用AudioRecordAudioTrack类(从我读过的内容),但我不太确定如何继续.

我查看了Stack Overflow上的其他一些问题,但他们并没有完全回答我想做的事情.大多数是2012年.

那么如何使用这些类同时输入和输出音频呢?

另外:我看了一下MediaRecorder API,但是根据我的阅读,需要你将音频保存到文件中,我不想这样做.可以通过tweek来满足我的要求吗?或者我最好只使用AudioRecord

谢谢

编辑:

以下是我在@Pradip Pramanick建议的更新代码:

final Thread record = new Thread(new Runnable() {
        @Override
        public void run() {
            while (!Thread.interrupted()) {
                MediaRecorder microphone = new MediaRecorder();
                microphone.setAudioSource(MediaRecorder.AudioSource.MIC);
                    microphone.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                microphone.setOutputFile(filename);
                microphone.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                try {
                    microphone.prepare();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                microphone.start();
            }
        }
    });

    final Thread play = new Thread(new Runnable() {
        @Override
        public void run() {
            while (!Thread.interrupted()) {
                player = new MediaPlayer();
                try {
                    player.setDataSource(filename);
                    player.prepare();
                    player.start();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    });

我得到了一个Illegal State Exception | Start failed: -38.但是我microphone.start之后打电话microphone.prepare......似乎是什么问题?我搜索了其他线程,说可能有其他后台应用程序使用麦克风.我搜索了我的设备:Moto X Play(第三代)并没有找到.(我甚至关闭了"Ok Google"语音识别,但错误不断出现).

错误日志:

这是显示最新错误的log-cat:

01-31 09:37:21.064 344-3339/? E/MediaPlayerService: offset error
01-31 09:37:21.065 1835-1922/com.synerflow.testapp E/MediaPlayer: Unable to create media player

01-31 09:37:21.065 1835-1922/com.synerflow.testapp I/Player: player.prepare() has failed
01-31 09:37:21.065 1835-1922/com.synerflow.testapp W/System.err: java.io.IOException: setDataSourceFD failed.: status=0x80000000

IO Exception似乎是player.setDataSource(filename),filename变量是一个字符串:Environment.getExternalStorageDirectory().getAbsolutePath() + "\voice.3gp"

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有