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
Добрый день, Дмитрий.
Спасибо за статью. Единственный момент, пожалуйста, поместите статью под кат, то есть отделите большую часть статьи разделителем контента, это одна из кнопок в тулбаре редактора. Она отделяет превью статьи в ленте от остальной части контента.
Ещё раз спасибо.