Версионность  UnoSDR

Posted on 2017-05-19 19:52:39

Строковый формат версии приложения на примере следующий - v1.0.9 Старшая цифра имеет больший вес. Расшифровывается строковой формат как v9 b1.0 - версия приложения номер 9, branch или ветка 1.0 , или v1.0.9 - сокращенная запись. Незначительные изменения увеличивают порядковый номер версии, например с v9 b1.0 на v10 b1.0 . Точность номера версии до единицы. Кроме того, если следующая версия не предполагает никаких изменений, кроме экстренного баг - фикса, номер версии не меняетя, а добавляется буква по алфавиту, например: v10a b1.0 ,   v10b b1.0 и т.д.

Значительные изменения в функционале тянут за собой изменение десятих долей номера бранча, например было v10 b1.0 стало v11 b1.1 Точность номера бранча до десятых. Глобальные изменения программы влекут за собой изменение номера бранча на единицу. Например было v11 b1.1 стало v1 b2.0 - как видно, при этом сбрасывается версия приложения до единицы.

 

Qt Creator переключение между файлами класса исходника и хедера

Posted on 2017-05-14 23:10:19

Что мне нравится в C++, так это разделение на файлы исходников и хедеров. Это очень помогает, когда нужно разобратся в незнакомом проекте. Файл хедера, как бы скелет класса. Если нужно посмотреть реализацию конкретного метода, просто переключаешься на файл исходников. 

Если ваш проект в Qt Creator  небольшой, то скорей всего у вас открыты ветки дерева исходников и хедеров. Но по мере разростания проекта, такая избыточность начинает мешать, тем более, что структура хедеров повторяет структуру исходников. В таком случае дерево хедеров лучше закрыть, а переключение между исходниками и хедерами осуществлять клавишей F4

Проверено, удобно! :)

Фиксируем ориентацию экрана Qt QML Android приложения

Posted on 2017-05-05 16:05:55

В процессе разработки приложения под андроид на Qt столкнулся с проблемой фиксации ориентации экрана приложения. Оказалось, что программно это сделать невозможно, так как qml свойство "Screen.orientation" доступно только для чтения. Но, есть обходной путь - редактирование манифеста.

В файле манифеста нужно найти строку  -  android:screenOrientation="unspecified", и поменять значение на нужное, например,  android:screenOrientation="sensorLandscape"

Пример чтения / записи wav файлов на Android Java

Posted on 2017-05-03 21:06:37

Возникла у меня задача чтения - записи wav файлов на android для тестированя работы алгоритма VAD - Voice Activity Detection. Так как зачастую wav файлы содержат несжатые PCM данные, то для получения семплов можно просто побайтно читать файл. Ниже показан пример кода, который читает wav файл в массив семплов, уменьшает громкость в четыре раза, и записывает новые данные в другой wav файл.

File rfile = new File(Environment.getExternalStorageDirectory() + File.separator + "music.wav");
File wfile = new File(Environment.getExternalStorageDirectory() + File.separator + "music2.wav");

byte[] header = new byte[44];
byte[] byteInput = new byte[(int)rfile.length() - 44];
short[] input = new short[(int)(byteInput.length / 2f)];

try{
    FileInputStream fis = new FileInputStream(rfile);
    fis.read(header, 0, header.length);
    fis.read(byteInput, 44, byteInput.length - 45);
    ByteBuffer.wrap(byteInput).order(ByteOrder.LITTLE_ENDIAN).asShortBuffer().get(input);
}catch(Exception e){
    e.printStackTrace();
}

ByteBuffer outBuf = ByteBuffer.allocate(2*input.length);
outBuf.order(ByteOrder.LITTLE_ENDIAN);

for (int i = 0; i < input.length; i++)
{
    short sample = input[i]/4;
    outBuf.putShort(sample);
}

try{
    FileOutputStream fos = new FileOutputStream(wfile);
    fos.write(header, 0, header.length);
    fos.write(outBuf.array(), 44, outBuf.array().length - 45);
    fos.flush();
    fos.close();
}catch(Exception e){
    e.printStackTrace();
}

Первые 44 байт wav файла - заголовок. Его читаем в отдельный массив header. Потом идут собственно сами семплы. Преобразование массива байтов в массив типа short делаем с помощью ByteBuffer. Далее каждый семпл делим на 4, и записываем итоговый массив в файл "music2.wav". Метаданные, частота дискретизации, длительность записи не поменялась, поэтому во второй файл применяем eader, считанный из первого файла.

First 1 2 3 4 5 6 7 8 9 10 11 12 13 Last