Загрузка данных


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')