Esempio n. 1
0
        private void ProcessorFrequencySkew(SpectrumStage stage, Strengths strengths)
        {
            var scaler    = stage.FrequencySkewTransformed;
            var pinToTop  = stage.PinToHighFrequency;
            var magnitude = fftSignal.Select(x => x.Abs).ToArray();

            for (int i = strengths.FMin; i <= strengths.FMax; i++)
            {
                double k;
                if (pinToTop)
                {
                    k = strengths.FMax - (strengths.FMax - i) * scaler;
                    if (k < strengths.FMin)
                    {
                        k = strengths.FMin;
                    }
                }
                else
                {
                    k = (i - strengths.FMin) * scaler + strengths.FMin;
                    if (k > strengths.FMax)
                    {
                        k = strengths.FMax;
                    }
                }

                var interpolated = AudioLib.Interpolate.Spline(k, magnitude, false);
                fftSignal[i].Abs = interpolated;
            }
        }
Esempio n. 2
0
        private void ProcessApply(SpectrumStage stage, Strengths strengths, Dictionary <ImpulseConfig, Complex[]> stageOutputs)
        {
            if (stage.SelectedApplySource == null)
            {
                return;
            }
            if (stageOutputs == null)
            {
                return;
            }

            var idx = stage.SelectedApplySource.Index;

            if (idx < 0 || idx >= config.Index)             // can only apply things with lower index, because otherwise they haven't been computed yet!
            {
                return;
            }

            var applyFftSignal = stageOutputs.SingleOrDefault(x => x.Key.Index == idx);

            if (applyFftSignal.Value == null)
            {
                return;                 // Probably should never happen!
            }
            for (int i = 1; i < fftSignal.Length / 2; i++)
            {
                var stren = strengths.Strength[i];
                fftSignal[i] *= (1 - (Complex)stren) + ((Complex)stren * applyFftSignal.Value[i]);
                fftSignal[fftSignal.Length - i] *= (1 - (Complex)stren) + ((Complex)stren * applyFftSignal.Value[fftSignal.Length - i]);
            }
        }
Esempio n. 3
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,Name")] Strengths strengths)
        {
            if (id != strengths.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(strengths);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!StrengthsExists(strengths.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(strengths));
        }
Esempio n. 4
0
 private void ProcessGain(SpectrumStage stage, Strengths strengths)
 {
     for (int i = strengths.FMin; i <= strengths.FMax; i++)
     {
         var amount = AudioLib.Utils.DB2gain(stage.GainTransformed * strengths.Strength[i]);
         fftSignal[i] *= (Complex)amount;
         fftSignal[fftSignal.Length - i] *= (Complex)amount;
     }
 }
Esempio n. 5
0
        private void ProcessMinimumPhase(SpectrumStage stage, Strengths strengths)
        {
            // https://dsp.stackexchange.com/questions/7872/derive-minimum-phase-from-magnitude
            // https://ccrma.stanford.edu/~jos/sasp/Minimum_Phase_Filter_Design.html
            // https://uk.mathworks.com/matlabcentral/newsreader/view_thread/17748
            // https://stackoverflow.com/questions/11942855/matlab-hilbert-transform-in-c

            /* Matlab example that achieves what we want:
             *      t=-15:0.25:15;
             *      x = pi*t+j*1e-9;
             *      h = real(sin(x)./x); % simple linear phase FIR
             *      H = fft(h,128);
             *      reaLogH = log(abs(H));
             *      hilb = hilbert(reaLogH);
             *      H2 = exp(hilb);
             *      hMinPhase = real(fliplr(ifft(H2)));
             *      hMinPhase = hMinPhase(1:length(h));
             *
             *      figure(1)
             *      plot(t,h,t,hMinPhase)
             *      xlabel('time')
             *      ylabel('Amplitude')
             */

            // hilbert function is the only problematic one, but I've translated that over to C#
            // This is still pretty much numbers voodoo to me, could someone in the f*****g field write up a pragmatic description
            // of just what the f**k the hilbert transform does without using pages and pages of obscure math?
            // f**k I hate academics...

            if (!stage.MinimumPhase)
            {
                return;
            }

            var H       = fftSignal;
            var reaLogH = new double[H.Length];

            for (int i = 0; i < fftSignal.Length; i++)
            {
                reaLogH[i] = Math.Log(H[i].Abs);
            }

            var hilb = Hilbert(reaLogH);
            var H2   = hilb           // translate over to System.Numerics as I don't have a Complex.Exp(Complex) function in my library... fail on me
                       .Select(x => new System.Numerics.Complex(x.Real, x.Imag))
                       .Select(x => System.Numerics.Complex.Exp(x))
                       .Select(x => new Complex(x.Real, x.Imaginary))
                       .ToArray();

            for (int i = 0; i < fftSignal.Length; i++)
            {
                fftSignal[i] = H2[i];
            }
        }
Esempio n. 6
0
        public async Task <IActionResult> Create([Bind("Id,Name")] Strengths strengths)
        {
            if (ModelState.IsValid)
            {
                _context.Add(strengths);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(strengths));
        }
Esempio n. 7
0
        private void ProcessDelay(SpectrumStage stage, Strengths strengths)
        {
            var delaySamples = stage.DelayMillisTransformed / 1000.0 * samplerate;

            for (int i = strengths.FMin; i <= strengths.FMax; i++)
            {
                var amount = delaySamples / (double)ImpulseConfig.MaxSampleLength;
                amount = amount * strengths.Strength[i];
                var newVal = fftSignal[i] * Complex.CExp(-2 * Math.PI * i * amount);
                fftSignal[i] = newVal;
                fftSignal[fftSignal.Length - i].Arg = -newVal.Arg;
            }
        }
Esempio n. 8
0
        private void ProcessRandomGain(SpectrumStage stage, Strengths strengths)
        {
            var rand = new Random(stage.RandomGainSeedTransformed);

            for (int i = 0; i < stage.RandomGainShiftTransformed; i++)
            {
                rand.NextDouble();                 // pop off x number of samples, "shifting" the sequence forward
            }
            var filterCount   = stage.RandomGainFilteringTransformed;
            var gainAmount    = stage.RandomGainAmountTransformed;
            var randCount     = strengths.Strength.Length + 2 * filterCount;
            var mode          = stage.RandomGainModeTransformed;
            var skew          = stage.RandomSkewAmountTransformed;
            var noise         = Enumerable.Range(0, randCount).Select(x => rand.NextDouble() * 2 - 1).ToArray();
            var filteredNoise = new double[strengths.Strength.Length];

            for (int i = filterCount; i < noise.Length - filterCount; i++)
            {
                var sum = 0.0;
                for (int j = -filterCount; j <= filterCount; j++)
                {
                    var idx = i + j;
                    sum += noise[idx];
                }

                filteredNoise[i - filterCount] = sum / Math.Sqrt(2 * filterCount + 1);
            }

            for (int i = strengths.FMin; i <= strengths.FMax; i++)
            {
                var skewedNoise = Math.Pow(Math.Abs(filteredNoise[i]), skew) * Math.Sign(filteredNoise[i]);
                var gf          = gainAmount * skewedNoise;

                var dbGain = gf * strengths.Strength[i];
                var scaler = AudioLib.Utils.DB2gain(dbGain);

                if (mode == ApplyMode.Amplify && scaler < 1)
                {
                    scaler = 1;
                }
                if (mode == ApplyMode.Reduce && scaler > 1)
                {
                    scaler = 1;
                }
                fftSignal[i] *= (Complex)scaler;
                fftSignal[fftSignal.Length - i] *= (Complex)scaler;
            }
        }
Esempio n. 9
0
        public async Task LoadStrengths()
        {
            if (Weaknesses.Count == 0)
            {
                await LoadWeaknesses();
            }

            IEnumerable <PokeType> pokeTypes = await DataStore.GetItemsAsync();

            IEnumerable <PokeType> strengths = pokeTypes.Where(x => x.WeaknessNaturalIDs.Contains(NaturalID));

            Strengths.Clear();
            foreach (PokeType pokeType in strengths)
            {
                Strengths.Add(pokeType);
            }
        }
Esempio n. 10
0
        private void ProcessPhaseBands(SpectrumStage stage, Strengths strengths)
        {
            var bands            = stage.PhaseBandsTransformed;
            var shift            = stage.PhaseBandFreqShiftTransformed;
            var sections         = GetBands(bands, shift, samplerate, fftSignal.Length);
            var rand             = new Random(stage.PhaseBandSeedTransformed);
            int pb               = 0;
            var delaySamplesMain = stage.PhaseBandDelayMillisTransformed / 1000 * samplerate;

            foreach (var section in sections)
            {
                var delaySamples     = rand.NextDouble() * delaySamplesMain;
                var k                = pb / (double)(sections.Count - 1);
                var amountOfTracking = Math.Abs(stage.PhaseBandFreqTrackTransformed);
                if (stage.PhaseBandFreqTrackTransformed < 0)
                {
                    k = 1 - k;
                    var track = k * amountOfTracking + (1 - amountOfTracking);
                    delaySamples *= track;
                }
                else
                {
                    var track = k * amountOfTracking + (1 - amountOfTracking);
                    delaySamples *= track;
                }

                var amount = delaySamples / (double)ImpulseConfig.MaxSampleLength;
                for (int i = section[0]; i <= section[1]; i++)
                {
                    amount = amount * strengths.Strength[i];
                    var newVal = fftSignal[i] * Complex.CExp(-2 * Math.PI * i * amount);
                    fftSignal[i] = newVal;
                    fftSignal[fftSignal.Length - i].Arg = -newVal.Arg;
                }

                pb++;
            }
        }
Esempio n. 11
0
 public void TrimAndUppercaseFirst()
 {
     Strengths  = Strengths.TrimAndUppercaseFirst();
     Weaknesses = Weaknesses.TrimAndUppercaseFirst();
 }
Esempio n. 12
0
        public async Task <IActionResult> Import(IFormFile fileExcel)
        {
            if (ModelState.IsValid)
            {
                if (fileExcel != null)
                {
                    using (var stream = new FileStream(fileExcel.FileName, FileMode.Create))
                    {
                        await fileExcel.CopyToAsync(stream);

                        using (XLWorkbook workCoctail = new XLWorkbook(stream, XLEventTracking.Disabled))
                        {
                            foreach (IXLWorksheet worksheet in workCoctail.Worksheets)
                            {
                                Techniques newtech;
                                var        t = (from tech in _context.Techniques
                                                where tech.Name.Contains(worksheet.Name)
                                                select tech).ToList();
                                if (t.Count > 0)
                                {
                                    newtech = t[0];
                                }
                                else
                                {
                                    newtech             = new Techniques();
                                    newtech.Name        = worksheet.Name;
                                    newtech.Description = "from EXCEL";
                                    _context.Techniques.Add(newtech);
                                }
                                //
                                foreach (IXLRow row in worksheet.RowsUsed().Skip(1))
                                {
                                    try
                                    {
                                        Coctails coctail = new Coctails();
                                        var      coc     = (from coct in _context.Coctails
                                                            where coct.Name.Contains(row.Cell(1).Value.ToString())
                                                            select coct).ToList();
                                        if (coc.Count == 0)
                                        {
                                            coctail.Name            = row.Cell(1).Value.ToString();
                                            coctail.YearofCreation  = row.Cell(2).Value.ToString();
                                            coctail.CreationHistory = row.Cell(4).Value.ToString();
                                            coctail.Recipe          = row.Cell(7).Value.ToString();
                                            coctail.Technique       = newtech;

                                            if (row.Cell(3).Value.ToString().Length > 0)
                                            {
                                                var     k1 = row.Cell(3).Value.ToString();
                                                Country country;
                                                var     c = (from ct in _context.Country
                                                             where ct.Name.Contains(row.Cell(3).Value.ToString())
                                                             select ct).ToList();
                                                if (c.Count > 0)
                                                {
                                                    country = c[0];
                                                }
                                                else
                                                {
                                                    country      = new Country();
                                                    country.Name = row.Cell(3).Value.ToString();
                                                    _context.Add(country);
                                                    await _context.SaveChangesAsync();//
                                                }
                                                coctail.CountryofCreation = country;
                                            }
                                            if (row.Cell(5).Value.ToString().Length > 0)
                                            {
                                                Strengths strengths;
                                                var       k2 = row.Cell(5).Value.ToString();
                                                var       s  = (from str in _context.Strengths
                                                                where str.Name.Contains(row.Cell(5).Value.ToString())
                                                                select str).ToList();
                                                if (s.Count > 0)
                                                {
                                                    strengths = s[0];
                                                }
                                                else
                                                {
                                                    strengths      = new Strengths();
                                                    strengths.Name = row.Cell(5).Value.ToString();
                                                    _context.Add(strengths);
                                                    await _context.SaveChangesAsync();//
                                                }
                                                coctail.Strength = strengths;
                                            }
                                            if (row.Cell(6).Value.ToString().Length > 0)
                                            {
                                                Glass glass;
                                                var   k3 = row.Cell(6).Value.ToString();
                                                var   g  = (from gl in _context.Glass
                                                            where gl.Name.Contains(row.Cell(6).Value.ToString())
                                                            select gl).ToList();
                                                if (g.Count > 0)
                                                {
                                                    glass = g[0];
                                                }
                                                else
                                                {
                                                    glass      = new Glass();
                                                    glass.Name = row.Cell(6).Value.ToString();
                                                    _context.Add(glass);
                                                    await _context.SaveChangesAsync();//
                                                }
                                                coctail.Glass = glass;
                                            }
                                            _context.Coctails.Add(coctail);
                                        }
                                    }
                                    catch (Exception e)
                                    {
                                    }
                                }
                            }
                        }
                    }
                }
                await _context.SaveChangesAsync();
            }
            return(RedirectToAction(nameof(Index)));
        }
        private void LoadOnlineStrategy(StorageFile listsSourceFile)
        {
            SlideHeaders.Clear();
            Websites.Clear();
            Strengths.Clear();
            Categories.Clear();
            ProductSources.Clear();
            if (!listsSourceFile.ExistsLocal())
            {
                return;
            }
            var document = new XmlDocument();

            document.Load(listsSourceFile.LocalPath);

            var node = document.SelectSingleNode(@"/OnlineStrategy");

            if (node == null)
            {
                return;
            }
            foreach (XmlNode childeNode in node.ChildNodes)
            {
                switch (childeNode.Name)
                {
                case "Header":
                    foreach (XmlAttribute attribute in childeNode.Attributes)
                    {
                        switch (attribute.Name)
                        {
                        case "Value":
                            if (!string.IsNullOrEmpty(attribute.Value) && !SlideHeaders.Contains(attribute.Value))
                            {
                                SlideHeaders.Add(attribute.Value);
                            }
                            break;
                        }
                    }
                    break;

                case "Site":
                    foreach (XmlAttribute attribute in childeNode.Attributes)
                    {
                        switch (attribute.Name)
                        {
                        case "Value":
                            if (!string.IsNullOrEmpty(attribute.Value) && !Websites.Contains(attribute.Value))
                            {
                                Websites.Add(attribute.Value);
                            }
                            break;
                        }
                    }
                    break;

                case "Strength":
                    foreach (XmlAttribute attribute in childeNode.Attributes)
                    {
                        switch (attribute.Name)
                        {
                        case "Value":
                            if (!string.IsNullOrEmpty(attribute.Value) && !Strengths.Contains(attribute.Value))
                            {
                                Strengths.Add(attribute.Value);
                            }
                            break;
                        }
                    }
                    break;

                case "PricingStrategy":
                    foreach (XmlAttribute attribute in childeNode.Attributes)
                    {
                        switch (attribute.Name)
                        {
                        case "Value":
                            if (!string.IsNullOrEmpty(attribute.Value) && !PricingStrategies.Contains(attribute.Value))
                            {
                                PricingStrategies.Add(attribute.Value);
                            }
                            break;
                        }
                    }
                    break;

                case "PositionColumn":
                    foreach (XmlAttribute attribute in childeNode.Attributes)
                    {
                        switch (attribute.Name)
                        {
                        case "Value":
                            if (!string.IsNullOrEmpty(attribute.Value) && !ColumnPositions.Contains(attribute.Value))
                            {
                                ColumnPositions.Add(attribute.Value);
                            }
                            break;
                        }
                    }
                    break;

                case "DefaultFormula":
                    switch (childeNode.InnerText.ToLower().Trim())
                    {
                    case "cpm":
                        DefaultFormula = FormulaType.CPM;
                        break;

                    case "investment":
                        DefaultFormula = FormulaType.Investment;
                        break;

                    case "impressions":
                        DefaultFormula = FormulaType.Impressions;
                        break;
                    }
                    break;

                case "LockedMode":
                {
                    bool temp;
                    if (Boolean.TryParse(childeNode.InnerText, out temp))
                    {
                        LockedMode = temp;
                    }
                }
                break;

                case "SpecialLinksEnable":
                {
                    bool temp;
                    if (Boolean.TryParse(childeNode.InnerText, out temp))
                    {
                        SpecialLinksEnable = temp;
                    }
                }
                break;

                case "SpecialButtonsGroupName":
                    SpecialLinksGroupName = childeNode.InnerText;
                    break;

                case "SpecialButtonsGroupLogo":
                    if (string.IsNullOrEmpty(childeNode.InnerText))
                    {
                        SpecialLinksGroupLogo = null;
                    }
                    else
                    {
                        SpecialLinksGroupLogo = new Bitmap(new MemoryStream(Convert.FromBase64String(childeNode.InnerText)));
                    }
                    break;

                case "Browser":
                    SpecialLinkBrowsers.Add(childeNode.InnerText);
                    break;

                case "SpecialButton":
                    var specialLinkButton = new SpecialLinkButton();
                    GetSpecialButton(childeNode, ref specialLinkButton);
                    if (!String.IsNullOrEmpty(specialLinkButton.Name) && !String.IsNullOrEmpty(specialLinkButton.Type) && specialLinkButton.Paths.Any())
                    {
                        SpecialLinkButtons.Add(specialLinkButton);
                    }
                    break;

                case "Targeting":
                {
                    var productInfo = new ProductInfo {
                        Type = ProductInfoType.Targeting
                    };
                    productInfo.Deserialize(childeNode);
                    TargetingRecods.Add(productInfo);
                }
                break;

                case "RichMedia":
                {
                    var productInfo = new ProductInfo {
                        Type = ProductInfoType.RichMedia
                    };
                    productInfo.Deserialize(childeNode);
                    RichMediaRecods.Add(productInfo);
                }
                break;

                case "Category":
                    var category = new Category();
                    GetCategories(childeNode, ref category);
                    if (!string.IsNullOrEmpty(category.Name))
                    {
                        Categories.Add(category);
                    }
                    break;

                case "Product":
                    var productSource = new ProductSource();
                    GetProductProperties(childeNode, ref productSource);
                    if (!string.IsNullOrEmpty(productSource.Name))
                    {
                        ProductSources.Add(productSource);
                    }
                    break;

                case "Status":
                    foreach (XmlAttribute attribute in childeNode.Attributes)
                    {
                        switch (attribute.Name)
                        {
                        case "Value":
                            if (!Statuses.Contains(attribute.Value))
                            {
                                Statuses.Add(attribute.Value);
                            }
                            break;
                        }
                    }
                    break;

                case "DefaultHomeViewSettings":
                    DefaultHomeViewSettings.Deserialize(childeNode);
                    break;

                case "DefaultDigitalProductSettings":
                    DefaultDigitalProductSettings.Deserialize(childeNode);
                    break;

                case "DefaultDigitalProductPackageSettings":
                    DefaultDigitalProductPackageSettings.Deserialize(childeNode);
                    break;

                case "DefaultDigitalStandalonePackageSettings":
                    DefaultDigitalStandalonePackageSettings.Deserialize(childeNode);
                    break;

                case "DigitalControlsConfiguration":
                    DefaultControlsConfiguration =
                        JsonConvert.DeserializeObject <DigitalControlsConfiguration>(Encoding.Unicode.GetString(Convert.FromBase64String(childeNode.InnerText)), new JsonImageConverter());
                    break;
                }
            }
        }
Esempio n. 14
0
        private void ProcessGainVariation(SpectrumStage stage, Strengths strengths)
        {
            var absMaxIndex     = fftSignal.Length / 2;
            var gain            = new double[strengths.Strength.Length];
            var amt             = stage.GainSmoothingAmountTransformed;
            var octavesToSmooth = stage.GainSmoothingOctavesTransformed;
            var hzPerPartial    = 1 / (double)absMaxIndex * samplerate / 2;
            var mode            = stage.GainSmoothingModeTransformed;

            for (int i = 1; i <= fftSignal.Length / 2; i++)
            {
                var freq     = i * hzPerPartial;
                var lowFreq  = freq * Math.Pow(2, -octavesToSmooth);
                var highFreq = freq * Math.Pow(2, octavesToSmooth);
                var iBelow   = (freq - lowFreq) / hzPerPartial;
                var iAbove   = (highFreq - freq) / hzPerPartial;

                var avgSum = 0.0;
                int count  = 0;
                for (int j = -(int)Math.Round(iBelow); j <= Math.Round(iAbove); j++)
                {
                    var idx = i + j;
                    if (idx <= 0)
                    {
                        continue;
                    }
                    if (idx > absMaxIndex)
                    {
                        continue;
                    }
                    count++;
                    var sample = fftSignal[idx].Abs;
                    avgSum += sample;
                }

                avgSum /= count;
                var avgDb     = AudioLib.Utils.Gain2DB(avgSum);
                var partialDb = AudioLib.Utils.Gain2DB(fftSignal[i].Abs);
                var diffDb    = partialDb - avgDb;

                var stren    = strengths.Strength[i];
                var newMagDb = avgDb + diffDb * (amt * stren + 1 * (1 - stren));
                var newGain  = AudioLib.Utils.DB2gain(newMagDb) / fftSignal[i].Abs;
                gain[i] = newGain;

                if (mode == ApplyMode.Amplify && newGain < 1)
                {
                    gain[i] = 1;
                }
                else if (mode == ApplyMode.Reduce && newGain > 1)
                {
                    gain[i] = 1;
                }
            }

            for (int i = strengths.FMin; i <= strengths.FMax; i++)
            {
                var g = gain[i];
                fftSignal[i] *= (Complex)g;
                fftSignal[fftSignal.Length - i] *= (Complex)g;
            }
        }