小编Aka*_*ash的帖子

将两个音频流混合到android中的单个音频流中?

我试图混合两个音频流来获得单个输出流是否有可能在Android?在我的例子中,我有一个来自Microphone的输入流,即我正在使用AudioRecord录制用户语音.我想将这个录音与一个短的声音片段混合,然后创建一个新的流,它是两个流的混合,然后通过数据报套接字发送.我研究了很多,这就是我所知道的.

首先,SoundPool可以帮助我实现目标,但我认为我不能提供麦克风作为输入源.

目前,我将记录从MIC保存在缓冲区中,然后通过数据报套接字进行流式传输.我以为我可以将声音片段保存在另一个缓冲区中,然后添加两个缓冲区(我知道这是一个愚蠢的想法,因为我必须管理各种声音属性).

也可能是我可以将录音从麦克风保存到文件并将声音片段录制到不同的文件并混合它们,但我想我不能这样做,因为我试图通过数据报套接字流式传输录音.

我认为使用Java的声音API可以实现我想要实现的目标.但Android不支持它.

总而言之,我想要实现的目标是在基于VoIP(SIP)的呼叫中注入声音效果(声音效果就像蟋蟀声音和我的声音一样).

我希望我对我的问题做出明确的解释.

问题1:我怎样才能做到这一点?问题2:我可以使用Java的Sound API创建一个JAR文件并在我的项目中使用它吗?(关于这一点,我认为这是不可能的)

以下是我的录音和音频播放的一些代码.

这是我的录音代码:

            public void run() {
                // TODO Auto-generated method stub
                try{
                    int minbuffer = AudioRecord.getMinBufferSize(sample, config, format);
                    DatagramSocket socket = new DatagramSocket();
                    Log.d(TAG, "Socket Created");
                    socket.setBroadcast(true);
                    byte[] ubuff = new byte[minbuffer];

                    DatagramPacket packet;
                    Log.d(TAG, "Packet Created");
                    InetAddress dest = InetAddress.getByName("10.10.1.126");
                    //InetAddress dest = InetAddress.
                            //InetSocketAddress dest= new InetSocketAddress(host, port);
                    Log.d(TAG, "Address"+dest);

                    rec = new AudioRecord(MediaRecorder.AudioSource.MIC,sample,
                                config,format,minbuffer);

                    rec.startRecording();
                    while(status == true){

                        minbuffer = rec.read(ubuff, 0,ubuff.length);
                        Log.d(TAG, "Reading While");
                        packet = new …
Run Code Online (Sandbox Code Playgroud)

java sockets audio android

11
推荐指数
1
解决办法
4246
查看次数

标签 统计

android ×1

audio ×1

java ×1

sockets ×1