summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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
-rw-r--r--manual/configure_rockbox/playback_options.tex17
40 files changed, 237 insertions, 238 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,
diff --git a/manual/configure_rockbox/playback_options.tex b/manual/configure_rockbox/playback_options.tex
index 41bc75de4e..f9f1db01f2 100644
--- a/manual/configure_rockbox/playback_options.tex
+++ b/manual/configure_rockbox/playback_options.tex
@@ -106,13 +106,16 @@ you to configure settings related to audio playback.
106 Options for crossfade settings are: 106 Options for crossfade settings are:
107 \begin{description} 107 \begin{description}
108 \item[Enable Crossfade.] If set to \setting{Off}, crossfade is disabled. 108 \item[Enable Crossfade.] If set to \setting{Off}, crossfade is disabled.
109 If set to \setting{Shuffle}, crossfade is enabled when the 109 If set to \setting{Auto Track Skip Only}, crossfade occurs for
110 shuffle feature is set to \setting{Yes}, but disabled otherwise. If set 110 automatic skips, but not for manual skips. The next setting,
111 to \setting{Track Skip Only}, tracks will only crossfade when manually 111 \setting{Manual Track Skip Only}, is the opposite: tracks will only
112 skipped. If set to \setting{Shuffle and Track Skip} 112 crossfade when manually skipped. If set to \setting{Shuffle}, crossfade
113 then crossfade will only be active when shuffle is set to 113 is enabled for all track changes when the shuffle feature is set to
114 \setting{Yes} and the track is manually skipped. If set to 114 \setting{Yes}, but disabled otherwise. If set to
115 \setting{Always}, tracks will always crossfade into one another. 115 \setting{Shuffle and Manual Track Skip} then crossfade will only be
116 active when shuffle is set to \setting{Yes} and the track is then
117 manually skipped. If set to \setting{Always}, tracks will always
118 crossfade into one another.
116 % 119 %
117 \item[Fade In Delay.] The ``fade in delay'' is the length of time between 120 \item[Fade In Delay.] The ``fade in delay'' is the length of time between
118 when the crossfade process begins and when the new track begins to fade 121 when the crossfade process begins and when the new track begins to fade