Juntar áudios com em ASP.NET Core

Crei um metódo “Combine” para juntar três arquivos mp3, onde ficaram duas dúvidas:

  • O que tem de errado com método que ele não une os arquivos;
  • Como posso realizar o download o arquivo resultante dessa junção (que por enquanto estão na variável “output”).
public static void Combine(string[] inputFiles, Stream output)
  {
      foreach (string file in inputFiles)
      {
          Mp3FileReader reader = new Mp3FileReader(file);
          if ((output.Position == 0) && (reader.Id3v2Tag != null))
          {
              output.Write(reader.Id3v2Tag.RawData, 0, reader.Id3v2Tag.RawData.Length);
          }
          Mp3Frame frame;
          while ((frame = reader.ReadNextFrame()) != null)
          {
              output.Write(frame.RawData, 0, frame.RawData.Length);
          }
      }
  }

Você está carregando os dados para um Stream, mas não faz nada com ele.

Você poderia instanciar um Stream dentro da sua função e passar um Path para o arquivo ser salvo:

public static void Combine(string[] inputFiles, string path)
  { 
      using(Stream output = File.OpenWrite(path)
      {
          foreach (string file in inputFiles)
          {
              Mp3FileReader reader = new Mp3FileReader(file);
              if ((output.Position == 0) && (reader.Id3v2Tag != null))
              {
                  output.Write(reader.Id3v2Tag.RawData, 0, reader.Id3v2Tag.RawData.Length);
              }
              Mp3Frame frame;
              while ((frame = reader.ReadNextFrame()) != null)
              {
                  output.Write(frame.RawData, 0, frame.RawData.Length);
              }
          }
      output.Flush();
      output.Close();  
      }
  }

Ou então, marcar o parametro “Stream output” como um parametro de retorno, utilizando out. Ai você poderia decidir o que fazer o stream, quando ele for retornado.

public static void Combine(string[] inputFiles, out Stream output)