Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Riprodurre più file audio contemporaneamente
Forum - C# / VB.NET - Riprodurre più file audio contemporaneamente

Avatar
blasters (Normal User)
Newbie


Messaggi: 8
Iscritto: 12/04/2010

Segnala al moderatore
Postato alle 10:01
Sabato, 22/10/2011
Salve, ho bisogno di riprodurre più file audio contemporaneamente, ho provato ad usare questo codice ma ho dei problemi. Come potrei fare?
Codice sorgente - presumibilmente VB.NET

  1. Imports QuartzTypeLib
  2.  
  3. Public Class Form1 Dim Audio As IBasicAudio Dim MMCtrl As IMediaControl Dim suoni(10) As IBasicAudio Public Sub SoundMusic(ByVal path As String, ByVal index As Integer, ByVal volume As Integer) suoni(index).MMCtrl = New QuartzTypeLib.FilgraphManager suoni(index).MMCtrl.RenderFile(path) suoni(index).Audio.Balance = 0 ' da -10000 a + 10000 suoni(index).Audio.volume = volume ' da -10000 a 0 in attenuanza di decibel non è lineare suoni(index).Audio.Run() End Sub
  4.  
  5. Grazie
  6.  
  7. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
  8.  
  9. SoundMusic("c:\a.mp3", 0, 0)
  10.  
  11. End Sub


PM
Avatar
VMikle (Ex-Member)
Rookie


Messaggi: 52
Iscritto: 14/09/2011

Up
4
Down
V
Segnala al moderatore
Postato alle 15:45
Sabato, 22/10/2011
Ti propongo una soluzione gestita ed una non gestita :k:

Per la prima devi aggiungere un riferimento a PresentationCore e WindowsBase per poi instanziare ed utilizzare System.Windows.Media.MediaPlayer.
Maggiori informazioni qui:
http://msdn.microsoft.com/it-it/library/system.windows.med ...

Codice sorgente - presumibilmente C++

  1. using System;
  2. using System.Threading;
  3. using System.Windows.Media;
  4.  
  5. public class Program
  6. {
  7.     static void Main()
  8.     {
  9.         var player = new System.Windows.Media.MediaPlayer();
  10.         player.Open(new Uri(@"C:\Users\Mikle\Music\Varie\suono.wav"));
  11.         player.Play();
  12.  
  13.         Thread.Sleep(500); // pausa per farti notare la sovrapposizione dei suoni
  14.  
  15.         var player2 = new System.Windows.Media.MediaPlayer();
  16.         player2.Open(new Uri(@"C:\Users\Mikle\Music\Varie\suono.wav"));
  17.         player2.Play();
  18.     }
  19. }





La seconda è abbastanza versatile e consiste nell'importare mciSendString da winmm.dll per poi utilizzarla.
Trovi informazioni nella pagina di msdn:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd ...
Da segnalare anche il link contenente le istruzioni da passare come stringa a lpszCommand:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd ...

Codice sorgente - presumibilmente C#

  1. using System;
  2. using System.Text;
  3. using System.Threading;
  4. using System.Collections.Generic;
  5. using System.Runtime.InteropServices;
  6.  
  7. public class Program
  8. {
  9.     static void Main()
  10.     {
  11.      Player.Play(@"C:\Users\Mikle\Music\Varie\suono.wav", "suono");
  12.      Thread.Sleep(500); // pausa per farti notare la sovrapposizione dei suoni
  13.      Player.Play(@"C:\Users\Mikle\Music\Varie\suono.wav", "suono2"); // un alias differente permette la riproduzione dello stesso file in contemporanea
  14.      Console.ReadKey();
  15.     }
  16. }
  17.  
  18.  
  19.  
  20. public static class Player
  21. {
  22.         [DllImport("winmm.dll")]
  23.         static extern Int32 mciSendString(string lpszCommand, StringBuilder lpszReturnString, int cchReturn, IntPtr hwndCallback);
  24.  
  25.         public static void Play(string path, string alias) // N.B. manca la gestione dei valori di ritorno
  26.         {
  27.             mciSendString("open \"" + path + "\" alias " + alias, null, 0, IntPtr.Zero);
  28.             mciSendString("play " + alias, null, 0, IntPtr.Zero);
  29.         }
  30. }




EDIT:
dato che non hai specificato nessun linguaggio, non mi è venuto in mente che stessi usando VB ed ho scritto gli esempi in C#
Le differenze per fortuna sono solo sintattiche, quindi non dovresti avere problemi a tradurre (manualmente o con qualche convertitore online) :yup:

Ultima modifica effettuata da VMikle il 22/10/2011 alle 15:53
Ciao, prima di tutto grazie :D ho utilizzato la prima soluzione perchè per l'uso che ne devo fare mi sembra ottima! Volevo chiederti se invece di un file .wav volessi utilizzare un file .mp3 come potrei fare? - blasters - 22/10/11 18:06


Perennemente svogliato :/
PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
2
Down
V
Segnala al moderatore
Postato alle 18:14
Sabato, 22/10/2011
Io suggerisco di usare le MS DirectX, credo che siano più facili, anche se le richiedono obbligatoriamente istallate sul PC:
guarda la classe Audio:
http://msdn.microsoft.com/it-it/library/bb324224(v=VS.85). ...
con queste puoi riprodurre i più comuni file audio(wav, mp3, ogg, wma, ecc...)

Ultima modifica effettuata da walker93 il 22/10/2011 alle 18:17


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM