add not-broken looping code using seconds instead of samples (#944)
This commit is contained in:
parent
3e42588b51
commit
ad93dd8238
@ -61,11 +61,19 @@ QString AOMusicPlayer::play(QString p_song, int channel, bool loop,
|
|||||||
if (loop && file_exists(d_path)) // Contains loop/etc. information file
|
if (loop && file_exists(d_path)) // Contains loop/etc. information file
|
||||||
{
|
{
|
||||||
QStringList lines = ao_app->read_file(d_path).split("\n");
|
QStringList lines = ao_app->read_file(d_path).split("\n");
|
||||||
|
bool seconds_mode = false;
|
||||||
foreach (QString line, lines) {
|
foreach (QString line, lines) {
|
||||||
QStringList args = line.split("=");
|
QStringList args = line.split("=");
|
||||||
if (args.size() < 2)
|
if (args.size() < 2)
|
||||||
continue;
|
continue;
|
||||||
QString arg = args[0].trimmed();
|
QString arg = args[0].trimmed();
|
||||||
|
if (arg == "seconds") {
|
||||||
|
if (args[1].trimmed() == "true") {
|
||||||
|
seconds_mode = true; // Use new epic behavior
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
float sample_rate;
|
float sample_rate;
|
||||||
BASS_ChannelGetAttribute(newstream, BASS_ATTRIB_FREQ, &sample_rate);
|
BASS_ChannelGetAttribute(newstream, BASS_ATTRIB_FREQ, &sample_rate);
|
||||||
@ -77,8 +85,15 @@ QString AOMusicPlayer::play(QString p_song, int channel, bool loop,
|
|||||||
int num_channels = 2;
|
int num_channels = 2;
|
||||||
|
|
||||||
// Calculate the bytes for loop_start/loop_end to use with the sync proc
|
// Calculate the bytes for loop_start/loop_end to use with the sync proc
|
||||||
QWORD bytes = static_cast<QWORD>(args[1].trimmed().toUInt() *
|
QWORD bytes;
|
||||||
sample_size * num_channels);
|
if (seconds_mode) {
|
||||||
|
bytes =
|
||||||
|
BASS_ChannelSeconds2Bytes(newstream, args[1].trimmed().toDouble());
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
bytes = static_cast<QWORD>(args[1].trimmed().toUInt() * sample_size *
|
||||||
|
num_channels);
|
||||||
|
}
|
||||||
if (arg == "loop_start")
|
if (arg == "loop_start")
|
||||||
loop_start[channel] = bytes;
|
loop_start[channel] = bytes;
|
||||||
else if (arg == "loop_length")
|
else if (arg == "loop_length")
|
||||||
|
Loading…
Reference in New Issue
Block a user