3 Taster invertiert gedrückt halten zum Zurückspringen

Wie es der Zufall so will bin ich gerade dabei für meine zwei Kids (4 & 6 Jahre) nach 3 Jahren neue Boxen für Weihnachten zu bauen und versuche mich gerade eben auch an der neuen TNG Software Version.

Bisher lief das bei der alten Version bei uns (3 Buttons) immer über „Zurückspulen“ mittels gedrückt halten vom Leiser / Zurück Button.
Das ist für die Kids das gewohnte und wäre unser Favorit als Lösung.

Spricht etwas dagegen das so umzusetzen?

Ich bin gerade dabei das zu testen und würde ggf. noch einen extra Thread für meine Probleme mit den neuen Boxen machen :slight_smile: .

Für mich habe ich aktuell folgende Anpassungen vorgenommen:

downLongRepeat im ThreeButton Mode auf command:previous geändert:

#else // Three Button
/*  up,             */ ,{ command::next      , command::bright_up  , command::next       , command::volume_up   }
/*  upLong,         */ ,{ command::next10    , command::shortcut2  , command::volume_up  , command::next        }
/*  upLongRepeat,   */ ,{ command::none      , command::none       , command::volume_up  , command::next        }
/*  down,           */ ,{ command::previous  , command::bright_down, command::previous   , command::volume_down }
/*  downLong,       */ ,{ command::previous10, command::shortcut3  , command::volume_down, command::previous    }
/*  downLongRepeat, */ ,{ command::none      , command::none       , command::volume_down, command::previous    }
/*  updownLong,     */ ,{ command::none      , command::shortcut1  , command::none       , command::none        }

Den LongPressRepeat timeout auf 750ms erhöht:

inline constexpr uint32_t  buttonLongPressRepeat =  750; // timeout for long press button repeat in ms

und im previousTrack war mir die Bedinung mit mp3.getCurrentTrack() > numTracksInFolder unklar und ich habe das zu > 1 angepasst:

void Tonuino::previousTrack(uint8_t tracks) {
  LOG(play_log, s_info, F("previousTrack"));
  if (activeModifier->handlePrevious())
    return;
  if (mp3.isPlayingFolder() && (myFolder->mode == pmode_t::hoerbuch || myFolder->mode == pmode_t::hoerbuch_1)) {
    const uint8_t trackToSave = (mp3.getCurrentTrack() > 1) ? mp3.getCurrentTrack()-1 : 1;
    settings.writeFolderSettingToFlash(myFolder->folder, trackToSave);
  }
  mp3.playPrevious(tracks);
}

Außerdem noch im mp3 kein Stop der Wiedergabe bei erreichen des ersten Tracks:

void Mp3::playPrevious(uint8_t tracks) {
  if (playing == play_folder && (current_track > 0 || endless)) {
    int current_track_tmp = static_cast<int>(current_track) - tracks;
    current_track = endless ? (current_track_tmp%q.size()+q.size()) % q.size() : max(current_track_tmp, 0);
    LOG(mp3_log, s_debug, F("playPrevious: "), current_track);
    playCurrent();
  }
  else if(playing == play_folder && current_track == 0) {

  }else {
    LOG(mp3_log, s_debug, F("playPrevious: stop"));
    clearAllQueue();
    playing = play_none;
  }
}

Ich bin aber erst noch am Einarbeiten in die neue Code-Basis…

Aber großes Lob für die tolle aktive Weiterentwicklung!

Ich habe deine Frage mal verschoben. Dir ging es doch nicht um das Zurücksetzen des Fortschrittspeichers im Hörbuchmodus, sondern allgemein um das Springen zwischen den Tracks, oder?

Ja du hast wohl Recht, dass es in einem extra Thread besser aufgehoben ist.
Danke fürs Verschieben.

Ich wollte bloß darauf hinaus, dass es in der alten Version ging die Hörbücher (auch im 3 Button Mode) mit der Leiser Taste durch halten zurück zu spulen.
Das geht nun mit der neuen Version nicht mehr.

Und von daher mein Einwurf, ob das nicht wieder aktivierbar ist.

Aber ich muss wohl noch ein bisschen Testen, denn so ganz fehlerfrei ist meine Lösung noch nicht…

Ich melde mich mal zurück wenn ich schlauer bin :slight_smile:

Ja, das ist ein Bug, den ich auch selber schon gefunden hatte. Siehe Issue_147. Ich arbeite gerade an einem Fix dafür.

Das wird gerade in diesem Thread diskutiert und es gibt auch schon ein Issue_148 dazu.

Hmm, ich weiß nicht ob das allgemein so gewollt wird. Für alle, die das für die Lautstärke nehmen, ist 200ms besser. Aber natürlich kann ja jeder selber den Code nach seinen Bedürfnissen anpassen.

Mit so einer schnellen Reaktion hatte ich nicht gerechnet :slight_smile: :+1:

Der neue Branch läuft bei mir nach ersten Tests sauber!
Danke dafür.

Bezüglich des erhöhten Timeouts:

Ja der erhöhte Timeout mach sicher nur bei der 3Button & Play_invert Variante Sinn.

Ich habe nun sogar den Timeout auf 2500ms erhöht, so dass jeder Track einmal kurz anspielt, damit man gezielt mit dem „Spulen“ aufhören kann. (So sind es die Kids halt gewöhnt bisher)
Ich bin mir relativ sicher, dass es mit der alten Software-Version so Standard war.

Also im Endeffekt könnte man das auch nur für den 3ButtonMode und play_invert als Standard einbauen.

Also diese zwei Zeilen anpassen

/*  upLongRepeat,   */ ,{ command::none      , command::none       , command::volume_up  , command::next        }
/*  downLongRepeat, */ ,{ command::none      , command::none       , command::volume_down, command::previous    }

Und dann halt einen weiteren LogPressRepeat definieren so was in der Art:

inline constexpr uint32_t  buttonLongPressRepeat_playinvert = 2500; // timeout for long press button repeat in ms for play_invert mode

Der dann halt im 3ButtonMode und play_invert Fall verwendet wird.

Macht den Code nicht unbedingt schicker, aber in meinen Augen für die 3 Button Bedienung sinnvoll.