2401_85896904 2024-12-16 16:21 采纳率: 0%
浏览 82
已结题

更改手机应用的音频输入/推荐其他方案

想要把VBAN receptor接收的音频作为手机端应用的输入音频。
(手机:iqoo11s)


现在我采用的方案是:
使用audiorelay,通过手机采集声音,传输到电脑,进行处理,然后通过电脑上
voicemeeter自带的VBAN,将处理过后的音频传输到手机上的VBAN receptor。


现在遇到的问题:
手机上的VBAN receptor 可以接收来自电脑的音频,但是这个音频是像音乐一样播放,不能作为手机上其他应用的输入音频。
现在需要更改手机上其他应用的音频输入,和audiorelay的音频输入分开(在前面我讲述的方案中,它要收集初始音频)。将其他应用的音频输入改为VBAN receptor所接受到音频。


最好通过软件实现这个目的(不需要自己更改手机代码,我这方面我不擅长,可能弄坏手机)


备选方案:
不用手机采集初始音频,而直接用电脑连接的麦克风采集音频,进行处理,然后发送到手机上,这个音频直接作为手机输入音频。
这个方案避免了在手机内,不同应用需要有不同音频输入来源的问题。但新的问题在于:怎么在无线传输的情况下,使手机接收到的音频作为手机应用的输入音频,而不是像音乐一样进行播放。也就是该选择什么方式进行无线传输(有什么应用),能使音频直接作为手机的音频输入。


(小说明:个人将这个方案备选的原因在于,第一个方案在解决了如何更改手机应用音频输入的问题之后,可以通过更改手机与电脑之间的音频传输方式,实现不连接同一WiFi的情况下,远程进行音频处理)


能帮帮忙吗?˃̣̣̥᷄⌓˂̣̣̥᷅

  • 写回答

38条回答 默认 最新

  • 阿里嘎多学长 2024-12-16 16:21
    关注
    获得0.20元问题酬金

    阿里嘎多学长整理AIGC生成,因移动端显示问题导致当前答案未能完全显示,请使用PC端查看更加详细的解答过程

    解决方案

    你想要将 VBAN receptor 接收的音频作为手机端应用的输入音频,这个需求可以通过以下方案实现:

    1. 使用 Android 的 AudioRecord API 直接采集音频数据,然后将其传输到电脑进行处理。
    2. 使用开源库 FFmpeg 在手机端进行音频处理和编码,然后将编码后的音频数据传输到电脑。

    以下是一个使用 AudioRecord API 和 FFmpeg 库实现音频采集和处理的示例代码:

    import android.media.AudioFormat;
    import android.media.AudioRecord;
    import android.media.MediaRecorder;
    import android.os.Bundle;
    import android.util.Log;
    
    import java.io.IOException;
    import java.nio.ByteBuffer;
    import java.nio.ByteOrder;
    
    public class AudioCaptureActivity extends AppCompatActivity {
        private static final String TAG = "AudioCaptureActivity";
        private AudioRecord audioRecord;
        private FFmpeg ffmpeg;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            // 初始化 AudioRecord
            audioRecord = new AudioRecord(
                    MediaRecorder.AudioSource.MIC,
                    44100, // sample rate
                    AudioFormat.CHANNEL_IN_MONO,
                    AudioFormat.ENCODING_PCM_16BIT,
                    1024 // buffer size
            );
            // 初始化 FFmpeg
            ffmpeg = new FFmpeg();
            // 开始采集音频数据
            audioRecord.startRecording();
            // 处理音频数据
            while (true) {
                short[] audioData = new short[audioRecord.getBufferSize()];
                audioRecord.read(audioData, 0, audioData.length);
                // 将音频数据传输到电脑
                ByteBuffer buffer = ByteBuffer.allocate(audioData.length * 2);
                buffer.order(ByteOrder.nativeOrder());
                buffer.putShort(audioData);
                // 使用 FFmpeg 将音频数据编码
                ffmpeg.encodeAudio(buffer, "pcm_s16le");
            }
        }
    }
    

    这个示例代码使用 AudioRecord API 采集音频数据,然后使用 FFmpeg 库将音频数据编码为 PCM16LE 格式。最后将编码后的音频数据传输到电脑进行处理。

    需要注意的是,这个示例代码只是一个简单的示例,实际实现中可能需要考虑音频采集和处理的延迟、音频数据的压缩和传输等问题。

    评论

报告相同问题?

问题事件

  • 系统已结题 12月24日
  • 创建了问题 12月16日