将录制的音频作为麦克风输入发送

Send recorded audio as microphone input

我必须写什么才能以编程方式将录制的音频文件作为 android 中的麦克风输入发送?

示例:

用户记录"hello world".

然后他可以在通话中播放录音。

一旦你有了一个录制的文件,你就可以将它作为 InputStream 或任何其他方式打开。 但是,如果您专门寻找诸如将音频注入 运行 调用 之类的东西,那么这是不可能的。它受到 OS 级别的保护。

除非您要处理自定义 ROM 和修改过的内核。这不是官方的

这可能会让您朝着正确的方向前进。

AudioManager.OnAudioFocusChangeListener通过使用这个你可以在下面的代码中得到audiomanager的状态"focusChange=AUDIOFOCUS_LOSS_TRANSIENT"(当音乐在后台播放时这个状态调用任何来电)这个状态完全在开发人员决定是否播放或暂停音乐。根据您的要求,关于您问的问题,当通话处于摘机状态时是否要播放音乐不要在摘机状态下暂停播放音乐。这只有在耳机被禁用时才有可能

AudioManager am = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);

OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT
            // Pause playback (during incoming call) 
        } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            // Resume playback (incoming call ends)
        } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
            am.unregisterMediaButtonEventReceiver(RemoteControlReceiver);
            am.abandonAudioFocus(afChangeListener);
            // Stop playback (when any other app playing music  in that situation current app stop the audio)
        }
    }
};

The concept of using an audio driver (this is for windows but it might work for android)

就像有些打印机驱动程序根本不连接到打印机而是写入 PDF 文件一样,类似地,有可用的虚拟音频驱动程序根本不连接到物理麦克风但可以通过管道从其他来源,例如文件或其他程序。

我希望我推荐免费软件不会违反任何规则,但是 VB-Audio Virtual Cable 应该可以让您创建一对虚拟输入和输出音频设备。然后你可以将 MP3 播放到虚拟输出设备,然后将虚拟输入设备设置为你的 "microphone"。理论上我认为应该可行。

如果一切都失败了,您可以随时推出自己的虚拟音频驱动程序。 Microsoft 提供了一些示例代码,但不幸的是它不适用于较旧的 Windows XP 音频模型。可能也有适用于 XP 的示例代码。