import struct
import sys
def convert_s16_to_iec958(in_path, out_path):
print(f"Конвертация {in_path} -> {out_path}...")
with open(in_path, 'rb') as f_in, open(out_path, 'wb') as f_out:
while True:
# Читаем по одному 16-битному сэмплу (2 байта)
data = f_in.read(2)
if not data or len(data) < 2:
break
# Распаковываем s16le
sample = struct.unpack('<h', data)[0]
# Сдвигаем 16-битное аудио в нужную драйверу i.MX позицию субфрейма.
# В IEC958_SUBFRAME_LE полезные данные PCM занимают биты [12:27].
# Также выставляем бит валидности (обычно это маска или сдвиг).
iec958_subframe = (sample & 0xFFFF) << 12
# Записываем как 32-битное слово (4 байта, iec_subframe_le)
f_out.write(struct.pack('<I', iec958_subframe))
print("Готово!")
if __name__ == "__main__":
convert_s16_to_iec958('output.raw', 'output_spdif.raw')