Изменение скорости mp3 в Qt и C ++ [QMediaPlayer]

Я пытаюсь разработать небольшое приложение, в котором вы можете загрузить mp3-файл и воспроизводить его с переменной скоростью! (Я знаю, что это уже существует :-))

Я использую Qt и C ++. У меня уже есть базовый проигрыватель, но я застрял на скорости, потому что я хочу плавно менять скорость (как в Mixxx), не останавливая воспроизведение! QMediaPlayer всегда останавливается, если я изменяю значение, и создает разрыв в звуке. Также я не хочу, чтобы поле изменилось!

Я уже нашел что-то под названием «SoundTouch», но теперь я совершенно не знаю, что с ним делать, как обрабатывать мои mp3-данные и как передать их в плеер! Библиотека «SoundTouch» способна делать то, что я хочу, я понял это из примеров на домашняя страница.

  • Как мне импортировать файл mp3, чтобы я мог обработать его с помощью функций SoundTouch
  • Как воспроизвести вывод из функции SoundTouch? (Возможно, QMediaPlayer справится с этой задачей?)
  • Как это делается вживую? Я должен сделать какой-то поток, я думаю? Так что я могу изменить скорость во время игры и продолжать играть без перерывов. Графически в моей голове это должно быть что-то, что находится между данными и проигрывателем, где все данные должны проходить в реальном времени, с небольшим буфером (20-50 мс или около того), чтобы избежать пробелов при обработке будущих данных.

Любая помощь приветствуется! Я также открыт для любого другого решения тогда «SoundTouch», пока я могу оставаться с Qt / C ++!

(Второе: я хочу просмотреть обзор формы волны, а также ее движущуюся часть (вокруг фактического положения песни), поэтому я мог бы также использовать подсказки о том, как получить данные формы сигнала)

Заранее спасибо!

1

Решение

На данный момент (Qt 5.5) это невозможно сделать только с QMediaPlayer. Вам нужно сделать следующее:

  • Декодируйте аудио, используя GStreamer, FFMpeg или (новый) QAudioDecoder: http://doc.qt.io/qt-5/qaudiodecoder.html — это даст вам сырой поток PCM;

  • Примените SoundTouch или другую библиотеку к этим необработанным данным, чтобы изменить высоту звука. Если GPL в порядке, посмотрите на http://nsound.sourceforge.net/examples/index.html, если вы разрабатываете проприетарные вещи, STK может быть лучшим выбором: https://ccrma.stanford.edu/software/stk/

  • Выведите измененные данные на аудиоустройство с помощью QAudioOutput.

Эта стратегия максимально использует Qt и дает вам лучшее покрытие платформы (вы все равно потеряете Android, поскольку он не поддерживает QAudioOutput)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]