/// <summary> /// Direct sound constructor. This prepares the simulation to run. /// </summary> /// <param name="Src_in">The sound source</param> /// <param name="Rec_in">The collection of receivers</param> /// <param name="Room_in">The acoustical scene to render</param> /// <param name="RayCount">The number of rays which will be used </param> public Direct_Sound(Source Src_in, Receiver_Bank Rec_in, Scene Room_in, int[] Octaves) { type = Src_in.Type(); Validity = new bool[Rec_in.Count];//[Rec_in.Count]; Io = new double[Rec_in.Count][][];//[Rec_in.Count][t,8]; Time_Pt = new double[Rec_in.Count];//[Rec_in.Count]; Dir_Rec_Pos = new float[Rec_in.Count][][][]; Dir_Rec_Neg = new float[Rec_in.Count][][][]; Room = Room_in; C_Sound = Room_in.Sound_speed(0); SampleFreq = Rec_in.SampleRate; Src = Src_in; this.CO_Time = Rec_in.CO_Time; Receiver = new List<Point>(); Rho_C = new double[Rec_in.Count]; for(int i = 0; i < Rec_in.Count; i++) { Rho_C[i] = Room.Rho_C(Rec_in.H_Origin(i)); Receiver.Add(Rec_in.H_Origin(i)); } SWL = new double[8] { Src_in.SWL(0), Src_in.SWL(1), Src_in.SWL(2), Src_in.SWL(3), Src_in.SWL(4), Src_in.SWL(5), Src_in.SWL(6), Src_in.SWL(7) }; Delay_ms = Src.Delay; Oct_choice = Octaves; }
private void Fill_in(Source Src_Pt, int SampleRate_in, double Increment_in, Scene Sc, int RCT, double Cutoff_time, bool Time_1Pt, bool Z_displacementIn, bool DirectionalIn, bool RecOnVertex, bool Offset_Mesh) { _Sc = Sc; Src = Src_Pt.Origin(); SrcType = Src_Pt.Type(); CutOffTime = Cutoff_time; SampleRate = SampleRate_in; increment = Increment_in; Rec_Vertex = RecOnVertex; Mesh_Offset = Offset_Mesh; Z_Displacement = Z_displacementIn; Directional = DirectionalIn; Time1Pt = Time_1Pt; SampleCT = Time1Pt ? 1 : (int)Math.Floor(CutOffTime * SampleRate / 1000); Max = new Hare.Geometry.Point(Double.NegativeInfinity, Double.NegativeInfinity, Double.NegativeInfinity); Min = new Hare.Geometry.Point(Double.PositiveInfinity, Double.PositiveInfinity, Double.PositiveInfinity); Rec_List = Rec_Vertex ? new Map_Receiver[Map_Mesh.Vertices.Count] : new Map_Receiver[Map_Mesh.Faces.Count]; lock (Map_Mesh) { bool FN = Map_Mesh.FaceNormals.ComputeFaceNormals(); } }