示例#1
0
            public void RemoveFromFavorites(WebView webView, NameValueCollection parameters)
            {
                var   chordParams = new ChordParams(parameters);
                var   tokens      = parameters["positions"].Split(',');
                var   positions   = tokens.Select(i => int.Parse(i)).ToArray();
                var   id          = $"{chordParams.Root}{chordParams.ChordType}";
                Chord chord;

                if (!Chord.TryParse(id, _currentSettings.conv, out chord))
                {
                    return;
                }
                if (!Favorites.Chords.ContainsKey(chord))
                {
                    return;
                }
                try
                {
                    var layout = new GuitarChordLayout(chord, positions);
                    Favorites.Chords[chord].Remove(layout);
                    Favorites.Save();

                    var js = string.Format("setFavorite('.chord-layout[data-positions=\"{0}\"]', '{1}');", parameters["positions"], false);
                    webView.LoadUrl("javascript:" + js);
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine($"Cannot save favorites\n{e.Message}");
                }
            }
示例#2
0
            public void PlayChord(WebView webView, NameValueCollection parameters)
            {
                var   chordParams = new ChordParams(parameters);
                var   id          = parameters["id"];
                float volume;

                if (!float.TryParse(parameters["volume"], out volume))
                {
                    volume = 1f;
                }
                if (!string.IsNullOrEmpty(id))
                {
                    Chord chord;

                    if (!Chord.TryParse(id, NamingConvention.English, out chord))
                    {
                        return;
                    }
                    var c           = new Note(Core.Models.Tone.C);
                    var minDistance = 3 + c.ChromaticDistance(chord.Notes[0]);

                    foreach (var note in chord.Notes)
                    {
                        var pos = 3 + c.ChromaticDistance(note);

                        if (pos < minDistance)
                        {
                            pos += 12;
                        }
                        var playRate = Note.HalfStepsToPlayRate(pos);

                        _soundPool.Play(_soundIds[1], volume, volume, 0, 0, playRate);
                        Thread.Sleep(50);
                    }
                    return;
                }
                var intPositions = parameters["positions"]?.Split(',')?.Select(i => int.Parse(i))?.ToArray();

                if (intPositions == null)
                {
                    return;
                }
                for (var n = 0; n < 2; n++)
                {
                    for (var i = 0; i < intPositions.Length; i++)
                    {
                        var halfSteps = intPositions[i];

                        if (halfSteps >= 0)
                        {
                            var playRate = Note.HalfStepsToPlayRate(halfSteps);

                            _soundPool.Play(_soundIds[i], volume, volume, 0, 0, playRate);
                            if (n == 0)
                            {
                                Thread.Sleep(200);
                            }
                            else
                            {
                                Thread.Sleep(50);
                            }
                        }
                    }
                    Thread.Sleep(200);
                }
            }
示例#3
0
            public void FindChord(WebView webView, NameValueCollection parameters)
            {
                string page;

                if (string.IsNullOrWhiteSpace(parameters["note"]))
                {
                    var chordParams = new ChordParams(parameters);
                    var model       = new FindChordModel
                    {
                        conv   = _currentSettings.conv,
                        Strict = chordParams.Strict
                    };
                    var template = new FindChordView()
                    {
                        Model = model
                    };

                    page = template.GenerateString();
                }
                else
                {
                    Note note;
                    var  chordParams = new ChordParams(parameters);
                    var  tokens      = parameters["note"].Split(',');
                    var  notes       = tokens.Select(i => Note.TryParse(i, _currentSettings.conv, out note) ? note : null)
                                       .Where(i => i != null)
                                       .ToArray();
                    var chords = Chord.Find(notes, chordParams.Strict);

                    _allowPartial = true;
                    if (chords.Length > 0)
                    {
                        var chord = chords.First();

                        _currentRoot      = chord.Root;
                        _currentChordType = chord.ChordType;
                        if (chords.Length > 1)
                        {
                            _allRoots      = chords.Select(i => i.Root).ToArray();
                            _allChordTypes = chords.Select(i => i.ChordType.ToDescription()).ToArray();
                        }
                        else
                        {
                            _allRoots      = null;
                            _allChordTypes = null;
                        }

                        parameters.Add("partial", "true");
                        ShowChordResults(webView, parameters);
                        return;
                    }
                    var model = new FindChordModel
                    {
                        conv          = _currentSettings.conv,
                        Strict        = chordParams.Strict,
                        SelectedNotes = notes.Select(i => i.ToString(_currentSettings.conv))
                                        .ToArray(),
                        Error = "No chord found"
                    };
                    var template = new FindChordView()
                    {
                        Model = model
                    };

                    page = template.GenerateString();
                }

                webView.LoadDataWithBaseURL("file:///android_asset/?page=FindChord", page, "text/html", "UTF-8", null);
            }