summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/lang/arabic.lang6
-rw-r--r--apps/lang/bulgarian.lang6
-rw-r--r--apps/lang/catala.lang6
-rw-r--r--apps/lang/chinese-simp.lang6
-rw-r--r--apps/lang/chinese-trad.lang10
-rw-r--r--apps/lang/czech.lang6
-rw-r--r--apps/lang/dansk.lang6
-rw-r--r--apps/lang/deutsch.lang6
-rw-r--r--apps/lang/eesti.lang4
-rw-r--r--apps/lang/english.lang31
-rw-r--r--apps/lang/espanol.lang6
-rw-r--r--apps/lang/esperanto.lang4
-rw-r--r--apps/lang/finnish.lang6
-rw-r--r--apps/lang/francais.lang6
-rw-r--r--apps/lang/greek.lang6
-rw-r--r--apps/lang/hebrew.lang6
-rw-r--r--apps/lang/italiano.lang6
-rw-r--r--apps/lang/japanese.lang6
-rw-r--r--apps/lang/korean.lang6
-rw-r--r--apps/lang/lietuviu.lang6
-rw-r--r--apps/lang/magyar.lang10
-rw-r--r--apps/lang/nederlands.lang10
-rw-r--r--apps/lang/norsk-nynorsk.lang6
-rw-r--r--apps/lang/norsk.lang6
-rw-r--r--apps/lang/polski.lang6
-rw-r--r--apps/lang/portugues-brasileiro.lang6
-rw-r--r--apps/lang/portugues.lang6
-rw-r--r--apps/lang/romaneste.lang6
-rw-r--r--apps/lang/russian.lang6
-rw-r--r--apps/lang/srpski.lang6
-rw-r--r--apps/lang/svenska.lang6
-rw-r--r--apps/lang/tagalog.lang10
-rw-r--r--apps/lang/thai.lang10
-rw-r--r--apps/lang/ukrainian.lang6
-rw-r--r--apps/lang/walon.lang6
-rw-r--r--apps/pcmbuf.c193
-rw-r--r--apps/playback.c2
-rw-r--r--apps/settings.h7
-rw-r--r--apps/settings_list.c5
39 files changed, 227 insertions, 231 deletions
diff --git a/apps/lang/arabic.lang b/apps/lang/arabic.lang
index aed5e135f2..cc4bd5453b 100644
--- a/apps/lang/arabic.lang
+++ b/apps/lang/arabic.lang
@@ -2374,12 +2374,12 @@
2374 </voice> 2374 </voice>
2375</phrase> 2375</phrase>
2376<phrase> 2376<phrase>
2377 id: LANG_TRACKSKIP 2377 id: LANG_MANTRACKSKIP
2378 desc: in crossfade settings 2378 desc: in crossfade settings
2379 user: core 2379 user: core
2380 <source> 2380 <source>
2381 *: none 2381 *: none
2382 swcodec: "Track Skip Only" 2382 swcodec: "Manual Track Skip Only"
2383 </source> 2383 </source>
2384 <dest> 2384 <dest>
2385 *: none 2385 *: none
@@ -2387,7 +2387,7 @@
2387 </dest> 2387 </dest>
2388 <voice> 2388 <voice>
2389 *: none 2389 *: none
2390 swcodec: "Track Skip Only" 2390 swcodec: "Manual Track Skip Only"
2391 </voice> 2391 </voice>
2392</phrase> 2392</phrase>
2393<phrase> 2393<phrase>
diff --git a/apps/lang/bulgarian.lang b/apps/lang/bulgarian.lang
index 7218735aa9..97a77448e7 100644
--- a/apps/lang/bulgarian.lang
+++ b/apps/lang/bulgarian.lang
@@ -4674,7 +4674,7 @@
4674 user: core 4674 user: core
4675 <source> 4675 <source>
4676 *: none 4676 *: none
4677 swcodec: "Shuffle and Track Skip" 4677 swcodec: "Shuffle and Manual Track Skip"
4678 </source> 4678 </source>
4679 <dest> 4679 <dest>
4680 *: none 4680 *: none
@@ -8628,12 +8628,12 @@
8628 </voice> 8628 </voice>
8629</phrase> 8629</phrase>
8630<phrase> 8630<phrase>
8631 id: LANG_TRACKSKIP 8631 id: LANG_MANTRACKSKIP
8632 desc: in crossfade settings 8632 desc: in crossfade settings
8633 user: core 8633 user: core
8634 <source> 8634 <source>
8635 *: none 8635 *: none
8636 swcodec: "Track Skip Only" 8636 swcodec: "Manual Track Skip Only"
8637 </source> 8637 </source>
8638 <dest> 8638 <dest>
8639 *: none 8639 *: none
diff --git a/apps/lang/catala.lang b/apps/lang/catala.lang
index 96eb8983fd..f98fdc9a5a 100644
--- a/apps/lang/catala.lang
+++ b/apps/lang/catala.lang
@@ -1645,12 +1645,12 @@
1645 </voice> 1645 </voice>
1646</phrase> 1646</phrase>
1647<phrase> 1647<phrase>
1648 id: LANG_TRACKSKIP 1648 id: LANG_MANTRACKSKIP
1649 desc: in crossfade settings 1649 desc: in crossfade settings
1650 user: core 1650 user: core
1651 <source> 1651 <source>
1652 *: none 1652 *: none
1653 swcodec: "Track Skip Only" 1653 swcodec: "Manual Track Skip Only"
1654 </source> 1654 </source>
1655 <dest> 1655 <dest>
1656 *: none 1656 *: none
@@ -1667,7 +1667,7 @@
1667 user: core 1667 user: core
1668 <source> 1668 <source>
1669 *: none 1669 *: none
1670 swcodec: "Shuffle and Track Skip" 1670 swcodec: "Shuffle and Manual Track Skip"
1671 </source> 1671 </source>
1672 <dest> 1672 <dest>
1673 *: none 1673 *: none
diff --git a/apps/lang/chinese-simp.lang b/apps/lang/chinese-simp.lang
index 724be65290..bd6fb70809 100644
--- a/apps/lang/chinese-simp.lang
+++ b/apps/lang/chinese-simp.lang
@@ -2692,12 +2692,12 @@
2692 </voice> 2692 </voice>
2693</phrase> 2693</phrase>
2694<phrase> 2694<phrase>
2695 id: LANG_TRACKSKIP 2695 id: LANG_MANTRACKSKIP
2696 desc: in crossfade settings 2696 desc: in crossfade settings
2697 user: core 2697 user: core
2698 <source> 2698 <source>
2699 *: none 2699 *: none
2700 swcodec: "Track Skip Only" 2700 swcodec: "Manual Track Skip Only"
2701 </source> 2701 </source>
2702 <dest> 2702 <dest>
2703 *: none 2703 *: none
@@ -9256,7 +9256,7 @@
9256 user: core 9256 user: core
9257 <source> 9257 <source>
9258 *: none 9258 *: none
9259 swcodec: "Shuffle and Track Skip" 9259 swcodec: "Shuffle and Manual Track Skip"
9260 </source> 9260 </source>
9261 <dest> 9261 <dest>
9262 *: none 9262 *: none
diff --git a/apps/lang/chinese-trad.lang b/apps/lang/chinese-trad.lang
index 7cde4cd93b..711f9bb173 100644
--- a/apps/lang/chinese-trad.lang
+++ b/apps/lang/chinese-trad.lang
@@ -2691,12 +2691,12 @@
2691 </voice> 2691 </voice>
2692</phrase> 2692</phrase>
2693<phrase> 2693<phrase>
2694 id: LANG_TRACKSKIP 2694 id: LANG_MANTRACKSKIP
2695 desc: in crossfade settings 2695 desc: in crossfade settings
2696 user: core 2696 user: core
2697 <source> 2697 <source>
2698 *: none 2698 *: none
2699 swcodec: "Track Skip Only" 2699 swcodec: "Manual Track Skip Only"
2700 </source> 2700 </source>
2701 <dest> 2701 <dest>
2702 *: none 2702 *: none
@@ -2704,7 +2704,7 @@
2704 </dest> 2704 </dest>
2705 <voice> 2705 <voice>
2706 *: none 2706 *: none
2707 swcodec: "Track Skip Only" 2707 swcodec: "Manual Track Skip Only"
2708 </voice> 2708 </voice>
2709</phrase> 2709</phrase>
2710<phrase> 2710<phrase>
@@ -9235,7 +9235,7 @@
9235 user: core 9235 user: core
9236 <source> 9236 <source>
9237 *: none 9237 *: none
9238 swcodec: "Shuffle and Track Skip" 9238 swcodec: "Shuffle and Manual Track Skip"
9239 </source> 9239 </source>
9240 <dest> 9240 <dest>
9241 *: none 9241 *: none
@@ -9243,7 +9243,7 @@
9243 </dest> 9243 </dest>
9244 <voice> 9244 <voice>
9245 *: none 9245 *: none
9246 swcodec: "Shuffle and Track Skip" 9246 swcodec: "Shuffle and Manual Track Skip"
9247 </voice> 9247 </voice>
9248</phrase> 9248</phrase>
9249<phrase> 9249<phrase>
diff --git a/apps/lang/czech.lang b/apps/lang/czech.lang
index 7b6e19489d..4b10fa0622 100644
--- a/apps/lang/czech.lang
+++ b/apps/lang/czech.lang
@@ -1651,12 +1651,12 @@
1651 </voice> 1651 </voice>
1652</phrase> 1652</phrase>
1653<phrase> 1653<phrase>
1654 id: LANG_TRACKSKIP 1654 id: LANG_MANTRACKSKIP
1655 desc: in crossfade settings 1655 desc: in crossfade settings
1656 user: core 1656 user: core
1657 <source> 1657 <source>
1658 *: none 1658 *: none
1659 swcodec: "Track Skip Only" 1659 swcodec: "Manual Track Skip Only"
1660 </source> 1660 </source>
1661 <dest> 1661 <dest>
1662 *: none 1662 *: none
@@ -1673,7 +1673,7 @@
1673 user: core 1673 user: core
1674 <source> 1674 <source>
1675 *: none 1675 *: none
1676 swcodec: "Shuffle and Track Skip" 1676 swcodec: "Shuffle and Manual Track Skip"
1677 </source> 1677 </source>
1678 <dest> 1678 <dest>
1679 *: none 1679 *: none
diff --git a/apps/lang/dansk.lang b/apps/lang/dansk.lang
index 8a5196de42..22fb994013 100644
--- a/apps/lang/dansk.lang
+++ b/apps/lang/dansk.lang
@@ -7487,12 +7487,12 @@
7487 </voice> 7487 </voice>
7488</phrase> 7488</phrase>
7489<phrase> 7489<phrase>
7490 id: LANG_TRACKSKIP 7490 id: LANG_MANTRACKSKIP
7491 desc: in crossfade settings 7491 desc: in crossfade settings
7492 user: core 7492 user: core
7493 <source> 7493 <source>
7494 *: none 7494 *: none
7495 swcodec: "Track Skip Only" 7495 swcodec: "Manual Track Skip Only"
7496 </source> 7496 </source>
7497 <dest> 7497 <dest>
7498 *: none 7498 *: none
@@ -9516,7 +9516,7 @@
9516 user: core 9516 user: core
9517 <source> 9517 <source>
9518 *: none 9518 *: none
9519 swcodec: "Shuffle and Track Skip" 9519 swcodec: "Shuffle and Manual Track Skip"
9520 </source> 9520 </source>
9521 <dest> 9521 <dest>
9522 *: none 9522 *: none
diff --git a/apps/lang/deutsch.lang b/apps/lang/deutsch.lang
index 6da7318100..631b2a0e82 100644
--- a/apps/lang/deutsch.lang
+++ b/apps/lang/deutsch.lang
@@ -1668,12 +1668,12 @@
1668 </voice> 1668 </voice>
1669</phrase> 1669</phrase>
1670<phrase> 1670<phrase>
1671 id: LANG_TRACKSKIP 1671 id: LANG_MANTRACKSKIP
1672 desc: in crossfade settings 1672 desc: in crossfade settings
1673 user: core 1673 user: core
1674 <source> 1674 <source>
1675 *: none 1675 *: none
1676 swcodec: "Track Skip Only" 1676 swcodec: "Manual Track Skip Only"
1677 </source> 1677 </source>
1678 <dest> 1678 <dest>
1679 *: none 1679 *: none
@@ -1690,7 +1690,7 @@
1690 user: core 1690 user: core
1691 <source> 1691 <source>
1692 *: none 1692 *: none
1693 swcodec: "Shuffle and Track Skip" 1693 swcodec: "Shuffle and Manual Track Skip"
1694 </source> 1694 </source>
1695 <dest> 1695 <dest>
1696 *: none 1696 *: none
diff --git a/apps/lang/eesti.lang b/apps/lang/eesti.lang
index b5402db925..23676b9e0d 100644
--- a/apps/lang/eesti.lang
+++ b/apps/lang/eesti.lang
@@ -2885,11 +2885,11 @@
2885 </voice> 2885 </voice>
2886</phrase> 2886</phrase>
2887<phrase> 2887<phrase>
2888 id: LANG_TRACKSKIP 2888 id: LANG_MANTRACKSKIP
2889 desc: in crossfade settings 2889 desc: in crossfade settings
2890 user: core 2890 user: core
2891 <source> 2891 <source>
2892 *: "Track Skip Only" 2892 *: "Manual Track Skip Only"
2893 </source> 2893 </source>
2894 <dest> 2894 <dest>
2895 *: "Ainult raja vahele jätmisel" 2895 *: "Ainult raja vahele jätmisel"
diff --git a/apps/lang/english.lang b/apps/lang/english.lang
index 198a3c7358..4fe1a1fa6c 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -1740,20 +1740,20 @@
1740 </voice> 1740 </voice>
1741</phrase> 1741</phrase>
1742<phrase> 1742<phrase>
1743 id: LANG_TRACKSKIP 1743 id: LANG_MANTRACKSKIP
1744 desc: in crossfade settings 1744 desc: in crossfade settings
1745 user: core 1745 user: core
1746 <source> 1746 <source>
1747 *: none 1747 *: none
1748 swcodec: "Track Skip Only" 1748 swcodec: "Manual Track Skip Only"
1749 </source> 1749 </source>
1750 <dest> 1750 <dest>
1751 *: none 1751 *: none
1752 swcodec: "Track Skip Only" 1752 swcodec: "Manual Track Skip Only"
1753 </dest> 1753 </dest>
1754 <voice> 1754 <voice>
1755 *: none 1755 *: none
1756 swcodec: "Track Skip Only" 1756 swcodec: "Manual Track Skip Only"
1757 </voice> 1757 </voice>
1758</phrase> 1758</phrase>
1759<phrase> 1759<phrase>
@@ -1762,15 +1762,15 @@
1762 user: core 1762 user: core
1763 <source> 1763 <source>
1764 *: none 1764 *: none
1765 swcodec: "Shuffle and Track Skip" 1765 swcodec: "Shuffle and Manual Track Skip"
1766 </source> 1766 </source>
1767 <dest> 1767 <dest>
1768 *: none 1768 *: none
1769 swcodec: "Shuffle and Track Skip" 1769 swcodec: "Shuffle and Manual Track Skip"
1770 </dest> 1770 </dest>
1771 <voice> 1771 <voice>
1772 *: none 1772 *: none
1773 swcodec: "Shuffle and Track Skip" 1773 swcodec: "Shuffle and Manual Track Skip"
1774 </voice> 1774 </voice>
1775</phrase> 1775</phrase>
1776<phrase> 1776<phrase>
@@ -13227,3 +13227,20 @@
13227 morse_input: "Use Morse Code Input" 13227 morse_input: "Use Morse Code Input"
13228 </voice> 13228 </voice>
13229</phrase> 13229</phrase>
13230<phrase>
13231 id: LANG_AUTOTRACKSKIP
13232 desc: in crossfade settings
13233 user: core
13234 <source>
13235 *: none
13236 swcodec: "Auto Track Skip Only"
13237 </source>
13238 <dest>
13239 *: none
13240 swcodec: "Auto Track Skip Only"
13241 </dest>
13242 <voice>
13243 *: none
13244 swcodec: "Auto Track Skip Only"
13245 </voice>
13246</phrase>
diff --git a/apps/lang/espanol.lang b/apps/lang/espanol.lang
index cb88048ec1..bccbe7111f 100644
--- a/apps/lang/espanol.lang
+++ b/apps/lang/espanol.lang
@@ -7903,12 +7903,12 @@
7903 </voice> 7903 </voice>
7904</phrase> 7904</phrase>
7905<phrase> 7905<phrase>
7906 id: LANG_TRACKSKIP 7906 id: LANG_MANTRACKSKIP
7907 desc: in crossfade settings 7907 desc: in crossfade settings
7908 user: core 7908 user: core
7909 <source> 7909 <source>
7910 *: none 7910 *: none
7911 swcodec: "Track Skip Only" 7911 swcodec: "Manual Track Skip Only"
7912 </source> 7912 </source>
7913 <dest> 7913 <dest>
7914 *: none 7914 *: none
@@ -8911,7 +8911,7 @@
8911 user: core 8911 user: core
8912 <source> 8912 <source>
8913 *: none 8913 *: none
8914 swcodec: "Shuffle and Track Skip" 8914 swcodec: "Shuffle and Manual Track Skip"
8915 </source> 8915 </source>
8916 <dest> 8916 <dest>
8917 *: none 8917 *: none
diff --git a/apps/lang/esperanto.lang b/apps/lang/esperanto.lang
index 616830eb7f..e3c1a21029 100644
--- a/apps/lang/esperanto.lang
+++ b/apps/lang/esperanto.lang
@@ -2880,11 +2880,11 @@
2880 </voice> 2880 </voice>
2881</phrase> 2881</phrase>
2882<phrase> 2882<phrase>
2883 id: LANG_TRACKSKIP 2883 id: LANG_MANTRACKSKIP
2884 desc: in crossfade settings 2884 desc: in crossfade settings
2885 user: core 2885 user: core
2886 <source> 2886 <source>
2887 *: "Track Skip Only" 2887 *: "Manual Track Skip Only"
2888 </source> 2888 </source>
2889 <dest> 2889 <dest>
2890 *: "Nur por transsalti kanton" 2890 *: "Nur por transsalti kanton"
diff --git a/apps/lang/finnish.lang b/apps/lang/finnish.lang
index 162fe266b3..efab8d2c69 100644
--- a/apps/lang/finnish.lang
+++ b/apps/lang/finnish.lang
@@ -2692,12 +2692,12 @@
2692 </voice> 2692 </voice>
2693</phrase> 2693</phrase>
2694<phrase> 2694<phrase>
2695 id: LANG_TRACKSKIP 2695 id: LANG_MANTRACKSKIP
2696 desc: in crossfade settings 2696 desc: in crossfade settings
2697 user: core 2697 user: core
2698 <source> 2698 <source>
2699 *: none 2699 *: none
2700 swcodec: "Track Skip Only" 2700 swcodec: "Manual Track Skip Only"
2701 </source> 2701 </source>
2702 <dest> 2702 <dest>
2703 *: none 2703 *: none
@@ -9673,7 +9673,7 @@
9673 user: core 9673 user: core
9674 <source> 9674 <source>
9675 *: none 9675 *: none
9676 swcodec: "Shuffle and Track Skip" 9676 swcodec: "Shuffle and Manual Track Skip"
9677 </source> 9677 </source>
9678 <dest> 9678 <dest>
9679 *: none 9679 *: none
diff --git a/apps/lang/francais.lang b/apps/lang/francais.lang
index 28179dae2b..e898609604 100644
--- a/apps/lang/francais.lang
+++ b/apps/lang/francais.lang
@@ -1698,12 +1698,12 @@
1698 </voice> 1698 </voice>
1699</phrase> 1699</phrase>
1700<phrase> 1700<phrase>
1701 id: LANG_TRACKSKIP 1701 id: LANG_MANTRACKSKIP
1702 desc: in crossfade settings 1702 desc: in crossfade settings
1703 user: core 1703 user: core
1704 <source> 1704 <source>
1705 *: none 1705 *: none
1706 swcodec: "Track Skip Only" 1706 swcodec: "Manual Track Skip Only"
1707 </source> 1707 </source>
1708 <dest> 1708 <dest>
1709 *: none 1709 *: none
@@ -1720,7 +1720,7 @@
1720 user: core 1720 user: core
1721 <source> 1721 <source>
1722 *: none 1722 *: none
1723 swcodec: "Shuffle and Track Skip" 1723 swcodec: "Shuffle and Manual Track Skip"
1724 </source> 1724 </source>
1725 <dest> 1725 <dest>
1726 *: none 1726 *: none
diff --git a/apps/lang/greek.lang b/apps/lang/greek.lang
index 76384d22a4..50433b06b0 100644
--- a/apps/lang/greek.lang
+++ b/apps/lang/greek.lang
@@ -1651,12 +1651,12 @@
1651 </voice> 1651 </voice>
1652</phrase> 1652</phrase>
1653<phrase> 1653<phrase>
1654 id: LANG_TRACKSKIP 1654 id: LANG_MANTRACKSKIP
1655 desc: in crossfade settings 1655 desc: in crossfade settings
1656 user: core 1656 user: core
1657 <source> 1657 <source>
1658 *: none 1658 *: none
1659 swcodec: "Track Skip Only" 1659 swcodec: "Manual Track Skip Only"
1660 </source> 1660 </source>
1661 <dest> 1661 <dest>
1662 *: none 1662 *: none
@@ -1673,7 +1673,7 @@
1673 user: core 1673 user: core
1674 <source> 1674 <source>
1675 *: none 1675 *: none
1676 swcodec: "Shuffle and Track Skip" 1676 swcodec: "Shuffle and Manual Track Skip"
1677 </source> 1677 </source>
1678 <dest> 1678 <dest>
1679 *: none 1679 *: none
diff --git a/apps/lang/hebrew.lang b/apps/lang/hebrew.lang
index b837834c4f..dbf83fc943 100644
--- a/apps/lang/hebrew.lang
+++ b/apps/lang/hebrew.lang
@@ -1675,12 +1675,12 @@
1675 </voice> 1675 </voice>
1676</phrase> 1676</phrase>
1677<phrase> 1677<phrase>
1678 id: LANG_TRACKSKIP 1678 id: LANG_MANTRACKSKIP
1679 desc: in crossfade settings 1679 desc: in crossfade settings
1680 user: core 1680 user: core
1681 <source> 1681 <source>
1682 *: none 1682 *: none
1683 swcodec: "Track Skip Only" 1683 swcodec: "Manual Track Skip Only"
1684 </source> 1684 </source>
1685 <dest> 1685 <dest>
1686 *: none 1686 *: none
@@ -1697,7 +1697,7 @@
1697 user: core 1697 user: core
1698 <source> 1698 <source>
1699 *: none 1699 *: none
1700 swcodec: "Shuffle and Track Skip" 1700 swcodec: "Shuffle and Manual Track Skip"
1701 </source> 1701 </source>
1702 <dest> 1702 <dest>
1703 *: none 1703 *: none
diff --git a/apps/lang/italiano.lang b/apps/lang/italiano.lang
index c0717b2756..0685199fdc 100644
--- a/apps/lang/italiano.lang
+++ b/apps/lang/italiano.lang
@@ -1669,12 +1669,12 @@
1669 </voice> 1669 </voice>
1670</phrase> 1670</phrase>
1671<phrase> 1671<phrase>
1672 id: LANG_TRACKSKIP 1672 id: LANG_MANTRACKSKIP
1673 desc: in crossfade settings 1673 desc: in crossfade settings
1674 user: core 1674 user: core
1675 <source> 1675 <source>
1676 *: none 1676 *: none
1677 swcodec: "Track Skip Only" 1677 swcodec: "Manual Track Skip Only"
1678 </source> 1678 </source>
1679 <dest> 1679 <dest>
1680 *: none 1680 *: none
@@ -1691,7 +1691,7 @@
1691 user: core 1691 user: core
1692 <source> 1692 <source>
1693 *: none 1693 *: none
1694 swcodec: "Shuffle and Track Skip" 1694 swcodec: "Shuffle and Manual Track Skip"
1695 </source> 1695 </source>
1696 <dest> 1696 <dest>
1697 *: none 1697 *: none
diff --git a/apps/lang/japanese.lang b/apps/lang/japanese.lang
index 901871cceb..d281faafcf 100644
--- a/apps/lang/japanese.lang
+++ b/apps/lang/japanese.lang
@@ -1673,12 +1673,12 @@
1673 </voice> 1673 </voice>
1674</phrase> 1674</phrase>
1675<phrase> 1675<phrase>
1676 id: LANG_TRACKSKIP 1676 id: LANG_MANTRACKSKIP
1677 desc: in crossfade settings 1677 desc: in crossfade settings
1678 user: core 1678 user: core
1679 <source> 1679 <source>
1680 *: none 1680 *: none
1681 swcodec: "Track Skip Only" 1681 swcodec: "Manual Track Skip Only"
1682 </source> 1682 </source>
1683 <dest> 1683 <dest>
1684 *: none 1684 *: none
@@ -1695,7 +1695,7 @@
1695 user: core 1695 user: core
1696 <source> 1696 <source>
1697 *: none 1697 *: none
1698 swcodec: "Shuffle and Track Skip" 1698 swcodec: "Shuffle and Manual Track Skip"
1699 </source> 1699 </source>
1700 <dest> 1700 <dest>
1701 *: none 1701 *: none
diff --git a/apps/lang/korean.lang b/apps/lang/korean.lang
index 587d6aea53..adbb2c95cc 100644
--- a/apps/lang/korean.lang
+++ b/apps/lang/korean.lang
@@ -2703,12 +2703,12 @@
2703 </voice> 2703 </voice>
2704</phrase> 2704</phrase>
2705<phrase> 2705<phrase>
2706 id: LANG_TRACKSKIP 2706 id: LANG_MANTRACKSKIP
2707 desc: in crossfade settings 2707 desc: in crossfade settings
2708 user: core 2708 user: core
2709 <source> 2709 <source>
2710 *: none 2710 *: none
2711 swcodec: "Track Skip Only" 2711 swcodec: "Manual Track Skip Only"
2712 </source> 2712 </source>
2713 <dest> 2713 <dest>
2714 *: none 2714 *: none
@@ -9693,7 +9693,7 @@
9693 user: core 9693 user: core
9694 <source> 9694 <source>
9695 *: none 9695 *: none
9696 swcodec: "Shuffle and Track Skip" 9696 swcodec: "Shuffle and Manual Track Skip"
9697 </source> 9697 </source>
9698 <dest> 9698 <dest>
9699 *: none 9699 *: none
diff --git a/apps/lang/lietuviu.lang b/apps/lang/lietuviu.lang
index 960944f556..d5a862879a 100644
--- a/apps/lang/lietuviu.lang
+++ b/apps/lang/lietuviu.lang
@@ -1737,12 +1737,12 @@
1737 </voice> 1737 </voice>
1738</phrase> 1738</phrase>
1739<phrase> 1739<phrase>
1740 id: LANG_TRACKSKIP 1740 id: LANG_MANTRACKSKIP
1741 desc: in crossfade settings 1741 desc: in crossfade settings
1742 user: core 1742 user: core
1743 <source> 1743 <source>
1744 *: none 1744 *: none
1745 swcodec: "Track Skip Only" 1745 swcodec: "Manual Track Skip Only"
1746 </source> 1746 </source>
1747 <dest> 1747 <dest>
1748 *: none 1748 *: none
@@ -1759,7 +1759,7 @@
1759 user: core 1759 user: core
1760 <source> 1760 <source>
1761 *: none 1761 *: none
1762 swcodec: "Shuffle and Track Skip" 1762 swcodec: "Shuffle and Manual Track Skip"
1763 </source> 1763 </source>
1764 <dest> 1764 <dest>
1765 *: none 1765 *: none
diff --git a/apps/lang/magyar.lang b/apps/lang/magyar.lang
index 038d7e572b..95fd901176 100644
--- a/apps/lang/magyar.lang
+++ b/apps/lang/magyar.lang
@@ -1647,12 +1647,12 @@
1647 </voice> 1647 </voice>
1648</phrase> 1648</phrase>
1649<phrase> 1649<phrase>
1650 id: LANG_TRACKSKIP 1650 id: LANG_MANTRACKSKIP
1651 desc: in crossfade settings 1651 desc: in crossfade settings
1652 user: core 1652 user: core
1653 <source> 1653 <source>
1654 *: none 1654 *: none
1655 swcodec: "Track Skip Only" 1655 swcodec: "Manual Track Skip Only"
1656 </source> 1656 </source>
1657 <dest> 1657 <dest>
1658 *: none 1658 *: none
@@ -1660,7 +1660,7 @@
1660 </dest> 1660 </dest>
1661 <voice> 1661 <voice>
1662 *: none 1662 *: none
1663 swcodec: "Track Skip Only" 1663 swcodec: "Manual Track Skip Only"
1664 </voice> 1664 </voice>
1665</phrase> 1665</phrase>
1666<phrase> 1666<phrase>
@@ -1669,7 +1669,7 @@
1669 user: core 1669 user: core
1670 <source> 1670 <source>
1671 *: none 1671 *: none
1672 swcodec: "Shuffle and Track Skip" 1672 swcodec: "Shuffle and Manual Track Skip"
1673 </source> 1673 </source>
1674 <dest> 1674 <dest>
1675 *: none 1675 *: none
@@ -1677,7 +1677,7 @@
1677 </dest> 1677 </dest>
1678 <voice> 1678 <voice>
1679 *: none 1679 *: none
1680 swcodec: "Shuffle and Track Skip" 1680 swcodec: "Shuffle and Manual Track Skip"
1681 </voice> 1681 </voice>
1682</phrase> 1682</phrase>
1683<phrase> 1683<phrase>
diff --git a/apps/lang/nederlands.lang b/apps/lang/nederlands.lang
index 2f946fb9a2..ea7bfecb91 100644
--- a/apps/lang/nederlands.lang
+++ b/apps/lang/nederlands.lang
@@ -2693,12 +2693,12 @@
2693 </voice> 2693 </voice>
2694</phrase> 2694</phrase>
2695<phrase> 2695<phrase>
2696 id: LANG_TRACKSKIP 2696 id: LANG_MANTRACKSKIP
2697 desc: in crossfade settings 2697 desc: in crossfade settings
2698 user: core 2698 user: core
2699 <source> 2699 <source>
2700 *: none 2700 *: none
2701 swcodec: "Track Skip Only" 2701 swcodec: "Manual Track Skip Only"
2702 </source> 2702 </source>
2703 <dest> 2703 <dest>
2704 *: none 2704 *: none
@@ -9671,15 +9671,15 @@
9671 user: core 9671 user: core
9672 <source> 9672 <source>
9673 *: none 9673 *: none
9674 swcodec: "Shuffle and Track Skip" 9674 swcodec: "Shuffle and Manual Track Skip"
9675 </source> 9675 </source>
9676 <dest> 9676 <dest>
9677 *: none 9677 *: none
9678 swcodec: "Shuffle and Track Skip" 9678 swcodec: "Shuffle and Manual Track Skip"
9679 </dest> 9679 </dest>
9680 <voice> 9680 <voice>
9681 *: none 9681 *: none
9682 swcodec: "Shuffle and Track Skip" 9682 swcodec: "Shuffle and Manual Track Skip"
9683 </voice> 9683 </voice>
9684</phrase> 9684</phrase>
9685<phrase> 9685<phrase>
diff --git a/apps/lang/norsk-nynorsk.lang b/apps/lang/norsk-nynorsk.lang
index e10057851e..bfd59ee285 100644
--- a/apps/lang/norsk-nynorsk.lang
+++ b/apps/lang/norsk-nynorsk.lang
@@ -2641,12 +2641,12 @@
2641 </voice> 2641 </voice>
2642</phrase> 2642</phrase>
2643<phrase> 2643<phrase>
2644 id: LANG_TRACKSKIP 2644 id: LANG_MANTRACKSKIP
2645 desc: in crossfade settings 2645 desc: in crossfade settings
2646 user: core 2646 user: core
2647 <source> 2647 <source>
2648 *: none 2648 *: none
2649 swcodec: "Track Skip Only" 2649 swcodec: "Manual Track Skip Only"
2650 </source> 2650 </source>
2651 <dest> 2651 <dest>
2652 *: none 2652 *: none
@@ -9355,7 +9355,7 @@
9355 user: core 9355 user: core
9356 <source> 9356 <source>
9357 *: none 9357 *: none
9358 swcodec: "Shuffle and Track Skip" 9358 swcodec: "Shuffle and Manual Track Skip"
9359 </source> 9359 </source>
9360 <dest> 9360 <dest>
9361 *: none 9361 *: none
diff --git a/apps/lang/norsk.lang b/apps/lang/norsk.lang
index 526e3d6927..3072c515fd 100644
--- a/apps/lang/norsk.lang
+++ b/apps/lang/norsk.lang
@@ -7502,12 +7502,12 @@
7502 </voice> 7502 </voice>
7503</phrase> 7503</phrase>
7504<phrase> 7504<phrase>
7505 id: LANG_TRACKSKIP 7505 id: LANG_MANTRACKSKIP
7506 desc: in crossfade settings 7506 desc: in crossfade settings
7507 user: core 7507 user: core
7508 <source> 7508 <source>
7509 *: none 7509 *: none
7510 swcodec: "Track Skip Only" 7510 swcodec: "Manual Track Skip Only"
7511 </source> 7511 </source>
7512 <dest> 7512 <dest>
7513 *: none 7513 *: none
@@ -8905,7 +8905,7 @@
8905 user: core 8905 user: core
8906 <source> 8906 <source>
8907 *: none 8907 *: none
8908 swcodec: "Shuffle and Track Skip" 8908 swcodec: "Shuffle and Manual Track Skip"
8909 </source> 8909 </source>
8910 <dest> 8910 <dest>
8911 *: none 8911 *: none
diff --git a/apps/lang/polski.lang b/apps/lang/polski.lang
index 5f60c7730a..9197857f44 100644
--- a/apps/lang/polski.lang
+++ b/apps/lang/polski.lang
@@ -1675,12 +1675,12 @@
1675 </voice> 1675 </voice>
1676</phrase> 1676</phrase>
1677<phrase> 1677<phrase>
1678 id: LANG_TRACKSKIP 1678 id: LANG_MANTRACKSKIP
1679 desc: in crossfade settings 1679 desc: in crossfade settings
1680 user: core 1680 user: core
1681 <source> 1681 <source>
1682 *: none 1682 *: none
1683 swcodec: "Track Skip Only" 1683 swcodec: "Manual Track Skip Only"
1684 </source> 1684 </source>
1685 <dest> 1685 <dest>
1686 *: none 1686 *: none
@@ -1697,7 +1697,7 @@
1697 user: core 1697 user: core
1698 <source> 1698 <source>
1699 *: none 1699 *: none
1700 swcodec: "Shuffle and Track Skip" 1700 swcodec: "Shuffle and Manual Track Skip"
1701 </source> 1701 </source>
1702 <dest> 1702 <dest>
1703 *: none 1703 *: none
diff --git a/apps/lang/portugues-brasileiro.lang b/apps/lang/portugues-brasileiro.lang
index e078355e9b..e3dfa91445 100644
--- a/apps/lang/portugues-brasileiro.lang
+++ b/apps/lang/portugues-brasileiro.lang
@@ -1666,12 +1666,12 @@
1666 </voice> 1666 </voice>
1667</phrase> 1667</phrase>
1668<phrase> 1668<phrase>
1669 id: LANG_TRACKSKIP 1669 id: LANG_MANTRACKSKIP
1670 desc: in crossfade settings 1670 desc: in crossfade settings
1671 user: core 1671 user: core
1672 <source> 1672 <source>
1673 *: none 1673 *: none
1674 swcodec: "Track Skip Only" 1674 swcodec: "Manual Track Skip Only"
1675 </source> 1675 </source>
1676 <dest> 1676 <dest>
1677 *: none 1677 *: none
@@ -1688,7 +1688,7 @@
1688 user: core 1688 user: core
1689 <source> 1689 <source>
1690 *: none 1690 *: none
1691 swcodec: "Shuffle and Track Skip" 1691 swcodec: "Shuffle and Manual Track Skip"
1692 </source> 1692 </source>
1693 <dest> 1693 <dest>
1694 *: none 1694 *: none
diff --git a/apps/lang/portugues.lang b/apps/lang/portugues.lang
index 899dbe7abb..97cdbf7f6c 100644
--- a/apps/lang/portugues.lang
+++ b/apps/lang/portugues.lang
@@ -8224,7 +8224,7 @@
8224 user: core 8224 user: core
8225 <source> 8225 <source>
8226 *: none 8226 *: none
8227 swcodec: "Shuffle and Track Skip" 8227 swcodec: "Shuffle and Manual Track Skip"
8228 </source> 8228 </source>
8229 <dest> 8229 <dest>
8230 *: none 8230 *: none
@@ -9569,12 +9569,12 @@
9569 </voice> 9569 </voice>
9570</phrase> 9570</phrase>
9571<phrase> 9571<phrase>
9572 id: LANG_TRACKSKIP 9572 id: LANG_MANTRACKSKIP
9573 desc: in crossfade settings 9573 desc: in crossfade settings
9574 user: core 9574 user: core
9575 <source> 9575 <source>
9576 *: none 9576 *: none
9577 swcodec: "Track Skip Only" 9577 swcodec: "Manual Track Skip Only"
9578 </source> 9578 </source>
9579 <dest> 9579 <dest>
9580 *: none 9580 *: none
diff --git a/apps/lang/romaneste.lang b/apps/lang/romaneste.lang
index 5b73499997..f05113f729 100644
--- a/apps/lang/romaneste.lang
+++ b/apps/lang/romaneste.lang
@@ -4930,7 +4930,7 @@
4930 user: core 4930 user: core
4931 <source> 4931 <source>
4932 *: none 4932 *: none
4933 swcodec: "Shuffle and Track Skip" 4933 swcodec: "Shuffle and Manual Track Skip"
4934 </source> 4934 </source>
4935 <dest> 4935 <dest>
4936 *: none 4936 *: none
@@ -8782,12 +8782,12 @@
8782 </voice> 8782 </voice>
8783</phrase> 8783</phrase>
8784<phrase> 8784<phrase>
8785 id: LANG_TRACKSKIP 8785 id: LANG_MANTRACKSKIP
8786 desc: in crossfade settings 8786 desc: in crossfade settings
8787 user: core 8787 user: core
8788 <source> 8788 <source>
8789 *: none 8789 *: none
8790 swcodec: "Track Skip Only" 8790 swcodec: "Manual Track Skip Only"
8791 </source> 8791 </source>
8792 <dest> 8792 <dest>
8793 *: none 8793 *: none
diff --git a/apps/lang/russian.lang b/apps/lang/russian.lang
index 78baed1653..b567f02c67 100644
--- a/apps/lang/russian.lang
+++ b/apps/lang/russian.lang
@@ -8761,7 +8761,7 @@
8761 user: core 8761 user: core
8762 <source> 8762 <source>
8763 *: none 8763 *: none
8764 swcodec: "Shuffle and Track Skip" 8764 swcodec: "Shuffle and Manual Track Skip"
8765 </source> 8765 </source>
8766 <dest> 8766 <dest>
8767 *: none 8767 *: none
@@ -10294,12 +10294,12 @@
10294 </voice> 10294 </voice>
10295</phrase> 10295</phrase>
10296<phrase> 10296<phrase>
10297 id: LANG_TRACKSKIP 10297 id: LANG_MANTRACKSKIP
10298 desc: in crossfade settings 10298 desc: in crossfade settings
10299 user: core 10299 user: core
10300 <source> 10300 <source>
10301 *: none 10301 *: none
10302 swcodec: "Track Skip Only" 10302 swcodec: "Manual Track Skip Only"
10303 </source> 10303 </source>
10304 <dest> 10304 <dest>
10305 *: none 10305 *: none
diff --git a/apps/lang/srpski.lang b/apps/lang/srpski.lang
index 027f9c0d3a..7e9efb4f57 100644
--- a/apps/lang/srpski.lang
+++ b/apps/lang/srpski.lang
@@ -1650,12 +1650,12 @@
1650 </voice> 1650 </voice>
1651</phrase> 1651</phrase>
1652<phrase> 1652<phrase>
1653 id: LANG_TRACKSKIP 1653 id: LANG_MANTRACKSKIP
1654 desc: in crossfade settings 1654 desc: in crossfade settings
1655 user: core 1655 user: core
1656 <source> 1656 <source>
1657 *: none 1657 *: none
1658 swcodec: "Track Skip Only" 1658 swcodec: "Manual Track Skip Only"
1659 </source> 1659 </source>
1660 <dest> 1660 <dest>
1661 *: none 1661 *: none
@@ -1672,7 +1672,7 @@
1672 user: core 1672 user: core
1673 <source> 1673 <source>
1674 *: none 1674 *: none
1675 swcodec: "Shuffle and Track Skip" 1675 swcodec: "Shuffle and Manual Track Skip"
1676 </source> 1676 </source>
1677 <dest> 1677 <dest>
1678 *: none 1678 *: none
diff --git a/apps/lang/svenska.lang b/apps/lang/svenska.lang
index cfddc73c75..a3dcdf51ea 100644
--- a/apps/lang/svenska.lang
+++ b/apps/lang/svenska.lang
@@ -1672,12 +1672,12 @@
1672 </voice> 1672 </voice>
1673</phrase> 1673</phrase>
1674<phrase> 1674<phrase>
1675 id: LANG_TRACKSKIP 1675 id: LANG_MANTRACKSKIP
1676 desc: in crossfade settings 1676 desc: in crossfade settings
1677 user: core 1677 user: core
1678 <source> 1678 <source>
1679 *: none 1679 *: none
1680 swcodec: "Track Skip Only" 1680 swcodec: "Manual Track Skip Only"
1681 </source> 1681 </source>
1682 <dest> 1682 <dest>
1683 *: none 1683 *: none
@@ -1694,7 +1694,7 @@
1694 user: core 1694 user: core
1695 <source> 1695 <source>
1696 *: none 1696 *: none
1697 swcodec: "Shuffle and Track Skip" 1697 swcodec: "Shuffle and Manual Track Skip"
1698 </source> 1698 </source>
1699 <dest> 1699 <dest>
1700 *: none 1700 *: none
diff --git a/apps/lang/tagalog.lang b/apps/lang/tagalog.lang
index 4b71d75839..cb997691c0 100644
--- a/apps/lang/tagalog.lang
+++ b/apps/lang/tagalog.lang
@@ -1649,12 +1649,12 @@
1649 </voice> 1649 </voice>
1650</phrase> 1650</phrase>
1651<phrase> 1651<phrase>
1652 id: LANG_TRACKSKIP 1652 id: LANG_MANTRACKSKIP
1653 desc: in crossfade settings 1653 desc: in crossfade settings
1654 user: core 1654 user: core
1655 <source> 1655 <source>
1656 *: none 1656 *: none
1657 swcodec: "Track Skip Only" 1657 swcodec: "Manual Track Skip Only"
1658 </source> 1658 </source>
1659 <dest> 1659 <dest>
1660 *: none 1660 *: none
@@ -1662,7 +1662,7 @@
1662 </dest> 1662 </dest>
1663 <voice> 1663 <voice>
1664 *: none 1664 *: none
1665 swcodec: "Track Skip Only" 1665 swcodec: "Manual Track Skip Only"
1666 </voice> 1666 </voice>
1667</phrase> 1667</phrase>
1668<phrase> 1668<phrase>
@@ -1671,7 +1671,7 @@
1671 user: core 1671 user: core
1672 <source> 1672 <source>
1673 *: none 1673 *: none
1674 swcodec: "Shuffle and Track Skip" 1674 swcodec: "Shuffle and Manual Track Skip"
1675 </source> 1675 </source>
1676 <dest> 1676 <dest>
1677 *: none 1677 *: none
@@ -1679,7 +1679,7 @@
1679 </dest> 1679 </dest>
1680 <voice> 1680 <voice>
1681 *: none 1681 *: none
1682 swcodec: "Shuffle and Track Skip" 1682 swcodec: "Shuffle and Manual Track Skip"
1683 </voice> 1683 </voice>
1684</phrase> 1684</phrase>
1685<phrase> 1685<phrase>
diff --git a/apps/lang/thai.lang b/apps/lang/thai.lang
index 9b869853fb..55fa218121 100644
--- a/apps/lang/thai.lang
+++ b/apps/lang/thai.lang
@@ -1648,12 +1648,12 @@
1648 </voice> 1648 </voice>
1649</phrase> 1649</phrase>
1650<phrase> 1650<phrase>
1651 id: LANG_TRACKSKIP 1651 id: LANG_MANTRACKSKIP
1652 desc: in crossfade settings 1652 desc: in crossfade settings
1653 user: core 1653 user: core
1654 <source> 1654 <source>
1655 *: none 1655 *: none
1656 swcodec: "Track Skip Only" 1656 swcodec: "Manual Track Skip Only"
1657 </source> 1657 </source>
1658 <dest> 1658 <dest>
1659 *: none 1659 *: none
@@ -1661,7 +1661,7 @@
1661 </dest> 1661 </dest>
1662 <voice> 1662 <voice>
1663 *: none 1663 *: none
1664 swcodec: "Track Skip Only" 1664 swcodec: "Manual Track Skip Only"
1665 </voice> 1665 </voice>
1666</phrase> 1666</phrase>
1667<phrase> 1667<phrase>
@@ -1670,7 +1670,7 @@
1670 user: core 1670 user: core
1671 <source> 1671 <source>
1672 *: none 1672 *: none
1673 swcodec: "Shuffle and Track Skip" 1673 swcodec: "Shuffle and Manual Track Skip"
1674 </source> 1674 </source>
1675 <dest> 1675 <dest>
1676 *: none 1676 *: none
@@ -1678,7 +1678,7 @@
1678 </dest> 1678 </dest>
1679 <voice> 1679 <voice>
1680 *: none 1680 *: none
1681 swcodec: "Shuffle and Track Skip" 1681 swcodec: "Shuffle and Manual Track Skip"
1682 </voice> 1682 </voice>
1683</phrase> 1683</phrase>
1684<phrase> 1684<phrase>
diff --git a/apps/lang/ukrainian.lang b/apps/lang/ukrainian.lang
index ba8818e2ab..63eec1b4de 100644
--- a/apps/lang/ukrainian.lang
+++ b/apps/lang/ukrainian.lang
@@ -1665,12 +1665,12 @@
1665 </voice> 1665 </voice>
1666</phrase> 1666</phrase>
1667<phrase> 1667<phrase>
1668 id: LANG_TRACKSKIP 1668 id: LANG_MANTRACKSKIP
1669 desc: in crossfade settings 1669 desc: in crossfade settings
1670 user: core 1670 user: core
1671 <source> 1671 <source>
1672 *: none 1672 *: none
1673 swcodec: "Track Skip Only" 1673 swcodec: "Manual Track Skip Only"
1674 </source> 1674 </source>
1675 <dest> 1675 <dest>
1676 *: none 1676 *: none
@@ -1687,7 +1687,7 @@
1687 user: core 1687 user: core
1688 <source> 1688 <source>
1689 *: none 1689 *: none
1690 swcodec: "Shuffle and Track Skip" 1690 swcodec: "Shuffle and Manual Track Skip"
1691 </source> 1691 </source>
1692 <dest> 1692 <dest>
1693 *: none 1693 *: none
diff --git a/apps/lang/walon.lang b/apps/lang/walon.lang
index daa49086fe..3bd8afe125 100644
--- a/apps/lang/walon.lang
+++ b/apps/lang/walon.lang
@@ -1672,12 +1672,12 @@
1672 </voice> 1672 </voice>
1673</phrase> 1673</phrase>
1674<phrase> 1674<phrase>
1675 id: LANG_TRACKSKIP 1675 id: LANG_MANTRACKSKIP
1676 desc: in crossfade settings 1676 desc: in crossfade settings
1677 user: core 1677 user: core
1678 <source> 1678 <source>
1679 *: none 1679 *: none
1680 swcodec: "Track Skip Only" 1680 swcodec: "Manual Track Skip Only"
1681 </source> 1681 </source>
1682 <dest> 1682 <dest>
1683 *: none 1683 *: none
@@ -1694,7 +1694,7 @@
1694 user: core 1694 user: core
1695 <source> 1695 <source>
1696 *: none 1696 *: none
1697 swcodec: "Shuffle and Track Skip" 1697 swcodec: "Shuffle and Manual Track Skip"
1698 </source> 1698 </source>
1699 <dest> 1699 <dest>
1700 *: none 1700 *: none
diff --git a/apps/pcmbuf.c b/apps/pcmbuf.c
index 75d8152f7e..580dc315a7 100644
--- a/apps/pcmbuf.c
+++ b/apps/pcmbuf.c
@@ -454,10 +454,6 @@ size_t pcmbuf_init(unsigned char *bufend)
454 454
455 init_pcmbuffers(); 455 init_pcmbuffers();
456 456
457 if(track_transition){logf("pcmbuf: (init) track transition false");}
458 end_of_track = false;
459 track_transition = false;
460
461#ifdef HAVE_CROSSFADE 457#ifdef HAVE_CROSSFADE
462 pcmbuf_finish_crossfade_enable(); 458 pcmbuf_finish_crossfade_enable();
463#else 459#else
@@ -472,112 +468,84 @@ size_t pcmbuf_init(unsigned char *bufend)
472 468
473/* Track change */ 469/* Track change */
474 470
475/* The codec is moving on to the next track, but the current track is 471void pcmbuf_start_track_change(bool auto_skip)
476 * still playing. Set flags to make sure the elapsed time of the current
477 * track is updated properly, and mark the currently written chunk as the
478 * last one in the track. */
479static void start_gapless_track_change(void)
480{ 472{
481 logf(" gapless track change"); 473 bool crossfade = false;
482 /* we're starting a track transition */
483 track_transition = true;
484
485 /* mark the last chunk in the track */
486 end_of_track = true;
487}
488
489#ifdef HAVE_CROSSFADE 474#ifdef HAVE_CROSSFADE
490static bool pcmbuf_is_crossfade_enabled(void) 475 /* Determine whether this track change needs to crossfade */
491{ 476
492 if (global_settings.crossfade == CROSSFADE_ENABLE_SHUFFLE) 477 if(crossfade_enabled && !pcmbuf_is_crossfade_active())
493 return global_settings.playlist_shuffle; 478 {
494 479 switch(global_settings.crossfade)
495 return crossfade_enabled; 480 {
496} 481 case CROSSFADE_ENABLE_AUTOSKIP:
482 crossfade = auto_skip;
483 break;
484 case CROSSFADE_ENABLE_MANSKIP:
485 crossfade = !auto_skip;
486 break;
487 case CROSSFADE_ENABLE_SHUFFLE:
488 crossfade = global_settings.playlist_shuffle;
489 break;
490 case CROSSFADE_ENABLE_SHUFFLE_AND_MANSKIP:
491 crossfade = global_settings.playlist_shuffle && !auto_skip;
492 break;
493 case CROSSFADE_ENABLE_ALWAYS:
494 crossfade = true;
495 break;
496 }
497 }
497#endif 498#endif
499
500 if (!auto_skip || crossfade)
501 /* manual skip or crossfade */
502 {
503 if (crossfade)
504 { logf(" crossfade track change"); }
505 else
506 { logf(" manual track change"); }
507
508 /* Notify the wps that the track change starts now */
509 audio_post_track_change(false);
498 510
499static void start_processed_track_change(bool auto_skip) 511 /* Can't do two crossfades at once and, no fade if pcm is off now */
500{ 512 if (
501 logf(" processed track change");
502 /* Notify the wps that the track change starts now */
503 audio_post_track_change(false);
504
505 /* Can't do two crossfades at once and, no fade if pcm is off now */
506 if (
507#ifdef HAVE_CROSSFADE 513#ifdef HAVE_CROSSFADE
508 pcmbuf_is_crossfade_active() || 514 pcmbuf_is_crossfade_active() ||
509#endif 515#endif
510 !pcm_is_playing()) 516 !pcm_is_playing())
511 { 517 {
512 pcmbuf_play_stop(); 518 pcmbuf_play_stop();
513 return; 519 return;
514 } 520 }
515 521
516 trigger_cpu_boost(); 522 trigger_cpu_boost();
517 523
518 /* Not enough data, or crossfade disabled, flush the old data instead */ 524 /* Not enough data, or not crossfading, flush the old data instead */
519 if (LOW_DATA(2) || 525 if (LOW_DATA(2) || !crossfade || low_latency_mode)
520#ifdef HAVE_CROSSFADE 526 {
521 !pcmbuf_is_crossfade_enabled() || 527 flush_pcmbuf = true;
522#endif 528 commit_chunk();
523 low_latency_mode) 529 return;
524 { 530 }
525 /* commit everything to this point and keep going, but... */
526 commit_chunk();
527 /* ... when the next chunk commits, throw away everything but itself */
528 flush_pcmbuf = true;
529 return;
530 }
531 531
532#ifdef HAVE_CROSSFADE 532#ifdef HAVE_CROSSFADE
533 /* Don't enable mix mode when skipping tracks manually. */ 533 /* Don't enable mix mode when skipping tracks manually. */
534 crossfade_mixmode = auto_skip && global_settings.crossfade_fade_out_mixmode; 534 crossfade_mixmode = auto_skip && global_settings.crossfade_fade_out_mixmode;
535 535
536 crossfade_track_change_started = true; 536 crossfade_track_change_started = crossfade;
537#else
538 (void)auto_skip;
539#endif 537#endif
540} 538 }
541 539 else /* automatic and not crossfading, so gapless track change */
542void pcmbuf_start_track_change(bool auto_skip)
543{
544 bool process = false;
545 /* Manual track change (always crossfade or flush audio). */
546 if (!auto_skip)
547 process = true;
548
549#ifdef HAVE_CROSSFADE
550 /* Automatic track change w/crossfade, if not in "Track Skip Only" mode. */
551 else if (pcmbuf_is_crossfade_enabled() && !pcmbuf_is_crossfade_active()
552 && global_settings.crossfade != CROSSFADE_ENABLE_TRACKSKIP)
553 { 540 {
554 if (global_settings.crossfade == CROSSFADE_ENABLE_SHUFFLE_AND_TRACKSKIP) 541 /* The codec is moving on to the next track, but the current track will
555 { 542 * continue to play. Set a flag to make sure the elapsed time of the
556 if (global_settings.playlist_shuffle) 543 * current track will be updated properly, and mark the current chunk
557 process = true; 544 * as the last one in the track. */
558 } 545 logf(" gapless track change");
559 else 546 track_transition = true;
560 process = true; 547 end_of_track = true;
561 } 548 }
562#endif
563
564 if (process)
565 /* process track change (manual skip or crossfade) */
566 start_processed_track_change(auto_skip);
567 else
568 /* normal gapless playback */
569 start_gapless_track_change();
570}
571
572/* Called when the last chunk in the track has been played */
573static void finish_gapless_track_change(void)
574{
575 /* not in a track transition anymore */
576 if(track_transition){logf("pcmbuf: (finish change) track transition false");}
577 track_transition = false;
578
579 /* notify playback that the track has just finished */
580 audio_post_track_change(true);
581} 549}
582 550
583 551
@@ -586,28 +554,31 @@ static void finish_gapless_track_change(void)
586/** PCM driver callback 554/** PCM driver callback
587 * This function has 3 major logical parts (separated by brackets both for 555 * This function has 3 major logical parts (separated by brackets both for
588 * readability and variable scoping). The first part performs the 556 * readability and variable scoping). The first part performs the
589 * operations related to finishing off the last buffer we fed to the DMA. 557 * operations related to finishing off the last chunk we fed to the DMA.
590 * The second part detects the end of playlist condition when the pcm 558 * The second part detects the end of playlist condition when the PCM
591 * buffer is empty except for uncommitted samples. Then they are committed. 559 * buffer is empty except for uncommitted samples. Then they are committed
592 * The third part performs the operations involved in sending a new buffer 560 * and sent to the PCM driver for playback. The third part performs the
593 * to the DMA. */ 561 * operations involved in sending a new chunk to the DMA. */
594static void pcmbuf_pcm_callback(unsigned char** start, size_t* size) ICODE_ATTR; 562static void pcmbuf_pcm_callback(unsigned char** start, size_t* size) ICODE_ATTR;
595static void pcmbuf_pcm_callback(unsigned char** start, size_t* size) 563static void pcmbuf_pcm_callback(unsigned char** start, size_t* size)
596{ 564{
597 { 565 {
598 struct chunkdesc *pcmbuf_current = read_chunk; 566 struct chunkdesc *pcmbuf_current = read_chunk;
599 /* Take the finished buffer out of circulation */ 567 /* Take the finished chunk out of circulation */
600 read_chunk = pcmbuf_current->link; 568 read_chunk = pcmbuf_current->link;
601 569
602 /* if during a track transition, update the elapsed time */ 570 /* if during a track transition, update the elapsed time */
603 if (track_transition) 571 if (track_transition)
604 audio_pcmbuf_position_callback(last_chunksize); 572 audio_pcmbuf_position_callback(last_chunksize);
605 573
606 /* if last buffer in the track, let the audio thread know */ 574 /* if last chunk in the track, stop updates and notify audio thread */
607 if (pcmbuf_current->end_of_track) 575 if (pcmbuf_current->end_of_track)
608 finish_gapless_track_change(); 576 {
577 track_transition = false;
578 audio_post_track_change(true);
579 }
609 580
610 /* Put the finished buffer back into circulation */ 581 /* Put the finished chunk back into circulation */
611 write_end_chunk->link = pcmbuf_current; 582 write_end_chunk->link = pcmbuf_current;
612 write_end_chunk = pcmbuf_current; 583 write_end_chunk = pcmbuf_current;
613 584
@@ -632,7 +603,7 @@ static void pcmbuf_pcm_callback(unsigned char** start, size_t* size)
632 } 603 }
633 604
634 { 605 {
635 /* Send the new buffer to the pcm */ 606 /* Send the new chunk to the PCM */
636 if(read_chunk) 607 if(read_chunk)
637 { 608 {
638 size_t current_size = read_chunk->size; 609 size_t current_size = read_chunk->size;
@@ -644,12 +615,11 @@ static void pcmbuf_pcm_callback(unsigned char** start, size_t* size)
644 } 615 }
645 else 616 else
646 { 617 {
647 /* No more buffers */ 618 /* No more chunks */
619 logf("pcmbuf_pcm_callback: no more chunks");
648 last_chunksize = 0; 620 last_chunksize = 0;
649 *size = 0; 621 *size = 0;
650 *start = NULL; 622 *start = NULL;
651 if (end_of_track)
652 finish_gapless_track_change();
653 } 623 }
654 } 624 }
655 DISPLAY_DESC("callback"); 625 DISPLAY_DESC("callback");
@@ -660,6 +630,7 @@ void pcmbuf_play_start(void)
660{ 630{
661 if (!pcm_is_playing() && pcmbuf_unplayed_bytes && read_chunk != NULL) 631 if (!pcm_is_playing() && pcmbuf_unplayed_bytes && read_chunk != NULL)
662 { 632 {
633 logf("pcmbuf_play_start");
663 last_chunksize = read_chunk->size; 634 last_chunksize = read_chunk->size;
664 pcmbuf_unplayed_bytes -= last_chunksize; 635 pcmbuf_unplayed_bytes -= last_chunksize;
665 pcm_play_data(pcmbuf_pcm_callback, 636 pcm_play_data(pcmbuf_pcm_callback,
@@ -669,6 +640,7 @@ void pcmbuf_play_start(void)
669 640
670void pcmbuf_play_stop(void) 641void pcmbuf_play_stop(void)
671{ 642{
643 logf("pcmbuf_play_stop");
672 pcm_play_stop(); 644 pcm_play_stop();
673 645
674 pcmbuf_unplayed_bytes = 0; 646 pcmbuf_unplayed_bytes = 0;
@@ -684,6 +656,8 @@ void pcmbuf_play_stop(void)
684 crossfade_track_change_started = false; 656 crossfade_track_change_started = false;
685 crossfade_active = false; 657 crossfade_active = false;
686#endif 658#endif
659 end_of_track = false;
660 track_transition = false;
687 flush_pcmbuf = false; 661 flush_pcmbuf = false;
688 DISPLAY_DESC("play_stop"); 662 DISPLAY_DESC("play_stop");
689 663
@@ -693,6 +667,7 @@ void pcmbuf_play_stop(void)
693 667
694void pcmbuf_pause(bool pause) 668void pcmbuf_pause(bool pause)
695{ 669{
670 logf("pcmbuf_pause: %s", pause?"pause":"play");
696 if (pcm_is_playing()) 671 if (pcm_is_playing())
697 pcm_play_pause(!pause); 672 pcm_play_pause(!pause);
698 else if (!pause) 673 else if (!pause)
diff --git a/apps/playback.c b/apps/playback.c
index 2c9ca10311..57aca136a1 100644
--- a/apps/playback.c
+++ b/apps/playback.c
@@ -236,7 +236,7 @@ void audio_pcmbuf_position_callback(size_t size)
236 236
237 if (time >= othertrack_id3->length) 237 if (time >= othertrack_id3->length)
238 { 238 {
239 if(track_transition){logf("playback: (callback) track transition false");} 239 /* we just played the end of the track, so stop this callback */
240 track_transition = false; 240 track_transition = false;
241 othertrack_id3->elapsed = othertrack_id3->length; 241 othertrack_id3->elapsed = othertrack_id3->length;
242 } 242 }
diff --git a/apps/settings.h b/apps/settings.h
index 4ab2d8945d..ffadfa9eee 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -109,13 +109,16 @@ enum
109 TRIG_TYPE_NEW_FILE 109 TRIG_TYPE_NEW_FILE
110}; 110};
111 111
112#ifdef HAVE_CROSSFADE
112enum { 113enum {
113 CROSSFADE_ENABLE_OFF = 0, 114 CROSSFADE_ENABLE_OFF = 0,
115 CROSSFADE_ENABLE_AUTOSKIP,
116 CROSSFADE_ENABLE_MANSKIP,
114 CROSSFADE_ENABLE_SHUFFLE, 117 CROSSFADE_ENABLE_SHUFFLE,
115 CROSSFADE_ENABLE_TRACKSKIP, 118 CROSSFADE_ENABLE_SHUFFLE_AND_MANSKIP,
116 CROSSFADE_ENABLE_SHUFFLE_AND_TRACKSKIP,
117 CROSSFADE_ENABLE_ALWAYS, 119 CROSSFADE_ENABLE_ALWAYS,
118}; 120};
121#endif
119 122
120enum { 123enum {
121 FOLDER_ADVANCE_OFF = 0, 124 FOLDER_ADVANCE_OFF = 0,
diff --git a/apps/settings_list.c b/apps/settings_list.c
index 9f290e2a18..1a9f7f2d6e 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -1166,8 +1166,9 @@ const struct settings_list settings[] = {
1166 /* crossfade */ 1166 /* crossfade */
1167 CHOICE_SETTING(F_SOUNDSETTING, crossfade, LANG_CROSSFADE_ENABLE, 0, 1167 CHOICE_SETTING(F_SOUNDSETTING, crossfade, LANG_CROSSFADE_ENABLE, 0,
1168 "crossfade", 1168 "crossfade",
1169 "off,shuffle,track skip,shuffle and track skip,always", NULL, 1169 "off,auto track skip,man track skip,shuffle,shuffle and man track skip,always",
1170 5, ID2P(LANG_OFF), ID2P(LANG_SHUFFLE), ID2P(LANG_TRACKSKIP), 1170 NULL, 6, ID2P(LANG_OFF), ID2P(LANG_AUTOTRACKSKIP),
1171 ID2P(LANG_MANTRACKSKIP), ID2P(LANG_SHUFFLE),
1171 ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)), 1172 ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)),
1172 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_delay, 1173 INT_SETTING(F_SOUNDSETTING, crossfade_fade_in_delay,
1173 LANG_CROSSFADE_FADE_IN_DELAY, 0, 1174 LANG_CROSSFADE_FADE_IN_DELAY, 0,