diff --git a/soundfile.py b/soundfile.py index 8e0b90f..d1eed6f 100644 --- a/soundfile.py +++ b/soundfile.py @@ -31,6 +31,7 @@ enum { + SFC_GET_LOG_INFO = 0x1001, SFC_GET_FORMAT_INFO = 0x1028, SFC_GET_FORMAT_MAJOR_COUNT = 0x1030, @@ -691,6 +692,14 @@ def __init__(self, file, mode='r', samplerate=None, channels=None, _errorcode = property(lambda self: _snd.sf_error(self._file)) """A pending sndfile error code.""" + @property + def extra_info(self): + """Retrieve the log string generated when opening the file.""" + info = _ffi.new("char[]", 2**14) + _snd.sf_command(self._file, _snd.SFC_GET_LOG_INFO, + info, _ffi.sizeof(info)) + return _ffi.string(info).decode() + # avoid confusion if something goes wrong before assigning self._file: _file = None diff --git a/tests/test_pysoundfile.py b/tests/test_pysoundfile.py index 81a40c1..4d7636e 100644 --- a/tests/test_pysoundfile.py +++ b/tests/test_pysoundfile.py @@ -584,6 +584,10 @@ def test__repr__(sf_stereo_r): "endian='FILE')").format(sf_stereo_r) +def test_extra_info(sf_stereo_r): + assert 'WAVE_FORMAT_IEEE_FLOAT' in sf_stereo_r.extra_info + + def test_mode_should_be_in_write_mode(sf_stereo_w): assert sf_stereo_w.mode == 'w' assert len(sf_stereo_w) == 0