【问题标题】:Getting a Byte Array from the audio file saved by Media.RecordSoundAction从 Media.RecordSoundAction 保存的音频文件中获取字节数组
【发布时间】:2012-09-12 02:31:51
【问题描述】:

我有一个使用

创建的文件
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}

【问题讨论】:

  • 你能发一下你得到的Uri吗?
  • responseUri = {content://media/external/audio/media/21}

标签: c# android audio mono xamarin.android


【解决方案1】:

从大量不同的 SO 答案中提取,并从 Java 中对单声道进行了一些额外的转换,我得出了这些结果。

    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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多