Salve ragazzi,
mi serviva una dll che eseguiva un suono .wav modificandone la frequenza.
Quindi scartato SoundPlayer perchè non ha dei parametri per la frequenza ho utilizzato device+buffer.
Provando con diversi file .wav però non riesco a sentire il suono impostato

Provate voi richiamando la funzione s_play(filename, frequenza) perchè io non riesco a capire quale sia il problema.

PS: lasciate perdere i tipi di variabile in entrata e uscita, mi servono così.


codice:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Media; //solo per utilizzo prova soundplayer
using System.Windows.Forms;
using Microsoft.DirectX;
using Microsoft.DirectX.DirectSound;
using System.Runtime.InteropServices; //per dllimport

//DLL

namespace SoundFreq
{


    public class SFclass
    {
        //Globali
        public Device sounddevice;
        public SecondaryBuffer ssound;
        [DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
        public static extern IntPtr GetDesktopWindow();

        public double s_play(String filename, Double freq)
        {
            sounddevice = new Device();
            sounddevice.SetCooperativeLevel(GetDesktopWindow(), CooperativeLevel.Normal); //OK mettere this come primo argomento se si è su un windows form

            BufferDescription description = new BufferDescription();
            description.ControlFrequency = true; //per modificare frequenza
            description.ControlPositionNotify = true;
            description.ControlEffects = false;
            ssound = new SecondaryBuffer(filename, description, sounddevice); //File trovato
            ssound.Frequency = System.Convert.ToInt32(freq); //devo passare per forza di cose un double
            ssound.SetCurrentPosition(0);
            ssound.Play(0, BufferPlayFlags.Looping);

            //Questa qui sotto funge
            /*
            SoundPlayer s;
            s = new SoundPlayer(filename);
            //s.Load();
            s.Play();
            */
            //------

            return 1;
        }

        public void s_stop()
        {
            ssound.Stop();
        }

        public void s_set_freq(Double freq)
        {
            ssound.Frequency = System.Convert.ToInt32(freq);
        }

    }
}

eppure non mi pare di aver dimenticato nulla...