2016-08-26 4 views
0

le premier, je travaille avec NAudio, donc besoin de votre aideComment lire deux fichiers audio simultanément avec la valeur de taille en temps réel avec NAudio

Même façon que je suis arrivé ici en temps réel de la source audio par défaut, comment Je reçois deux fichiers audio wav ou mp3, dans ce cas doivent être des entrées directes je suppose, pour jouer les deux simultanément avec la valeur en temps réel. De la même manière que celle montrée ci-dessous, mais en même temps, pour obtenir la taille des pics actuels de chacun. Quoi et comment je dois utiliser pour cet objectif dans mon application C# Windows Form. Je cherchais dans les sources, mais je ne trouve rien, quelques exemples ne fonctionne pour moi, semble besoin de quelques configurations, afin de tout vérifier, mieux obtenir par exemple ou des conseils

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


      } 
     } 
    } 
} 

pratique et direct Ici, je suis arrivé wav fichier, mais ont aucune idée comment obtenir la valeur en temps réel pour elle et comment jouer un autre en même temps:

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

Répondre

1

pour lire plusieurs fichiers simultanément (ce qui est ce que je pense que vous demandez de le faire), vous devez créer un AudioFileReader pour chacun des fichiers d'entrée. Et puis connectez chacun de ceux-ci comme entrées à un MixingSampleProvider. Puis initialisez votre périphérique audio de sortie avec le MixingSampleProvider

+0

d'abord voulez dire merci pour votre excellent travail! J'espère maintenant que je peux comprendre mon problème en suivant ces instructions. Tous les tutoriels que j'ai vus ne montrent pas ce que je veux et je n'ai pas trouvé de projet de démonstration sur https://naudio.codeplex.com/ correspondant à ce problème, parce que c'est la première fois que je fais affaire avec NAudio, et pas Assurez-vous de ce qu'il faut utiliser. Alors peut-être, si vous pouvez me donner un lien utile pour mon cas juste pour comprendre comment cela fonctionne, ce serait génial. et merci encore pour vos commentaires –