Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di maz85
    Registrato dal
    Mar 2003
    Messaggi
    75

    [C#.Net] DLL Directsound non si sente l'audio

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

  2. #2
    Utente di HTML.it L'avatar di maz85
    Registrato dal
    Mar 2003
    Messaggi
    75
    Mi autorispondo, in pratica settare il CL sul desktop è una pessima mossa.
    Ho esteso la classe SFclass col windows.forms.form e ho autoreferenziato sul CL.

    PS: quale è il limite massimo di frequenza da impostare sul Frequency??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.