Oppure

Loading
22/10/11 8:01
blasters
Salve, ho bisogno di riprodurre più file audio contemporaneamente, ho provato ad usare questo codice ma ho dei problemi. Come potrei fare?
 Imports QuartzTypeLib

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

Grazie

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

SoundMusic("c:\a.mp3", 0, 0)

End Sub 
aaa
22/10/11 13:45
VMikle
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:
msdn.microsoft.com/it-it/library/…

using System;
using System.Threading;
using System.Windows.Media;

public class Program
{
    static void Main()
    {
        var player = new System.Windows.Media.MediaPlayer();
        player.Open(new Uri(@"C:\Users\Mikle\Music\Varie\suono.wav"));
        player.Play();

        Thread.Sleep(500); // pausa per farti notare la sovrapposizione dei suoni

        var player2 = new System.Windows.Media.MediaPlayer();
        player2.Open(new Uri(@"C:\Users\Mikle\Music\Varie\suono.wav"));
        player2.Play();
    }
}




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

using System;
using System.Text;
using System.Threading;
using System.Collections.Generic;
using System.Runtime.InteropServices;

public class Program
{
    static void Main()
    {
     Player.Play(@"C:\Users\Mikle\Music\Varie\suono.wav", "suono");
     Thread.Sleep(500); // pausa per farti notare la sovrapposizione dei suoni
     Player.Play(@"C:\Users\Mikle\Music\Varie\suono.wav", "suono2"); // un alias differente permette la riproduzione dello stesso file in contemporanea
     Console.ReadKey();
    }
}



public static class Player
{
        [DllImport("winmm.dll")]
        static extern Int32 mciSendString(string lpszCommand, StringBuilder lpszReturnString, int cchReturn, IntPtr hwndCallback);

        public static void Play(string path, string alias) // N.B. manca la gestione dei valori di ritorno
        {
            mciSendString("open \"" + path + "\" alias " + alias, null, 0, IntPtr.Zero);
            mciSendString("play " + alias, null, 0, IntPtr.Zero);
        }
}



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 22/10/11 13:53
aaa
22/10/11 16:14
walker93
Io suggerisco di usare le MS DirectX, credo che siano più facili, anche se le richiedono obbligatoriamente istallate sul PC:
guarda la classe Audio:
msdn.microsoft.com/it-it/library/…(v=VS.85).aspx
con queste puoi riprodurre i più comuni file audio(wav, mp3, ogg, wma, ecc...)
Ultima modifica effettuata da walker93 22/10/11 16:17
aaa