def test_audios_read_yaml(self): values = [ V1Event( timestamp=dt_parser.parse("2018-12-11 10:24:57"), audio=V1EventAudio(sample_rate=1.1, num_channels=2, length_frames=2, path="test"), step=12, ), V1Event( timestamp=dt_parser.parse("2018-12-11 10:25:57"), audio=V1EventAudio( sample_rate=1.11, num_channels=22, length_frames=22, path="test", content_type="wav", ), step=13, ), V1Event( timestamp=dt_parser.parse("2018-12-11 10:26:57"), audio=V1EventAudio(path="testwave", content_type="wav"), step=14, ), ] events = V1Events.read( name="foo", kind="audio", data=os.path.abspath( "tests/fixtures/polyboard/audio/audio_events.plx"), ) assert events.name == "foo" assert len(events.df.values) == 3 for i in range(3): assert events.get_event_at(i).to_dict() == values[i].to_dict()
def audio(asset_path: str, tensor, sample_rate=44100, asset_rel_path: str = None): if not np: logger.warning(NUMPY_ERROR_MESSAGE) return UNKNOWN tensor = to_np(tensor) tensor = tensor.squeeze() if abs(tensor).max() > 1: print("warning: audio amplitude out of range, auto clipped.") tensor = tensor.clip(-1, 1) assert tensor.ndim == 1, "input tensor should be 1 dimensional." tensor_list = [int(32767.0 * x) for x in tensor] import wave import struct check_or_create_path(asset_path, is_dir=False) wave_write = wave.open(asset_path, "wb") wave_write.setnchannels(1) wave_write.setsampwidth(2) wave_write.setframerate(sample_rate) tensor_enc = b"" for v in tensor_list: tensor_enc += struct.pack("<h", v) wave_write.writeframes(tensor_enc) wave_write.close() return V1EventAudio( sample_rate=sample_rate, num_channels=1, length_frames=len(tensor_list), path=asset_rel_path or asset_path, content_type="audio/wav", )
def audio_path( from_path: str, asset_path: str, content_type=None, asset_rel_path: str = None ) -> V1EventAudio: copy_file_path(from_path, asset_path) return V1EventAudio(path=asset_rel_path or asset_path, content_type=content_type)
def audio_path(from_path: str, asset_path: str, content_type=None) -> V1EventAudio: check_or_create_path(asset_path, is_dir=False) shutil.copy(from_path, asset_path) return V1EventAudio(path=asset_path, content_type=content_type)