Фиксируем ориентацию экрана 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, считанный из первого файла.

Установка Qt5 на Raspberry Pi Jessie

Posted on 2017-04-27 21:47:43

Каких то пол года - год назад установка Qt5 на Raspberry Pi доставляла боль - ведь в стандартном репозитарии доступна была только Qt4, и что бы использовать Qt 5, нужно было компилировать из исходников, а это занимало не много не мало времени - сутки, из - за достаточно слабого процессора малины.

Но на дворе на данный момент существует уже Qt 5.8.0. Так что Qt 4 окончательно устарел. И как вы догадались, теперь не нужно ждать завершения компиляции, достаточно в терминале набрать пару строк:

sudo apt-get install qt5-default
sudo apt-get install qtcreator 

Приятной разработки!

Android. Как получить доступ к папке data без root привилегий

Posted on 2017-04-22 12:35:34

Стандартные android файловые менеджеры не позволяют зайти в папку data без root привилегий. Но это часто требуется при разработке. Если у вас установлена Android Studio, то получить доступ к папке можно с помощью утилиты "adb".

Подключите свой телефон или планшет к компьютеру. Введите следующие команды:

adb shell
cd /data/нужный_путь

Что бы получить файл пишем:

adb pull /data/путь/имя_файла D:/путь_куда_сохранить

Вот и все.

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