import 'dart:typed_data'; enum G711Type { uLaw, aLaw, } class G711Decoder { Uint8List g711Encode(Uint8List pcmData, G711Type g711Type) { List g711Data = []; for (int sample in pcmData) { int sign = (sample < 0) ? 0x80 : 0; int magnitude = (sample < 0) ? -sample : sample; int exponent = 7; while (magnitude < (1 << exponent) && exponent > 0) { exponent--; } int mantissa = (magnitude >> (exponent - 4)) & 0x0F; if (g711Type == G711Type.uLaw) { // μ-law encoding int value = ~(sign | ((exponent << 4) & 0x70) | (mantissa >> 4)); g711Data.add(value & 0xFF); } else { // A-law encoding int value = sign | ((exponent << 4) & 0x70) | (mantissa >> 4); g711Data.add(value & 0xFF); } } return Uint8List.fromList(g711Data); } }