Xamarin.Android拆分和连接音频文件

时间:2018-04-18 08:46:38

标签: c# xamarin.android

我目前正在开发一个记录音频并保存文件的应用程序。现在我正在寻找一种解决方案,将音频文件从一个位置分割(例如:分成两半,有2个音频文件)并注册另一个音频文件。最后,我需要连接所有音频文件(2个或更多文件)来创建一个文件。 我需要在Xamarin.Android中完成所有这些 有没有人做过这类事情?没有任何图书馆可以做到这一点吗?如果没有,我应该使用什么库来切割和连接音频文件。 我很感激任何回应。

1 个答案:

答案 0 :(得分:0)

我试过的是访问音频文件的内存流。您可以访问每个字节,以便知道要将其剪切的位置。

例如,如果您尝试将Wav文件剪切为2个文件:

  1. 指定要剪切的位置(byte [])
  2. 以Wav Header开头创建一个新的byte [](这将是你的第二个

    public static void WriteWaveHeader (this Stream stream, int channelCount, int sampleRate, int bitsPerSample)
    {
    
    using (var writer = new BinaryWriter (stream, Encoding.UTF8))
    {
           writer.Seek (0, SeekOrigin.Begin);
    
            //chunk ID
            writer.Write ('R');
            writer.Write ('I');
            writer.Write ('F');
            writer.Write ('F');
    
            writer.Write (-1); // -1 - Unknown size
    
            //format
            writer.Write ('W');
            writer.Write ('A');
            writer.Write ('V');
            writer.Write ('E');
    
            //subchunk 1 ID
            writer.Write ('f');
            writer.Write ('m');
            writer.Write ('t');
            writer.Write (' ');
    
            writer.Write (16); //subchunk 1 (fmt) size
            writer.Write ((short) 1); //PCM audio format
    
            writer.Write ((short) channelCount);
            writer.Write (sampleRate);
            writer.Write (sampleRate * 2);
            writer.Write ((short) 2); //block align
            writer.Write ((short) bitsPerSample);
    
            //subchunk 2 ID
            writer.Write ('d');
            writer.Write ('a');
            writer.Write ('t');
            writer.Write ('a');
    
            //subchunk 2 (data) size
            writer.Write (-1); // -1 - Unknown size
        }
      }
    
    1. 使用第二段音频继续此字节[]以生成Wav文件。
  3. n.b。 :我正在使用 Plugin.AudioRecorder 来录制声音并访问其。它还支持实时流访问。