aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/Input/wildmidi/decoder_wildmidi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/Input/wildmidi/decoder_wildmidi.cpp')
-rw-r--r--src/plugins/Input/wildmidi/decoder_wildmidi.cpp19
1 files changed, 12 insertions, 7 deletions
diff --git a/src/plugins/Input/wildmidi/decoder_wildmidi.cpp b/src/plugins/Input/wildmidi/decoder_wildmidi.cpp
index f29d60fef..c11fc0fbc 100644
--- a/src/plugins/Input/wildmidi/decoder_wildmidi.cpp
+++ b/src/plugins/Input/wildmidi/decoder_wildmidi.cpp
@@ -26,12 +26,16 @@ DecoderWildMidi::DecoderWildMidi(const QString &path) : Decoder()
{
m_path = path;
midi_ptr = 0;
+ m_sample_rate = 0;
}
DecoderWildMidi::~DecoderWildMidi()
{
if(midi_ptr)
+ {
+ WildMidiHelper::instance()->removePtr(midi_ptr);
WildMidi_Close(midi_ptr);
+ }
}
bool DecoderWildMidi::initialize()
@@ -43,20 +47,21 @@ bool DecoderWildMidi::initialize()
qWarning("DecoderWildMidi: initialization failed");
return false;
}
-
-
+ WildMidiHelper::instance()->readSettings();
midi_ptr = WildMidi_Open (m_path.toLocal8Bit());
+
if(!midi_ptr)
{
qWarning("DecoderWildMidi: unable to open file");
return false;
}
- _WM_Info *wm_info = WildMidi_GetInfo(midi_ptr);
+ WildMidiHelper::instance()->addPtr(midi_ptr);
- m_totalTime = (qint64)wm_info->approx_total_samples / 48;
-
- configure(48000, 2, Qmmp::PCM_S16LE);
+ m_sample_rate = WildMidiHelper::instance()->sampleRate();
+ _WM_Info *wm_info = WildMidi_GetInfo(midi_ptr);
+ m_totalTime = (qint64)wm_info->approx_total_samples * 1000 / WildMidiHelper::instance()->sampleRate();
+ configure(m_sample_rate, 2, Qmmp::PCM_S16LE);
qDebug("DecoderWildMidi: initialize succes");
return true;
}
@@ -68,7 +73,7 @@ qint64 DecoderWildMidi::totalTime()
void DecoderWildMidi::seek(qint64 pos)
{
- ulong sample = ulong(pos*48);
+ ulong sample = (ulong)m_sample_rate * pos / 1000;
WildMidi_FastSeek(midi_ptr, &sample);
}