音频流工具设计与实现

1,需求

        用户需求:实用工具,可用于调试/测试多音频硬件设备、蓝牙无线扩音器、指定设备录音等。

        系统需求:实现多个设备之间音频流的任意流动,包括麦克风(手机、蓝牙耳机、有线耳机)到扬声器(手机、蓝牙耳机、有线耳机)、麦克风到文件、文件到扬声器的音频流动。用户可任意选择输入/输出音频设备。支持单输入流多输出流。可视化声音。
        

2,架构设计

        设计原则:

  1. 用户界面与功能模块解耦
  2. 各种类流统一接口
  3. 层次化

  1. Activity是用户界面。
  2. UserInteractive是UI适配层,对于功能模块来说接口不变;
  3. AudioRouter是流的流向管理,支持单输入流多输出流;
  4. FileStream是文件流,可以输出(录音文件播放)也可以输入(录音保存);
  5. Microphone是麦克风设备流;
  6. Speaker是扬声器流,用于通过Bar显示声音强度;
  7. SoundBar是声音强度可视化组件;

3,实现

        输入设备选择

        输出设备选择

音频流转发

实践发现,不同手机的音频配置不样同。而DeviceInfo输出的详细信息,有可能和打开AudioRecord或AudioTrack配置对不上,比如我手K70手机中,内置麦克风详细信息显示支持单声道,实际不支持单声道。

4,接口代码

public interface UserInteractive {

    interface UserEventListener {
        void onEventListener();
    }

    public ProgressBar[] getProgressBars();

    public AudioDeviceInfo getInputDeviceInfo();
    public AudioDeviceInfo getOutputDeviceInfo();

    public void setStartRoutingListener(UserEventListener listener);
    public void setStopRoutingListener(UserEventListener listener);

    public void setViewStatus(String status);

    public void OnStatusChanged(int status);

    public int getAudioFormat();
    public int getAudioSampling();
    public int getAudioChannel();

    public AudioManager getAudioManager();

}
public interface StreamRouter {

    void registerInputStream(AudioStream input);

    void registerOutputStream(AudioStream output);

    void startStreamRouting();

    void stopStreamRouting();

    int getRoutingStatus();
}
public interface AudioStream {
    
    public int init() throws Exception;
    public int readData(byte[] streamData, int size);
    public int writeData(byte[] streamData, int size);

    public int release();
}

Mainacitivy实现UserInteractive

class MainActivity extends AppCompatActivity implements UserInteractive

麦克风、声音指示条、扬声器实现了AudioStream

class MicrophoneStream implements AudioStream
class SoundBarStream implements AudioStream 
class SpeakerStream implements AudioStream

AudioRouter实现了StreamRouter

class AudioRouter implements StreamRouter

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值