c# - 从 Media.RecordSoundAction 保存的音频文件中获取字节数组

标签 c# android audio mono xamarin.android

我有一个使用

创建的文件
var recordIntent = new Intent(MediaStore.Audio.Media.RecordSoundAction);

我在检索该文件的 URI 时没有遇到任何问题。我可以使用 MediaPlayer 播放它,没有任何困难。

但是,我想将此作为对我的 webAPI 的响应发送,并且正在寻找一种方法将此 URI 表示的音频文件转换为可以转换为 JSON 的字节数组。

使用图像文件我可以做类似的事情

Bitmap bitmap = MediaStore.Images.Media.GetBitmap(ContentResolver, responseUri);
bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
byte[] bitmapData = stream.ToArray();

是否有类似的方法可以从我的音频 URI 检索字节数组数据?

编辑: 音频 URI 的格式。
responseUri = {content://media/external/audio/media/21}

最佳答案

从大量不同的 SO 答案中获取,并对来自 Java 的 mono 进行一些额外的转换,我得出了这些结果。

    public String GetRealPathFromUri(Uri contentUri){
        String[] proj = {MediaStore.Audio.AudioColumns.Data};
        ICursor cursor = ManagedQuery(contentUri, proj, null, null, null);
        int column_index = cursor.GetColumnIndex(MediaStore.Audio.AudioColumns.Data);
        cursor.MoveToFirst();
        return cursor.GetString(column_index);
    }

var responseRealPath = GetRealPathFromUri(responseUri);
var getBytes = System.IO.File.ReadAllBytes(responseRealPath);
var responseBase = Convert.ToBase64String(getBytes);

关于c# - 从 Media.RecordSoundAction 保存的音频文件中获取字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500530/

相关文章:

android - 以编程方式获取android手机smsc号码

javascript - 一旦用户点击该国家/地区的任何点,Google map 就会捕获该国家/地区

python - 通过删除背景音乐来隔离人声

audio - 当我使用 Vaadin 音频元素播放 .m4a 声音文件时,它不起作用 (Vaadin 7.3.2)

c# - 运算符 '?' 不能应用于类型 'method group' 的操作数

C#正则表达式查找注解

c# - 模拟 ctrl key down 事件和 ctrl key up 事件后 Ctrl key keep down

android - 无法在项目 'release' 错误上找到属性 ':app'

tkinter - 如何使用tkinter和pygame使单个Button在Python中播放音乐,暂停音乐和取消暂停音乐?

c# - ASP.NET Core Razor 页面值不能为空