io.py 文件源码

python
阅读 29 收藏 0 点赞 0 评论 0

项目:sound_field_analysis-py 作者: QULab 项目源码 文件源码
def write_SSR_IRs(filename, time_data_l, time_data_r, wavformat="float"):
    """Takes two time signals and writes out the horizontal plane as HRIRs for the SoundScapeRenderer.
    Ideally, both hold 360 IRs but smaller sets are tried to be scaled up using repeat.

    Parameters
    ----------
    filename : string
       filename to write to
    time_data_l, time_data_l : io.ArraySignal
       ArraySignals for left/right ear
    wavformat : string
       wav file format to write. Either "float" or "int16"
    """
    equator_IDX_left = utils.nearest_to_value_logical_IDX(time_data_l.grid.colatitude, _np.pi / 2)
    equator_IDX_right = utils.nearest_to_value_logical_IDX(time_data_r.grid.colatitude, _np.pi / 2)

    IRs_left = time_data_l.signal.signal[equator_IDX_left]
    IRs_right = time_data_r.signal.signal[equator_IDX_right]

    if _np.mod(360 / IRs_left.shape[0], 1) == 0:
        IRs_left = _np.repeat(IRs_left, 360 / IRs_left.shape[0], axis=0)
    else:
        raise ValueError('Number of channels for left ear cannot be fit into 360.')
    if _np.mod(360 / IRs_right.shape[0], 1) == 0:
        IRs_right = _np.repeat(IRs_right, 360 / IRs_right.shape[0], axis=0)
    else:
        raise ValueError('Number of channels for left ear cannot be fit into 360.')

    IRs_to_write = utils.interleave_channels(IRs_left, IRs_right, style="SSR")
    data_to_write = utils.simple_resample(IRs_to_write, original_fs=time_data_l.signal.fs, target_fs=44100)

    # Fix SSR IR alignment stuff: left<>right flipped and 90 degree rotation
    data_to_write = _np.flipud(data_to_write)
    data_to_write = _np.roll(data_to_write, -90, axis=0)

    if wavformat == "float":
        sio.wavfile.write(filename, 44100, data_to_write.astype(_np.float32).T)
    elif wavformat == "int16":
        sio.wavfile.write(filename, 44100, (data_to_write * 32767).astype(_np.int16).T)
    else:
        raise TypeError("Format " + wavformat + "not known. Should be either 'float' or 'int16'.")
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号