2015-12-04 2 views
1

Я пытаюсь понять, как я могу генерировать сигнал из аудио (или видео) файла для отображения пользователю.Создание формы сигнала из аудио (или видео) файла?

Я уже давно занимаюсь поиском в Интернете и не могу определить, возможно ли это в Qt, не используя что-то вроде FFmpeg. Я видел все эти классы: QMediaPlayer, QMediaContent, QMediaResource, QAudioProbe и экспериментировал с Qt Media Player Example, но просто не вижу, где я могу получить доступ к фактическому звуковому буферу.

Так что у меня 2 вопроса:

  1. Это то, что я хочу сделать, возможно даже без библиотек 3 участника?
  2. Если это возможно, может какой-то душа обрисовать то, что мне нужно прочитать и понять, для того, чтобы получить доступ к аудиоданным

Я попытался предложения от этого вопроса (Audio visualization with QMediaPlayer), но результат audioProbe->setSource(player) является всегда false, и метод processBuffer никогда не вызывается.

audioProbe = new QAudioProbe(this); 
bool success = audioProbe->setSource(player); 
qDebug() << success; 

connect(audioProbe, SIGNAL(audioBufferProbed(QAudioBuffer)), this, SLOT(processBuffer(QAudioBuffer))); 

Update: Добавление некоторые дополнительные детали в надежде на разъяснении вещи.

  • Для тестирования/обучения я использую Media Player Example, который поставляется с Qt, поэтому он правильно установлен Q_OBJECT и т.д.

  • Для аудио, я тестировал как с .mp3 и .wav файлов. FWIW, то player пример не будет воспроизводить видео по какой-то причине (.mp4, .avi были протестированы)

  • player в коде QMediaPlayer - который наследует от QMediaObject. Код примера для класса Player: here. Я добавил код (в исходном комментарии выше) сразу после создания экземпляра игрока. Я также попытался добавить его после загрузки носителя.

  • Я пробовал объявить свой слот первым как закрытый, а затем публично - так или иначе, он никогда не называется.

Разочарование, что такая простая вещь настолько сложна.

+0

, какая платформа вы? – phyatt

ответ

1

Прохождение маршрута «без внешней библиотеки», скорее всего, приведет к большему количеству головной боли и дополнительной работе, чем это необходимо. Другим преимуществом перехода с установленной библиотекой является то, что вы не будете привязаны к одному файловому формату, так как не все форматы хранят свои данные одинаково. Если аудиоформат несжатый (wav или другой), вы можете прочитать заголовок, пока не дойдете до блока данных. Ответ на этот вопрос here подробно описывает это в C. Вы должны иметь возможность получить представление о формате файла, чтобы применить его на другом языке.

Вам нужно понять, сколько каналов находится в wav-файле, бит-глубине, а также частота дискретизации, прежде чем вы сможете сделать что-нибудь полезное для данных. Вся эта информация может быть захвачена из заголовка.

+0

Да, сырой звук - это сложнее, чем думают многие люди. Вы хотите, чтобы внешняя библиотека работала с ней постоянно. –

1

Оказалось, что 0Xне поддерживается на OSX - платформе, над которой я работаю. Занимался довольно долго («Qt while ...»), чтобы выведать эту информацию, поэтому я размещаю ее здесь явно.

Смотрите этот документ для получения подробной информации: Qt 5.5.0 Multimedia Backends