Russian Qt Forum
Ноябрь 01, 2024, 02:57 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Декодировка и слив аудио файла в контейнер  (Прочитано 2864 раз)
Somni
Новичок

Offline Offline

Сообщений: 29


Просмотр профиля
« : Февраль 13, 2019, 19:14 »

Всем привет!
Как на Qt выполнить открытие файла по указанному адресу, декодировку и полученные звуки из файла (синусоиду) слить в контейнер, например в вектор?
Вот что мне удалось найти. С форматом *.wav тоже не получается.

QAudioFormat desiredFormat;
    desiredFormat.setChannelCount(2);
    desiredFormat.setCodec("audio/x-raw");
    desiredFormat.setSampleType(QAudioFormat::UnSignedInt);
    desiredFormat.setSampleRate(48000);
    desiredFormat.setSampleSize(16);
 
    QAudioDecoder *decoder = new QAudioDecoder(this);
    decoder->setAudioFormat(desiredFormat);
    decoder->setSourceFilename("D:\5.mp3");
 
    connect(decoder, SIGNAL(bufferReady()), this, SLOT(readBuffer()));
    decoder->start();
Пишет.
17:18:53: Запускается D:\Qt_Projects\build-AudioFile-Desktop_Qt_5_11_2_MSVC2017_64bit-Debug\debug\AudioFile...
MFAudioDecoderControl does not accept non-pcm audio format!
QObject::connect: No such slot MainWindow::readBuffer() in ..\AudioFile\mainwindow.cpp:31
QObject::connect: (receiver name: 'MainWindow')
Спасибо за ответы!
Записан
ssoft
Программист
*****
Offline Offline

Сообщений: 583


Просмотр профиля
« Ответ #1 : Февраль 13, 2019, 21:42 »

QObject::connect: No such slot MainWindow::readBuffer() in ..\AudioFile\mainwindow.cpp:31

Либо Q_OBLECT не написан в декларации класса, либо Q_SLOT не указан для метода readBuffer.
Записан
Somni
Новичок

Offline Offline

Сообщений: 29


Просмотр профиля
« Ответ #2 : Февраль 14, 2019, 14:05 »

Спасибо за ответ!
Вот мой код. Мои попытки. Что порекомендуете здесь поправить?

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QAudioFormat>
#include <QAudioDecoder>
#include <QVector>
#include <QMediaPlayer>
#include <QDir>
#include <QAudioOutput>
#include <QAudioInput>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{


    QFile inputFile;
    inputFile.setFileName("D:\\5.wav");
    inputFile.open(QIODevice::ReadOnly);
    qDebug() << inputFile.size();

    QAudioFormat format;
    // Set up the format, eg.
    format.setSampleRate(44100);
    format.setChannelCount(2);
    format.setSampleSize(16);
    format.setCodec("audio/pcm");
    format.setSampleType(QAudioFormat::SignedInt);

    /*
    QAudioDecoder *decoder = new QAudioDecoder(this);
    decoder->setAudioFormat(format);
    decoder->setSourceFilename("D:\\5.wav");
    QAudioBuffer ab;
    QVector<int> v;
    ab = decoder->read();
    //auto t = ab.
    qDebug() << decoder->duration();;
    qDebug() << ab.duration();
    */

    QAudioOutput *audio = new QAudioOutput(format, 0);
    audio->start(&inputFile);
    qDebug() << audio->bufferSize();

    /*
    //Это работает - воспороизведение аудио файла
    QMediaPlayer *player = new QMediaPlayer;
    player->setMedia(QUrl::fromLocalFile(QDir::toNativeSeparators("D:\\5.mp3")));
    player->setVolume(50);
    player->play();

    //Всё что ниже не работает
    QAudioFormat desiredFormat;
    desiredFormat.setChannelCount(2);
    //desiredFormat.setCodec("audio/x-raw");
    desiredFormat.setCodec("audio/pcm");
    desiredFormat.setSampleType(QAudioFormat::UnSignedInt);
    desiredFormat.setSampleRate(48000);
    desiredFormat.setSampleSize(16);

    QAudioDecoder *decoder = new QAudioDecoder(this);
    decoder->setAudioFormat(desiredFormat);
    decoder->setSourceFilename("D:\\5.wav");

    connect(decoder, SIGNAL(bufferReady()), this, SLOT(readBuffer()));
    decoder->start();
    QAudioBuffer ab;
    QVector<int> v;
    ab = decoder->read();
    //auto t = ab.
    qDebug() << decoder->duration();;
    qDebug() << ab.duration();
*/
}
Записан
ViTech
Гипер активный житель
*****
Offline Offline

Сообщений: 858



Просмотр профиля
« Ответ #3 : Февраль 14, 2019, 15:41 »

Вот мой код. Мои попытки. Что порекомендуете здесь поправить?

Для начала оформление сообщений (использовать теги [code][/code]). Затем лучше прикрепить к сообщению тестовый проект в архиве.
« Последнее редактирование: Февраль 14, 2019, 16:38 от ViTech » Записан

Пока сам не сделаешь...
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 23.