Android Studio中.wav/.mp3文件应关联何种类型?ASR调用报错求助
解决Android调用ASR API上传raw目录音频文件的报错问题
这个报错和.mp3文件的关联类型无关,核心问题是Android中res/raw目录下的资源是编译进APK的内部资源,并非文件系统中的普通文件,直接按文件路径处理会导致API接收到无效的文件对象(也就是报错里的NoneType),进而触发'NoneType' object has no attribute 'filename'错误。
解决步骤:
先将raw资源的输入流转换为临时文件,再用临时文件上传到API:
大多数ASR API要求接收带文件名的文件对象,直接传输入流无法满足要求,需要先把raw资源写入到缓存目录的临时文件中。示例代码:
// 获取raw资源的输入流 InputStream inputStream = getResources().openRawResource(R.raw.yes); // 在缓存目录创建临时mp3文件 File tempFile = File.createTempFile("yes", ".mp3", getCacheDir()); // 将raw资源写入临时文件 FileOutputStream outputStream = new FileOutputStream(tempFile); byte[] buffer = new byte[1024]; int readLength; while ((readLength = inputStream.read(buffer)) != -1) { outputStream.write(buffer, 0, readLength); } // 关闭流 inputStream.close(); outputStream.close(); // 后续使用tempFile作为文件参数调用ASR API // 上传完成后可以设置临时文件自动删除 tempFile.deleteOnExit();
关于文件关联类型:
Android Studio中raw目录下的.mp3文件无需手动修改关联类型,保持默认的Audio类型即可,之前尝试的Text、Archive类型都是错误设置,但这不是导致报错的根本原因。
内容的提问来源于stack exchange,提问作者Shashank2002
相关产品推荐
相关产品推荐

