python androidhelper 播放 音频_基于外置UAC音频设备做的一款录音Android Demo

本文档介绍了如何利用Python的androidhelper库,在Android设备上通过外置UAC音频设备进行音频播放。步骤包括编译libusb为so文件、创建Android项目、配置JNI库、编写Java和C代码、申请权限以及处理设备连接和断开事件。通过这些步骤,实现了一个简单的录音Android Demo。
摘要由CSDN通过智能技术生成

UAC音频设备测试

1,使用BuildLibUSB项目编译libusb为so文件

2,在Android Studio 4.1.1中,新建一个项目,选择empty activity

3,在app目录中,新建jniLibs\libusb-1.0\lib目录,拷贝第1步生成的so文件到jniLibs\libusb-1.0\lib目录,分cpu类型存放

4,在jniLibs\libusb-1.0目录中,新建include目录,从uildLibUSB项目中找到libusb.h并拷贝过来 5,在jniLibs\libusb-1.0目录中,新建Android.mk文件,内容为:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := libusb-1.0

LOCAL_SRC_FILES := lib/$(TARGET_ARCH_ABI)/libusb-1.0.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include/libusb-1.0

LOCAL_EXPORT_LDLIBS := -llog

include $(PREBUILT_SHARED_LIBRARY)

6,在BuildLibUSB项目中找到freedv.zip,解压到app\jniLibs目录中

7,新建java文件,内容为:

public class UsbAudio {

static {

System.loadLibrary("usbaudio");

}

public native boolean setup();

public native void close();

public native void loop();

public native boolean stop();

public native int measure();

}

8,修改调用so文件的c语言文件,替换com_luoxi_uac,com.luoxi.uac,com/luoxi/uac等包含包名的字符串为自己的

9,新增MainActivity,并修改AndroidManifest.xml文件中的activity标签为:

android:name="com.luoxi.uacdemo.MainActivity"

android:label="@string/app_name">

10,修改app的build.gradle文件,在android域里面新增NDK相关设置

ndkPath "E:\\android-ndk-r21b"

sourceSets {

main {

jniLibs.srcDirs = ["jniLibs"]

}

}

externalNativeBuild {

ndkBuild {

path "jniLibs/Android.mk"

}

}

11,拷贝usbhelper到java目录下,usbhelper可以从BuildLibUSB项目根目录中找到

12,修改MainActivity的OnCreate方法,增加初始化代码,类似于:

mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);

HashMap deviceList = mUsbManager.getDeviceList();

Iterator deviceIterator = deviceList.values().iterator();

while(deviceIterator.hasNext()){

UsbDevice device = deviceIterator.next();

UsbInterface intf = device.getInterface(0);

if (intf.getInterfaceClass() == UsbConstants.USB_CLASS_AUDIO) {

mAudioDevice = device;

}

}

System.loadLibrary("usb-1.0");

UsbHelper.useContext(getApplicationContext());

mUsbAudio = new UsbAudio();

AudioPlayback.setup();

13,在相应位置(例如在mainActivity的按钮事件侦听方法中)增加声音捕获代码,例如:

try{

if (mUsbAudio.setup() == true) {

}

}catch (Exception e){

e.printStackTrace();

}

new Thread(new Runnable() {

public void run() {

while (true) {

try {

mUsbAudio.loop();

}catch (Exception e){

e.printStackTrace();

}

}

}

}).start();

14,在相应位置增加声音捕获停止代码,例如:

mUsbAudio.stop();

mUsbAudio.close();

15,在相应位置增加Android操作系统的权限申请代码,例如:

mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);

IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);

mUsbPermissionReciever = new UsbReciever();

registerReceiver(mUsbPermissionReciever, filter);

if (mAudioDevice != null && mPermissionIntent != null) {

mUsbManager.requestPermission(mAudioDevice, mPermissionIntent);

}

16,在相应位置增加注销代码,例如:

unregisterReceiver(mUsbPermissionReciever);

if (mUsbAudio != null) {

mUsbAudio.stop();

mUsbAudio.close();

}

17,在相应位置增加USB设备变动广播侦听器,例如:

private class UsbReciever extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);

if (ACTION_USB_PERMISSION.equals(action)) {

if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {

setDevice(device);

}

}

}

}

18,处理其他问题,后编译运行

源代码:https://gitee.com/radarfyh/multimedia-system/tree/master/TestUAC1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值