Как читать двоичные данные в R с битовой глубиной 24 readBin - PullRequest
0 голосов
/ 04 мая 2018

У меня есть файл двоичных данных (содержащий аудиоданные) с расширением .w.

Я открыл файл подключения, используя следующий код в R;

file1 <- file("filename.w", "rb") # открытие файлового соединения с двоичным файлом .w и указание 'rb', чтение двоичного файла

file2 <- readBin(file1, double(), size = 3, endian = "big") # это в режиме двойного вектора.

Это дает мне ошибку

Error in readBin(file1, double(), size = 3, endian = "big") : size 3 is unknown on this machine"

Я выбрал размер 3, так как мне интересно читать с битовой глубиной 24. Я использовал преобразование 1 байт = 8 бит.

В справочных файлах readBin говорится, что переменная занимает всего 1,2,4,8 байта на элемент. Кто-нибудь, как я могу указать 3 байта? Или кто-то может помочь альтернативным способом прочитать этот двоичный файл в R (указав 24-битное значение).

Я пробовал файл с другим векторным режимом integer () вместо double (), но получаю ту же ошибку.

Моя цель - прочитать этот двоичный файл, извлечь его отдельные части, а затем записать в виде файла .wav.

1 Ответ

0 голосов
/ 04 мая 2018

Один из способов решения этой проблемы - сначала прочитать два байта, а затем добавить третий байт:

read3bytes <- function(file1) {
    first2 <- readBin(file1, "int", size = 2)
    third <- readBin(file1, "int", size = 1)

    # Shift the first two bytes one byte to the left, then add the third byte on
    bitwShiftL(first2, 8) + third
}
...