安卓反向播放PCM文件

3

我有一个pcm音频文件,或者这个文件的字节数组。我需要翻转它并播放。

如果我只是像这样反转字节数组,我会得到噪声,所以我应该只反转pcm的原始或采样原始数据。

public void reverse(byte[] array) {
          if (array == null) {
              return;
          }
          int i = 0;
          int j = array.length - 1;
          byte tmp;
          while (j > i) {
              tmp = array[j];
              array[j] = array[i];
              array[i] = tmp;
              j--;
              i++;
          }
      }

我阅读了很多资料,但没有找到如何完成这个任务的信息。
字节数组中的数据存储格式如下(在OneDrive上,因为声望不够): http://1drv.ms/1DJ0jDr 非常感谢您的帮助!
1个回答

2
您需要先将字节数组转换为适合样本的数组类型,然后再反转该数组。例如,如果您的样本是16位,则需要转换为shorts数组。
另外,在16位情况下,您可以保持数据为字节,然后按字节对反转 - 但是要成对反转。
public void reverse(byte[] array) {
      if (array == null) {
          return;
      }
      int i = 0;
      int j = array.length - 1;
      byte tmp;
      for (int k = 0 ; i < array.length/2; ++i) {
          tmp = array[j-1];
          array[j-1] = array[i];
          array[i] = tmp;

          tmp = array[j];
          array[j] = array[i+1];
          array[i+1] = tmp;

          j+=2;
          i+=2;
      }
  }

非常感谢!这篇文章有助于将https://dev59.com/aG035IYBdhLWcg3wGMDZ#5626003转换。 - Никита Титов
这在第9行给我抛出了数组下标越界问题。你是不是想要写成 j-=2 - JCutting8

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接