Дмитрий
ДмитрийFeb. 28, 2019, 10:14 a.m.

Opening mp3 files using the audiere library

The audiere library allows you to work with audio files of various formats (wav, mp3, etc.). To work, we need the files audiere.h, audiere.lib, audiere.dll. h-file is included in the program code

#include "audiere.h"

lib-file is linked to .pro

LIBS += audiere.lib

dll we drag behind the program.
In RuNet it is easy to find information on how to play sound with it. But there is absolutely no information on how to get audio data for further processing. Therefore, I will write, especially since it is quite simple.


1 open file

    QString name = "D:/qtProg/audioprocessor/test2.mp3"; 
    name.replace("/","\\");
    SampleSourcePtr source;
    source = OpenSampleSource( name.toLocal8Bit() ); 
    if(!source)
    {
        ui->statusBar->showMessage("файл не открыт");
        return;
    }
    else
    {
        ui->statusBar->showMessage(name);
    }

2 read audio parameters

    int ccount; // число каналов
    int samplerate; // частота дискретизации
    SampleFormat format; // формат данных

    source->getFormat(ccount, samplerate, format);
    int l = source->getLength(); // число отсчётов одного канала

For typical audio recordings, the number of channels is two, single-channel recordings are quite common, I have not seen others, but it should work on the same principle. Note that the number of samples obtained with getLength() corresponds to one channel. Sampling frequency (if you don't know what it is, check out the Kotelnikov theorem or the Nyquist theorem). Format - determines the number of bits that encode one sample (usually 16).

3 create buffer and suitable storage

    int w = 256; // размер временного окна
    qint16 buf[w*ccount];

    QVector<qint16> data; // хранилище данных для одного канала

4 read data

    int row = l/w; // число временных фрагментов

    for(int j = 0; j < row; j++)
    {
        source->read(w, buf); // считывание фрагмента
        for(int i=0; i<w; i++)
        {
            data.append(buf[i*ccount]);
        }
    }
    source->read(w, buf); // считывание последнего фрагмента
    for(int i=0; i < l%w; i++)
    {
        data.append(buf[i*ccount]);
    }

Now the extracted data can be processed...
The text of the program can be downloaded here

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

Evgenii Legotckoi
  • Feb. 28, 2019, 3:27 p.m.
  • (edited)

Добрый день, Дмитрий.

Спасибо за статью. Единственный момент, пожалуйста, поместите статью под кат, то есть отделите большую часть статьи разделителем контента, это одна из кнопок в тулбаре редактора. Она отделяет превью статьи в ленте от остальной части контента.

Ещё раз спасибо.

Comments

Only authorized users can post comments.
Please, Log in or Sign up
AD

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:50points,
  • Rating points-4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:80points,
  • Rating points4
m

C ++ - Test 004. Pointers, Arrays and Loops

  • Result:20points,
  • Rating points-10
Last comments
ИМ
Игорь МаксимовNov. 22, 2024, 7:51 p.m.
Django - Tutorial 017. Customize the login page to Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Evgenii Legotckoi
Evgenii LegotckoiOct. 31, 2024, 9:37 p.m.
Django - Lesson 064. How to write a Python Markdown extension Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
A
ALO1ZEOct. 19, 2024, 3:19 p.m.
Fb3 file reader on Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь МаксимовOct. 5, 2024, 2:51 p.m.
Django - Lesson 064. How to write a Python Markdown extension Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas5July 5, 2024, 6:02 p.m.
QML - Lesson 016. SQLite database and the working with it in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Now discuss on the forum
Evgenii Legotckoi
Evgenii LegotckoiJune 24, 2024, 10:11 p.m.
добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
t
tonypeachey1Nov. 15, 2024, 2:04 p.m.
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
NSProject
NSProjectJune 4, 2022, 10:49 a.m.
Всё ещё разбираюсь с кешем. В следствии прочтения данной статьи. Я принял для себя решение сделать кеширование свойств менеджера модели LikeDislike. И так как установка evileg_core для меня не была возможна, ибо он писался…
9
9AnonimOct. 25, 2024, 4:10 p.m.
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…

Follow us in social networks