Можно ли в Python создавать бинарные файлы? Конечно можно.
Для этого в Python есть следующие инструменты:
▫️ тип данных bytes и bytearray
▫️ открытие файла в режиме wb (write binary) или rb (read binary)
▫️ модуль struct
Про модуль struct поговорим в первую очередь.
Файл в формате JSON или Yaml внутри себя содержит разметку данных. Всегда можно определить где список начался а где закончился. Где записана строка а где словарь. То есть формат записи данных содержит в себе элементы разметки данных.
В binary-файле данные не имеют визуальной разметки. Это просто байты, записанные один за другим. Правила записи и чтения находятся вне файла.
Модуль struct как раз и помогает с организацией данных в таком файле с помощью определения форматов записи для разных частей файла.
Модуль struct преобразует Python-объекты в массив байт, готовый к записи в файл и имеющий определённый вид.
Для этого всегда следует указывать формат преобразования (или, как оно здесь называется - запаковки).
Формат нужен для того, чтобы выделить достаточное количество байт для записи конкретного типа объекта. В последствии с помощью того же формата будет производиться чтение.
При этом следует помнить что мы говорим о типах языка С а не Python.
Именно формат определяет, что записано в конкретном месте файла, число, строка или что-то еще.
Вот какие токены формата у нас есть.
Помимо этого, первым символом можно указать порядок байтов. На разных системах одни и те же типы данных могут записываться по-разному, поэтому желательно указать конкретный способ из доступных. Если этого не сделать, то используется символ '@', то есть нативный для текущей системы.
В строке формата мы пишем в каком порядке и какие типы собираемся преобразовать в байты.
Запакуем в байты простое число, токен "i".
>>> import struct
>>> struct.pack('=i', 10)
b'\n\x00\x00\x00'
Теперь несколько float, при этом нужно передавать элементы не массивом а последовательностью аргументов.
>>> struct.pack('=fff', 1.0, 2.5, 4.1)
b'\x00\x00\x80?\x00\x00 @33\x83@'
Вместо нескольких токенов можно просто указать нужное количество элементов перед одним токеном, результат будет тот же.
>>> struct.pack('=3f', 1.0, 2.5, 4.1)
b'\x00\x00\x80?\x00\x00 @33\x83@'
Теперь запакуем разные типы
>>> data = struct.pack('=fiQ', 1.0, 4, 100500)
я запаковал типы float, int и unsigned long long (очень большой int, на 8 байт)
b'\x00\x00\x80?\x04\x00\x00...'
Распаковка происходит аналогично, но нужно указать тот же формат, который использовался при запаковке. Результат возвращается всегда в виде кортежа.
>>> struct.unpack('=fiQ', data)
(1.0, 4, 100500)
Как видите, ничего страшного!
#lib#basic
#Sinfonia45 #Haydn#ConradVanAlphen
La Sinfonía n.º 45 en fa sostenido menor, Hoboken I/45, conocida como Sinfonía de los adioses, es una sinfonía del austríaco Joseph Haydn, compuesta en 1772.
Fue escrita para el patrón de Haydn, el príncipe Nikolaus Esterházy, durante una estancia en la que Haydn y la corte de músicos permanecieron en el palacio de verano, en Eszterháza. La estancia fue más larga de lo esperado y los músicos en su mayoría fueron obligados a mover a sus mujeres en casa, en Eisenstadt, por lo que en el último movimiento de la sinfonía, Haydn instó sutilmente a su patrón a dejarles volver a casa. Durante el adagio final cada músico deja de tocar, apaga la vela de su atril y se va en orden, dejando al final solo dos violines tocados con sordina (tocados por el propio Haydn y el concertino, Alois Luigi Tomasini).
La sinfonía consta de cuatro movimientos:
🎵 Allegro assai, 3/4
🎵 Adagio, 3/8
🎵 Menuet: Allegretto, 3/4
🎵 Finale: Presto, 2/2 - Adagio, 3/8
El primer movimiento de la obra es un episodio turbulento en fa sostenido menor, una tonalidad extremadamente inusual para usar en esa parte de la obra. Comienza a la manera típica del periodo Sturm und Drang de Haydn, con arpegios menores descendentes en los primeros violines junto con notas sincopadas en los segundos violines y acordes mantenidos en los vientos. El movimiento sigue la forma sonata, pero se desvía del modelo común en varias ocasiones. Aparte de estas desviaciones de la norma, el primer movimiento es "bastante difícil de ser percibido como revolucionario" y "no es tan intrépido, al contener un desarrollo que solo se aventura a los niveles de IV, II♭ y VI, además de la mediante y la tónica".
El segundo movimiento, lento en la mayor y en compás de 3/8 también está escrito en forma sonata. Comienza con una relajante melodía tocada por violines con sordina, representando un motivo que "tiene hipo". El ambiente gradualmente se vuelve más sombrío y meditabundo con la alternancia entre modos mayores y menores, asemejándose a pasajes de las últimas obras de Schubert. A continuación siguen una serie de suspensiones disonantes mantenidas durante varios compases, que son extendidas hasta una gran duración por Haydn mientras que el mismo material aparece en la recapitulación. James Webster siente la música como programática, expresando el añoro del hogar.
El siguiente minueto está en la tonalidad de fa sostenido mayor; su principal peculiaridad es que la cadencia final de cada sección está construida de manera que suena muy débil, creando una sensación de incompletitud.
El último movimiento empieza como es característico en Haydn, como un final rápido y en 2/2, escrito en forma sonata y en la tonalidad de la obra: fa sostenido menor. La intensidad rítmica se incrementa mediante el uso de bariolage al unísono en la parte del primer violín. La música finalmente alcanza el final de la recapitulación en un pasaje que suena como si la sinfonía acabara, pero de repente es interrumpida por una cadencia rota.
A continuación sigue una larga coda, como si de un segundo movimiento lento se tratara, que es extremadamente inusual en sinfonías clásicas y probablemente sonaría muy sorprendente para el Príncipe. Está escrito en compás de 3/8 y modula de la mayor a fa sostenido mayor, momento en el que los músicos van abandonando sus puestos. El final es una especie de anticlímax deliberado y se suele interpretar en un suave pianissimo.
Este adagio final incluye una curiosidad que no todo oyente es capaz de percibir al oír una grabación: varios músicos tienen solos pequeños justo antes de marcharse. El orden de salida es: primer oboe y segunda trompa (con solos), fagot (sin solo), segundo oboe y primera trompa (con solos), contrabajos (solo), violonchelos (sin solo), violines orquestales (con solos; músicos de primera silla no tocan), viola (sin solo). Los violines de primera silla se quedan para completar la obra.
@ClasicaAlAtardecer
#Sinfonía45 #Haydn#ConradVanAlphen
La Sinfonía n.º 45 en fa sostenido menor, Hoboken I/45, conocida como Sinfonía de los adioses, es una sinfonía del austríaco Joseph Haydn, compuesta en 1772.
Fue escrita para el patrón de Haydn, el príncipe Nikolaus Esterházy, durante una estancia en la que Haydn y la corte de músicos permanecieron en el palacio de verano, en Eszterháza. La estancia fue más larga de lo esperado y los músicos en su mayoría fueron obligados a mover a sus mujeres en casa, en Eisenstadt, por lo que en el último movimiento de la sinfonía, Haydn instó sutilmente a su patrón a dejarles volver a casa. Durante el adagio final cada músico deja de tocar, apaga la vela de su atril y se va en orden, dejando al final solo dos violines tocados con sordina (tocados por el propio Haydn y el concertino, Alois Luigi Tomasini).
La sinfonía consta de cuatro movimientos:
🎵 Allegro assai, 3/4
🎵 Adagio, 3/8
🎵 Menuet: Allegretto, 3/4
🎵 Finale: Presto, 2/2 - Adagio, 3/8
El primer movimiento de la obra es un episodio turbulento en fa sostenido menor, una tonalidad extremadamente inusual para usar en esa parte de la obra. Comienza a la manera típica del periodo Sturm und Drang de Haydn, con arpegios menores descendentes en los primeros violines junto con notas sincopadas en los segundos violines y acordes mantenidos en los vientos. El movimiento sigue la forma sonata, pero se desvía del modelo común en varias ocasiones. Aparte de estas desviaciones de la norma, el primer movimiento es "bastante difícil de ser percibido como revolucionario" y "no es tan intrépido, al contener un desarrollo que solo se aventura a los niveles de IV, II♭ y VI, además de la mediante y la tónica".
El segundo movimiento, lento en la mayor y en compás de 3/8 también está escrito en forma sonata. Comienza con una relajante melodía tocada por violines con sordina, representando un motivo que "tiene hipo". El ambiente gradualmente se vuelve más sombrío y meditabundo con la alternancia entre modos mayores y menores, asemejándose a pasajes de las últimas obras de Schubert. A continuación siguen una serie de suspensiones disonantes mantenidas durante varios compases, que son extendidas hasta una gran duración por Haydn mientras que el mismo material aparece en la recapitulación. James Webster siente la música como programática, expresando el añoro del hogar.
El siguiente minueto está en la tonalidad de fa sostenido mayor; su principal peculiaridad es que la cadencia final de cada sección está construida de manera que suena muy débil, creando una sensación de incompletitud.
El último movimiento empieza como es característico en Haydn, como un final rápido y en 2/2, escrito en forma sonata y en la tonalidad de la obra: fa sostenido menor. La intensidad rítmica se incrementa mediante el uso de bariolage al unísono en la parte del primer violín. La música finalmente alcanza el final de la recapitulación en un pasaje que suena como si la sinfonía acabara, pero de repente es interrumpida por una cadencia rota.
A continuación sigue una larga coda, como si de un segundo movimiento lento se tratara, que es extremadamente inusual en sinfonías clásicas y probablemente sonaría muy sorprendente para el Príncipe. Está escrito en compás de 3/8 y modula de la mayor a fa sostenido mayor, momento en el que los músicos van abandonando sus puestos. El final es una especie de anticlímax deliberado y se suele interpretar en un suave pianissimo.
Este adagio final incluye una curiosidad que no todo oyente es capaz de percibir al oír una grabación: varios músicos tienen solos pequeños justo antes de marcharse. El orden de salida es: primer oboe y segunda trompa (con solos), fagot (sin solo), segundo oboe y primera trompa (con solos), contrabajos (solo), violonchelos (sin solo), violines orquestales (con solos; músicos de primera silla no tocan), viola (sin solo). Los violines de primera silla se quedan para completar la obra.
@ClasicaAlAtardecer