当前位置: 首页 > 知识库问答 >
问题:

将数据写入Android音频插孔

巫马修为
2023-03-14

我正在从蓝牙耳机的麦克风上录制现场音频,并将其播放到手机的扬声器上。

 int bufferSize = AudioRecord.getMinBufferSize(samplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT);
        arec = new AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, samplingRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);
        //STREAM_MUSIC - no sound
        //STREAM_ALARM - beep from phone's speaker
        //STREAM_RING - no sound
        //STREAM_NOTIFICATION - no sound
        //STREAM_SYSTEM - no sound
        //STREAM_VOICE_CALL - plays back on bt headset
        //STREAM_DTMF - sound from loud speaker, not very clear but works for now
        atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, samplingRate, AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
        atrack.setPlaybackRate(samplingRate);
        byte[] buffer = new byte[bufferSize];
        arec.startRecording();
        atrack.play();
        while(isRecording) {
            arec.read(buffer, 0, bufferSize);
            atrack.write(buffer, 0, buffer.length);
        }
audioManager.setBluetoothScoOn(true);
    audioManager.startBluetoothSco();
    //works for MODE_IN_COMMUNICATION - however there's a lot of echo when on speaker phone
    //works fine for MODE_IN_CALL
    audioManager.setMode(AudioManager.MODE_IN_CALL);
    //turning speakerphone on causes a lot of disturbance
    //audioManager.setSpeakerphoneOn(true);
    //samplingRate = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_VOICE_CALL);
    samplingRate = 16000;

但是,即使我有setSpeakerPhoneon(false)并将耳机插入音频插孔,音频也是从手机本身而不是耳机播放的。我如何克服这一点?把扩音器打开会产生很大的噪音。

我使用16000的采样率,因为不用耳机也能听到。当我使用本地采样率时,我显然只是听到了真正的高频噪声。我怎样才能让这种声音在耳机上播放,而不是在电话扬声器上播放?

共有1个答案

葛磊
2023-03-14

对您来说不幸的是,由于不支持显式路由,不支持蓝牙和扬声器设置的组合,这将使您能够使用蓝牙耳机的麦克风,但使用手机的扬声器(耳机/耳机或扬声器)。考虑到许多可能的荒谬组合,我怀疑这是转向更简单API的理由。

您可以尝试调用不推荐的setRouting()函数,但是这可能会产生意想不到的副作用和/或甚至不能工作,这取决于硬件的能力以及底层子系统/驱动程序中正确管理的情况。

 类似资料:
  • 本文向大家介绍Android 将数据插入数据库,包括了Android 将数据插入数据库的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 我一直在看这段代码已有一段时间了,但我看不出问题出在哪里。我已经阅读了整个StackOverflow,但仍然看不到我的错误在哪里。 错误在第13行中,即thats 。我尝试通过http://www.w3schools.com/php/php_mysql_insert.asp帮助自己,但对我没有太大帮助。 问题答案: 警告: 切勿将 w3schools 用于学习目的。他们的教程中有很多错

  • 问题内容: 我正在开发一个费用跟踪程序,在该程序中,我希望在应用程序首次启动时用一些记录填充数据库。我试图在我的启动活动中调用该方法并添加数据。但是,当我清除我的应用程序数据并第一次启动该应用程序时,会发生错误,提示没有此类列。 日志猫错误如下所示。 首次启动应用程序时,如何填充数据!只有几条记录,所以我不担心性能。 这将是一个很大的帮助! 谢谢。 数据库代码 我用来添加记录的方法 字符串值: 问

  • 问题内容: 在我们的应用程序中,我们希望用户输入如下: 我想在单元测试中通过该部分,以便我可以恢复线程以执行其余代码。我如何从junit 写入内容? 问题答案: 你想要做的是使用的方法从。这将使您可以从junit 传递数据。

  • --编辑1-- 音频和视频来自外部来源(麦克风和摄像机),并被捕获为未经任何压缩的原始数据(即使是视频)。我使用h264编码视频和音频无压缩(PCM)。 捕获的音频为:16位,44100kHz,立体声 谢谢你宝贵的建议。