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...