2016-08-26 3 views
0

die ersten arbeite ich zwei Audio-Dateien gleichzeitig mit Echtzeit-Größenwert zu spielen, so brauche Ihre HilfeWie mit mit NAudio NAudio

gleiche Art und Weise wie ich von Standard-Audioquelle hier in Echtzeit bekam, wie kann Ich bekomme zwei audio wav oder mp3 files, in diesem fall müssen direkte eingänge ich denke, um beides gleichzeitig mit echtzeit zu spielen. Genauso wie es unten gezeigt wird, aber gleichzeitig, um die aktuelle Peakgröße von jedem zu erhalten. Was und wie muss ich für dieses Ziel in meiner C# Windows Form Application verwenden. Ich wurde in den Quellen suchen, aber ich fand nichts, hat einige Beispiele nicht funktioniert für mich, scheint einige Setups benötigen, so alles zu überprüfen, besser praktisches und direktes Beispiel oder Beratung

using NAudio.CoreAudioApi; 
using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Windows.Forms; 

namespace XX_9_REAL_TIME_AUDIO 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
      MMDeviceEnumerator enumerator = new MMDeviceEnumerator(); 
      var devices = enumerator.EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active); 
      comboBox1.Items.AddRange(devices.ToArray()); 
     } 

     private void timer_Tick(object sender, EventArgs e) 
     { 
      if (comboBox1.SelectedItem != null) 
      { 
       var device = (MMDevice)comboBox1.SelectedItem; 
       progressBar1.Value = (int) (Math.Round(device.AudioMeterInformation.MasterPeakValue * 100 + 0.5)); 


      } 
     } 
    } 
} 

Hier habe ich wav Datei, haben aber keine Ahnung, wie es Echtzeit-Wert zu erhalten und wie einen anderen zur gleichen Zeit spielen:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using NAudio.Wave; 

namespace NAudioTest 
{ 
    class Program 
    { 
     static IWavePlayer waveout; 
     static WaveStream outputStream; 
     static string filename = null; 

     static void Main(string[] args) 
     { 
      waveout = new WaveOutEvent(); 

      filename ="C:\\folder\\track.wav"; 

      outputStream = CreateInputStream(filename); 

      try 
      { 
       waveout.Init(outputStream); 
      } 
      catch (Exception ex) 
      { 
       Console.WriteLine("Error while loading output"); 
       Console.WriteLine("Details: " + ex.Message); 
       Console.ReadLine(); 
       return; 
      } 

      Console.WriteLine("Press [Enter] to start playback"); 
      Console.ReadLine(); 

      waveout.Play(); //this stops after 1 sec. should it play until i hit enter cause of the next line? 

      Console.WriteLine("Press [Enter] to abort"); 
      Console.ReadLine(); 
      waveout.Dispose(); 
      Console.ReadLine(); 
     } 


     static WaveStream CreateInputStream(string name) 
     { 
      WaveChannel32 inputStream; 
      if (name.EndsWith(".wav")) 
      { 
       WaveStream readerStream = new WaveFileReader(name); 
       if (readerStream.WaveFormat.Encoding != WaveFormatEncoding.Pcm) 
       { 
        readerStream = WaveFormatConversionStream.CreatePcmStream(readerStream); 
        readerStream = new BlockAlignReductionStream(readerStream); 
       } 

       if (readerStream.WaveFormat.BitsPerSample != 16) 
       { 
        var format = new WaveFormat(readerStream.WaveFormat.SampleRate, 16, readerStream.WaveFormat.Channels); 
        readerStream = new WaveFormatConversionStream(format, readerStream); 
       } 
       inputStream = new WaveChannel32(readerStream); 
      } 
      else 
      { 
       throw new InvalidOperationException("Invalid extension"); 
      } 
      return inputStream; 
     } 
    } 
} 

Antwort

1

um mehrere Dateien gleichzeitig zu spielen (was ich denke, was Sie zu tun fragen), Sie sollten für jede Eingabedatei eine AudioFileReader erstellen. Und dann verbinden Sie jede von denen als Eingänge zu einem MixingSampleProvider. Dann initialisiere dein Ausgangs-Audiogerät mit dem MixingSampleProvider

+0

zunächst möchte ich dir für deine tolle Arbeit danken! hoffe ich kann jetzt mit meinem Problem nach dieser Anleitung herausfinden. Alle Tutorials, die ich gesehen habe, zeigen nicht, was ich will und ich konnte kein Demo-Projekt auf https://naudio.codeplex.com/ finden, das diesem Problem entspricht, weil es das erste Mal ist, dass ich mit NAudio verhandle, und eben nicht sicher was zu verwenden. Also vielleicht, wenn Sie mir einen nützlichen Link für meinen Fall geben können, nur um zu verstehen, wie es funktioniert, wäre großartig. und vielen Dank für Ihr Feedback –