fix: normalize ambience loudness for v0.2.5
@@ -0,0 +1,152 @@
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) ... {
|
||||
"measurementFilter": "ebur128=peak=true",
|
||||
"targetLUFS": -32.5,
|
||||
"truePeakCeilingDBTP": -6.0,
|
||||
"spreadLU": 2.0,
|
||||
"files": {
|
||||
"cafe": {
|
||||
"integratedLUFS": -31.9,
|
||||
"truePeakDBTP": -17.6,
|
||||
"loudnessRangeLU": 0.5,
|
||||
"thresholdLUFS": -41.9
|
||||
},
|
||||
"department": {
|
||||
"integratedLUFS": -32.1,
|
||||
"truePeakDBTP": -16.2,
|
||||
"loudnessRangeLU": 4.2,
|
||||
"thresholdLUFS": -42.1
|
||||
},
|
||||
"mall": {
|
||||
"integratedLUFS": -32.0,
|
||||
"truePeakDBTP": -11.7,
|
||||
"loudnessRangeLU": 1.4,
|
||||
"thresholdLUFS": -42.0
|
||||
},
|
||||
"market": {
|
||||
"integratedLUFS": -32.8,
|
||||
"truePeakDBTP": -6.6,
|
||||
"loudnessRangeLU": 6.5,
|
||||
"thresholdLUFS": -42.8
|
||||
},
|
||||
"rain": {
|
||||
"integratedLUFS": -33.5,
|
||||
"truePeakDBTP": -13.1,
|
||||
"loudnessRangeLU": 8.4,
|
||||
"thresholdLUFS": -43.5
|
||||
},
|
||||
"street": {
|
||||
"integratedLUFS": -31.8,
|
||||
"truePeakDBTP": -9.5,
|
||||
"loudnessRangeLU": 4.6,
|
||||
"thresholdLUFS": -41.8
|
||||
},
|
||||
"subway": {
|
||||
"integratedLUFS": -31.5,
|
||||
"truePeakDBTP": -15.3,
|
||||
"loudnessRangeLU": 4.9,
|
||||
"thresholdLUFS": -41.5
|
||||
},
|
||||
"theater": {
|
||||
"integratedLUFS": -31.9,
|
||||
"truePeakDBTP": -15.4,
|
||||
"loudnessRangeLU": 1.0,
|
||||
"thresholdLUFS": -41.9
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='cafe') ... FAIL
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='department') ... FAIL
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='mall') ... FAIL
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='market') ... FAIL
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='rain') ... FAIL
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='street') ... FAIL
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='subway') ... FAIL
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='theater') ... FAIL
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) ... FAIL
|
||||
test_manifest_records_linear_gain_and_exact_ebur128_measurements (test_loudness_audio.FinalLoudness.test_manifest_records_linear_gain_and_exact_ebur128_measurements) ... FAIL
|
||||
|
||||
======================================================================
|
||||
FAIL: test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='cafe')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 47, in test_final_wavs_meet_fixed_loudness_and_true_peak
|
||||
self.assertLessEqual(abs(row["integratedLUFS"] - TARGET), 0.2 + 1e-9)
|
||||
AssertionError: 0.6000000000000014 not less than or equal to 0.200000001
|
||||
|
||||
======================================================================
|
||||
FAIL: test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='department')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 47, in test_final_wavs_meet_fixed_loudness_and_true_peak
|
||||
self.assertLessEqual(abs(row["integratedLUFS"] - TARGET), 0.2 + 1e-9)
|
||||
AssertionError: 0.3999999999999986 not less than or equal to 0.200000001
|
||||
|
||||
======================================================================
|
||||
FAIL: test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='mall')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 47, in test_final_wavs_meet_fixed_loudness_and_true_peak
|
||||
self.assertLessEqual(abs(row["integratedLUFS"] - TARGET), 0.2 + 1e-9)
|
||||
AssertionError: 0.5 not less than or equal to 0.200000001
|
||||
|
||||
======================================================================
|
||||
FAIL: test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='market')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 47, in test_final_wavs_meet_fixed_loudness_and_true_peak
|
||||
self.assertLessEqual(abs(row["integratedLUFS"] - TARGET), 0.2 + 1e-9)
|
||||
AssertionError: 0.29999999999999716 not less than or equal to 0.200000001
|
||||
|
||||
======================================================================
|
||||
FAIL: test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='rain')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 47, in test_final_wavs_meet_fixed_loudness_and_true_peak
|
||||
self.assertLessEqual(abs(row["integratedLUFS"] - TARGET), 0.2 + 1e-9)
|
||||
AssertionError: 1.0 not less than or equal to 0.200000001
|
||||
|
||||
======================================================================
|
||||
FAIL: test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='street')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 47, in test_final_wavs_meet_fixed_loudness_and_true_peak
|
||||
self.assertLessEqual(abs(row["integratedLUFS"] - TARGET), 0.2 + 1e-9)
|
||||
AssertionError: 0.6999999999999993 not less than or equal to 0.200000001
|
||||
|
||||
======================================================================
|
||||
FAIL: test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='subway')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 47, in test_final_wavs_meet_fixed_loudness_and_true_peak
|
||||
self.assertLessEqual(abs(row["integratedLUFS"] - TARGET), 0.2 + 1e-9)
|
||||
AssertionError: 1.0 not less than or equal to 0.200000001
|
||||
|
||||
======================================================================
|
||||
FAIL: test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) (environment='theater')
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 47, in test_final_wavs_meet_fixed_loudness_and_true_peak
|
||||
self.assertLessEqual(abs(row["integratedLUFS"] - TARGET), 0.2 + 1e-9)
|
||||
AssertionError: 0.6000000000000014 not less than or equal to 0.200000001
|
||||
|
||||
======================================================================
|
||||
FAIL: test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 50, in test_final_wavs_meet_fixed_loudness_and_true_peak
|
||||
self.assertLessEqual(spread, 0.4 + 1e-9)
|
||||
AssertionError: 2.0 not less than or equal to 0.40000000100000005
|
||||
|
||||
======================================================================
|
||||
FAIL: test_manifest_records_linear_gain_and_exact_ebur128_measurements (test_loudness_audio.FinalLoudness.test_manifest_records_linear_gain_and_exact_ebur128_measurements)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_loudness_audio.py", line 59, in test_manifest_records_linear_gain_and_exact_ebur128_measurements
|
||||
self.assertEqual(settings[key], value)
|
||||
AssertionError: -32.0 != -32.5
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 2 tests in 0.837s
|
||||
|
||||
FAILED (failures=10)
|
||||
@@ -0,0 +1,87 @@
|
||||
test_correction_restarts_from_identical_source_and_records_both_passes (test_linear_normalization.LinearNormalization.test_correction_restarts_from_identical_source_and_records_both_passes) ... ERROR
|
||||
test_each_corrective_gain_is_peak_checked_before_conversion (test_linear_normalization.LinearNormalization.test_each_corrective_gain_is_peak_checked_before_conversion) ... ERROR
|
||||
test_final_peak_and_nonfinite_measurement_are_rejected (test_linear_normalization.LinearNormalization.test_final_peak_and_nonfinite_measurement_are_rejected) ...
|
||||
test_final_peak_and_nonfinite_measurement_are_rejected (test_linear_normalization.LinearNormalization.test_final_peak_and_nonfinite_measurement_are_rejected) (invalid={'integratedLUFS': -32.5, 'truePeakDBTP': -6.1, 'loudnessRangeLU': 1.0, 'thresholdLUFS': -42.5}) ... ERROR
|
||||
test_final_peak_and_nonfinite_measurement_are_rejected (test_linear_normalization.LinearNormalization.test_final_peak_and_nonfinite_measurement_are_rejected) (invalid={'integratedLUFS': nan, 'truePeakDBTP': -15, 'loudnessRangeLU': 1.0, 'thresholdLUFS': nan}) ... ERROR
|
||||
test_final_peak_and_nonfinite_measurement_are_rejected (test_linear_normalization.LinearNormalization.test_final_peak_and_nonfinite_measurement_are_rejected) (invalid={'integratedLUFS': -32.5, 'truePeakDBTP': inf, 'loudnessRangeLU': 1.0, 'thresholdLUFS': -42.5}) ... ERROR
|
||||
test_nonconvergence_is_bounded_and_fails (test_linear_normalization.LinearNormalization.test_nonconvergence_is_bounded_and_fails) ... ERROR
|
||||
test_parser_rejects_missing_nonfinite_or_partial_summary (test_linear_normalization.LinearNormalization.test_parser_rejects_missing_nonfinite_or_partial_summary) ... ok
|
||||
test_real_output_is_only_scalar_gain_with_pcm16_rounding (test_linear_normalization.LinearNormalization.test_real_output_is_only_scalar_gain_with_pcm16_rounding) ... ERROR
|
||||
test_unsafe_predicted_peak_is_rejected_before_volume_conversion (test_linear_normalization.LinearNormalization.test_unsafe_predicted_peak_is_rejected_before_volume_conversion) ... ERROR
|
||||
|
||||
======================================================================
|
||||
ERROR: test_correction_restarts_from_identical_source_and_records_both_passes (test_linear_normalization.LinearNormalization.test_correction_restarts_from_identical_source_and_records_both_passes)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_linear_normalization.py", line 52, in test_correction_restarts_from_identical_source_and_records_both_passes
|
||||
result = audio.normalize_pcm(self.pcm, self.target)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'normalize_pcm'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_each_corrective_gain_is_peak_checked_before_conversion (test_linear_normalization.LinearNormalization.test_each_corrective_gain_is_peak_checked_before_conversion)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_linear_normalization.py", line 68, in test_each_corrective_gain_is_peak_checked_before_conversion
|
||||
audio.normalize_pcm(self.pcm, self.target)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'normalize_pcm'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_final_peak_and_nonfinite_measurement_are_rejected (test_linear_normalization.LinearNormalization.test_final_peak_and_nonfinite_measurement_are_rejected) (invalid={'integratedLUFS': -32.5, 'truePeakDBTP': -6.1, 'loudnessRangeLU': 1.0, 'thresholdLUFS': -42.5})
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_linear_normalization.py", line 74, in test_final_peak_and_nonfinite_measurement_are_rejected
|
||||
with self.assertRaises(ValueError): audio.normalize_pcm(self.pcm, self.target)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'normalize_pcm'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_final_peak_and_nonfinite_measurement_are_rejected (test_linear_normalization.LinearNormalization.test_final_peak_and_nonfinite_measurement_are_rejected) (invalid={'integratedLUFS': nan, 'truePeakDBTP': -15, 'loudnessRangeLU': 1.0, 'thresholdLUFS': nan})
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_linear_normalization.py", line 74, in test_final_peak_and_nonfinite_measurement_are_rejected
|
||||
with self.assertRaises(ValueError): audio.normalize_pcm(self.pcm, self.target)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'normalize_pcm'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_final_peak_and_nonfinite_measurement_are_rejected (test_linear_normalization.LinearNormalization.test_final_peak_and_nonfinite_measurement_are_rejected) (invalid={'integratedLUFS': -32.5, 'truePeakDBTP': inf, 'loudnessRangeLU': 1.0, 'thresholdLUFS': -42.5})
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_linear_normalization.py", line 74, in test_final_peak_and_nonfinite_measurement_are_rejected
|
||||
with self.assertRaises(ValueError): audio.normalize_pcm(self.pcm, self.target)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'normalize_pcm'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_nonconvergence_is_bounded_and_fails (test_linear_normalization.LinearNormalization.test_nonconvergence_is_bounded_and_fails)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_linear_normalization.py", line 62, in test_nonconvergence_is_bounded_and_fails
|
||||
audio.normalize_pcm(self.pcm, self.target)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'normalize_pcm'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_real_output_is_only_scalar_gain_with_pcm16_rounding (test_linear_normalization.LinearNormalization.test_real_output_is_only_scalar_gain_with_pcm16_rounding)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_linear_normalization.py", line 31, in test_real_output_is_only_scalar_gain_with_pcm16_rounding
|
||||
result = audio.normalize_pcm(self.pcm, self.target)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'normalize_pcm'
|
||||
|
||||
======================================================================
|
||||
ERROR: test_unsafe_predicted_peak_is_rejected_before_volume_conversion (test_linear_normalization.LinearNormalization.test_unsafe_predicted_peak_is_rejected_before_volume_conversion)
|
||||
----------------------------------------------------------------------
|
||||
Traceback (most recent call last):
|
||||
File "/home/hermes/worktrees/find-word-v0.2.5/tests/python/test_linear_normalization.py", line 45, in test_unsafe_predicted_peak_is_rejected_before_volume_conversion
|
||||
audio.normalize_pcm(self.pcm, self.target)
|
||||
^^^^^^^^^^^^^^^^^^^
|
||||
AttributeError: module 'ambience_audio' has no attribute 'normalize_pcm'
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 7 tests in 0.277s
|
||||
|
||||
FAILED (errors=8)
|
||||
@@ -0,0 +1,26 @@
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.5
|
||||
|
||||
❯ tests/ambience.test.ts (9 tests | 1 failed) 911ms
|
||||
× v0.2.5 최종 WAV의 동일 ASR VAD gate는 requiredEmptyPassed=true여야 한다 5ms
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯
|
||||
|
||||
FAIL tests/ambience.test.ts > v0.2.5 최종 WAV의 동일 ASR VAD gate는 requiredEmptyPassed=true여야 한다
|
||||
Error: ENOENT: no such file or directory, open '.agent/evidence-v0.2.5/review-fixes/final-asr.json'
|
||||
❯ tests/ambience.test.ts:450:32
|
||||
448| // 수정본은 정확한 새 WAV로 같은 VAD gate를 통과해야 하며 과거 결과를 승계하지 않는다.
|
||||
449| it("v0.2.5 최종 WAV의 동일 ASR VAD gate는 requiredEmptyPassed=true여야 한다", ()…
|
||||
450| const screening = JSON.parse(readFileSync(".agent/evidence-v0.2.5/re…
|
||||
| ^
|
||||
451| const prior = JSON.parse(readFileSync(".agent/evidence-v0.2.5/final-…
|
||||
452| const bytes = readFileSync("public/ambience/manifest.json");
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯
|
||||
|
||||
|
||||
Test Files 1 failed (1)
|
||||
Tests 1 failed | 8 passed (9)
|
||||
Start at 11:02:07
|
||||
Duration 1.21s (tests 84%, setup 9%, transform 5%, import 1%)
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
test_correction_restarts_from_identical_source_and_records_both_passes (test_linear_normalization.LinearNormalization.test_correction_restarts_from_identical_source_and_records_both_passes) ... ok
|
||||
test_each_corrective_gain_is_peak_checked_before_conversion (test_linear_normalization.LinearNormalization.test_each_corrective_gain_is_peak_checked_before_conversion) ... ok
|
||||
test_final_peak_and_nonfinite_measurement_are_rejected (test_linear_normalization.LinearNormalization.test_final_peak_and_nonfinite_measurement_are_rejected) ... ok
|
||||
test_nonconvergence_is_bounded_and_fails (test_linear_normalization.LinearNormalization.test_nonconvergence_is_bounded_and_fails) ... ok
|
||||
test_parser_rejects_missing_nonfinite_or_partial_summary (test_linear_normalization.LinearNormalization.test_parser_rejects_missing_nonfinite_or_partial_summary) ... ok
|
||||
test_real_output_is_only_scalar_gain_with_pcm16_rounding (test_linear_normalization.LinearNormalization.test_real_output_is_only_scalar_gain_with_pcm16_rounding) ... ok
|
||||
test_unsafe_predicted_peak_is_rejected_before_volume_conversion (test_linear_normalization.LinearNormalization.test_unsafe_predicted_peak_is_rejected_before_volume_conversion) ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 7 tests in 1.092s
|
||||
|
||||
OK
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"files": 8,
|
||||
"bytes": 4608352
|
||||
}
|
||||
@@ -0,0 +1,63 @@
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) ... {
|
||||
"measurementFilter": "ebur128=peak=true",
|
||||
"targetLUFS": -32.5,
|
||||
"truePeakCeilingDBTP": -6.0,
|
||||
"spreadLU": 0.0,
|
||||
"files": {
|
||||
"cafe": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -18.2,
|
||||
"loudnessRangeLU": 0.5,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"department": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.6,
|
||||
"loudnessRangeLU": 4.2,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"mall": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.2,
|
||||
"loudnessRangeLU": 1.4,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"market": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -6.2,
|
||||
"loudnessRangeLU": 6.5,
|
||||
"thresholdLUFS": -42.4
|
||||
},
|
||||
"rain": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.1,
|
||||
"loudnessRangeLU": 8.4,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"street": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -10.2,
|
||||
"loudnessRangeLU": 4.6,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"subway": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.2,
|
||||
"loudnessRangeLU": 4.9,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"theater": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.1,
|
||||
"loudnessRangeLU": 1.0,
|
||||
"thresholdLUFS": -42.5
|
||||
}
|
||||
}
|
||||
}
|
||||
ok
|
||||
test_manifest_records_linear_gain_and_exact_ebur128_measurements (test_loudness_audio.FinalLoudness.test_manifest_records_linear_gain_and_exact_ebur128_measurements) ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 2 tests in 0.806s
|
||||
|
||||
OK
|
||||
@@ -0,0 +1,9 @@
|
||||
{"environmentId": "street", "sha256": "dace0969087539e5b67fb6fac11b759e81626574230ca7f8d2feb484753656a8", "language": "en", "languageProbability": 0.3020564913749695, "segments": [], "text": ""}
|
||||
{"environmentId": "mall", "sha256": "a0a135e319ed70f55b03c6e266fb047e53db8008277a6ba8b855a05a1b82662f", "language": "en", "languageProbability": 0.3020564913749695, "segments": [], "text": ""}
|
||||
{"environmentId": "theater", "sha256": "634fc25e8c4e9dcbab97688bc4c0ef9b0299cc7c4c921781a70740aabe46b900", "language": "en", "languageProbability": 0.3020564913749695, "segments": [], "text": ""}
|
||||
{"environmentId": "department", "sha256": "93e5c23bff2b19716dd21111746837a4df8c52d4b88c6874e57828d09ca5507e", "language": "en", "languageProbability": 0.3020564913749695, "segments": [], "text": ""}
|
||||
{"environmentId": "market", "sha256": "7178307c48c192ac396dcd3c880c377bf56b45e829b459b1feca9f986437e632", "language": "nn", "languageProbability": 0.09340465068817139, "segments": [{"id": 1, "seek": 0, "start": 10.45, "end": 12.45, "text": " Let's go, let's go, let's go.", "tokens": [50364, 961, 311, 352, 11, 718, 311, 352, 11, 718, 311, 352, 13, 50464], "avg_logprob": -0.7624037981033325, "compression_ratio": 1.3181818181818181, "no_speech_prob": 0.492189884185791, "words": null, "temperature": 0.0}], "text": " Let's go, let's go, let's go."}
|
||||
{"environmentId": "subway", "sha256": "e85cf77a9baa7560fb09966c4eda3b128b92647bc4c54c417a29b4e0f4ac129f", "language": "en", "languageProbability": 0.3020564913749695, "segments": [], "text": ""}
|
||||
{"environmentId": "cafe", "sha256": "864a81571a2e25a99d6408aa282570e7996c7ace432cf4f4f294677ea5bcad63", "language": "en", "languageProbability": 0.3020564913749695, "segments": [], "text": ""}
|
||||
{"environmentId": "rain", "sha256": "1842a717e6c77811cb6d6cb09d364e8ef644d50e6beb97d3d187c96e95d85784", "language": "en", "languageProbability": 0.3020564913749695, "segments": [], "text": ""}
|
||||
Required changed excerpts produced ASR segments; screening criterion failed.
|
||||
@@ -0,0 +1,34 @@
|
||||
Collecting pyloudnorm==0.2.0
|
||||
Using cached pyloudnorm-0.2.0-py3-none-any.whl.metadata (6.6 kB)
|
||||
Collecting soundfile==0.13.1
|
||||
Downloading soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl.metadata (16 kB)
|
||||
Collecting numpy==2.2.6
|
||||
Downloading numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.0/62.0 kB 1.9 MB/s eta 0:00:00
|
||||
Collecting scipy==1.15.3
|
||||
Downloading scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.0/62.0 kB 4.3 MB/s eta 0:00:00
|
||||
Collecting cffi==1.17.1
|
||||
Downloading cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.5 kB)
|
||||
Collecting pycparser==2.22
|
||||
Downloading pycparser-2.22-py3-none-any.whl.metadata (943 bytes)
|
||||
Collecting future==1.0.0
|
||||
Downloading future-1.0.0-py3-none-any.whl.metadata (4.0 kB)
|
||||
Using cached pyloudnorm-0.2.0-py3-none-any.whl (10 kB)
|
||||
Downloading soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl (1.3 MB)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.3/1.3 MB 34.8 MB/s eta 0:00:00
|
||||
Downloading numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.8 MB)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 16.8/16.8 MB 52.1 MB/s eta 0:00:00
|
||||
Downloading scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.7 MB)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 37.7/37.7 MB 43.6 MB/s eta 0:00:00
|
||||
Downloading cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (467 kB)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 467.2/467.2 kB 25.2 MB/s eta 0:00:00
|
||||
Downloading pycparser-2.22-py3-none-any.whl (117 kB)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 117.6/117.6 kB 8.7 MB/s eta 0:00:00
|
||||
Downloading future-1.0.0-py3-none-any.whl (491 kB)
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 491.3/491.3 kB 25.4 MB/s eta 0:00:00
|
||||
Installing collected packages: pycparser, numpy, future, scipy, cffi, soundfile, pyloudnorm
|
||||
Successfully installed cffi-1.17.1 future-1.0.0 numpy-2.2.6 pycparser-2.22 pyloudnorm-0.2.0 scipy-1.15.3 soundfile-0.13.1
|
||||
|
||||
[notice] A new release of pip is available: 24.0 -> 26.2.1
|
||||
[notice] To update, run: python3.11 -m pip install --upgrade pip
|
||||
@@ -0,0 +1,3 @@
|
||||
scripts/check-build.mjs 102ms
|
||||
tests/ambience.test.ts 154ms
|
||||
tests/build.test.ts 46ms
|
||||
@@ -0,0 +1,521 @@
|
||||
test_convert_format_fade_normalization_and_reproducibility (test_ambience_audio.AmbienceConversion.test_convert_format_fade_normalization_and_reproducibility)
|
||||
스테레오 48kHz 입력을 실제로 내려 섞고 길이·양끝·안전 피크를 확인한다. ... ok
|
||||
test_short_input_seek_retries_full_decode_without_padding_or_truncating (test_ambience_audio.AmbienceConversion.test_short_input_seek_retries_full_decode_without_padding_or_truncating) ... ok
|
||||
test_silence_fails_before_publishing (test_ambience_audio.AmbienceConversion.test_silence_fails_before_publishing)
|
||||
무음을 정상 현장 녹음으로 포장하지 않는다. ... ok
|
||||
test_actual_target_or_true_peak_violation_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_actual_target_or_true_peak_violation_preserves_prior_directory)
|
||||
manifest가 정상이라고 주장해도 별도 실측 위반은 공개하지 않는다. ... ok
|
||||
test_all_eight_assets_validated_before_publication (test_ambience_audio.AtomicPublication.test_all_eight_assets_validated_before_publication) ... ok
|
||||
test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem (test_ambience_audio.AtomicPublication.test_atomic_success_removes_stale_files_and_stages_notice_on_same_filesystem) ... ok
|
||||
test_conversion_cannot_override_approved_segment (test_ambience_audio.AtomicPublication.test_conversion_cannot_override_approved_segment) ... ok
|
||||
test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_conversion_failure_and_keyboard_interrupt_preserve_prior_directory) ... ok
|
||||
test_exchange_failure_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_exchange_failure_preserves_prior_directory) ... ok
|
||||
test_first_publication_and_real_exchange (test_ambience_audio.AtomicPublication.test_first_publication_and_real_exchange) ... ok
|
||||
test_manifest_and_notice_write_failures_preserve_prior_directory (test_ambience_audio.AtomicPublication.test_manifest_and_notice_write_failures_preserve_prior_directory) ... ok
|
||||
test_plan_alone_controls_selection_and_is_preserved_in_manifest_and_notice (test_ambience_audio.AtomicPublication.test_plan_alone_controls_selection_and_is_preserved_in_manifest_and_notice) ... ok
|
||||
test_readers_observe_whole_directory_during_real_exchange (test_ambience_audio.AtomicPublication.test_readers_observe_whole_directory_during_real_exchange) ... ok
|
||||
test_real_loudness_measurement_failure_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_real_loudness_measurement_failure_preserves_prior_directory)
|
||||
최종 실측 FFmpeg만 실패시켜 원자 교환 전 실패 전파를 확인한다. ... ok
|
||||
test_sigterm_before_commit_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_sigterm_before_commit_preserves_prior_directory) ... ok
|
||||
test_staged_manifest_notice_and_inventory_tampering_are_rejected (test_ambience_audio.AtomicPublication.test_staged_manifest_notice_and_inventory_tampering_are_rejected) ... ok
|
||||
test_symlink_output_is_rejected_before_conversion (test_ambience_audio.AtomicPublication.test_symlink_output_is_rejected_before_conversion) ... ok
|
||||
test_unsupported_atomic_exchange_preserves_prior_directory (test_ambience_audio.AtomicPublication.test_unsupported_atomic_exchange_preserves_prior_directory) ... ok
|
||||
test_all_sources_checked_before_first_conversion (test_ambience_audio.SourceGuard.test_all_sources_checked_before_first_conversion) ... ok
|
||||
test_invalid_segment_plan_fails_before_any_conversion_without_mutation (test_ambience_audio.SourceGuard.test_invalid_segment_plan_fails_before_any_conversion_without_mutation) ... ok
|
||||
test_correction_restarts_from_identical_source_and_records_both_passes (test_linear_normalization.LinearNormalization.test_correction_restarts_from_identical_source_and_records_both_passes) ... ok
|
||||
test_each_corrective_gain_is_peak_checked_before_conversion (test_linear_normalization.LinearNormalization.test_each_corrective_gain_is_peak_checked_before_conversion) ... ok
|
||||
test_final_peak_and_nonfinite_measurement_are_rejected (test_linear_normalization.LinearNormalization.test_final_peak_and_nonfinite_measurement_are_rejected) ... ok
|
||||
test_nonconvergence_is_bounded_and_fails (test_linear_normalization.LinearNormalization.test_nonconvergence_is_bounded_and_fails) ... ok
|
||||
test_parser_rejects_missing_nonfinite_or_partial_summary (test_linear_normalization.LinearNormalization.test_parser_rejects_missing_nonfinite_or_partial_summary) ... ok
|
||||
test_real_output_is_only_scalar_gain_with_pcm16_rounding (test_linear_normalization.LinearNormalization.test_real_output_is_only_scalar_gain_with_pcm16_rounding) ... ok
|
||||
test_unsafe_predicted_peak_is_rejected_before_volume_conversion (test_linear_normalization.LinearNormalization.test_unsafe_predicted_peak_is_rejected_before_volume_conversion) ... ok
|
||||
test_final_wavs_meet_fixed_loudness_and_true_peak (test_loudness_audio.FinalLoudness.test_final_wavs_meet_fixed_loudness_and_true_peak) ... {
|
||||
"measurementFilter": "ebur128=peak=true",
|
||||
"targetLUFS": -32.5,
|
||||
"truePeakCeilingDBTP": -6.0,
|
||||
"spreadLU": 0.0,
|
||||
"files": {
|
||||
"cafe": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -18.2,
|
||||
"loudnessRangeLU": 0.5,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"department": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.6,
|
||||
"loudnessRangeLU": 4.2,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"mall": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.2,
|
||||
"loudnessRangeLU": 1.4,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"market": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -6.2,
|
||||
"loudnessRangeLU": 6.5,
|
||||
"thresholdLUFS": -42.4
|
||||
},
|
||||
"rain": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.1,
|
||||
"loudnessRangeLU": 8.4,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"street": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -10.2,
|
||||
"loudnessRangeLU": 4.6,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"subway": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.2,
|
||||
"loudnessRangeLU": 4.9,
|
||||
"thresholdLUFS": -42.5
|
||||
},
|
||||
"theater": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.1,
|
||||
"loudnessRangeLU": 1.0,
|
||||
"thresholdLUFS": -42.5
|
||||
}
|
||||
}
|
||||
}
|
||||
ok
|
||||
test_manifest_records_linear_gain_and_exact_ebur128_measurements (test_loudness_audio.FinalLoudness.test_manifest_records_linear_gain_and_exact_ebur128_measurements) ... ok
|
||||
test_all_101_are_validated_before_single_atomic_publication (test_neural_audio.GeneratorContract.test_all_101_are_validated_before_single_atomic_publication) ... [001/101] intro.wav 1.000s
|
||||
[002/101] target-0.wav 1.000s
|
||||
[003/101] target-1.wav 1.000s
|
||||
[004/101] target-2.wav 1.000s
|
||||
[005/101] target-3.wav 1.000s
|
||||
[006/101] target-4.wav 1.000s
|
||||
[007/101] target-5.wav 1.000s
|
||||
[008/101] target-6.wav 1.000s
|
||||
[009/101] target-7.wav 1.000s
|
||||
[010/101] target-8.wav 1.000s
|
||||
[011/101] target-9.wav 1.000s
|
||||
[012/101] target-10.wav 1.000s
|
||||
[013/101] target-11.wav 1.000s
|
||||
[014/101] target-12.wav 1.000s
|
||||
[015/101] target-13.wav 1.000s
|
||||
[016/101] target-14.wav 1.000s
|
||||
[017/101] target-15.wav 1.000s
|
||||
[018/101] target-16.wav 1.000s
|
||||
[019/101] target-17.wav 1.000s
|
||||
[020/101] target-18.wav 1.000s
|
||||
[021/101] target-19.wav 1.000s
|
||||
[022/101] target-20.wav 1.000s
|
||||
[023/101] target-21.wav 1.000s
|
||||
[024/101] target-22.wav 1.000s
|
||||
[025/101] target-23.wav 1.000s
|
||||
[026/101] target-24.wav 1.000s
|
||||
[027/101] target-25.wav 1.000s
|
||||
[028/101] target-26.wav 1.000s
|
||||
[029/101] target-27.wav 1.000s
|
||||
[030/101] target-28.wav 1.000s
|
||||
[031/101] target-29.wav 1.000s
|
||||
[032/101] target-30.wav 1.000s
|
||||
[033/101] target-31.wav 1.000s
|
||||
[034/101] target-32.wav 1.000s
|
||||
[035/101] target-33.wav 1.000s
|
||||
[036/101] target-34.wav 1.000s
|
||||
[037/101] target-35.wav 1.000s
|
||||
[038/101] target-36.wav 1.000s
|
||||
[039/101] target-37.wav 1.000s
|
||||
[040/101] target-38.wav 1.000s
|
||||
[041/101] target-39.wav 1.000s
|
||||
[042/101] target-40.wav 1.000s
|
||||
[043/101] target-41.wav 1.000s
|
||||
[044/101] target-42.wav 1.000s
|
||||
[045/101] target-43.wav 1.000s
|
||||
[046/101] target-44.wav 1.000s
|
||||
[047/101] target-45.wav 1.000s
|
||||
[048/101] target-46.wav 1.000s
|
||||
[049/101] target-47.wav 1.000s
|
||||
[050/101] target-48.wav 1.000s
|
||||
[051/101] target-49.wav 1.000s
|
||||
[052/101] target-50.wav 1.000s
|
||||
[053/101] target-51.wav 1.000s
|
||||
[054/101] target-52.wav 1.000s
|
||||
[055/101] target-53.wav 1.000s
|
||||
[056/101] target-54.wav 1.000s
|
||||
[057/101] target-55.wav 1.000s
|
||||
[058/101] target-56.wav 1.000s
|
||||
[059/101] target-57.wav 1.000s
|
||||
[060/101] target-58.wav 1.000s
|
||||
[061/101] target-59.wav 1.000s
|
||||
[062/101] target-60.wav 1.000s
|
||||
[063/101] target-61.wav 1.000s
|
||||
[064/101] target-62.wav 1.000s
|
||||
[065/101] target-63.wav 1.000s
|
||||
[066/101] target-64.wav 1.000s
|
||||
[067/101] target-65.wav 1.000s
|
||||
[068/101] target-66.wav 1.000s
|
||||
[069/101] target-67.wav 1.000s
|
||||
[070/101] target-68.wav 1.000s
|
||||
[071/101] target-69.wav 1.000s
|
||||
[072/101] target-70.wav 1.000s
|
||||
[073/101] target-71.wav 1.000s
|
||||
[074/101] target-72.wav 1.000s
|
||||
[075/101] target-73.wav 1.000s
|
||||
[076/101] target-74.wav 1.000s
|
||||
[077/101] target-75.wav 1.000s
|
||||
[078/101] target-76.wav 1.000s
|
||||
[079/101] target-77.wav 1.000s
|
||||
[080/101] target-78.wav 1.000s
|
||||
[081/101] target-79.wav 1.000s
|
||||
[082/101] target-80.wav 1.000s
|
||||
[083/101] target-81.wav 1.000s
|
||||
[084/101] target-82.wav 1.000s
|
||||
[085/101] target-83.wav 1.000s
|
||||
[086/101] target-84.wav 1.000s
|
||||
[087/101] target-85.wav 1.000s
|
||||
[088/101] target-86.wav 1.000s
|
||||
[089/101] target-87.wav 1.000s
|
||||
[090/101] target-88.wav 1.000s
|
||||
[091/101] target-89.wav 1.000s
|
||||
[092/101] target-90.wav 1.000s
|
||||
[093/101] target-91.wav 1.000s
|
||||
[094/101] target-92.wav 1.000s
|
||||
[095/101] target-93.wav 1.000s
|
||||
[096/101] target-94.wav 1.000s
|
||||
[097/101] target-95.wav 1.000s
|
||||
[098/101] target-96.wav 1.000s
|
||||
[099/101] target-97.wav 1.000s
|
||||
[100/101] target-98.wav 1.000s
|
||||
[101/101] target-99.wav 1.000s
|
||||
ok
|
||||
test_atomic_exchange_keeps_old_tree_at_staging_path (test_neural_audio.GeneratorContract.test_atomic_exchange_keeps_old_tree_at_staging_path) ... ok
|
||||
test_atomic_first_publication (test_neural_audio.GeneratorContract.test_atomic_first_publication) ... ok
|
||||
test_cli_import_has_no_generation_or_filesystem_side_effects (test_neural_audio.GeneratorContract.test_cli_import_has_no_generation_or_filesystem_side_effects) ... ok
|
||||
test_edge_adapter_uses_pinned_python_prosody_timeout_and_no_shell (test_neural_audio.GeneratorContract.test_edge_adapter_uses_pinned_python_prosody_timeout_and_no_shell) ... ok
|
||||
test_exhausted_provider_failure_preserves_existing_files_and_redacts_secrets (test_neural_audio.GeneratorContract.test_exhausted_provider_failure_preserves_existing_files_and_redacts_secrets) ... ok
|
||||
test_ffmpeg_adapter_actually_decodes_mp3_to_normalized_pcm24 (test_neural_audio.GeneratorContract.test_ffmpeg_adapter_actually_decodes_mp3_to_normalized_pcm24) ... ok
|
||||
test_ffmpeg_failure_is_not_retried_and_preserves_existing_files (test_neural_audio.GeneratorContract.test_ffmpeg_failure_is_not_retried_and_preserves_existing_files) ... ok
|
||||
test_full_validation_detects_changed_earlier_file_before_publication (test_neural_audio.GeneratorContract.test_full_validation_detects_changed_earlier_file_before_publication) ... [001/101] intro.wav 1.000s
|
||||
[002/101] target-0.wav 1.000s
|
||||
[003/101] target-1.wav 1.000s
|
||||
[004/101] target-2.wav 1.000s
|
||||
[005/101] target-3.wav 1.000s
|
||||
[006/101] target-4.wav 1.000s
|
||||
[007/101] target-5.wav 1.000s
|
||||
[008/101] target-6.wav 1.000s
|
||||
[009/101] target-7.wav 1.000s
|
||||
[010/101] target-8.wav 1.000s
|
||||
[011/101] target-9.wav 1.000s
|
||||
[012/101] target-10.wav 1.000s
|
||||
[013/101] target-11.wav 1.000s
|
||||
[014/101] target-12.wav 1.000s
|
||||
[015/101] target-13.wav 1.000s
|
||||
[016/101] target-14.wav 1.000s
|
||||
[017/101] target-15.wav 1.000s
|
||||
[018/101] target-16.wav 1.000s
|
||||
[019/101] target-17.wav 1.000s
|
||||
[020/101] target-18.wav 1.000s
|
||||
[021/101] target-19.wav 1.000s
|
||||
[022/101] target-20.wav 1.000s
|
||||
[023/101] target-21.wav 1.000s
|
||||
[024/101] target-22.wav 1.000s
|
||||
[025/101] target-23.wav 1.000s
|
||||
[026/101] target-24.wav 1.000s
|
||||
[027/101] target-25.wav 1.000s
|
||||
[028/101] target-26.wav 1.000s
|
||||
[029/101] target-27.wav 1.000s
|
||||
[030/101] target-28.wav 1.000s
|
||||
[031/101] target-29.wav 1.000s
|
||||
[032/101] target-30.wav 1.000s
|
||||
[033/101] target-31.wav 1.000s
|
||||
[034/101] target-32.wav 1.000s
|
||||
[035/101] target-33.wav 1.000s
|
||||
[036/101] target-34.wav 1.000s
|
||||
[037/101] target-35.wav 1.000s
|
||||
[038/101] target-36.wav 1.000s
|
||||
[039/101] target-37.wav 1.000s
|
||||
[040/101] target-38.wav 1.000s
|
||||
[041/101] target-39.wav 1.000s
|
||||
[042/101] target-40.wav 1.000s
|
||||
[043/101] target-41.wav 1.000s
|
||||
[044/101] target-42.wav 1.000s
|
||||
[045/101] target-43.wav 1.000s
|
||||
[046/101] target-44.wav 1.000s
|
||||
[047/101] target-45.wav 1.000s
|
||||
[048/101] target-46.wav 1.000s
|
||||
[049/101] target-47.wav 1.000s
|
||||
[050/101] target-48.wav 1.000s
|
||||
[051/101] target-49.wav 1.000s
|
||||
[052/101] target-50.wav 1.000s
|
||||
[053/101] target-51.wav 1.000s
|
||||
[054/101] target-52.wav 1.000s
|
||||
[055/101] target-53.wav 1.000s
|
||||
[056/101] target-54.wav 1.000s
|
||||
[057/101] target-55.wav 1.000s
|
||||
[058/101] target-56.wav 1.000s
|
||||
[059/101] target-57.wav 1.000s
|
||||
[060/101] target-58.wav 1.000s
|
||||
[061/101] target-59.wav 1.000s
|
||||
[062/101] target-60.wav 1.000s
|
||||
[063/101] target-61.wav 1.000s
|
||||
[064/101] target-62.wav 1.000s
|
||||
[065/101] target-63.wav 1.000s
|
||||
[066/101] target-64.wav 1.000s
|
||||
[067/101] target-65.wav 1.000s
|
||||
[068/101] target-66.wav 1.000s
|
||||
[069/101] target-67.wav 1.000s
|
||||
[070/101] target-68.wav 1.000s
|
||||
[071/101] target-69.wav 1.000s
|
||||
[072/101] target-70.wav 1.000s
|
||||
[073/101] target-71.wav 1.000s
|
||||
[074/101] target-72.wav 1.000s
|
||||
[075/101] target-73.wav 1.000s
|
||||
[076/101] target-74.wav 1.000s
|
||||
[077/101] target-75.wav 1.000s
|
||||
[078/101] target-76.wav 1.000s
|
||||
[079/101] target-77.wav 1.000s
|
||||
[080/101] target-78.wav 1.000s
|
||||
[081/101] target-79.wav 1.000s
|
||||
[082/101] target-80.wav 1.000s
|
||||
[083/101] target-81.wav 1.000s
|
||||
[084/101] target-82.wav 1.000s
|
||||
[085/101] target-83.wav 1.000s
|
||||
[086/101] target-84.wav 1.000s
|
||||
[087/101] target-85.wav 1.000s
|
||||
[088/101] target-86.wav 1.000s
|
||||
[089/101] target-87.wav 1.000s
|
||||
[090/101] target-88.wav 1.000s
|
||||
[091/101] target-89.wav 1.000s
|
||||
[092/101] target-90.wav 1.000s
|
||||
[093/101] target-91.wav 1.000s
|
||||
[094/101] target-92.wav 1.000s
|
||||
[095/101] target-93.wav 1.000s
|
||||
[096/101] target-94.wav 1.000s
|
||||
[097/101] target-95.wav 1.000s
|
||||
[098/101] target-96.wav 1.000s
|
||||
[099/101] target-97.wav 1.000s
|
||||
[100/101] target-98.wav 1.000s
|
||||
[101/101] target-99.wav 1.000s
|
||||
ok
|
||||
test_interruption_preserves_existing_files_and_cleans_temporary_data (test_neural_audio.GeneratorContract.test_interruption_preserves_existing_files_and_cleans_temporary_data) ... ok
|
||||
test_invalid_pcm_never_reaches_publication (test_neural_audio.GeneratorContract.test_invalid_pcm_never_reaches_publication) ... ok
|
||||
test_publication_failure_preserves_existing_files (test_neural_audio.GeneratorContract.test_publication_failure_preserves_existing_files) ... [001/101] intro.wav 1.000s
|
||||
[002/101] target-0.wav 1.000s
|
||||
[003/101] target-1.wav 1.000s
|
||||
[004/101] target-2.wav 1.000s
|
||||
[005/101] target-3.wav 1.000s
|
||||
[006/101] target-4.wav 1.000s
|
||||
[007/101] target-5.wav 1.000s
|
||||
[008/101] target-6.wav 1.000s
|
||||
[009/101] target-7.wav 1.000s
|
||||
[010/101] target-8.wav 1.000s
|
||||
[011/101] target-9.wav 1.000s
|
||||
[012/101] target-10.wav 1.000s
|
||||
[013/101] target-11.wav 1.000s
|
||||
[014/101] target-12.wav 1.000s
|
||||
[015/101] target-13.wav 1.000s
|
||||
[016/101] target-14.wav 1.000s
|
||||
[017/101] target-15.wav 1.000s
|
||||
[018/101] target-16.wav 1.000s
|
||||
[019/101] target-17.wav 1.000s
|
||||
[020/101] target-18.wav 1.000s
|
||||
[021/101] target-19.wav 1.000s
|
||||
[022/101] target-20.wav 1.000s
|
||||
[023/101] target-21.wav 1.000s
|
||||
[024/101] target-22.wav 1.000s
|
||||
[025/101] target-23.wav 1.000s
|
||||
[026/101] target-24.wav 1.000s
|
||||
[027/101] target-25.wav 1.000s
|
||||
[028/101] target-26.wav 1.000s
|
||||
[029/101] target-27.wav 1.000s
|
||||
[030/101] target-28.wav 1.000s
|
||||
[031/101] target-29.wav 1.000s
|
||||
[032/101] target-30.wav 1.000s
|
||||
[033/101] target-31.wav 1.000s
|
||||
[034/101] target-32.wav 1.000s
|
||||
[035/101] target-33.wav 1.000s
|
||||
[036/101] target-34.wav 1.000s
|
||||
[037/101] target-35.wav 1.000s
|
||||
[038/101] target-36.wav 1.000s
|
||||
[039/101] target-37.wav 1.000s
|
||||
[040/101] target-38.wav 1.000s
|
||||
[041/101] target-39.wav 1.000s
|
||||
[042/101] target-40.wav 1.000s
|
||||
[043/101] target-41.wav 1.000s
|
||||
[044/101] target-42.wav 1.000s
|
||||
[045/101] target-43.wav 1.000s
|
||||
[046/101] target-44.wav 1.000s
|
||||
[047/101] target-45.wav 1.000s
|
||||
[048/101] target-46.wav 1.000s
|
||||
[049/101] target-47.wav 1.000s
|
||||
[050/101] target-48.wav 1.000s
|
||||
[051/101] target-49.wav 1.000s
|
||||
[052/101] target-50.wav 1.000s
|
||||
[053/101] target-51.wav 1.000s
|
||||
[054/101] target-52.wav 1.000s
|
||||
[055/101] target-53.wav 1.000s
|
||||
[056/101] target-54.wav 1.000s
|
||||
[057/101] target-55.wav 1.000s
|
||||
[058/101] target-56.wav 1.000s
|
||||
[059/101] target-57.wav 1.000s
|
||||
[060/101] target-58.wav 1.000s
|
||||
[061/101] target-59.wav 1.000s
|
||||
[062/101] target-60.wav 1.000s
|
||||
[063/101] target-61.wav 1.000s
|
||||
[064/101] target-62.wav 1.000s
|
||||
[065/101] target-63.wav 1.000s
|
||||
[066/101] target-64.wav 1.000s
|
||||
[067/101] target-65.wav 1.000s
|
||||
[068/101] target-66.wav 1.000s
|
||||
[069/101] target-67.wav 1.000s
|
||||
[070/101] target-68.wav 1.000s
|
||||
[071/101] target-69.wav 1.000s
|
||||
[072/101] target-70.wav 1.000s
|
||||
[073/101] target-71.wav 1.000s
|
||||
[074/101] target-72.wav 1.000s
|
||||
[075/101] target-73.wav 1.000s
|
||||
[076/101] target-74.wav 1.000s
|
||||
[077/101] target-75.wav 1.000s
|
||||
[078/101] target-76.wav 1.000s
|
||||
[079/101] target-77.wav 1.000s
|
||||
[080/101] target-78.wav 1.000s
|
||||
[081/101] target-79.wav 1.000s
|
||||
[082/101] target-80.wav 1.000s
|
||||
[083/101] target-81.wav 1.000s
|
||||
[084/101] target-82.wav 1.000s
|
||||
[085/101] target-83.wav 1.000s
|
||||
[086/101] target-84.wav 1.000s
|
||||
[087/101] target-85.wav 1.000s
|
||||
[088/101] target-86.wav 1.000s
|
||||
[089/101] target-87.wav 1.000s
|
||||
[090/101] target-88.wav 1.000s
|
||||
[091/101] target-89.wav 1.000s
|
||||
[092/101] target-90.wav 1.000s
|
||||
[093/101] target-91.wav 1.000s
|
||||
[094/101] target-92.wav 1.000s
|
||||
[095/101] target-93.wav 1.000s
|
||||
[096/101] target-94.wav 1.000s
|
||||
[097/101] target-95.wav 1.000s
|
||||
[098/101] target-96.wav 1.000s
|
||||
[099/101] target-97.wav 1.000s
|
||||
[100/101] target-98.wav 1.000s
|
||||
[101/101] target-99.wav 1.000s
|
||||
ok
|
||||
test_rejects_incomplete_or_duplicate_or_unsafe_inventory_before_requests (test_neural_audio.GeneratorContract.test_rejects_incomplete_or_duplicate_or_unsafe_inventory_before_requests) ... ok
|
||||
test_timeout_is_bounded_and_preserves_existing_files (test_neural_audio.GeneratorContract.test_timeout_is_bounded_and_preserves_existing_files) ... intro.wav: provider 시도 1/3 실패
|
||||
intro.wav: provider 시도 2/3 실패
|
||||
intro.wav: provider 시도 3/3 실패
|
||||
ok
|
||||
test_transient_provider_failures_retry_cleanly_with_bounded_backoff (test_neural_audio.GeneratorContract.test_transient_provider_failures_retry_cleanly_with_bounded_backoff) ... intro.wav: provider 시도 1/3 실패
|
||||
intro.wav: provider 시도 2/3 실패
|
||||
[001/101] intro.wav 1.000s
|
||||
[002/101] target-0.wav 1.000s
|
||||
[003/101] target-1.wav 1.000s
|
||||
[004/101] target-2.wav 1.000s
|
||||
[005/101] target-3.wav 1.000s
|
||||
[006/101] target-4.wav 1.000s
|
||||
[007/101] target-5.wav 1.000s
|
||||
[008/101] target-6.wav 1.000s
|
||||
[009/101] target-7.wav 1.000s
|
||||
[010/101] target-8.wav 1.000s
|
||||
[011/101] target-9.wav 1.000s
|
||||
[012/101] target-10.wav 1.000s
|
||||
[013/101] target-11.wav 1.000s
|
||||
[014/101] target-12.wav 1.000s
|
||||
[015/101] target-13.wav 1.000s
|
||||
[016/101] target-14.wav 1.000s
|
||||
[017/101] target-15.wav 1.000s
|
||||
[018/101] target-16.wav 1.000s
|
||||
[019/101] target-17.wav 1.000s
|
||||
[020/101] target-18.wav 1.000s
|
||||
[021/101] target-19.wav 1.000s
|
||||
[022/101] target-20.wav 1.000s
|
||||
[023/101] target-21.wav 1.000s
|
||||
[024/101] target-22.wav 1.000s
|
||||
[025/101] target-23.wav 1.000s
|
||||
[026/101] target-24.wav 1.000s
|
||||
[027/101] target-25.wav 1.000s
|
||||
[028/101] target-26.wav 1.000s
|
||||
[029/101] target-27.wav 1.000s
|
||||
[030/101] target-28.wav 1.000s
|
||||
[031/101] target-29.wav 1.000s
|
||||
[032/101] target-30.wav 1.000s
|
||||
[033/101] target-31.wav 1.000s
|
||||
[034/101] target-32.wav 1.000s
|
||||
[035/101] target-33.wav 1.000s
|
||||
[036/101] target-34.wav 1.000s
|
||||
[037/101] target-35.wav 1.000s
|
||||
[038/101] target-36.wav 1.000s
|
||||
[039/101] target-37.wav 1.000s
|
||||
[040/101] target-38.wav 1.000s
|
||||
[041/101] target-39.wav 1.000s
|
||||
[042/101] target-40.wav 1.000s
|
||||
[043/101] target-41.wav 1.000s
|
||||
[044/101] target-42.wav 1.000s
|
||||
[045/101] target-43.wav 1.000s
|
||||
[046/101] target-44.wav 1.000s
|
||||
[047/101] target-45.wav 1.000s
|
||||
[048/101] target-46.wav 1.000s
|
||||
[049/101] target-47.wav 1.000s
|
||||
[050/101] target-48.wav 1.000s
|
||||
[051/101] target-49.wav 1.000s
|
||||
[052/101] target-50.wav 1.000s
|
||||
[053/101] target-51.wav 1.000s
|
||||
[054/101] target-52.wav 1.000s
|
||||
[055/101] target-53.wav 1.000s
|
||||
[056/101] target-54.wav 1.000s
|
||||
[057/101] target-55.wav 1.000s
|
||||
[058/101] target-56.wav 1.000s
|
||||
[059/101] target-57.wav 1.000s
|
||||
[060/101] target-58.wav 1.000s
|
||||
[061/101] target-59.wav 1.000s
|
||||
[062/101] target-60.wav 1.000s
|
||||
[063/101] target-61.wav 1.000s
|
||||
[064/101] target-62.wav 1.000s
|
||||
[065/101] target-63.wav 1.000s
|
||||
[066/101] target-64.wav 1.000s
|
||||
[067/101] target-65.wav 1.000s
|
||||
[068/101] target-66.wav 1.000s
|
||||
[069/101] target-67.wav 1.000s
|
||||
[070/101] target-68.wav 1.000s
|
||||
[071/101] target-69.wav 1.000s
|
||||
[072/101] target-70.wav 1.000s
|
||||
[073/101] target-71.wav 1.000s
|
||||
[074/101] target-72.wav 1.000s
|
||||
[075/101] target-73.wav 1.000s
|
||||
[076/101] target-74.wav 1.000s
|
||||
[077/101] target-75.wav 1.000s
|
||||
[078/101] target-76.wav 1.000s
|
||||
[079/101] target-77.wav 1.000s
|
||||
[080/101] target-78.wav 1.000s
|
||||
[081/101] target-79.wav 1.000s
|
||||
[082/101] target-80.wav 1.000s
|
||||
[083/101] target-81.wav 1.000s
|
||||
[084/101] target-82.wav 1.000s
|
||||
[085/101] target-83.wav 1.000s
|
||||
[086/101] target-84.wav 1.000s
|
||||
[087/101] target-85.wav 1.000s
|
||||
[088/101] target-86.wav 1.000s
|
||||
[089/101] target-87.wav 1.000s
|
||||
[090/101] target-88.wav 1.000s
|
||||
[091/101] target-89.wav 1.000s
|
||||
[092/101] target-90.wav 1.000s
|
||||
[093/101] target-91.wav 1.000s
|
||||
[094/101] target-92.wav 1.000s
|
||||
[095/101] target-93.wav 1.000s
|
||||
[096/101] target-94.wav 1.000s
|
||||
[097/101] target-95.wav 1.000s
|
||||
[098/101] target-96.wav 1.000s
|
||||
[099/101] target-97.wav 1.000s
|
||||
[100/101] target-98.wav 1.000s
|
||||
[101/101] target-99.wav 1.000s
|
||||
ok
|
||||
test_wrong_edge_version_fails_before_network_or_asset_changes (test_neural_audio.GeneratorContract.test_wrong_edge_version_fails_before_network_or_asset_changes) ... ok
|
||||
test_rejects_silence_clipping_bad_format_and_abnormal_duration (test_neural_audio.PCMContract.test_rejects_silence_clipping_bad_format_and_abnormal_duration) ... ok
|
||||
test_valid_pcm_returns_measured_hash_bytes_duration_and_levels (test_neural_audio.PCMContract.test_valid_pcm_returns_measured_hash_bytes_duration_and_levels) ... ok
|
||||
|
||||
----------------------------------------------------------------------
|
||||
Ran 47 tests in 22.048s
|
||||
|
||||
OK
|
||||
@@ -0,0 +1,95 @@
|
||||
{
|
||||
"method": "Independent pyloudnorm BS.1770 K-weighting, 400ms blocks, mono exact PCM16 decoded by soundfile",
|
||||
"python": "3.11.16",
|
||||
"versions": {
|
||||
"pyloudnorm": "0.2.0",
|
||||
"soundfile": "0.13.1",
|
||||
"numpy": "2.2.6",
|
||||
"scipy": "1.15.3",
|
||||
"cffi": "1.17.1",
|
||||
"pycparser": "2.22",
|
||||
"future": "1.0.0"
|
||||
},
|
||||
"libsndfileVersion": "1.2.2",
|
||||
"scriptSha256": "b87ec3ab26ea0775f7a8fe6d1baf1aad50e429632705d6e3bf06268ed7b9a4cc",
|
||||
"manifestSha256": "6433bf23af35f24031c6bbe784dd0abf9330f276da6b8705e47c7a1144a285b7",
|
||||
"targetIntegratedLUFS": -32.5,
|
||||
"toleranceLU": 0.2,
|
||||
"maximumSpreadLU": 0.4,
|
||||
"spreadLU": 0.07715477923686365,
|
||||
"passed": true,
|
||||
"files": [
|
||||
{
|
||||
"file": "public/ambience/cafe.wav",
|
||||
"sha256": "864a81571a2e25a99d6408aa282570e7996c7ace432cf4f4f294677ea5bcad63",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.60621761696535,
|
||||
"targetErrorLU": -0.10621761696535259
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/department.wav",
|
||||
"sha256": "93e5c23bff2b19716dd21111746837a4df8c52d4b88c6874e57828d09ca5507e",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.55798042645585,
|
||||
"targetErrorLU": -0.057980426455849
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/mall.wav",
|
||||
"sha256": "a0a135e319ed70f55b03c6e266fb047e53db8008277a6ba8b855a05a1b82662f",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.575453741417206,
|
||||
"targetErrorLU": -0.07545374141720629
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/market.wav",
|
||||
"sha256": "7178307c48c192ac396dcd3c880c377bf56b45e829b459b1feca9f986437e632",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.52906283772849,
|
||||
"targetErrorLU": -0.029062837728488944
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/rain.wav",
|
||||
"sha256": "1842a717e6c77811cb6d6cb09d364e8ef644d50e6beb97d3d187c96e95d85784",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.56530955673126,
|
||||
"targetErrorLU": -0.0653095567312576
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/street.wav",
|
||||
"sha256": "dace0969087539e5b67fb6fac11b759e81626574230ca7f8d2feb484753656a8",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.54629472521665,
|
||||
"targetErrorLU": -0.04629472521664724
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/subway.wav",
|
||||
"sha256": "e85cf77a9baa7560fb09966c4eda3b128b92647bc4c54c417a29b4e0f4ac129f",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.5601852061342,
|
||||
"targetErrorLU": -0.06018520613420009
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/theater.wav",
|
||||
"sha256": "634fc25e8c4e9dcbab97688bc4c0ef9b0299cc7c4c921781a70740aabe46b900",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.59002557282089,
|
||||
"targetErrorLU": -0.09002557282089185
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
Collecting cffi==1.17.1 (from -r .agent/evidence-v0.2.5/review-fixes/pyloudnorm-requirements.txt (line 1))
|
||||
Using cached cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (1.5 kB)
|
||||
Collecting future==1.0.0 (from -r .agent/evidence-v0.2.5/review-fixes/pyloudnorm-requirements.txt (line 2))
|
||||
Using cached future-1.0.0-py3-none-any.whl.metadata (4.0 kB)
|
||||
Collecting numpy==2.2.6 (from -r .agent/evidence-v0.2.5/review-fixes/pyloudnorm-requirements.txt (line 3))
|
||||
Using cached numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)
|
||||
Collecting pycparser==2.22 (from -r .agent/evidence-v0.2.5/review-fixes/pyloudnorm-requirements.txt (line 4))
|
||||
Using cached pycparser-2.22-py3-none-any.whl.metadata (943 bytes)
|
||||
Collecting pyloudnorm==0.2.0 (from -r .agent/evidence-v0.2.5/review-fixes/pyloudnorm-requirements.txt (line 5))
|
||||
Using cached pyloudnorm-0.2.0-py3-none-any.whl.metadata (6.6 kB)
|
||||
Collecting scipy==1.15.3 (from -r .agent/evidence-v0.2.5/review-fixes/pyloudnorm-requirements.txt (line 6))
|
||||
Using cached scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (61 kB)
|
||||
Collecting soundfile==0.13.1 (from -r .agent/evidence-v0.2.5/review-fixes/pyloudnorm-requirements.txt (line 7))
|
||||
Using cached soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl.metadata (16 kB)
|
||||
Using cached cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (467 kB)
|
||||
Using cached future-1.0.0-py3-none-any.whl (491 kB)
|
||||
Using cached numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.8 MB)
|
||||
Using cached pycparser-2.22-py3-none-any.whl (117 kB)
|
||||
Using cached pyloudnorm-0.2.0-py3-none-any.whl (10 kB)
|
||||
Using cached scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (37.7 MB)
|
||||
Using cached soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl (1.3 MB)
|
||||
Saved /tmp/findword-review-fixes-wheels/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
||||
Saved /tmp/findword-review-fixes-wheels/future-1.0.0-py3-none-any.whl
|
||||
Saved /tmp/findword-review-fixes-wheels/numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
||||
Saved /tmp/findword-review-fixes-wheels/pycparser-2.22-py3-none-any.whl
|
||||
Saved /tmp/findword-review-fixes-wheels/pyloudnorm-0.2.0-py3-none-any.whl
|
||||
Saved /tmp/findword-review-fixes-wheels/scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
|
||||
Saved /tmp/findword-review-fixes-wheels/soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl
|
||||
Successfully downloaded cffi future numpy pycparser pyloudnorm scipy soundfile
|
||||
|
||||
[notice] A new release of pip is available: 24.0 -> 26.2.1
|
||||
[notice] To update, run: python3.11 -m pip install --upgrade pip
|
||||
@@ -0,0 +1,4 @@
|
||||
|
||||
> find-word@0.2.5 lint
|
||||
> eslint . && tsc --noEmit
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
|
||||
> find-word@0.2.5 test
|
||||
> vitest run
|
||||
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.5
|
||||
|
||||
❯ tests/ambience.test.ts (9 tests | 1 failed) 2083ms
|
||||
× v0.2.5 최종 WAV의 동일 ASR VAD gate는 requiredEmptyPassed=true여야 한다 21ms
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯ Failed Tests 1 ⎯⎯⎯⎯⎯⎯⎯
|
||||
|
||||
FAIL tests/ambience.test.ts > v0.2.5 최종 WAV의 동일 ASR VAD gate는 requiredEmptyPassed=true여야 한다
|
||||
AssertionError: expected false to be true // Object.is equality
|
||||
|
||||
- Expected
|
||||
+ Received
|
||||
|
||||
- true
|
||||
+ false
|
||||
|
||||
❯ tests/ambience.test.ts:480:41
|
||||
478| "cafe",
|
||||
479| ]);
|
||||
480| expect(screening.requiredEmptyPassed).toBe(true);
|
||||
| ^
|
||||
481| expect(screening.limitations).toMatchObject({
|
||||
482| humanListeningAcceptance: false,
|
||||
|
||||
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯[1/1]⎯
|
||||
|
||||
|
||||
Test Files 1 failed | 14 passed (15)
|
||||
Tests 1 failed | 143 passed (144)
|
||||
Start at 11:05:03
|
||||
Duration 52.82s (tests 88%, environment 8%, setup 3%, transform 1%)
|
||||
|
||||
Isolate 15 workers spawned · ~1.08s startup each (spawn + environment, per file)
|
||||
at least ~4.30s faster with isolate: false — reuses workers across files instead of one per file
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
|
||||
> find-word@0.2.5 build
|
||||
> tsc --noEmit && vite build && node scripts/check-build.mjs
|
||||
|
||||
vite v8.3.4 building client environment for production...
|
||||
transforming...
|
||||
✓ 24 modules transformed.
|
||||
rendering chunks...
|
||||
computing gzip size...
|
||||
dist/index.html 1.31 kB │ gzip: 0.91 kB
|
||||
dist/assets/index-CgXbHuMU.css 16.11 kB │ gzip: 4.53 kB
|
||||
dist/assets/index-Cz3LYZX-.js 293.21 kB │ gzip: 91.89 kB
|
||||
|
||||
✓ built in 548ms
|
||||
빌드 음성 자산 101개 + 현장음 8개 및 런타임/현장음 notice 확인
|
||||
@@ -0,0 +1,59 @@
|
||||
[WebServer] (node:1568844) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
[WebServer] (Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
Running 36 tests using 2 workers
|
||||
|
||||
(node:1568899) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
(node:1568901) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
[1/36] [desktop] › tests/browser/audio.spec.ts:7:1 › 음성·현장음 109개 versioned WAV를 실제 Chrome에서 해시·디코드 검증한다
|
||||
[2/36] [desktop] › tests/browser/gains.spec.ts:87:1 › 실제 GainNode의 배경 배율은 8환경 × SNR 경계·0에서 동일하다
|
||||
[3/36] [desktop] › tests/browser/gains.spec.ts:185:1 › 실제 WAV 변조는 소스 시작 전에 거부하고 원본 재시도로 회복한다
|
||||
[4/36] [desktop] › tests/browser/game.spec.ts:8:1 › 실제 오디오로 혼합 모드 완주·레이아웃·접근성·외부 요청 없음
|
||||
[5/36] [desktop] › tests/browser/game.spec.ts:130:3 › intro WAV query URL의 404를 표시하고 같은 URL로 재시도·정답 mapping한다
|
||||
[6/36] [desktop] › tests/browser/game.spec.ts:130:3 › target WAV query URL의 404를 표시하고 같은 URL로 재시도·정답 mapping한다
|
||||
[7/36] [desktop] › tests/browser/release.spec.ts:6:1 › 릴리스는 사용자 크레딧과 런타임 MIT notice 전문을 제공한다
|
||||
[8/36] [desktop] › tests/browser/release.spec.ts:24:1 › 누락 음성·환경음은 query와 HTML accept에도 404이고 출처 고지는 번들된다
|
||||
[9/36] [desktop] › tests/browser/resampling.spec.ts:7:1 › 109 WAV의 24·44.1·48·96kHz 디코드는 고정 peak 상한 안에 있다
|
||||
[10/36] [desktop] › tests/browser/review-fixes.spec.ts:27:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다
|
||||
[11/36] [desktop] › tests/browser/review-fixes.spec.ts:62:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다
|
||||
[12/36] [desktop] › tests/browser/rounds.spec.ts:35:1 › 시작 단계·SNR·3문항 완료→다음 단계·재생 중 종료·응답 후 종료·홈 초기화
|
||||
[13/36] [desktop] › tests/browser/rounds.spec.ts:135:1 › 여덟 환경의 실제 WAV를 각각 디코드하고 루프 재생한 뒤 즉시 정지한다
|
||||
[14/36] [desktop] › tests/browser/rounds.spec.ts:178:1 › 환경음 404는 한국어 오류와 재시도 후 정상 답변으로 복구한다
|
||||
[15/36] [desktop] › tests/browser/ui.spec.ts:4:1 › 전체 음량은 설정 흐름 안에 들어가며 키보드로 조절된다
|
||||
[16/36] [desktop] › tests/browser/ui.spec.ts:52:1 › 난이도 설명은 모바일에서도 보인다
|
||||
[17/36] [desktop] › tests/browser/ui.spec.ts:68:1 › 한국어 제목은 단어 중간에서 줄바꿈하지 않는다
|
||||
[18/36] [desktop] › tests/browser/ui.spec.ts:121:1 › 시작 단계와 SNR 설정은 카드 안에 들어가고 터치 영역을 확보한다
|
||||
(node:1570802) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
[19/36] [mobile] › tests/browser/audio.spec.ts:7:1 › 음성·현장음 109개 versioned WAV를 실제 Chrome에서 해시·디코드 검증한다
|
||||
(node:1570940) Warning: The 'NO_COLOR' env is ignored due to the 'FORCE_COLOR' env being set.
|
||||
(Use `node --trace-warnings ...` to show where the warning was created)
|
||||
|
||||
|
||||
[20/36] [mobile] › tests/browser/gains.spec.ts:87:1 › 실제 GainNode의 배경 배율은 8환경 × SNR 경계·0에서 동일하다
|
||||
[21/36] [mobile] › tests/browser/gains.spec.ts:185:1 › 실제 WAV 변조는 소스 시작 전에 거부하고 원본 재시도로 회복한다
|
||||
[22/36] [mobile] › tests/browser/game.spec.ts:8:1 › 실제 오디오로 혼합 모드 완주·레이아웃·접근성·외부 요청 없음
|
||||
[23/36] [mobile] › tests/browser/game.spec.ts:130:3 › intro WAV query URL의 404를 표시하고 같은 URL로 재시도·정답 mapping한다
|
||||
[24/36] [mobile] › tests/browser/game.spec.ts:130:3 › target WAV query URL의 404를 표시하고 같은 URL로 재시도·정답 mapping한다
|
||||
[25/36] [mobile] › tests/browser/release.spec.ts:6:1 › 릴리스는 사용자 크레딧과 런타임 MIT notice 전문을 제공한다
|
||||
[26/36] [mobile] › tests/browser/release.spec.ts:24:1 › 누락 음성·환경음은 query와 HTML accept에도 404이고 출처 고지는 번들된다
|
||||
[27/36] [mobile] › tests/browser/resampling.spec.ts:7:1 › 109 WAV의 24·44.1·48·96kHz 디코드는 고정 peak 상한 안에 있다
|
||||
[28/36] [mobile] › tests/browser/review-fixes.spec.ts:27:1 › 리뷰: 한국어 모드·결과 어절은 320px와 360px에서도 갈라지거나 넘치지 않는다
|
||||
[29/36] [mobile] › tests/browser/review-fixes.spec.ts:62:1 › 리뷰: 실제 진행 막대는 현재 문항의 1/3·2/3·3/3을 채운다
|
||||
[30/36] [mobile] › tests/browser/rounds.spec.ts:35:1 › 시작 단계·SNR·3문항 완료→다음 단계·재생 중 종료·응답 후 종료·홈 초기화
|
||||
[31/36] [mobile] › tests/browser/rounds.spec.ts:135:1 › 여덟 환경의 실제 WAV를 각각 디코드하고 루프 재생한 뒤 즉시 정지한다
|
||||
[32/36] [mobile] › tests/browser/rounds.spec.ts:178:1 › 환경음 404는 한국어 오류와 재시도 후 정상 답변으로 복구한다
|
||||
[33/36] [mobile] › tests/browser/ui.spec.ts:4:1 › 전체 음량은 설정 흐름 안에 들어가며 키보드로 조절된다
|
||||
[34/36] [mobile] › tests/browser/ui.spec.ts:52:1 › 난이도 설명은 모바일에서도 보인다
|
||||
[35/36] [mobile] › tests/browser/ui.spec.ts:68:1 › 한국어 제목은 단어 중간에서 줄바꿈하지 않는다
|
||||
[36/36] [mobile] › tests/browser/ui.spec.ts:121:1 › 시작 단계와 SNR 설정은 카드 안에 들어가고 터치 영역을 확보한다
|
||||
36 passed (4.8m)
|
||||
@@ -0,0 +1 @@
|
||||
PASS: all eight source hashes verified, two independent generations and published WAVs/pass metrics/notices match.
|
||||
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"measurementFilter": "ebur128=peak=true",
|
||||
"targetIntegratedLUFS": -32.5,
|
||||
"toleranceLU": 0.2,
|
||||
"maximumSpreadLU": 0.4,
|
||||
"truePeakCeilingDBTP": -6,
|
||||
"ffmpegVersion": "ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers",
|
||||
"scriptSha256": "4dcfd19fcc43379489e4720e02b61ee245f4a33e30260ba6d70e896b76ca48ac",
|
||||
"spreadLU": 0.0,
|
||||
"passed": true,
|
||||
"files": [
|
||||
{
|
||||
"file": "public/ambience/cafe.wav",
|
||||
"sha256": "864a81571a2e25a99d6408aa282570e7996c7ace432cf4f4f294677ea5bcad63",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -18.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 0.5 LU\n Threshold: -52.6 LUFS\n LRA low: -32.8 LUFS\n LRA high: -32.3 LUFS\n\n True peak:\n Peak: -18.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/department.wav",
|
||||
"sha256": "93e5c23bff2b19716dd21111746837a4df8c52d4b88c6874e57828d09ca5507e",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.6,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 4.2 LU\n Threshold: -52.5 LUFS\n LRA low: -35.1 LUFS\n LRA high: -30.9 LUFS\n\n True peak:\n Peak: -16.6 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/mall.wav",
|
||||
"sha256": "a0a135e319ed70f55b03c6e266fb047e53db8008277a6ba8b855a05a1b82662f",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 1.4 LU\n Threshold: -52.4 LUFS\n LRA low: -33.1 LUFS\n LRA high: -31.7 LUFS\n\n True peak:\n Peak: -12.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/market.wav",
|
||||
"sha256": "7178307c48c192ac396dcd3c880c377bf56b45e829b459b1feca9f986437e632",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -6.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.4 LUFS\n\n Loudness range:\n LRA: 6.5 LU\n Threshold: -52.6 LUFS\n LRA low: -36.4 LUFS\n LRA high: -29.9 LUFS\n\n True peak:\n Peak: -6.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/rain.wav",
|
||||
"sha256": "1842a717e6c77811cb6d6cb09d364e8ef644d50e6beb97d3d187c96e95d85784",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.1,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 8.4 LU\n Threshold: -54.2 LUFS\n LRA low: -37.7 LUFS\n LRA high: -29.3 LUFS\n\n True peak:\n Peak: -12.1 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/street.wav",
|
||||
"sha256": "dace0969087539e5b67fb6fac11b759e81626574230ca7f8d2feb484753656a8",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -10.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 4.6 LU\n Threshold: -52.4 LUFS\n LRA low: -34.6 LUFS\n LRA high: -29.9 LUFS\n\n True peak:\n Peak: -10.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/subway.wav",
|
||||
"sha256": "e85cf77a9baa7560fb09966c4eda3b128b92647bc4c54c417a29b4e0f4ac129f",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 4.9 LU\n Threshold: -52.2 LUFS\n LRA low: -35.0 LUFS\n LRA high: -30.1 LUFS\n\n True peak:\n Peak: -16.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/theater.wav",
|
||||
"sha256": "634fc25e8c4e9dcbab97688bc4c0ef9b0299cc7c4c921781a70740aabe46b900",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.1,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 1.0 LU\n Threshold: -52.3 LUFS\n LRA low: -32.8 LUFS\n LRA high: -31.8 LUFS\n\n True peak:\n Peak: -16.1 dBFS\n"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"historicalV025FilesPreserved": 150,
|
||||
"earlierImmutableFilesPreserved": 660,
|
||||
"voiceWavsPreserved": 101,
|
||||
"sourcePlanSha256": "3529c8534be204208ac504a0f4c1a69b312131f9bbff92aa9a3135d61d24db65",
|
||||
"sourceAndSegmentsPreserved": [
|
||||
{
|
||||
"environmentId": "street",
|
||||
"sourceSha256": "0ddb0be7eb3427f781c8268bcbc74b8ad7e1fbf75b9f6966e65274dbe85f3d9d",
|
||||
"sourceBytes": 3414104,
|
||||
"startSeconds": 35
|
||||
},
|
||||
{
|
||||
"environmentId": "mall",
|
||||
"sourceSha256": "bb066e130e5d665db57cb5f88e820d053c724d8f777b275213998d2074c6529a",
|
||||
"sourceBytes": 1666896,
|
||||
"startSeconds": 36
|
||||
},
|
||||
{
|
||||
"environmentId": "theater",
|
||||
"sourceSha256": "05c3ece7c088f34700b7610f791c0ad848a24c77be2c32fd1503a78356739a43",
|
||||
"sourceBytes": 1485015,
|
||||
"startSeconds": 45
|
||||
},
|
||||
{
|
||||
"environmentId": "department",
|
||||
"sourceSha256": "261fda28722fba623483a90b32e7a2ec388c59887f56a5247156b53f1ffb6ccd",
|
||||
"sourceBytes": 2445024,
|
||||
"startSeconds": 90
|
||||
},
|
||||
{
|
||||
"environmentId": "market",
|
||||
"sourceSha256": "fc0075dce8ad05b56460c9f18754c27b2021f21f1c780a595ccda648d33c941d",
|
||||
"sourceBytes": 622200,
|
||||
"startSeconds": 24
|
||||
},
|
||||
{
|
||||
"environmentId": "subway",
|
||||
"sourceSha256": "41fcf064cde53cef1528fe98721347851e60c070d8ff9f213f354025cf272d4c",
|
||||
"sourceBytes": 3343901,
|
||||
"startSeconds": 65
|
||||
},
|
||||
{
|
||||
"environmentId": "cafe",
|
||||
"sourceSha256": "6360791fdcee1f64638f0fc9abd6d2c7a1aa75fd3d2b80033170a02d025099dc",
|
||||
"sourceBytes": 19947952,
|
||||
"startSeconds": 0
|
||||
},
|
||||
{
|
||||
"environmentId": "rain",
|
||||
"sourceSha256": "ef0511593b1bb0ba47d5c5dafd83eb07ba854b5a65fd5d41b8c76a1b3ff2c22a",
|
||||
"sourceBytes": 91187572,
|
||||
"startSeconds": 180
|
||||
}
|
||||
],
|
||||
"newAmbienceCount": 8,
|
||||
"allPublicFilesMatchDist": true
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
|
||||
RUN v5.0.4 /home/hermes/worktrees/find-word-v0.2.5
|
||||
|
||||
✓ tests/neural-release.test.ts > 0.2.5 버전을 package·lock·UI·index·문서에 일치시킨다 11ms
|
||||
✓ tests/neural-release.test.ts > 고정 venv 생성 명령과 provider·도구·출력물 권리의 경계를 문서화한다 3ms
|
||||
✓ tests/neural-release.test.ts > 현재 문서·manifest·CHANGELOG는 0.2.5 동작과 역사 보존을 설명한다 2ms
|
||||
✓ tests/neural-release.test.ts > README는 현재 리뷰 증거 경로와 정확한 라운드 보너스를 안내한다 1ms
|
||||
✓ tests/release.test.ts > 릴리스 문서 계약 > Node 최소 버전은 잠긴 의존성이 요구하는 22.22.2와 일치한다 5ms
|
||||
✓ tests/release.test.ts > 릴리스 문서 계약 > 프로젝트는 비공개 권리 유보이며 저장소 주소를 명시한다 4ms
|
||||
✓ tests/release.test.ts > 릴리스 문서 계약 > 잠금 파일의 모든 런타임 의존성 notice 전문을 배포용 사본에 보존한다 3ms
|
||||
✓ tests/release.test.ts > 릴리스 문서 계약 > 브랜드 문구를 사용자 원문 그대로 문서에도 보존한다 4ms
|
||||
✓ tests/release.test.ts > HTML은 같은 문서의 내장 아이콘을 제공해 누락 favicon 요청을 막는다 1ms
|
||||
stdout | tests/mixing-loudness.test.ts > 같은 +6dB에서 여덟 배경의 gain은 파일 피크와 무관하다
|
||||
[
|
||||
{
|
||||
"file": "cafe.wav",
|
||||
"backgroundGain": 0.4198884518664126,
|
||||
"finalRms": 0.010111753518983174
|
||||
},
|
||||
{
|
||||
"file": "department.wav",
|
||||
"backgroundGain": 0.4198884518664126,
|
||||
"finalRms": 0.010411671423001338
|
||||
},
|
||||
{
|
||||
"file": "mall.wav",
|
||||
"backgroundGain": 0.4198884518664126,
|
||||
"finalRms": 0.01075304005447213
|
||||
},
|
||||
{
|
||||
"file": "market.wav",
|
||||
"backgroundGain": 0.4198884518664126,
|
||||
"finalRms": 0.010048399249045416
|
||||
},
|
||||
{
|
||||
"file": "rain.wav",
|
||||
"backgroundGain": 0.4198884518664126,
|
||||
"finalRms": 0.011545361716977154
|
||||
},
|
||||
{
|
||||
"file": "street.wav",
|
||||
"backgroundGain": 0.4198884518664126,
|
||||
"finalRms": 0.02625176349609887
|
||||
},
|
||||
{
|
||||
"file": "subway.wav",
|
||||
"backgroundGain": 0.4198884518664126,
|
||||
"finalRms": 0.012189577020264694
|
||||
},
|
||||
{
|
||||
"file": "theater.wav",
|
||||
"backgroundGain": 0.4198884518664126,
|
||||
"finalRms": 0.0106773463288438
|
||||
}
|
||||
]
|
||||
|
||||
stdout | tests/mixing-loudness.test.ts > 101 voice × 8 배경 × 모든 SNR 눈금은 동일 배경 gain과 안전 피크를 가진다
|
||||
{"combinations":20200,"maximum":0.6546804814413929,"voicePeak":0.2052977830171585,"backgroundPeak":0.471954345703125,"introPeak":0.14995422959327698,"bounds":{"background":0.55,"voice":0.25,"intro":0.2},"fixedGain":0.4198884518664126,"backgroundGains":[0.4198884518664126]}
|
||||
|
||||
✓ tests/mixing-loudness.test.ts > 같은 +6dB에서 여덟 배경의 gain은 파일 피크와 무관하다 428ms
|
||||
✓ tests/mixing-loudness.test.ts > 101 voice × 8 배경 × 모든 SNR 눈금은 동일 배경 gain과 안전 피크를 가진다 4534ms
|
||||
✓ tests/mixing-loudness.test.ts > SNR과 모든 경로의 peak 상한 위반은 fail closed한다 2ms
|
||||
|
||||
Test Files 3 passed (3)
|
||||
Tests 12 passed (12)
|
||||
Start at 11:09:19
|
||||
Duration 5.49s (tests 85%, setup 13%, transform 1%)
|
||||
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"stats": {
|
||||
"startTime": "2026-10-14T11:05:34.681Z",
|
||||
"duration": 285196.423,
|
||||
"expected": 36,
|
||||
"skipped": 0,
|
||||
"unexpected": 0,
|
||||
"flaky": 0
|
||||
},
|
||||
"projects": {
|
||||
"desktop": {
|
||||
"passed": 18,
|
||||
"attachments": {
|
||||
"109-versioned-WAV-integrity": "final-desktop-109-versioned-WAV-integrity.json",
|
||||
"actual-gain-nodes": "final-desktop-actual-gain-nodes.json",
|
||||
"all-voices-resampled-bounds": "final-desktop-all-voices-resampled-bounds.json",
|
||||
"runtime-audit": "final-desktop-runtime-audit.json"
|
||||
},
|
||||
"gainCases": 24,
|
||||
"observedBackgroundGainValues": [
|
||||
0.4198884665966034
|
||||
],
|
||||
"scheduledBackgroundGainValues": [
|
||||
0.4198884518664126
|
||||
],
|
||||
"normalFlowAudit": {
|
||||
"errors": 0,
|
||||
"failed": 0,
|
||||
"external": 0
|
||||
},
|
||||
"axeViolations": 0
|
||||
},
|
||||
"mobile": {
|
||||
"passed": 18,
|
||||
"attachments": {
|
||||
"109-versioned-WAV-integrity": "final-mobile-109-versioned-WAV-integrity.json",
|
||||
"actual-gain-nodes": "final-mobile-actual-gain-nodes.json",
|
||||
"all-voices-resampled-bounds": "final-mobile-all-voices-resampled-bounds.json",
|
||||
"runtime-audit": "final-mobile-runtime-audit.json"
|
||||
},
|
||||
"gainCases": 24,
|
||||
"observedBackgroundGainValues": [
|
||||
0.4198884665966034
|
||||
],
|
||||
"scheduledBackgroundGainValues": [
|
||||
0.4198884518664126
|
||||
],
|
||||
"normalFlowAudit": {
|
||||
"errors": 0,
|
||||
"failed": 0,
|
||||
"external": 0
|
||||
},
|
||||
"axeViolations": 0
|
||||
}
|
||||
},
|
||||
"scope": "System Chrome desktop/mobile emulation; native Web Audio; local built app; intentional fault injections excluded from normal-flow error totals.",
|
||||
"sandboxEvidence": "chrome-sandbox-final.json"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"method": "High-confidence credential signatures in git-tracked and unignored new text files; no environment/secret access",
|
||||
"textFilesScanned": 668,
|
||||
"findings": [],
|
||||
"passed": true,
|
||||
"limitation": "Pattern scan is not a proof that every possible secret format is absent."
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
PASS: 150 historical v0.2.5 evidence files unchanged; three meter/ASR reports match current WAV hashes; scripts match recorded hashes; git diff --check clean; HEAD unchanged.
|
||||
RELEASE BLOCKED: final-asr requiredEmptyPassed=false; npm test 143 passed / 1 ASR gate failed.
|
||||
@@ -0,0 +1,61 @@
|
||||
# v0.2.5 독립 리뷰 수정 증거
|
||||
|
||||
**릴리스 차단.** ebur128/pyloudnorm loudness 조건은 통과했지만 동일 faster-whisper VAD gate가
|
||||
새 market WAV에서 1개 segment를 반환했다. `requiredEmptyPassed=false`이며 이를 `true`로 요구하는
|
||||
단위 테스트는 실패 상태다. 승인/commit/push/merge/tag/deploy는 하지 않았다.
|
||||
|
||||
기존 상위 `.agent/evidence-v0.2.5`의 150개 파일은 [history-sha256.json](history-sha256.json)으로 고정했다.
|
||||
수정 전 bundle과 RESULT/정규화 계획은 `rejected-*` 사본으로 보존한다. 기존 loudnorm input_i의
|
||||
0.01 LU spread 주장은 전용 ebur128 2.0 LU / 독립 리뷰의 pyloudnorm 0.2.0 1.925 LU와 모순되어
|
||||
**거부된 역사 증거**다. 상위 GREEN 표시는 당시 테스트 결과이며 현재 릴리스 통과가 아니다.
|
||||
|
||||
## TDD와 결과
|
||||
|
||||
| 검사 | 증거 | 결과 |
|
||||
| --- | --- | --- |
|
||||
| 복원한 전용 ebur128 목표/동등성 | [01 RED](01-ebur128-RED.log), [06 GREEN](06-ebur128-GREEN.log) | 2.0 LU 실패 → 0.0 LU 통과 |
|
||||
| 순수 scalar/사전 peak/보정/비수렴 | [02 RED](02-linear-RED.log), [04 GREEN](04-linear-GREEN.log) | 7개 통과 |
|
||||
| exact 새 WAV ASR gate | [03 RED](03-asr-gate-RED.log), [08 실제 실행](08-asr.log), [결과](final-asr.json) | 실패 보존 |
|
||||
| 새 manifest의 빌드 계약 | [07 RED](07-build-contract-RED.log), [15 unit](15-unit.log) | 해당 39개 통과 |
|
||||
| 새 원자 생성 | [05](05-regenerate.log) | 8개 전체 교환 |
|
||||
| 전용 ebur128 독립 측정 | [스크립트](measure-ebur128.py), [결과](ebur128-results.json) | 전수 −32.5 LUFS, spread 0.0 LU, 최대 −6.2 dBTP |
|
||||
| 별도 pyloudnorm 독립 측정 | [스크립트](measure-pyloudnorm.py), [결과](pyloudnorm-results.json) | −32.6062~−32.5291 LUFS, spread 0.0771547792 LU |
|
||||
| Python 전체 | [11](11-python.log) | 47개 통과 |
|
||||
| lint/typecheck | [14](14-lint.log) | 통과 |
|
||||
| npm test | [15](15-unit.log) | 143 통과 / 1 실패 (ASR) |
|
||||
| build | [16](16-build.log) | 통과 |
|
||||
| audit | [JSON](npm-audit.json) | 취약점 0개 |
|
||||
| Chrome desktop/mobile | [17](17-browser.log), [summary](browser-summary.json) | 36 PASS, skipped/flaky/unexpected=0 |
|
||||
| 같은 원본에서 두 번 재생성 | [18](18-reproducibility.log), [JSON](reproducibility.json) | PCM/통계/notice 동일, generatedAtUtc만 제외 |
|
||||
| 역사/원본/음성/dist 보존 | [20](20-preservation.log), [JSON](preservation.json) | 통과 |
|
||||
|
||||
현재 manifest의 hash는 ASR와 pyloudnorm 결과에 연결되어 있고 각 WAV hash도 기록되어 있다.
|
||||
ASR 모델 revision/모델 파일 hash/VAD hash/전체 기본 옵션/seed/의존성/스크립트 hash는
|
||||
[final-asr.json](final-asr.json)에 있다. 기존 실패·no-VAD는 수정하지 않았다.
|
||||
market의 exact SHA-256은 `7178307c48c192ac396dcd3c880c377bf56b45e829b459b1feca9f986437e632`이며,
|
||||
반환 구간 10.45–12.45초, 후보 텍스트 ` Let's go, let's go, let's go.`를 그대로 남겼다.
|
||||
이 텍스트는 검증된 전사가 아니다. humanListeningAcceptance/legalPrivacyClearance는 모두 false다.
|
||||
|
||||
## 독립 pyloudnorm 재현
|
||||
|
||||
일반 npm test는 이 가상 환경이나 네트워크를 사용하지 않는다. 아래 절차는 별도의 독립 증거 재현용이다.
|
||||
Python 3.11/Linux x86_64 wheel을 고정했다. [의존성 lock](pyloudnorm-requirements.lock)의 모든 버전과
|
||||
SHA-256을 사용한다. [wheel inventory](pyloudnorm-wheels.json), [설치 로그](09-pyloudnorm-install.log),
|
||||
[freeze](pyloudnorm-requirements.txt)를 함께 보존했다. pyloudnorm=0.2.0, soundfile=0.13.1,
|
||||
libsndfile=1.2.2; 나머지 패키지 버전과 Python 버전은 결과 JSON에 있다.
|
||||
|
||||
기존 증거를 덮어쓰지 않도록 새 임시 디렉터리에 같은 상대 경로를 구성한다. 설치에는 네트워크가
|
||||
필요할 수 있지만 WAV 측정은 로컬 파일만 읽는다. `open('x')`가 기존 결과 덮어쓰기를 거부한다.
|
||||
|
||||
```bash
|
||||
review_run=$(mktemp -d /tmp/findword-independent-XXXXXX)
|
||||
python3 -m venv "$review_run/venv"
|
||||
"$review_run/venv/bin/pip" install --require-hashes -r .agent/evidence-v0.2.5/review-fixes/pyloudnorm-requirements.lock
|
||||
mkdir -p "$review_run/public" "$review_run/.agent/evidence-v0.2.5/review-fixes"
|
||||
cp -a public/ambience "$review_run/public/ambience"
|
||||
cp .agent/evidence-v0.2.5/review-fixes/measure-pyloudnorm.py "$review_run/.agent/evidence-v0.2.5/review-fixes/"
|
||||
"$review_run/venv/bin/python" "$review_run/.agent/evidence-v0.2.5/review-fixes/measure-pyloudnorm.py"
|
||||
```
|
||||
|
||||
동일한 임시 경로에 `measure-ebur128.py`도 복사해 `python3`로 실행하면 전용 FFmpeg 계기를 별도 재현할 수 있다.
|
||||
FFmpeg 6.1.1-3ubuntu5와 정확한 input bytes 범위에서 재현성을 검증했으며 다른 빌드의 byte 동일성을 보장하지 않는다.
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"status": "passed",
|
||||
"failedTests": []
|
||||
}
|
||||
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 167 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 288 B |
|
After Width: | Height: | Size: 289 B |
|
After Width: | Height: | Size: 248 B |
|
After Width: | Height: | Size: 73 KiB |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 224 B |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 142 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 81 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 86 KiB |
|
After Width: | Height: | Size: 68 KiB |
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"stats": {
|
||||
"startTime": "2026-10-14T11:05:34.681Z",
|
||||
"duration": 285196.423,
|
||||
"expected": 36,
|
||||
"skipped": 0,
|
||||
"unexpected": 0,
|
||||
"flaky": 0
|
||||
},
|
||||
"projects": {
|
||||
"desktop": {
|
||||
"passed": 18,
|
||||
"attachments": {
|
||||
"109-versioned-WAV-integrity": "final-desktop-109-versioned-WAV-integrity.json",
|
||||
"actual-gain-nodes": "final-desktop-actual-gain-nodes.json",
|
||||
"all-voices-resampled-bounds": "final-desktop-all-voices-resampled-bounds.json",
|
||||
"runtime-audit": "final-desktop-runtime-audit.json"
|
||||
},
|
||||
"gainCases": 24,
|
||||
"observedBackgroundGainValues": [
|
||||
0.4198884665966034
|
||||
],
|
||||
"scheduledBackgroundGainValues": [
|
||||
0.4198884518664126
|
||||
],
|
||||
"normalFlowAudit": {
|
||||
"errors": 0,
|
||||
"failed": 0,
|
||||
"external": 0
|
||||
},
|
||||
"axeViolations": 0,
|
||||
"resampledPeakMaxima": {
|
||||
"background": 0.4879775941371918,
|
||||
"voice": 0.20585650454525403,
|
||||
"intro": 0.14999594059820148
|
||||
}
|
||||
},
|
||||
"mobile": {
|
||||
"passed": 18,
|
||||
"attachments": {
|
||||
"109-versioned-WAV-integrity": "final-mobile-109-versioned-WAV-integrity.json",
|
||||
"actual-gain-nodes": "final-mobile-actual-gain-nodes.json",
|
||||
"all-voices-resampled-bounds": "final-mobile-all-voices-resampled-bounds.json",
|
||||
"runtime-audit": "final-mobile-runtime-audit.json"
|
||||
},
|
||||
"gainCases": 24,
|
||||
"observedBackgroundGainValues": [
|
||||
0.4198884665966034
|
||||
],
|
||||
"scheduledBackgroundGainValues": [
|
||||
0.4198884518664126
|
||||
],
|
||||
"normalFlowAudit": {
|
||||
"errors": 0,
|
||||
"failed": 0,
|
||||
"external": 0
|
||||
},
|
||||
"axeViolations": 0,
|
||||
"resampledPeakMaxima": {
|
||||
"background": 0.4879775941371918,
|
||||
"voice": 0.20585650454525403,
|
||||
"intro": 0.14999594059820148
|
||||
}
|
||||
}
|
||||
},
|
||||
"scope": "System Chrome desktop/mobile emulation; native Web Audio; local built app; intentional fault injections excluded from normal-flow error totals.",
|
||||
"sandboxEvidence": "chrome-sandbox-final.json"
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
"""이전 모든 증거·voice·source·구간의 불변성과 새 dist 바이트를 검증한다."""
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
ROOT=Path(__file__).resolve().parents[3]
|
||||
EVIDENCE=Path(__file__).resolve().parent
|
||||
def sha(path): return hashlib.sha256(path.read_bytes()).hexdigest()
|
||||
history=json.loads((EVIDENCE/'history-sha256.json').read_text())
|
||||
baseline=json.loads((ROOT/'.agent/evidence-v0.2.5/baseline.json').read_text())
|
||||
for path,expected in {**history,**baseline['immutable'],**baseline['voiceWavs']}.items():
|
||||
assert sha(ROOT/path)==expected,path
|
||||
plan=json.loads((ROOT/'.agent/AMBIENCE-SOURCES-v0.2.3.json').read_text())
|
||||
current=json.loads((ROOT/'public/ambience/manifest.json').read_text())
|
||||
rejected=json.loads((EVIDENCE/'rejected-loudnorm-bundle/manifest.json').read_text())
|
||||
sources=[]
|
||||
for asset,entry,old in zip(plan['assets'],current['files'],rejected['files']):
|
||||
assert all(entry[key]==value for key,value in asset.items())
|
||||
assert entry['sha256']!=old['sha256']
|
||||
assert entry['conversion']['startSeconds']==asset['selectedSegmentStartSeconds']
|
||||
environment=asset['environmentId']
|
||||
ext='.mp3' if environment in ('theater','department') else '.flac' if environment=='rain' else '.ogg'
|
||||
path=Path('/tmp/findword-ambience-sources')/(environment+ext)
|
||||
assert path.stat().st_size==asset['sourceBytes'] and sha(path)==asset['expectedSourceSha256']
|
||||
sources.append({'environmentId':environment,'sourceSha256':sha(path),'sourceBytes':path.stat().st_size,'startSeconds':asset['selectedSegmentStartSeconds']})
|
||||
public=list((ROOT/'public').rglob('*'))
|
||||
for path in public:
|
||||
if path.is_file(): assert path.read_bytes()==(ROOT/'dist'/path.relative_to(ROOT/'public')).read_bytes(),path
|
||||
report={'historicalV025FilesPreserved':len(history),'earlierImmutableFilesPreserved':len(baseline['immutable']),
|
||||
'voiceWavsPreserved':len(baseline['voiceWavs']),'sourcePlanSha256':sha(ROOT/'.agent/AMBIENCE-SOURCES-v0.2.3.json'),
|
||||
'sourceAndSegmentsPreserved':sources,'newAmbienceCount':8,'allPublicFilesMatchDist':True}
|
||||
with (EVIDENCE/'preservation.json').open('x') as stream: stream.write(json.dumps(report,indent=2)+'\n')
|
||||
print(json.dumps(report,indent=2))
|
||||
@@ -0,0 +1,74 @@
|
||||
{
|
||||
"cwd": "/home/hermes/worktrees/find-word-v0.2.5",
|
||||
"noSandboxFlagAbsent": true,
|
||||
"processes": [
|
||||
{
|
||||
"pid": 1569019,
|
||||
"argv": [
|
||||
"/opt/google/chrome/chrome_crashpad_handler",
|
||||
"--monitor-self",
|
||||
"--monitor-self-annotation=ptype=crashpad-handler",
|
||||
"--database=/home/hermes/.config/google-chrome/Crash Reports",
|
||||
"--url=https://clients2.google.com/cr/report",
|
||||
"--annotation=channel=",
|
||||
"--annotation=lsb-release=Ubuntu 24.04.3 LTS",
|
||||
"--annotation=plat=Linux",
|
||||
"--annotation=prod=Chrome_Linux",
|
||||
"--annotation=ver=146.0.7680.80",
|
||||
"--initial-client-fd=7",
|
||||
"--shared-client-connection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pid": 1569024,
|
||||
"argv": [
|
||||
"/opt/google/chrome/chrome_crashpad_handler",
|
||||
"--no-periodic-tasks",
|
||||
"--monitor-self-annotation=ptype=crashpad-handler",
|
||||
"--database=/home/hermes/.config/google-chrome/Crash Reports",
|
||||
"--url=https://clients2.google.com/cr/report",
|
||||
"--annotation=channel=",
|
||||
"--annotation=lsb-release=Ubuntu 24.04.3 LTS",
|
||||
"--annotation=plat=Linux",
|
||||
"--annotation=prod=Chrome_Linux",
|
||||
"--annotation=ver=146.0.7680.80",
|
||||
"--initial-client-fd=4",
|
||||
"--shared-client-connection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pid": 1569034,
|
||||
"argv": [
|
||||
"/opt/google/chrome/chrome_crashpad_handler",
|
||||
"--monitor-self",
|
||||
"--monitor-self-annotation=ptype=crashpad-handler",
|
||||
"--database=/home/hermes/.config/google-chrome/Crash Reports",
|
||||
"--url=https://clients2.google.com/cr/report",
|
||||
"--annotation=channel=",
|
||||
"--annotation=lsb-release=Ubuntu 24.04.3 LTS",
|
||||
"--annotation=plat=Linux",
|
||||
"--annotation=prod=Chrome_Linux",
|
||||
"--annotation=ver=146.0.7680.80",
|
||||
"--initial-client-fd=7",
|
||||
"--shared-client-connection"
|
||||
]
|
||||
},
|
||||
{
|
||||
"pid": 1569036,
|
||||
"argv": [
|
||||
"/opt/google/chrome/chrome_crashpad_handler",
|
||||
"--no-periodic-tasks",
|
||||
"--monitor-self-annotation=ptype=crashpad-handler",
|
||||
"--database=/home/hermes/.config/google-chrome/Crash Reports",
|
||||
"--url=https://clients2.google.com/cr/report",
|
||||
"--annotation=channel=",
|
||||
"--annotation=lsb-release=Ubuntu 24.04.3 LTS",
|
||||
"--annotation=plat=Linux",
|
||||
"--annotation=prod=Chrome_Linux",
|
||||
"--annotation=ver=146.0.7680.80",
|
||||
"--initial-client-fd=4",
|
||||
"--shared-client-connection"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
{
|
||||
"measurementFilter": "ebur128=peak=true",
|
||||
"targetIntegratedLUFS": -32.5,
|
||||
"toleranceLU": 0.2,
|
||||
"maximumSpreadLU": 0.4,
|
||||
"truePeakCeilingDBTP": -6,
|
||||
"ffmpegVersion": "ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers",
|
||||
"scriptSha256": "4dcfd19fcc43379489e4720e02b61ee245f4a33e30260ba6d70e896b76ca48ac",
|
||||
"spreadLU": 0.0,
|
||||
"passed": true,
|
||||
"files": [
|
||||
{
|
||||
"file": "public/ambience/cafe.wav",
|
||||
"sha256": "864a81571a2e25a99d6408aa282570e7996c7ace432cf4f4f294677ea5bcad63",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -18.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 0.5 LU\n Threshold: -52.6 LUFS\n LRA low: -32.8 LUFS\n LRA high: -32.3 LUFS\n\n True peak:\n Peak: -18.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/department.wav",
|
||||
"sha256": "93e5c23bff2b19716dd21111746837a4df8c52d4b88c6874e57828d09ca5507e",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.6,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 4.2 LU\n Threshold: -52.5 LUFS\n LRA low: -35.1 LUFS\n LRA high: -30.9 LUFS\n\n True peak:\n Peak: -16.6 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/mall.wav",
|
||||
"sha256": "a0a135e319ed70f55b03c6e266fb047e53db8008277a6ba8b855a05a1b82662f",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 1.4 LU\n Threshold: -52.4 LUFS\n LRA low: -33.1 LUFS\n LRA high: -31.7 LUFS\n\n True peak:\n Peak: -12.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/market.wav",
|
||||
"sha256": "7178307c48c192ac396dcd3c880c377bf56b45e829b459b1feca9f986437e632",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -6.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.4 LUFS\n\n Loudness range:\n LRA: 6.5 LU\n Threshold: -52.6 LUFS\n LRA low: -36.4 LUFS\n LRA high: -29.9 LUFS\n\n True peak:\n Peak: -6.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/rain.wav",
|
||||
"sha256": "1842a717e6c77811cb6d6cb09d364e8ef644d50e6beb97d3d187c96e95d85784",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.1,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 8.4 LU\n Threshold: -54.2 LUFS\n LRA low: -37.7 LUFS\n LRA high: -29.3 LUFS\n\n True peak:\n Peak: -12.1 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/street.wav",
|
||||
"sha256": "dace0969087539e5b67fb6fac11b759e81626574230ca7f8d2feb484753656a8",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -10.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 4.6 LU\n Threshold: -52.4 LUFS\n LRA low: -34.6 LUFS\n LRA high: -29.9 LUFS\n\n True peak:\n Peak: -10.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/subway.wav",
|
||||
"sha256": "e85cf77a9baa7560fb09966c4eda3b128b92647bc4c54c417a29b4e0f4ac129f",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.2,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 4.9 LU\n Threshold: -52.2 LUFS\n LRA low: -35.0 LUFS\n LRA high: -30.1 LUFS\n\n True peak:\n Peak: -16.2 dBFS\n"
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/theater.wav",
|
||||
"sha256": "634fc25e8c4e9dcbab97688bc4c0ef9b0299cc7c4c921781a70740aabe46b900",
|
||||
"bytes": 576044,
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.1,
|
||||
"rawSummary": "\n\n Integrated loudness:\n I: -32.5 LUFS\n Threshold: -42.5 LUFS\n\n Loudness range:\n LRA: 1.0 LU\n Threshold: -52.3 LUFS\n LRA low: -32.8 LUFS\n LRA high: -31.8 LUFS\n\n True peak:\n Peak: -16.1 dBFS\n"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"node": "v26.7.0",
|
||||
"npm": "11.19.0",
|
||||
"python": "Python 3.11.16",
|
||||
"ffmpeg": "ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers",
|
||||
"chrome": "Google Chrome 146.0.7680.80 ",
|
||||
"gitHead": "812540c7438639f25b886cfd620201d92de15362"
|
||||
}
|
||||
@@ -0,0 +1,921 @@
|
||||
{
|
||||
"chrome": "146.0.7680.80",
|
||||
"fixedGain": 0.4198884518664126,
|
||||
"rows": [
|
||||
{
|
||||
"environment": "street",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.3102891147136688,
|
||||
"rms": 0.06252206625772674,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 0.06160997732426304,
|
||||
"observedAt": 0.26702947845804986
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 0.06160997732426304
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.967981859410431,
|
||||
"rate": 44100,
|
||||
"peak": 0.17974460124969482,
|
||||
"rms": 0.02999999999326921,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 7.4675963718820855
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "street",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.3102891147136688,
|
||||
"rms": 0.06252206625772674,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 3.0105442176870745,
|
||||
"observedAt": 3.239183673469388
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 3.0105442176870745
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.519977324263039,
|
||||
"rate": 44100,
|
||||
"peak": 0.16514445841312408,
|
||||
"rms": 0.02999999999978318,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 10.416530612244896
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "street",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.3102891147136688,
|
||||
"rms": 0.06252206625772674,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 4.496621315192743,
|
||||
"observedAt": 4.713650793650793
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 4.496621315192743
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.375986394557824,
|
||||
"rate": 44100,
|
||||
"peak": 0.20497125387191772,
|
||||
"rms": 0.029999999997565467,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 11.902607709750566
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "mall",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.2380896806716919,
|
||||
"rms": 0.025604196806659114,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 6.052358276643991,
|
||||
"observedAt": 6.257777777777778
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 6.052358276643991
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 5.135986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1409970372915268,
|
||||
"rms": 0.02999999999867479,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 13.458344671201814
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "mall",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.2380896806716919,
|
||||
"rms": 0.025604196806659114,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 7.526825396825397,
|
||||
"observedAt": 7.743854875283446
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 7.526825396825397
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.223990929705216,
|
||||
"rate": 44100,
|
||||
"peak": 0.16981855034828186,
|
||||
"rms": 0.02999999999876478,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 14.93281179138322
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "mall",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.2380896806716919,
|
||||
"rms": 0.025604196806659114,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 8.966462585034014,
|
||||
"observedAt": 9.1718820861678
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 8.966462585034014
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 3.9599773242630385,
|
||||
"rate": 44100,
|
||||
"peak": 0.11458951234817505,
|
||||
"rms": 0.03000000000961819,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 16.372448979591837
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "theater",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15725064277648926,
|
||||
"rms": 0.025421192976724967,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 10.406099773242632,
|
||||
"observedAt": 10.611519274376418
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 10.406099773242632
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 3.9839909297052154,
|
||||
"rate": 44100,
|
||||
"peak": 0.1256658285856247,
|
||||
"rms": 0.029999999997168104,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 17.812086167800455
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "theater",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15725064277648926,
|
||||
"rms": 0.025421192976724967,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 11.929909297052156,
|
||||
"observedAt": 12.1556462585034
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 11.929909297052156
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.415986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.17899024486541748,
|
||||
"rms": 0.029999999996525216,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 19.335895691609977
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "theater",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15725064277648926,
|
||||
"rms": 0.025421192976724967,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 13.331814058956917,
|
||||
"observedAt": 13.548843537414966
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 13.331814058956917
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.487981859410431,
|
||||
"rate": 44100,
|
||||
"peak": 0.17440009117126465,
|
||||
"rms": 0.030000000001456025,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 20.73780045351474
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "department",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.14809074997901917,
|
||||
"rms": 0.024795763769841984,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 14.817891156462586,
|
||||
"observedAt": 15.034920634920635
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 14.817891156462586
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.127981859410431,
|
||||
"rate": 44100,
|
||||
"peak": 0.15355078876018524,
|
||||
"rms": 0.029999999998472637,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 22.223877551020408
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "department",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.14809074997901917,
|
||||
"rms": 0.024795763769841984,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 16.048548752834467,
|
||||
"observedAt": 16.265578231292515
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 16.048548752834467
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 4.007981859410431,
|
||||
"rate": 44100,
|
||||
"peak": 0.11648130416870117,
|
||||
"rms": 0.02999999999713933,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 23.45453514739229
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "department",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.14809074997901917,
|
||||
"rms": 0.024795763769841984,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 17.186326530612245,
|
||||
"observedAt": 17.403356009070293
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 17.186326530612245
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.2,
|
||||
"rate": 44100,
|
||||
"peak": 0.17750407755374908,
|
||||
"rms": 0.030000000004431423,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 24.592312925170067
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "market",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.48508501052856445,
|
||||
"rms": 0.023929933473605676,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 18.3008843537415,
|
||||
"observedAt": 18.517913832199547
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 18.3008843537415
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.223990929705216,
|
||||
"rate": 44100,
|
||||
"peak": 0.16981855034828186,
|
||||
"rms": 0.02999999999876478,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 25.70687074829932
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "market",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.48508501052856445,
|
||||
"rms": 0.023929933473605676,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 19.438662131519276,
|
||||
"observedAt": 19.655691609977325
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 19.438662131519276
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 5.159977324263038,
|
||||
"rate": 44100,
|
||||
"peak": 0.13959355652332306,
|
||||
"rms": 0.02999999999427438,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 26.844648526077098
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "market",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.48508501052856445,
|
||||
"rms": 0.023929933473605676,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 20.83185941043084,
|
||||
"observedAt": 21.04888888888889
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 20.83185941043084
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 10.799977324263038,
|
||||
"rate": 44100,
|
||||
"peak": 0.17593282461166382,
|
||||
"rms": 0.030000000001118382,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 28.237845804988662
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "subway",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15436159074306488,
|
||||
"rms": 0.02903130670200797,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 22.039297052154197,
|
||||
"observedAt": 22.244716553287983
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 22.039297052154197
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 5.015986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.14938956499099731,
|
||||
"rms": 0.03000000000302188,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 29.44528344671202
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "subway",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15436159074306488,
|
||||
"rms": 0.02903130670200797,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 23.2002947845805,
|
||||
"observedAt": 23.42893424036281
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 23.2002947845805
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 4.919977324263039,
|
||||
"rate": 44100,
|
||||
"peak": 0.13944819569587708,
|
||||
"rms": 0.030000000000117072,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 30.60628117913832
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "subway",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15436159074306488,
|
||||
"rms": 0.02903130670200797,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 24.221972789115647,
|
||||
"observedAt": 24.427392290249433
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 24.221972789115647
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.127981859410431,
|
||||
"rate": 44100,
|
||||
"peak": 0.15355078876018524,
|
||||
"rms": 0.029999999998472637,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 31.627959183673468
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "cafe",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.12247952073812485,
|
||||
"rms": 0.02407895222985429,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 25.359750566893425,
|
||||
"observedAt": 25.576780045351473
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 25.359750566893425
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 11.255986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1578369140625,
|
||||
"rms": 0.029999999993818475,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 32.765736961451246
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "cafe",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.12247952073812485,
|
||||
"rms": 0.02407895222985429,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 26.416258503401362,
|
||||
"observedAt": 26.644897959183673
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 26.416258503401362
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.415986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.18703582882881165,
|
||||
"rms": 0.02999999999685852,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 33.82224489795919
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "cafe",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.12247952073812485,
|
||||
"rms": 0.02407895222985429,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 27.379886621315194,
|
||||
"observedAt": 27.58530612244898
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 27.379886621315194
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.415986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.18703582882881165,
|
||||
"rms": 0.02999999999685852,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 34.785873015873015
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "rain",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.24721868336200714,
|
||||
"rms": 0.027485239070310512,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 28.30868480725624,
|
||||
"observedAt": 28.525714285714287
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 28.30868480725624
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.391995464852608,
|
||||
"rate": 44100,
|
||||
"peak": 0.16964103281497955,
|
||||
"rms": 0.02999999999711925,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 35.71467120181406
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "rain",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.24721868336200714,
|
||||
"rms": 0.027485239070310512,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 29.35358276643991,
|
||||
"observedAt": 29.57061224489796
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 29.35358276643991
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 10.871995464852608,
|
||||
"rate": 44100,
|
||||
"peak": 0.15582337975502014,
|
||||
"rms": 0.030000000001875603,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 36.759569160997735
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "rain",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.24721868336200714,
|
||||
"rms": 0.027485239070310512,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 30.375260770975057,
|
||||
"observedAt": 30.592290249433105
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 30.375260770975057
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.39997732426304,
|
||||
"rate": 44100,
|
||||
"peak": 0.16848142445087433,
|
||||
"rms": 0.03000000000149854,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 37.78124716553288
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"failed": [],
|
||||
"external": []
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"errors": [],
|
||||
"failed": [],
|
||||
"external": [],
|
||||
"audio": {
|
||||
"starts": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.4399773242630385
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.391995464852608
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 5.0639909297052155
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 4.871995464852608
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.4399773242630385
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.4399773242630385
|
||||
}
|
||||
],
|
||||
"stops": 15
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,921 @@
|
||||
{
|
||||
"chrome": "146.0.7680.80",
|
||||
"fixedGain": 0.4198884518664126,
|
||||
"rows": [
|
||||
{
|
||||
"environment": "street",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.3102891147136688,
|
||||
"rms": 0.06252206625772674,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 0.30541950113378685,
|
||||
"observedAt": 0.5108390022675737
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 0.30541950113378685
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.919977324263039,
|
||||
"rate": 44100,
|
||||
"peak": 0.1778830587863922,
|
||||
"rms": 0.030000000000867052,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 7.711405895691609
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "street",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.3102891147136688,
|
||||
"rms": 0.06252206625772674,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 1.245827664399093,
|
||||
"observedAt": 1.4512471655328798
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 1.245827664399093
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.32798185941043,
|
||||
"rate": 44100,
|
||||
"peak": 0.16461747884750366,
|
||||
"rms": 0.03000000000252798,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 8.651814058956916
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "street",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.3102891147136688,
|
||||
"rms": 0.06252206625772674,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 2.139795918367347,
|
||||
"observedAt": 2.3568253968253967
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 2.139795918367347
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.2719954648526075,
|
||||
"rate": 44100,
|
||||
"peak": 0.17151515185832977,
|
||||
"rms": 0.029999999997388373,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 9.54578231292517
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "mall",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.2380896806716919,
|
||||
"rms": 0.025604196806659114,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 2.9524943310657594,
|
||||
"observedAt": 3.1695238095238096
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 2.9524943310657594
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.231995464852607,
|
||||
"rate": 44100,
|
||||
"peak": 0.1556241363286972,
|
||||
"rms": 0.029999999999420414,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 10.358480725623583
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "mall",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.2380896806716919,
|
||||
"rms": 0.025604196806659114,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 3.730362811791383,
|
||||
"observedAt": 3.947392290249433
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 3.730362811791383
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.367981859410431,
|
||||
"rate": 44100,
|
||||
"peak": 0.1556730568408966,
|
||||
"rms": 0.030000000004112758,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 11.136349206349205
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "mall",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.2380896806716919,
|
||||
"rms": 0.025604196806659114,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 4.601111111111111,
|
||||
"observedAt": 4.818140589569161
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 4.601111111111111
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.8959863945578235,
|
||||
"rate": 44100,
|
||||
"peak": 0.17480117082595825,
|
||||
"rms": 0.03000000000458932,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 12.007097505668934
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "theater",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15725064277648926,
|
||||
"rms": 0.025421192976724967,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 5.483469387755102,
|
||||
"observedAt": 5.688888888888889
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 5.483469387755102
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 3.9839909297052154,
|
||||
"rate": 44100,
|
||||
"peak": 0.11659345775842667,
|
||||
"rms": 0.030000000001530757,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 12.889455782312925
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "theater",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15725064277648926,
|
||||
"rms": 0.025421192976724967,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 6.35421768707483,
|
||||
"observedAt": 6.559637188208617
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 6.35421768707483
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 5.159977324263038,
|
||||
"rate": 44100,
|
||||
"peak": 0.13959355652332306,
|
||||
"rms": 0.02999999999427438,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 13.760204081632653
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "theater",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15725064277648926,
|
||||
"rms": 0.025421192976724967,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 7.213356009070295,
|
||||
"observedAt": 7.430385487528345
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 7.213356009070295
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.231995464852607,
|
||||
"rate": 44100,
|
||||
"peak": 0.16913661360740662,
|
||||
"rms": 0.030000000002294008,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 14.619342403628117
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "department",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.14809074997901917,
|
||||
"rms": 0.024795763769841984,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 8.037664399092971,
|
||||
"observedAt": 8.25469387755102
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 8.037664399092971
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 4.799977324263039,
|
||||
"rate": 44100,
|
||||
"peak": 0.14491155743598938,
|
||||
"rms": 0.02999999999441348,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 15.443650793650793
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "department",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.14809074997901917,
|
||||
"rms": 0.024795763769841984,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 8.966462585034014,
|
||||
"observedAt": 9.183492063492064
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 8.966462585034014
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 10.871995464852608,
|
||||
"rate": 44100,
|
||||
"peak": 0.1587616354227066,
|
||||
"rms": 0.029999999997777124,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 16.372448979591837
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "department",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.14809074997901917,
|
||||
"rms": 0.024795763769841984,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 9.697891156462585,
|
||||
"observedAt": 9.914920634920636
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 9.697891156462585
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 3.9839909297052154,
|
||||
"rate": 44100,
|
||||
"peak": 0.1256658285856247,
|
||||
"rms": 0.029999999997168104,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 17.103877551020407
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "market",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.48508501052856445,
|
||||
"rms": 0.023929933473605676,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 10.406099773242632,
|
||||
"observedAt": 10.62312925170068
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 10.406099773242632
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 5.039977324263038,
|
||||
"rate": 44100,
|
||||
"peak": 0.1459202766418457,
|
||||
"rms": 0.029999999996415495,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 17.812086167800455
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "market",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.48508501052856445,
|
||||
"rms": 0.023929933473605676,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 11.125918367346939,
|
||||
"observedAt": 11.34294784580499
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 11.125918367346939
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.231995464852607,
|
||||
"rate": 44100,
|
||||
"peak": 0.1556241363286972,
|
||||
"rms": 0.029999999999420414,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 18.531904761904762
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "market",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.48508501052856445,
|
||||
"rms": 0.023929933473605676,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 11.85734693877551,
|
||||
"observedAt": 12.07437641723356
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 11.85734693877551
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 5.039977324263038,
|
||||
"rate": 44100,
|
||||
"peak": 0.1330045908689499,
|
||||
"rms": 0.02999999999781341,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 19.263333333333332
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "subway",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15436159074306488,
|
||||
"rms": 0.02903130670200797,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 12.681655328798186,
|
||||
"observedAt": 12.887074829931972
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 12.681655328798186
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.127981859410431,
|
||||
"rate": 44100,
|
||||
"peak": 0.15355078876018524,
|
||||
"rms": 0.029999999998472637,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 20.087641723356008
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "subway",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15436159074306488,
|
||||
"rms": 0.02903130670200797,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 13.45952380952381,
|
||||
"observedAt": 13.664943310657597
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 13.45952380952381
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.583990929705215,
|
||||
"rate": 44100,
|
||||
"peak": 0.17186026275157928,
|
||||
"rms": 0.029999999998832856,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 20.865510204081634
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "subway",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.15436159074306488,
|
||||
"rms": 0.02903130670200797,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 14.22578231292517,
|
||||
"observedAt": 14.44281179138322
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 14.22578231292517
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.447981859410431,
|
||||
"rate": 44100,
|
||||
"peak": 0.14815036952495575,
|
||||
"rms": 0.0300000000042685,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 21.631768707482994
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "cafe",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.12247952073812485,
|
||||
"rms": 0.02407895222985429,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 14.852721088435375,
|
||||
"observedAt": 15.069750566893424
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 14.852721088435375
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 5.015986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1483888179063797,
|
||||
"rms": 0.029999999998264474,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 22.2587074829932
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "cafe",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.12247952073812485,
|
||||
"rms": 0.02407895222985429,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 15.537709750566894,
|
||||
"observedAt": 15.754739229024944
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 15.537709750566894
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 4.799977324263039,
|
||||
"rate": 44100,
|
||||
"peak": 0.14491155743598938,
|
||||
"rms": 0.02999999999441348,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 22.943696145124715
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "cafe",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.12247952073812485,
|
||||
"rms": 0.02407895222985429,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 16.269138321995467,
|
||||
"observedAt": 16.474557823129253
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 16.269138321995467
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 10.775986394557822,
|
||||
"rate": 44100,
|
||||
"peak": 0.16052959859371185,
|
||||
"rms": 0.030000000002635092,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 23.675124716553288
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "rain",
|
||||
"db": -12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.24721868336200714,
|
||||
"rms": 0.027485239070310512,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 17.151496598639458,
|
||||
"observedAt": 17.38013605442177
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 17.151496598639458
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.231995464852607,
|
||||
"rate": 44100,
|
||||
"peak": 0.1556241363286972,
|
||||
"rms": 0.029999999999420414,
|
||||
"scheduled": 0.10547121049908052,
|
||||
"master": 1,
|
||||
"scheduledAt": 24.55748299319728
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "rain",
|
||||
"db": 0,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.24721868336200714,
|
||||
"rms": 0.027485239070310512,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 17.89453514739229,
|
||||
"observedAt": 18.11156462585034
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 17.89453514739229
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 3.9119954648526076,
|
||||
"rate": 44100,
|
||||
"peak": 0.11137215793132782,
|
||||
"rms": 0.02999999999685517,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"scheduledAt": 25.30052154195011
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"environment": "rain",
|
||||
"db": 12,
|
||||
"sources": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12,
|
||||
"rate": 44100,
|
||||
"peak": 0.24721868336200714,
|
||||
"rms": 0.027485239070310512,
|
||||
"scheduled": 0.4198884518664126,
|
||||
"master": 1,
|
||||
"observed": 0.4198884665966034,
|
||||
"scheduledAt": 18.567913832199547,
|
||||
"observedAt": 18.796553287981858
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823,
|
||||
"rate": 44100,
|
||||
"peak": 0.1499929130077362,
|
||||
"rms": 0.03000000000537984,
|
||||
"scheduled": 0.7557992133595427,
|
||||
"master": 1,
|
||||
"scheduledAt": 18.567913832199547
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.279977324263038,
|
||||
"rate": 44100,
|
||||
"peak": 0.14110307395458221,
|
||||
"rms": 0.029999999996657437,
|
||||
"scheduled": 1.6716060352062583,
|
||||
"master": 1,
|
||||
"scheduledAt": 25.97390022675737
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"errors": [],
|
||||
"failed": [],
|
||||
"external": []
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
{
|
||||
"errors": [],
|
||||
"failed": [],
|
||||
"external": [],
|
||||
"audio": {
|
||||
"starts": [
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.351995464852608
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 8.207981859410431
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 4.799977324263039
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.4399773242630385
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.055986394557823
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.583990929705215
|
||||
},
|
||||
{
|
||||
"loop": true,
|
||||
"duration": 12
|
||||
},
|
||||
{
|
||||
"loop": false,
|
||||
"duration": 7.583990929705215
|
||||
}
|
||||
],
|
||||
"stops": 15
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
{
|
||||
"combinations": 20200,
|
||||
"maximum": 0.6546804814413929,
|
||||
"voicePeak": 0.2052977830171585,
|
||||
"backgroundPeak": 0.471954345703125,
|
||||
"introPeak": 0.14995422959327698,
|
||||
"bounds": {
|
||||
"background": 0.55,
|
||||
"voice": 0.25,
|
||||
"intro": 0.2
|
||||
},
|
||||
"fixedGain": 0.4198884518664126,
|
||||
"backgroundGains": [
|
||||
0.4198884518664126
|
||||
],
|
||||
"allSignalBoundsVerifiedAtRatesHz": [
|
||||
24000,
|
||||
44100,
|
||||
48000,
|
||||
96000
|
||||
],
|
||||
"browserResampledPeakMaxima": {
|
||||
"background": 0.4879775941371918,
|
||||
"voice": 0.20585650454525403,
|
||||
"intro": 0.14999594059820148
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,152 @@
|
||||
{
|
||||
".agent/evidence-v0.2.5/14-format.log": "4d070d2c56619a8695ee61ce414cc7702fd2ecb7f8489e419f79a9c0996df4cb",
|
||||
".agent/evidence-v0.2.5/secret-scan.json": "47b71a0fcd639b6de378eec360457ec1b71bd98954288accfe49d566d77fe94b",
|
||||
".agent/evidence-v0.2.5/environment.json": "e235f5f53f933af7218715561d2b716d5b1a8ac3da482259d9438ef40afde079",
|
||||
".agent/evidence-v0.2.5/chrome-sandbox.json": "f663dcdd2479fa0ca088416f70c15ccf1336c7016b2edbc7ae11c1e9d7424ae4",
|
||||
".agent/evidence-v0.2.5/01-loudness-RED.log": "8449091158041b0020e79fb9590014b8c80e8b783d9f1b5f52f91e47a9621d92",
|
||||
".agent/evidence-v0.2.5/10-generation.log": "ce2e395db0bfce47953cd7c9ff3311a733376d8109941f7f04a919659f0d95f8",
|
||||
".agent/evidence-v0.2.5/20-asr.log": "9ea57c5166edb70e1af180d95725bc92e04eafa6d0f0a4085eaa2029167f4e41",
|
||||
".agent/evidence-v0.2.5/final-desktop-all-voices-resampled-bounds.json": "decd928988fef95050f033228748869af2eee2c47397228fbe96f4e9994ea3c4",
|
||||
".agent/evidence-v0.2.5/12-integrity-RED.log": "e8bd622078a72b3becf1158bcae3855c234fa4d7633e9d58e45452548fb2806d",
|
||||
".agent/evidence-v0.2.5/30-unit.log": "5e3608e3b43626bee73f654c677a796d1de54ad3f90263606a43219c5b0c2dd2",
|
||||
".agent/evidence-v0.2.5/28-lint.log": "f20f641f58b253e0c54d7c0b64369353a373488b03211d7a10725f576ce508ed",
|
||||
".agent/evidence-v0.2.5/39-secret-scan.log": "f0ce65220214f9bc2a44cbcfb419cf73fa5e920f854d4f82131e165d57489da4",
|
||||
".agent/evidence-v0.2.5/29-python.log": "63d16f9e8b3d570f706cb7145ca310db570b43cf5a36cc533fc378c4e83cebe3",
|
||||
".agent/evidence-v0.2.5/05-generation.log": "ce2e395db0bfce47953cd7c9ff3311a733376d8109941f7f04a919659f0d95f8",
|
||||
".agent/evidence-v0.2.5/final-mobile-runtime-audit.json": "05629298db1bdc2fd28b370259f7d9f5b71710f8051e23e31cc21cff91a0f22e",
|
||||
".agent/evidence-v0.2.5/07-loudness-GREEN.log": "b551cc4c44c90eaa787f90a045cecd8c63816af308fdc4b5e4d38378337dc25b",
|
||||
".agent/evidence-v0.2.5/38-preservation.log": "920ce87ea86209ae040177a3d80c0b6bb9347cf2e4635aa28e9032fb797c27aa",
|
||||
".agent/evidence-v0.2.5/16-converter-GREEN.log": "284e0b9efdfbb5462b093b211f92596607b16a7775d5cd3ef6e996202adfb1b8",
|
||||
".agent/evidence-v0.2.5/02-loudness-RED.log": "ab3c089fff304f11204e474c797911c385e6a1ff615272fe69af09d25f8c46b9",
|
||||
".agent/evidence-v0.2.5/27-format.log": "db2564a50753e4d7163ceaf4720e57a09386f02912ded00ad53ad0a978fcc634",
|
||||
".agent/evidence-v0.2.5/25-reproducibility.log": "d5d99d942eb0067fe77caf9be6500d3270efd575c19dfbbdfa629c69e1e8b180",
|
||||
".agent/evidence-v0.2.5/06-generator-GREEN.log": "18694e1a89c17a81103d7ac0cc08624cc087d579544c0ab86e24a779bdb1e7a7",
|
||||
".agent/evidence-v0.2.5/baseline.json": "c6f659754007e69a739f37018f4477a6a639af10b63304d9d553f3ddc11894d0",
|
||||
".agent/evidence-v0.2.5/final-desktop-109-versioned-WAV-integrity.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/final-asr.json": "03c8ad5025a0a62ab195c3425df8741cbd74785a215000a981ccdcf725213cff",
|
||||
".agent/evidence-v0.2.5/preservation.json": "57ca4e858a7a569840dd05e64a78086e9874beff167b181d0b827e50723b97a4",
|
||||
".agent/evidence-v0.2.5/40-final-checks.log": "968c54f574d37b1852b65f9c17ebd4bcebd9834336329479b86730d48a180acd",
|
||||
".agent/evidence-v0.2.5/final-mobile-all-voices-resampled-bounds.json": "decd928988fef95050f033228748869af2eee2c47397228fbe96f4e9994ea3c4",
|
||||
".agent/evidence-v0.2.5/09-runtime-GREEN.log": "3734c3bf8472f1de50a9555c2fecf9181bc0b4fe0681790b9d8f75037df5d5c2",
|
||||
".agent/evidence-v0.2.5/03-generator-RED.log": "4594b04ed7f7c8aaebb54cd8f82787f22281b2d1296c308687a6fc41e0538ad0",
|
||||
".agent/evidence-v0.2.5/18-format.log": "3e363eb237562415dfda246642827234e725fd712f10d4f6f3e0960417cccaa6",
|
||||
".agent/evidence-v0.2.5/22-build-contract-RED.log": "f764c42a1f5d39b0a98fb9231a35520b16c078fb36177553c0f3ffbdc4b2fe9d",
|
||||
".agent/evidence-v0.2.5/independent-loudness.json": "90634d6b43183dff73823c9432f6f3f5624c5a0d16279a2f1cf24fcb7e20debc",
|
||||
".agent/evidence-v0.2.5/gain-math.json": "961fa37836f6367984060259082ab5bceb4675f3bd35f2a2c336336cfd4155b3",
|
||||
".agent/evidence-v0.2.5/final-mobile-actual-gain-nodes.json": "56dc26260891a330f056e4d4a7d5357f6f0db45f4693c86ace475440ab971422",
|
||||
".agent/evidence-v0.2.5/24-release-GREEN.log": "f270a822067256c36e5afa879de654be483e532d1cd4059f0175a697ae1ad814",
|
||||
".agent/evidence-v0.2.5/summarize-browser.py": "9f141c68de8fc64074fcfa3246ce4f38dea67cf7d6787c1d7ec17b40a8a1e5a4",
|
||||
".agent/evidence-v0.2.5/desktop-all-voices-resampled-bounds.json": "8f31aa6406c9a19369e85c04ee165b2b96975c4f0d28b139c21ff0a724e8485e",
|
||||
".agent/evidence-v0.2.5/35-independent-measurement.log": "857db285f460b874e9c7c909f89a798f6dba7bffb18f873209b97066efea4b47",
|
||||
".agent/evidence-v0.2.5/32-lint.log": "f20f641f58b253e0c54d7c0b64369353a373488b03211d7a10725f576ce508ed",
|
||||
".agent/evidence-v0.2.5/secret-scan.py": "cbb65f8025db01046ff3d96b719e4235e7a95be7f53ef83290c5f71fbc9c0009",
|
||||
".agent/evidence-v0.2.5/19-build-initial.log": "20eea57d6803b0dc1a439323633dedb339b0794806896d8004e45694e4f8bbde",
|
||||
".agent/evidence-v0.2.5/34-unit.log": "0f33732c9a3dfcc9018ce4098299ba4d3793fb466f05d856f7c14c53b65e9f9b",
|
||||
".agent/evidence-v0.2.5/browser-summary.json": "4c3d3bad2794b07b2f80d4e2c3c6703bbe0b8487f1c0afa5c72b5d654249f216",
|
||||
".agent/evidence-v0.2.5/15-lint-initial.log": "4de1ea190cf7195c905192a2a84fffb29ff1730dc4afdb27d034cfcc40c761bd",
|
||||
".agent/evidence-v0.2.5/browser-results.json": "d734d9dc79592425ae70ce8dd2afbc08add324f224d6f781491f826b7659cfe3",
|
||||
".agent/evidence-v0.2.5/final-mobile-109-versioned-WAV-integrity.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/measure.py": "4cae1bdb8dcc6b6032463f4b662b0ebc3d221032a4b6599909b999ff24822370",
|
||||
".agent/evidence-v0.2.5/chrome-sandbox-final.json": "ea71ff8c49a8fa317e677cb75af9fd76ac08d3948bd793dfc5906788effadbdc",
|
||||
".agent/evidence-v0.2.5/08-loader-RED.log": "22223c4c25d8754c8740abecb530bb0aabfcd4b55b8ea29e9ba3a19804fac53b",
|
||||
".agent/evidence-v0.2.5/23-format.log": "81c22719f2974a287f21a096a11ed3fe713a155b07c9dcffcea062c6ecd14700",
|
||||
".agent/evidence-v0.2.5/17-snr-copy-RED.log": "3d04eeef604ae295038fce1faf413f38cc24ec84149699e30f2f9ac4bae7e16f",
|
||||
".agent/evidence-v0.2.5/browser-results-initial.json": "ffd0155b0201615cd8923eb6f9d3a545e23b65e42f3be35423574cf9ebf7e56c",
|
||||
".agent/evidence-v0.2.5/11-version-RED.log": "5a15c20504b4e4cfb07c6b3c9b023cb190fde3b5cd7f0dd39329ae3922527a95",
|
||||
".agent/evidence-v0.2.5/36-build.log": "f7f11c4f59160688b71704b5ce4f9802947ccc90f67451943cd24c9fd786aa14",
|
||||
".agent/evidence-v0.2.5/final-desktop-actual-gain-nodes.json": "9248583af4ef13c687ede9074dd485e48b5e46eed0d729cbb202dd50d72fa561",
|
||||
".agent/evidence-v0.2.5/mobile-actual-gain-nodes.json": "e64054c04b505a008341a898f7d55c32e8f1f3be6169349134ad35a5fe6584ad",
|
||||
".agent/evidence-v0.2.5/screen-final.py": "43ab0d05bf710506e57eab3ce0ff2b9a6a9fa4a49ceed1c81ff150d79f31cd96",
|
||||
".agent/evidence-v0.2.5/final-desktop-runtime-audit.json": "cb176b905205c4d02f8a100865d7271375e49e68a4e2614ccfe4b20006ec0ae0",
|
||||
".agent/evidence-v0.2.5/37-browser.log": "0bfd54b2836b6e5efdc3a2f6fbdb4123a2c7ca9f8726bb36a3483a4cddee987b",
|
||||
".agent/evidence-v0.2.5/13-integrity-runtime-GREEN.log": "4215726eefb17446cc1fb8b8e881548826be887b3636ee03a1021fa0ef9d0a8d",
|
||||
".agent/evidence-v0.2.5/check-preservation.py": "23d9257347b8c18a17f824c69c096b9f71ad0027812f20144ea9d42c1ac1f249",
|
||||
".agent/evidence-v0.2.5/26-exhaustive-gains-GREEN.log": "2e20cacc919bbb89e28b0527973ebbe30cb190008cd4dafdce8a201c51077213",
|
||||
".agent/evidence-v0.2.5/31-format.log": "332077c47ea1afad47da6df4f00643af5ef4409f809a7ff69ecd640f2f176961",
|
||||
".agent/evidence-v0.2.5/mobile-all-voices-resampled-bounds.json": "8f31aa6406c9a19369e85c04ee165b2b96975c4f0d28b139c21ff0a724e8485e",
|
||||
".agent/evidence-v0.2.5/reproduce.py": "1a29068cf252f89481883a73de4badd99da027824616eee6e2d9d9470fffe314",
|
||||
".agent/evidence-v0.2.5/reproducibility.json": "91b7b2167562d49f15e6e08cc2452a584af09c39d1e99037021c051d0943df06",
|
||||
".agent/evidence-v0.2.5/validation-summary.json": "f04654ca29d2ee8facad01b9c5de63e9e305ba36f4a7fa5be21a615b893d8a9d",
|
||||
".agent/evidence-v0.2.5/npm-audit.json": "ea7bab3cc606a95eecdf538b0d02d3cf928bf0f3a1cfb1d2c8ddbe02846d5658",
|
||||
".agent/evidence-v0.2.5/33-browser-gains-resample.log": "12686f364f5c8b7371275b90127544370426b1bd8a5cdfb4c45e214cfaa70854",
|
||||
".agent/evidence-v0.2.5/21-browser-initial.log": "1f19842084fcd070004791ce30c2496c1f94ee0eb38eab7ae61b25739fff1140",
|
||||
".agent/evidence-v0.2.5/browser-gains-resample.json": "136f226b92ac8cd9acd6f18998ef6715a1b9e344c4e1aac9a104dbabe4eb36d0",
|
||||
".agent/evidence-v0.2.5/04-runtime-RED.log": "150024b5c7c1123f3212edbffa3beee884868f944c08088a086bbe45c7b61615",
|
||||
".agent/evidence-v0.2.5/desktop-actual-gain-nodes.json": "f2e639c00e13225c5a7aac513a5d57e0f71939d92eabf6af7f046cae047b1322",
|
||||
".agent/evidence-v0.2.5/browser-initial/.last-run.json": "ef75815d5afd367b9acf58e3b0792842b3de509bb0ff17568a77868d6afd8dd2",
|
||||
".agent/evidence-v0.2.5/browser-initial/audio-\uc74c\uc131\u00b7\ud604\uc7a5\uc74c-109\uac1c-versioned-WAV\ub97c-\uc2e4\uc81c-Chrome\uc5d0\uc11c-\ud574\uc2dc\u00b7\ub514\ucf54\ub4dc-\uac80\uc99d\ud55c\ub2e4-mobile/browser-audio-integrity.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/browser-initial/audio-\uc74c\uc131\u00b7\ud604\uc7a5\uc74c-109\uac1c-versioned-WAV\ub97c-\uc2e4\uc81c-Chrome\uc5d0\uc11c-\ud574\uc2dc\u00b7\ub514\ucf54\ub4dc-\uac80\uc99d\ud55c\ub2e4-mobile/attachments/109-versioned-WAV-integrity-47652f8135e279b30469bbc5f8cd0a404cdad0d4.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-desktop/copy-360-home.png": "430ac0bb214269d5dceb0f99856672c4d3f886461bb8a74766ad71fa5f3a559b",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-desktop/copy-320-home.png": "68cc25b4ddc677d36ee838a75d2fd0b1115464c5f943020ce0d695f7ac7a53e9",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-desktop/copy-320-results.png": "8e6b990198a5ba88ab2e0a21c0c9d987ae1598fffd2c1fe5bb549638c59401ae",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-desktop/copy-360-results.png": "02b4aabb8c1001c04d35849718f75f645f3439d77cf98d3d93e9ab7909b46465",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-desktop/normal-results.png": "4af9fe33d732661a497e30d2d08a5517679e22f04d7043a5621a14b2e1a83ecd",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-desktop/progress-2.png": "4508a9c9e5c7533e9bf8afe6653fb4e1cd111de71141f0fb5404ab4c4b168ac9",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-desktop/progress-3.png": "fde834aa2f803612ef9cc7a68cea0c8d5a225289a82321ba0a59063d151e66a0",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-desktop/progress-1.png": "4d130e9ea43bdfcd7b35e300224d1b54f2875aa8c24d5551c6627b7abd8ce1fc",
|
||||
".agent/evidence-v0.2.5/browser-initial/ui-\ud55c\uad6d\uc5b4-\uc81c\ubaa9\uc740-\ub2e8\uc5b4-\uc911\uac04\uc5d0\uc11c-\uc904\ubc14\uafc8\ud558\uc9c0-\uc54a\ub294\ub2e4-mobile/heading.png": "b233fbd851313746ed983e74172e02864a15e57ae08d5f44f785a33690774534",
|
||||
".agent/evidence-v0.2.5/browser-initial/rounds-\uc2dc\uc791-\ub2e8\uacc4\u00b7SNR\u00b73\ubb38\ud56d-\uc644\ub8cc\u2192\ub2e4\uc74c-\ub2e8\uacc4\u00b7\uc7ac\uc0dd-\uc911-\uc885\ub8cc\u00b7\uc751\ub2f5-\ud6c4-\uc885\ub8cc\u00b7\ud648-\ucd08\uae30\ud654-desktop/early-exit.png": "a65bfd9c6c97786c945f3e20d0237defac753f64d2ca9d4536eaa0c603cfbcc6",
|
||||
".agent/evidence-v0.2.5/browser-initial/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-mobile/game.png": "31e0a758832f3813e09261601b66553b3dc472c1d35c2317a691426d8c69fb2c",
|
||||
".agent/evidence-v0.2.5/browser-initial/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-mobile/results.png": "06026c54567551ea4c4cf78c4321e5bba44d4edd5fb26e163cec26641286f522",
|
||||
".agent/evidence-v0.2.5/browser-initial/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-mobile/home.png": "430ac0bb214269d5dceb0f99856672c4d3f886461bb8a74766ad71fa5f3a559b",
|
||||
".agent/evidence-v0.2.5/browser-initial/gains-\uc2e4\uc81c-GainNode\uc758-\ubc30\uacbd-\ubc30\uc728\uc740-8\ud658\uacbd-\u00d7-SNR-\uacbd\uacc4\u00b70\uc5d0\uc11c-\ub3d9\uc77c\ud558\ub2e4-desktop/trace.zip": "e9679abbc80af0b1191602c159cafe8322923f3efb4e2d74a8418ab64ac0855e",
|
||||
".agent/evidence-v0.2.5/browser-initial/gains-\uc2e4\uc81c-GainNode\uc758-\ubc30\uacbd-\ubc30\uc728\uc740-8\ud658\uacbd-\u00d7-SNR-\uacbd\uacc4\u00b70\uc5d0\uc11c-\ub3d9\uc77c\ud558\ub2e4-desktop/error-context.md": "af74553e8877262cc784c46410964be4e4b936f7ecd921cc34d40c7f8b599c57",
|
||||
".agent/evidence-v0.2.5/browser-initial/rounds-\uc2dc\uc791-\ub2e8\uacc4\u00b7SNR\u00b73\ubb38\ud56d-\uc644\ub8cc\u2192\ub2e4\uc74c-\ub2e8\uacc4\u00b7\uc7ac\uc0dd-\uc911-\uc885\ub8cc\u00b7\uc751\ub2f5-\ud6c4-\uc885\ub8cc\u00b7\ud648-\ucd08\uae30\ud654-mobile/early-exit.png": "02b4aabb8c1001c04d35849718f75f645f3439d77cf98d3d93e9ab7909b46465",
|
||||
".agent/evidence-v0.2.5/browser-initial/ui-\ud55c\uad6d\uc5b4-\uc81c\ubaa9\uc740-\ub2e8\uc5b4-\uc911\uac04\uc5d0\uc11c-\uc904\ubc14\uafc8\ud558\uc9c0-\uc54a\ub294\ub2e4-desktop/heading.png": "18afdc08c2576708a2278e522fd893181c2f15d82ef187aee387cea4a5d0b3fc",
|
||||
".agent/evidence-v0.2.5/browser-initial/audio-\uc74c\uc131\u00b7\ud604\uc7a5\uc74c-109\uac1c-versioned-WAV\ub97c-\uc2e4\uc81c-Chrome\uc5d0\uc11c-\ud574\uc2dc\u00b7\ub514\ucf54\ub4dc-\uac80\uc99d\ud55c\ub2e4-desktop/browser-audio-integrity.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/browser-initial/audio-\uc74c\uc131\u00b7\ud604\uc7a5\uc74c-109\uac1c-versioned-WAV\ub97c-\uc2e4\uc81c-Chrome\uc5d0\uc11c-\ud574\uc2dc\u00b7\ub514\ucf54\ub4dc-\uac80\uc99d\ud55c\ub2e4-desktop/attachments/109-versioned-WAV-integrity-d3de0117a2809aa5d133d16f92abb0fe37036d79.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-mobile/copy-360-home.png": "430ac0bb214269d5dceb0f99856672c4d3f886461bb8a74766ad71fa5f3a559b",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-mobile/copy-320-home.png": "68cc25b4ddc677d36ee838a75d2fd0b1115464c5f943020ce0d695f7ac7a53e9",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-mobile/copy-320-results.png": "8e6b990198a5ba88ab2e0a21c0c9d987ae1598fffd2c1fe5bb549638c59401ae",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-mobile/copy-360-results.png": "02b4aabb8c1001c04d35849718f75f645f3439d77cf98d3d93e9ab7909b46465",
|
||||
".agent/evidence-v0.2.5/browser-initial/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-desktop/game.png": "371f9dd2629bad933c83c76dfc465fd9fa0223597d481f8c16b52ca3c821b2d2",
|
||||
".agent/evidence-v0.2.5/browser-initial/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-desktop/results.png": "e7ac91e88029418c4e44ad0187640b8d5d41caf6897b3d648d173eeadfa51551",
|
||||
".agent/evidence-v0.2.5/browser-initial/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-desktop/home.png": "97185ca1d91c894d7d86a9a638644db3645564dac62ba1567807d5d536869f0a",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-mobile/normal-results.png": "06026c54567551ea4c4cf78c4321e5bba44d4edd5fb26e163cec26641286f522",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-mobile/progress-2.png": "c39155a3c4d4ae096cb73a892e8e86b40a2d4129c670a7b44d4b24daf8030983",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-mobile/progress-3.png": "9d198c8b07ea84e9f3d9ebad03831ffd61b98672a9e637e7ee9e9eead959cf28",
|
||||
".agent/evidence-v0.2.5/browser-initial/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-mobile/progress-1.png": "f46672f555b73c705f838e6d1e1c3d25fe2f9ff29ad629903b85c9b129b83b3b",
|
||||
".agent/evidence-v0.2.5/browser-final/.last-run.json": "91d1c43004802cd49950d78eb11c8fa7d05da8ffffe219a8b13b2f561bc00903",
|
||||
".agent/evidence-v0.2.5/browser-final/audio-\uc74c\uc131\u00b7\ud604\uc7a5\uc74c-109\uac1c-versioned-WAV\ub97c-\uc2e4\uc81c-Chrome\uc5d0\uc11c-\ud574\uc2dc\u00b7\ub514\ucf54\ub4dc-\uac80\uc99d\ud55c\ub2e4-mobile/browser-audio-integrity.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/browser-final/audio-\uc74c\uc131\u00b7\ud604\uc7a5\uc74c-109\uac1c-versioned-WAV\ub97c-\uc2e4\uc81c-Chrome\uc5d0\uc11c-\ud574\uc2dc\u00b7\ub514\ucf54\ub4dc-\uac80\uc99d\ud55c\ub2e4-mobile/attachments/109-versioned-WAV-integrity-54f96a91afa1c581d7be72f2dbdd94ea23a87d23.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-desktop/copy-360-home.png": "430ac0bb214269d5dceb0f99856672c4d3f886461bb8a74766ad71fa5f3a559b",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-desktop/copy-320-home.png": "68cc25b4ddc677d36ee838a75d2fd0b1115464c5f943020ce0d695f7ac7a53e9",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-desktop/copy-320-results.png": "8e6b990198a5ba88ab2e0a21c0c9d987ae1598fffd2c1fe5bb549638c59401ae",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-desktop/copy-360-results.png": "02b4aabb8c1001c04d35849718f75f645f3439d77cf98d3d93e9ab7909b46465",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-desktop/normal-results.png": "4af9fe33d732661a497e30d2d08a5517679e22f04d7043a5621a14b2e1a83ecd",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-desktop/progress-2.png": "4508a9c9e5c7533e9bf8afe6653fb4e1cd111de71141f0fb5404ab4c4b168ac9",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-desktop/progress-3.png": "fde834aa2f803612ef9cc7a68cea0c8d5a225289a82321ba0a59063d151e66a0",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-desktop/progress-1.png": "4d130e9ea43bdfcd7b35e300224d1b54f2875aa8c24d5551c6627b7abd8ce1fc",
|
||||
".agent/evidence-v0.2.5/browser-final/ui-\ud55c\uad6d\uc5b4-\uc81c\ubaa9\uc740-\ub2e8\uc5b4-\uc911\uac04\uc5d0\uc11c-\uc904\ubc14\uafc8\ud558\uc9c0-\uc54a\ub294\ub2e4-mobile/heading.png": "b233fbd851313746ed983e74172e02864a15e57ae08d5f44f785a33690774534",
|
||||
".agent/evidence-v0.2.5/browser-final/rounds-\uc2dc\uc791-\ub2e8\uacc4\u00b7SNR\u00b73\ubb38\ud56d-\uc644\ub8cc\u2192\ub2e4\uc74c-\ub2e8\uacc4\u00b7\uc7ac\uc0dd-\uc911-\uc885\ub8cc\u00b7\uc751\ub2f5-\ud6c4-\uc885\ub8cc\u00b7\ud648-\ucd08\uae30\ud654-desktop/early-exit.png": "a65bfd9c6c97786c945f3e20d0237defac753f64d2ca9d4536eaa0c603cfbcc6",
|
||||
".agent/evidence-v0.2.5/browser-final/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-mobile/game.png": "81cf03610b038667128d028d1b494887a48ea259d228de9003ea10f9c84c7fc7",
|
||||
".agent/evidence-v0.2.5/browser-final/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-mobile/results.png": "06026c54567551ea4c4cf78c4321e5bba44d4edd5fb26e163cec26641286f522",
|
||||
".agent/evidence-v0.2.5/browser-final/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-mobile/home.png": "430ac0bb214269d5dceb0f99856672c4d3f886461bb8a74766ad71fa5f3a559b",
|
||||
".agent/evidence-v0.2.5/browser-final/rounds-\uc2dc\uc791-\ub2e8\uacc4\u00b7SNR\u00b73\ubb38\ud56d-\uc644\ub8cc\u2192\ub2e4\uc74c-\ub2e8\uacc4\u00b7\uc7ac\uc0dd-\uc911-\uc885\ub8cc\u00b7\uc751\ub2f5-\ud6c4-\uc885\ub8cc\u00b7\ud648-\ucd08\uae30\ud654-mobile/early-exit.png": "02b4aabb8c1001c04d35849718f75f645f3439d77cf98d3d93e9ab7909b46465",
|
||||
".agent/evidence-v0.2.5/browser-final/ui-\ud55c\uad6d\uc5b4-\uc81c\ubaa9\uc740-\ub2e8\uc5b4-\uc911\uac04\uc5d0\uc11c-\uc904\ubc14\uafc8\ud558\uc9c0-\uc54a\ub294\ub2e4-desktop/heading.png": "18afdc08c2576708a2278e522fd893181c2f15d82ef187aee387cea4a5d0b3fc",
|
||||
".agent/evidence-v0.2.5/browser-final/audio-\uc74c\uc131\u00b7\ud604\uc7a5\uc74c-109\uac1c-versioned-WAV\ub97c-\uc2e4\uc81c-Chrome\uc5d0\uc11c-\ud574\uc2dc\u00b7\ub514\ucf54\ub4dc-\uac80\uc99d\ud55c\ub2e4-desktop/browser-audio-integrity.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/browser-final/audio-\uc74c\uc131\u00b7\ud604\uc7a5\uc74c-109\uac1c-versioned-WAV\ub97c-\uc2e4\uc81c-Chrome\uc5d0\uc11c-\ud574\uc2dc\u00b7\ub514\ucf54\ub4dc-\uac80\uc99d\ud55c\ub2e4-desktop/attachments/109-versioned-WAV-integrity-28c1b4d2683d66c6192313dc941bdb855519117d.json": "1820e385c5bb9e60f09e0a6ec77e6b16f047a21a7e4d9497553d94bf75a525a7",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-mobile/copy-360-home.png": "430ac0bb214269d5dceb0f99856672c4d3f886461bb8a74766ad71fa5f3a559b",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-mobile/copy-320-home.png": "68cc25b4ddc677d36ee838a75d2fd0b1115464c5f943020ce0d695f7ac7a53e9",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-mobile/copy-320-results.png": "8e6b990198a5ba88ab2e0a21c0c9d987ae1598fffd2c1fe5bb549638c59401ae",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\ud55c\uad6d\uc5b4-\ubaa8\ub4dc\u00b7\uacb0\uacfc-\uc5b4\uc808\uc740-320px\uc640-360px\uc5d0\uc11c\ub3c4-\uac08\ub77c\uc9c0\uac70\ub098-\ub118\uce58\uc9c0-\uc54a\ub294\ub2e4-mobile/copy-360-results.png": "02b4aabb8c1001c04d35849718f75f645f3439d77cf98d3d93e9ab7909b46465",
|
||||
".agent/evidence-v0.2.5/browser-final/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-desktop/game.png": "87aa486ce206737f2468d88cd64ab98e2891aecfc3e888932046f76ba574823e",
|
||||
".agent/evidence-v0.2.5/browser-final/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-desktop/results.png": "e7ac91e88029418c4e44ad0187640b8d5d41caf6897b3d648d173eeadfa51551",
|
||||
".agent/evidence-v0.2.5/browser-final/game-\uc2e4\uc81c-\uc624\ub514\uc624\ub85c-\ud63c\ud569-\ubaa8\ub4dc-\uc644\uc8fc\u00b7\ub808\uc774\uc544\uc6c3\u00b7\uc811\uadfc\uc131\u00b7\uc678\ubd80-\uc694\uccad-\uc5c6\uc74c-desktop/home.png": "97185ca1d91c894d7d86a9a638644db3645564dac62ba1567807d5d536869f0a",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-mobile/normal-results.png": "06026c54567551ea4c4cf78c4321e5bba44d4edd5fb26e163cec26641286f522",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-mobile/progress-2.png": "c39155a3c4d4ae096cb73a892e8e86b40a2d4129c670a7b44d4b24daf8030983",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-mobile/progress-3.png": "9d198c8b07ea84e9f3d9ebad03831ffd61b98672a9e637e7ee9e9eead959cf28",
|
||||
".agent/evidence-v0.2.5/browser-final/review-fixes-\ub9ac\ubdf0-\uc2e4\uc81c-\uc9c4\ud589-\ub9c9\ub300\ub294-\ud604\uc7ac-\ubb38\ud56d\uc758-1-3\u00b72-3\u00b73-3\uc744-\ucc44\uc6b4\ub2e4-mobile/progress-1.png": "f46672f555b73c705f838e6d1e1c3d25fe2f9ff29ad629903b85c9b129b83b3b",
|
||||
".agent/evidence-v0.2.5/browser-gains-resample/.last-run.json": "91d1c43004802cd49950d78eb11c8fa7d05da8ffffe219a8b13b2f561bc00903",
|
||||
".agent/evidence-v0.2.5/baseline/voice-manifest.json": "ad2a24d75da19888b724cfb025025f9aa78a49883c610be93082b83edf8f471a",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/subway.wav": "9faf70b68617d267b367a0f3692ed90015458543ab4b0844f6c704e6a724728f",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/street.wav": "a8bffa201b174618955bc51b860167169125304811aabe2086b0bb35b06c3ae1",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/AMBIENCE_NOTICES.md": "dc3b61da7d2829e9025573cde5d23a8b3d9b44da6154a620463adfc1f5455040",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/market.wav": "d6f73d86aea98b83e2995e61baaa7315a0ea7adeebc093769d76e1569b207658",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/cafe.wav": "6853c121104940041c268a2891eadae032c17aa22b4c3b3ddfbc025262434995",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/mall.wav": "680a769940c08f0d12c6c954c08366598dd8b5745e276f39c82b10d1a88261a1",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/manifest.json": "2aeae8bb7a1f6e12543ba7e32a233b47b1ebcfdd65c7e55f67fc8f22f8d0f8c1",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/department.wav": "aa43f3d1d3e7c2b1f8ace24ecbda45d0ea3a031db941c39506dc6c1665b8efa7",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/theater.wav": "2d6a444fb7874cdf6b2d8a741a69175299b112eb66834912c025437d8277d635",
|
||||
".agent/evidence-v0.2.5/baseline/ambience/rain.wav": "f4315084e820f742b0709de5bb0d1abd3d5af1730620e08c2948b70347356dd9"
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
"""생성기/manifest 통계를 사용하지 않는 전용 ebur128 릴리스 측정 증거."""
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[3]
|
||||
EVIDENCE = Path(__file__).resolve().parent
|
||||
rows = []
|
||||
for path in sorted((ROOT/'public/ambience').glob('*.wav')):
|
||||
command = ['ffmpeg','-nostdin','-hide_banner','-i',str(path),'-af','ebur128=peak=true','-f','null','-']
|
||||
digest = hashlib.sha256(path.read_bytes()).hexdigest()
|
||||
result = subprocess.run(command, check=True, capture_output=True, text=True, timeout=30)
|
||||
summary = result.stderr.rsplit('Summary:',1)[1]
|
||||
integrated = float(re.search(r'I:\s+([-\d.]+) LUFS',summary)[1])
|
||||
peak = float(re.search(r'Peak:\s+([-\d.]+) dBFS',summary)[1])
|
||||
assert hashlib.sha256(path.read_bytes()).hexdigest() == digest
|
||||
rows.append({'file':str(path.relative_to(ROOT)), 'sha256':digest, 'bytes':path.stat().st_size,
|
||||
'integratedLUFS':integrated, 'truePeakDBTP':peak, 'rawSummary':summary})
|
||||
spread=max(r['integratedLUFS'] for r in rows)-min(r['integratedLUFS'] for r in rows)
|
||||
passed=len(rows)==8 and spread<=0.4 and all(abs(r['integratedLUFS']+32.5)<=0.2 and r['truePeakDBTP']<=-6 for r in rows)
|
||||
report={'measurementFilter':'ebur128=peak=true','targetIntegratedLUFS':-32.5,'toleranceLU':0.2,'maximumSpreadLU':0.4,
|
||||
'truePeakCeilingDBTP':-6,'ffmpegVersion':subprocess.check_output(['ffmpeg','-version'],text=True).splitlines()[0],
|
||||
'scriptSha256':hashlib.sha256(Path(__file__).read_bytes()).hexdigest(), 'spreadLU':spread,'passed':passed,'files':rows}
|
||||
with (EVIDENCE/'ebur128-results.json').open('x') as stream: stream.write(json.dumps(report,indent=2)+'\n')
|
||||
print(json.dumps(report,indent=2))
|
||||
assert passed
|
||||
@@ -0,0 +1,39 @@
|
||||
"""독립 BS.1770 구현으로 exact WAV를 검사한다. 일반 npm test에서는 실행하지 않는다."""
|
||||
import hashlib
|
||||
from importlib.metadata import version
|
||||
import json
|
||||
from pathlib import Path
|
||||
import platform
|
||||
import sys
|
||||
import pyloudnorm as pyln
|
||||
import soundfile as sf
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[3]
|
||||
EVIDENCE = Path(__file__).resolve().parent
|
||||
assert version('pyloudnorm') == '0.2.0'
|
||||
assert version('soundfile') == '0.13.1'
|
||||
def sha(path):
|
||||
return hashlib.sha256(path.read_bytes()).hexdigest()
|
||||
rows = []
|
||||
# manifest의 loudness나 생성기 함수를 읽지 않고 실제 파일을 독립 구현으로 측정한다.
|
||||
for path in sorted((ROOT / 'public/ambience').glob('*.wav')):
|
||||
before = sha(path)
|
||||
data, rate = sf.read(path, dtype='float64', always_2d=False)
|
||||
assert rate == 24000 and data.shape == (288000,)
|
||||
meter = pyln.Meter(rate, filter_class='K-weighting', block_size=0.400)
|
||||
value = float(meter.integrated_loudness(data))
|
||||
assert sha(path) == before
|
||||
rows.append({'file': str(path.relative_to(ROOT)), 'sha256': before, 'bytes': path.stat().st_size,
|
||||
'frames': len(data), 'sampleRate': rate, 'integratedLUFS': value,
|
||||
'targetErrorLU': value + 32.5})
|
||||
spread = max(r['integratedLUFS'] for r in rows) - min(r['integratedLUFS'] for r in rows)
|
||||
passed = len(rows) == 8 and all(abs(r['targetErrorLU']) <= 0.2 for r in rows) and spread <= 0.4
|
||||
report = {'method': 'Independent pyloudnorm BS.1770 K-weighting, 400ms blocks, mono exact PCM16 decoded by soundfile',
|
||||
'python': platform.python_version(), 'versions': {name: version(name) for name in ('pyloudnorm','soundfile','numpy','scipy','cffi','pycparser','future')},
|
||||
'libsndfileVersion': sf.__libsndfile_version__, 'scriptSha256': sha(Path(__file__)),
|
||||
'manifestSha256': sha(ROOT/'public/ambience/manifest.json'), 'targetIntegratedLUFS': -32.5,
|
||||
'toleranceLU': 0.2, 'maximumSpreadLU': 0.4, 'spreadLU': spread, 'passed': passed, 'files': rows}
|
||||
with (EVIDENCE/'pyloudnorm-results.json').open('x') as stream:
|
||||
stream.write(json.dumps(report, indent=2, allow_nan=False)+'\n')
|
||||
print(json.dumps(report, indent=2, allow_nan=False))
|
||||
if not passed: sys.exit('Independent loudness release criterion failed')
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"auditReportVersion": 2,
|
||||
"vulnerabilities": {},
|
||||
"metadata": {
|
||||
"vulnerabilities": {
|
||||
"info": 0,
|
||||
"low": 0,
|
||||
"moderate": 0,
|
||||
"high": 0,
|
||||
"critical": 0,
|
||||
"total": 0
|
||||
},
|
||||
"dependencies": {
|
||||
"prod": 4,
|
||||
"dev": 260,
|
||||
"optional": 27,
|
||||
"peer": 8,
|
||||
"peerOptional": 0,
|
||||
"total": 263
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
{
|
||||
"historicalV025FilesPreserved": 150,
|
||||
"earlierImmutableFilesPreserved": 660,
|
||||
"voiceWavsPreserved": 101,
|
||||
"sourcePlanSha256": "3529c8534be204208ac504a0f4c1a69b312131f9bbff92aa9a3135d61d24db65",
|
||||
"sourceAndSegmentsPreserved": [
|
||||
{
|
||||
"environmentId": "street",
|
||||
"sourceSha256": "0ddb0be7eb3427f781c8268bcbc74b8ad7e1fbf75b9f6966e65274dbe85f3d9d",
|
||||
"sourceBytes": 3414104,
|
||||
"startSeconds": 35
|
||||
},
|
||||
{
|
||||
"environmentId": "mall",
|
||||
"sourceSha256": "bb066e130e5d665db57cb5f88e820d053c724d8f777b275213998d2074c6529a",
|
||||
"sourceBytes": 1666896,
|
||||
"startSeconds": 36
|
||||
},
|
||||
{
|
||||
"environmentId": "theater",
|
||||
"sourceSha256": "05c3ece7c088f34700b7610f791c0ad848a24c77be2c32fd1503a78356739a43",
|
||||
"sourceBytes": 1485015,
|
||||
"startSeconds": 45
|
||||
},
|
||||
{
|
||||
"environmentId": "department",
|
||||
"sourceSha256": "261fda28722fba623483a90b32e7a2ec388c59887f56a5247156b53f1ffb6ccd",
|
||||
"sourceBytes": 2445024,
|
||||
"startSeconds": 90
|
||||
},
|
||||
{
|
||||
"environmentId": "market",
|
||||
"sourceSha256": "fc0075dce8ad05b56460c9f18754c27b2021f21f1c780a595ccda648d33c941d",
|
||||
"sourceBytes": 622200,
|
||||
"startSeconds": 24
|
||||
},
|
||||
{
|
||||
"environmentId": "subway",
|
||||
"sourceSha256": "41fcf064cde53cef1528fe98721347851e60c070d8ff9f213f354025cf272d4c",
|
||||
"sourceBytes": 3343901,
|
||||
"startSeconds": 65
|
||||
},
|
||||
{
|
||||
"environmentId": "cafe",
|
||||
"sourceSha256": "6360791fdcee1f64638f0fc9abd6d2c7a1aa75fd3d2b80033170a02d025099dc",
|
||||
"sourceBytes": 19947952,
|
||||
"startSeconds": 0
|
||||
},
|
||||
{
|
||||
"environmentId": "rain",
|
||||
"sourceSha256": "ef0511593b1bb0ba47d5c5dafd83eb07ba854b5a65fd5d41b8c76a1b3ff2c22a",
|
||||
"sourceBytes": 91187572,
|
||||
"startSeconds": 180
|
||||
}
|
||||
],
|
||||
"newAmbienceCount": 8,
|
||||
"allPublicFilesMatchDist": true
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
cffi==1.17.1 --hash=sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d
|
||||
future==1.0.0 --hash=sha256:929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216
|
||||
numpy==2.2.6 --hash=sha256:ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf
|
||||
pycparser==2.22 --hash=sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc
|
||||
pyloudnorm==0.2.0 --hash=sha256:9bb69afb904f59d007a7f9ba3d75d16fb8aeef35c44d6df822a9f192d69cf13f
|
||||
scipy==1.15.3 --hash=sha256:39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982
|
||||
soundfile==0.13.1 --hash=sha256:03267c4e493315294834a0870f31dbb3b28a95561b80b134f0bd3cf2d5f0e618
|
||||
@@ -0,0 +1,7 @@
|
||||
cffi==1.17.1
|
||||
future==1.0.0
|
||||
numpy==2.2.6
|
||||
pycparser==2.22
|
||||
pyloudnorm==0.2.0
|
||||
scipy==1.15.3
|
||||
soundfile==0.13.1
|
||||
@@ -0,0 +1,95 @@
|
||||
{
|
||||
"method": "Independent pyloudnorm BS.1770 K-weighting, 400ms blocks, mono exact PCM16 decoded by soundfile",
|
||||
"python": "3.11.16",
|
||||
"versions": {
|
||||
"pyloudnorm": "0.2.0",
|
||||
"soundfile": "0.13.1",
|
||||
"numpy": "2.2.6",
|
||||
"scipy": "1.15.3",
|
||||
"cffi": "1.17.1",
|
||||
"pycparser": "2.22",
|
||||
"future": "1.0.0"
|
||||
},
|
||||
"libsndfileVersion": "1.2.2",
|
||||
"scriptSha256": "b87ec3ab26ea0775f7a8fe6d1baf1aad50e429632705d6e3bf06268ed7b9a4cc",
|
||||
"manifestSha256": "6433bf23af35f24031c6bbe784dd0abf9330f276da6b8705e47c7a1144a285b7",
|
||||
"targetIntegratedLUFS": -32.5,
|
||||
"toleranceLU": 0.2,
|
||||
"maximumSpreadLU": 0.4,
|
||||
"spreadLU": 0.07715477923686365,
|
||||
"passed": true,
|
||||
"files": [
|
||||
{
|
||||
"file": "public/ambience/cafe.wav",
|
||||
"sha256": "864a81571a2e25a99d6408aa282570e7996c7ace432cf4f4f294677ea5bcad63",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.60621761696535,
|
||||
"targetErrorLU": -0.10621761696535259
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/department.wav",
|
||||
"sha256": "93e5c23bff2b19716dd21111746837a4df8c52d4b88c6874e57828d09ca5507e",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.55798042645585,
|
||||
"targetErrorLU": -0.057980426455849
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/mall.wav",
|
||||
"sha256": "a0a135e319ed70f55b03c6e266fb047e53db8008277a6ba8b855a05a1b82662f",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.575453741417206,
|
||||
"targetErrorLU": -0.07545374141720629
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/market.wav",
|
||||
"sha256": "7178307c48c192ac396dcd3c880c377bf56b45e829b459b1feca9f986437e632",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.52906283772849,
|
||||
"targetErrorLU": -0.029062837728488944
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/rain.wav",
|
||||
"sha256": "1842a717e6c77811cb6d6cb09d364e8ef644d50e6beb97d3d187c96e95d85784",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.56530955673126,
|
||||
"targetErrorLU": -0.0653095567312576
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/street.wav",
|
||||
"sha256": "dace0969087539e5b67fb6fac11b759e81626574230ca7f8d2feb484753656a8",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.54629472521665,
|
||||
"targetErrorLU": -0.04629472521664724
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/subway.wav",
|
||||
"sha256": "e85cf77a9baa7560fb09966c4eda3b128b92647bc4c54c417a29b4e0f4ac129f",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.5601852061342,
|
||||
"targetErrorLU": -0.06018520613420009
|
||||
},
|
||||
{
|
||||
"file": "public/ambience/theater.wav",
|
||||
"sha256": "634fc25e8c4e9dcbab97688bc4c0ef9b0299cc7c4c921781a70740aabe46b900",
|
||||
"bytes": 576044,
|
||||
"frames": 288000,
|
||||
"sampleRate": 24000,
|
||||
"integratedLUFS": -32.59002557282089,
|
||||
"targetErrorLU": -0.09002557282089185
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
[
|
||||
{
|
||||
"file": "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
|
||||
"bytes": 467242,
|
||||
"sha256": "610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"
|
||||
},
|
||||
{
|
||||
"file": "future-1.0.0-py3-none-any.whl",
|
||||
"bytes": 491326,
|
||||
"sha256": "929292d34f5872e70396626ef385ec22355a1fae8ad29e1a734c3e43f9fbc216"
|
||||
},
|
||||
{
|
||||
"file": "numpy-2.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
|
||||
"bytes": 16821570,
|
||||
"sha256": "ba10f8411898fc418a521833e014a77d3ca01c15b0c6cdcce6a0d2897e6dbbdf"
|
||||
},
|
||||
{
|
||||
"file": "pycparser-2.22-py3-none-any.whl",
|
||||
"bytes": 117552,
|
||||
"sha256": "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"
|
||||
},
|
||||
{
|
||||
"file": "pyloudnorm-0.2.0-py3-none-any.whl",
|
||||
"bytes": 10879,
|
||||
"sha256": "9bb69afb904f59d007a7f9ba3d75d16fb8aeef35c44d6df822a9f192d69cf13f"
|
||||
},
|
||||
{
|
||||
"file": "scipy-1.15.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
|
||||
"bytes": 37652622,
|
||||
"sha256": "39cb9c62e471b1bb3750066ecc3a3f3052b37751c7c3dfd0fd7e48900ed52982"
|
||||
},
|
||||
{
|
||||
"file": "soundfile-0.13.1-py2.py3-none-manylinux_2_28_x86_64.whl",
|
||||
"bytes": 1313646,
|
||||
"sha256": "03267c4e493315294834a0870f31dbb3b28a95561b80b134f0bd3cf2d5f0e618"
|
||||
}
|
||||
]
|
||||
@@ -0,0 +1,42 @@
|
||||
{
|
||||
"version": "0.2.5",
|
||||
"sourcePlan": ".agent/AMBIENCE-SOURCES-v0.2.3.json",
|
||||
"sourcePlanSha256": "3529c8534be204208ac504a0f4c1a69b312131f9bbff92aa9a3135d61d24db65",
|
||||
"sourcePolicy": "Preserve all eight source hashes, bytes, segments, creators, licenses and attribution exactly. Offline input cache only.",
|
||||
"normalization": {
|
||||
"algorithm": "FFmpeg loudnorm EBU R128 two-pass linear; independent final PCM input measurement",
|
||||
"targetIntegratedLUFS": -32.0,
|
||||
"truePeakCeilingDBTP": -6.0,
|
||||
"filterTruePeakDBTP": -6.1,
|
||||
"targetLRA": 50,
|
||||
"dualMono": false,
|
||||
"toleranceLU": 0.2,
|
||||
"maximumSpreadLU": 0.4,
|
||||
"measurementFilter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json"
|
||||
},
|
||||
"ffmpegVersion": "ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers",
|
||||
"pcm": {
|
||||
"durationSeconds": 12,
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16 little-endian",
|
||||
"fadeSeconds": 0.05
|
||||
},
|
||||
"runtime": {
|
||||
"peakBounds": {
|
||||
"background": 0.55,
|
||||
"voice": 0.25,
|
||||
"intro": 0.2
|
||||
},
|
||||
"snrMax": 12,
|
||||
"introRelativeGain": 1.8,
|
||||
"mixCeiling": 0.8,
|
||||
"fixedHeadroomGain": 0.4198884518664126
|
||||
},
|
||||
"privacy": {
|
||||
"priorScreening": ".agent/evidence-v0.2.3/privacy-screening/final-asr.json",
|
||||
"priorOwnerApprovalScope": "Exact v0.2.3 derivative WAVs only; no inferred approval of changed v0.2.5 WAVs.",
|
||||
"humanListeningAcceptance": false,
|
||||
"legalPrivacyClearance": false
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,228 @@
|
||||
# Find-Word v0.2.5 구현·검증 결과
|
||||
|
||||
작성일: 2026-10-14 UTC. 작업 경로: `/home/hermes/worktrees/find-word-v0.2.5`.
|
||||
브랜치: `fix/v0.2.5-ambience-loudness`. 기준/현재 HEAD:
|
||||
`812540c7438639f25b886cfd620201d92de15362` (변경 없음).
|
||||
|
||||
## 결과와 인수 경계
|
||||
|
||||
요청한 로컬 구현을 완료했다. 선언한 **FFmpeg 6.1.1 loudnorm 입력 측정** 기준으로 실제 8 WAV의
|
||||
integrated loudness는 **−38.69~−22.20 LUFS, spread 16.49 LU → −32.01~−32.00 LUFS,
|
||||
spread 0.01 LU**다. 고정 목표 **−32 LUFS**, 허용오차 ±0.2 LU, spread≤0.4 LU를 통과한다.
|
||||
최대 true peak는 **−6.62 dBTP**, 선언 ceiling **−6 dBTP** 이하다.
|
||||
런타임 배경 gain은 환경·현재 SNR·intro 유무에 무관한 **0.4198884518664126**이다.
|
||||
|
||||
lint/typecheck, 139 unit/component/release tests, 40 Python tests, build, npm audit,
|
||||
sandboxed system Chrome desktop/mobile 36 tests를 통과했다. 이전 증거 660개와 voice WAV
|
||||
101개, 원본 8개·구간·creator·license·attribution을 보존했다. **commit/push/merge/tag/deploy는 하지 않았다.**
|
||||
|
||||
인수 시 다음 두 제한을 반드시 함께 읽어야 한다.
|
||||
|
||||
1. 별도 FFmpeg `ebur128=peak=true` 진단 계기는 최종 **−33.5~−31.5 LUFS, spread 2.0 LU**를 보고한다.
|
||||
이 계기에서는 ±0.2/0.4 LU 조건을 통과하지 않는다. 계약 계기는 사용자 baseline 16.49 LU와 같은
|
||||
`loudnorm input_i`로 명시했다. 독립 검증은 생성기/manifest 수치를 재사용하지 않고 실제 파일을
|
||||
별도 프로세스로 분석한다는 뜻이며, 서로 다른 EBU 계기의 상호 일치를 뜻하지 않는다.
|
||||
2. 새 exact WAV의 추가 ASR 재검사는 **market 1 segment, requiredEmptyPassed=false**다.
|
||||
이를 성공으로 바꾸거나 원본 구간/ASR 설정을 변경하지 않았다. 이전 Oz 승인은 exact v0.2.3 WAV에
|
||||
한정되며 새 바이트의 승인으로 확대하지 않았다. **humanListeningAcceptance=false,
|
||||
legalPrivacyClearance=false**이며 새 자산의 privacy/청취 인수와 릴리스 결정은 남아 있다.
|
||||
|
||||
## 입력·출처·버전 보존
|
||||
|
||||
- [.agent/TASK-v0.2.5.md](TASK-v0.2.5.md), [ACCEPTANCE-v0.2.5.md](ACCEPTANCE-v0.2.5.md)를
|
||||
읽고 현재 코드/테스트/문서와 v0.2.3 결과·privacy/원자 발행 증거를 확인했다. 원본 task/checklist는 수정하지 않았다.
|
||||
- 원본은 `/tmp/findword-ambience-sources`의 8개 파일만 사용했다. 불변 선정 계획
|
||||
[AMBIENCE-SOURCES-v0.2.3.json](AMBIENCE-SOURCES-v0.2.3.json)의 SHA-256은
|
||||
`3529c8534be204208ac504a0f4c1a69b312131f9bbff92aa9a3135d61d24db65`다.
|
||||
- 새 [정규화 계획](AMBIENCE-NORMALIZATION-v0.2.5.json)을 분리했다. 기존 계획의 모든 항목을 새 manifest와
|
||||
비교하고, source SHA-256/bytes를 실제 원본과 대조했다. 원본 다운로드나 외부 TTS 호출은 없었다.
|
||||
- 기존 8 WAV/manifest/notice는 [baseline snapshot](evidence-v0.2.5/baseline/ambience/)에 보존했다.
|
||||
기존 `.agent/evidence*`/RESULT와 다른 추적 `.agent` 파일 660개의 SHA-256이 모두 동일하다.
|
||||
- 101개 voice WAV는 바이트 동일하며 voice manifest의 제품 버전만 0.2.5로 갱신했다.
|
||||
- package/lock/HTML/UI/README/LICENSE/문서/두 manifest 및 voice·ambience query가 0.2.5다.
|
||||
정확한 `Designed by OZ at Heat-T Medical Inc.`와 MIT 제3자 notice, 시장 CC BY-SA 4.0 등
|
||||
기존 creator·권리·출처·변경 고지를 유지했다. 이전 CHANGELOG 본문은 그대로다.
|
||||
- 보존 결과: [preservation.json](evidence-v0.2.5/preservation.json),
|
||||
[기준 해시 목록](evidence-v0.2.5/baseline.json). public 전체와 dist의 대응 파일도 바이트 동일하다.
|
||||
|
||||
## 오프라인 생성과 최종 파일 독립 측정
|
||||
|
||||
`scripts/ambience_audio.py`는 해시 검증 → 승인 구간 추출/mono/24kHz → 기존 50ms 양끝 선형 fade →
|
||||
2-pass loudnorm → PCM16 인코딩 → 최종 파일 재측정 → 전체 staging 검증 → 원자 발행 순서다.
|
||||
Ogg seek가 짧은 PCM을 반환하면 기존 full decode/sample trim fallback을 사용하며,
|
||||
padding이나 구간 변경으로 길이를 맞추지 않는다.
|
||||
|
||||
공통 필터는 `loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json`이다.
|
||||
목표 −32는 crest factor가 큰 market까지 선형 gain만으로 −6 dBTP ceiling을 지킬 수 있도록 정했다.
|
||||
필터 ceiling −6.1은 최종 ceiling −6보다 여유를 둔다. LRA=50은 원본 다이내믹을 압축하지 않기 위한
|
||||
허용 상한이며 최종 LRA를 50으로 만드는 목표가 아니다.
|
||||
|
||||
pass1과 pass2에는 동일한 fade 적용 float PCM을 입력한다. pass2는 pass1의 measured_I/TP/LRA/thresh,
|
||||
`offset=0:linear=true`를 사용한다. 동적 1-pass 출력 예측의 `target_offset`은 선형 입력 gain 보정에
|
||||
사용하지 않는다. FFmpeg의 0 LRA sentinel은 전달 인자만 0.01로 올리고 원래 통계를 보존한다.
|
||||
실제 8개 입력은 모두 LRA>0이다. pass2가 dynamic으로 fallback하면 생성 실패로 처리한다.
|
||||
|
||||
round(sample×32767)로 PCM16을 만들고 clipping clamp/dither 없이 범위를 검증한다. 각 파일은
|
||||
**288,000 frames, 정확히 12초, 24,000Hz, mono, PCM16, 576,044 bytes**, non-silent이고 고유 hash다.
|
||||
시작/마지막 sample은 0이며 50ms fade를 유지한다. 생성기는 최종 WAV를 새 FFmpeg 프로세스로
|
||||
읽고 `input_i/input_lra/input_tp`를 검사한다. 측정 필터의 `output_*`는 가상 재정규화 결과라서
|
||||
번들 측정값으로 사용하지 않는다. pass1/pass2/final 전체 JSON과 필터는 manifest에 보존한다.
|
||||
|
||||
| 환경 | 보존 구간(초) | 이전 LUFS | 최종 LUFS | 최종 LRA LU | 최종 dBTP | 최종 sample peak |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| street | 35–47 | −30.54 | −32.00 | 4.00 | −9.49 | 0.3353271484375 |
|
||||
| mall | 36–48 | −22.65 | −32.01 | 1.30 | −11.68 | 0.2449951171875 |
|
||||
| theater | 45–57 | −22.66 | −32.00 | 0.90 | −15.44 | 0.16900634765625 |
|
||||
| department | 90–102 | −22.22 | −32.00 | 3.70 | −16.18 | 0.15399169921875 |
|
||||
| market | 24–36 | −26.51 | −32.01 | 7.10 | −6.62 | 0.45123291015625 |
|
||||
| subway | 65–77 | −24.14 | −32.00 | 4.90 | −15.29 | 0.171966552734375 |
|
||||
| cafe | 0–12 | −22.20 | −32.00 | 0.30 | −17.59 | 0.131317138671875 |
|
||||
| rain | 180–192 | −38.69 | −32.01 | 10.10 | −13.09 | 0.220947265625 |
|
||||
|
||||
`tests/python/test_loudness_audio.py`는 생성기 함수를 import하지 않고 실제 WAV를 FFmpeg로 독립 분석한다.
|
||||
같은 계기 기준 최대 목표 오차 0.01 LU, spread 0.01 LU, 최대 true peak −6.62 dBTP다.
|
||||
별도 ebur128의 true peak도 모두 ceiling을 통과한다. 초기 독립 테스트의 추가 ebur128 integrated
|
||||
동등성 assertion은 계기 간 불일치를 확인한 뒤 제거했고, 해당 값/로그와 제한은 그대로 공개했다.
|
||||
계약 계기의 target/spread assertion은 유지한다. 이 차이의 내부 원인을 확정했다고 주장하지 않는다.
|
||||
|
||||
- [독립 before/after 전체 측정·hash](evidence-v0.2.5/independent-loudness.json)
|
||||
- [독립 측정 실행 로그](evidence-v0.2.5/35-independent-measurement.log)
|
||||
- [public manifest 전체 pass 통계](../public/ambience/manifest.json)
|
||||
- [재현성 결과](evidence-v0.2.5/reproducibility.json): 원본에서 별도 디렉터리로 두 번 생성해
|
||||
현재 public WAV/notice와 바이트 동일, manifest는 실행 시각 `generatedAtUtc`만 제외하고 완전 동일.
|
||||
- [재현 스크립트](evidence-v0.2.5/reproduce.py), [실행 로그](evidence-v0.2.5/25-reproducibility.log).
|
||||
재현성 범위는 기록된 FFmpeg 버전/입력/플랫폼이다. 다른 FFmpeg 빌드의 바이트 동일성을 보장하지 않는다.
|
||||
|
||||
실제 FFmpeg 측정 프로세스 실패, NaN, 목표 이탈, peak 초과, 원본 mismatch, 잘못된 출처/notice,
|
||||
쓰기 실패, 검증 실패, KeyboardInterrupt, renameat2 실패에서 이전 공개 디렉터리를 보존한다.
|
||||
원자 교환을 지원하지 않으면 실패하며 비원자 교체로 우회하지 않는다. 전원 손실 내구성 보장은 별도다.
|
||||
|
||||
## 런타임 고정 gain과 fail-closed 경계
|
||||
|
||||
이전 +6dB/luck-apple/intro 조건의 market 배경 gain은 **0.7259647911927253**,
|
||||
최종 RMS는 **0.021778943734156713**이었으며 다른 환경은 gain=1/RMS=.03이었다.
|
||||
기존 peak 의존 gain은 전체 비교에서도 1,084개 서로 다른 값을 만들어 문제를 재현했다.
|
||||
|
||||
새 런타임은 배경 PCM을 그대로 복사하고, voice/intro만 기존 RMS **.03**으로 정규화한다.
|
||||
검증된 보수적 peak 상한은 **B=.55, V=.25, I=.20**, intro 최대 상대 gain은 **1.8**,
|
||||
허용 SNR_MAX는 **12dB**, master≤1에서 합성 ceiling은 **.8**이다.
|
||||
|
||||
```text
|
||||
r_max = 10^(12/20) = 3.9810717055349722
|
||||
D = B + V*r_max + I*1.8 = 1.905267926383743
|
||||
G = min(1, 0.8/D) = 0.4198884518664126
|
||||
backgroundGain(db, environment, introPresent) = G
|
||||
voiceGain(db) = G*10^(db/20)
|
||||
introGain = G*1.8
|
||||
|mixedSample| ≤ master*G*(B + V*r_max + I*1.8) ≤ 0.8
|
||||
```
|
||||
|
||||
삼각부등식으로 모든 위상/동시 overlap의 최악값까지 포함한다. 현재 파일의 실측 peak,
|
||||
환경, 현재 SNR, intro 유무는 G 계산에 들어가지 않는다. 배경 fade envelope는 기존과 같으며
|
||||
그 최대 gain만 G다. SNR은 voice의 기준 대비 gain 차이이지 실제 음성/배경 RMS 동등성을 뜻하지 않는다.
|
||||
UI 설명도 이에 맞게 수정했다. master와 intro fade, 3문항/단계/정답/점수/재청취 동작은 유지한다.
|
||||
|
||||
실제 101 voice × 8 ambience × −12~+12의 모든 정수 25 SNR = **20,200개**를 검사했다.
|
||||
실측 최대 voice peak=.2052977830171585, intro=.14995422959327698, background=.45123291015625.
|
||||
이를 사용한 최악 합성 peak 상계는 **.6459797899491659 < .8**이며 배경 gain 집합의 크기는 1이다.
|
||||
[gain-math.json](evidence-v0.2.5/gain-math.json), [전수 GREEN](evidence-v0.2.5/26-exhaustive-gains-GREEN.log).
|
||||
|
||||
Chrome에서 109 WAV를 24k/44.1k/48k/96kHz로 모두 디코드했다(프로젝트별 436개 측정).
|
||||
리샘플 후 최대 background=.466545045375824, voice=.20585650454525403, intro=.14999594059820148로
|
||||
모든 보수적 상한 이하다. 실제 장치 rate에서 상한을 넘는 파일은 gain을 낮추지 않고 재생을 거부한다.
|
||||
URL/bytes/SHA-256은 앱에 번들한 manifest를 기준으로 디코드 전에 확인한다. 외부/알 수 없는/이전 query,
|
||||
변조·축약 응답, 잘못된 채널/길이, nonfinite/무음/과도 peak는 fail closed한다. HTTP 200 WAV 한 sample
|
||||
변조도 실제 Chrome에서 소스 시작 전에 차단하고, 원본 재시도는 성공한다.
|
||||
|
||||
실제 native Web Audio 메서드를 실행하면서 8환경 × SNR −12/0/+12의 GainNode를 프로젝트별 24회
|
||||
관찰했다. 예약 값은 모두 **.4198884518664126**, `AudioParam.value` 실측은 모두
|
||||
**.4198884665966034**(float32 반올림)다. 값에 맞춰 기다리지 않고 실제 AudioContext 시계가
|
||||
fade 종료 뒤에 도달했을 때 한 번 읽는다. master=1, voice/intro RMS .03, 같은 환경의 배경 RMS가
|
||||
SNR별로 동일함도 확인했다. [최종 browser summary](evidence-v0.2.5/browser-summary.json)에 원문 첨부 경로가 있다.
|
||||
|
||||
## Strict vertical-slice TDD 기록
|
||||
|
||||
기대 실패를 먼저 실행하고 원문을 보존한 뒤 해당 구현을 진행했다. 실패 로그를 덮어쓰지 않았다.
|
||||
|
||||
| Slice | 실제 RED 증거 | 변경 후 GREEN 증거 |
|
||||
| --- | --- | --- |
|
||||
| 실제 WAV loudness/spread/metadata | [02-loudness-RED](evidence-v0.2.5/02-loudness-RED.log): 16.49 LU 및 metadata 누락 | [07-loudness-GREEN](evidence-v0.2.5/07-loudness-GREEN.log), [35 독립 재측정](evidence-v0.2.5/35-independent-measurement.log) |
|
||||
| 측정 실패/목표·TP·NaN 원자 발행 차단 | [03-generator-RED](evidence-v0.2.5/03-generator-RED.log): 4 실패 | [29-python](evidence-v0.2.5/29-python.log): 40 통과 |
|
||||
| 고정 gain/실제 전수 peak | [04-runtime-RED](evidence-v0.2.5/04-runtime-RED.log): market 추가 감쇠·gain 불일치 | [09-runtime-GREEN](evidence-v0.2.5/09-runtime-GREEN.log), [26 전수](evidence-v0.2.5/26-exhaustive-gains-GREEN.log) |
|
||||
| loader 배경 원본 PCM/peak 차단 | [08-loader-RED](evidence-v0.2.5/08-loader-RED.log) | [13-integrity-runtime-GREEN](evidence-v0.2.5/13-integrity-runtime-GREEN.log) |
|
||||
| 제품/자산 0.2.5 정렬 | [11-version-RED](evidence-v0.2.5/11-version-RED.log): 8 실패 | [24-release-GREEN](evidence-v0.2.5/24-release-GREEN.log) |
|
||||
| 실제 응답 bytes/hash 무결성 | [12-integrity-RED](evidence-v0.2.5/12-integrity-RED.log): 새 경계 모듈 없음 | [13-integrity-runtime-GREEN](evidence-v0.2.5/13-integrity-runtime-GREEN.log), [37 Chrome](evidence-v0.2.5/37-browser.log) |
|
||||
| 기준 대비 SNR UI 설명 | [17-snr-copy-RED](evidence-v0.2.5/17-snr-copy-RED.log) | [24-release-GREEN](evidence-v0.2.5/24-release-GREEN.log) |
|
||||
| 빌드 manifest 계약 위조 거부 | [22-build-contract-RED](evidence-v0.2.5/22-build-contract-RED.log): 5 실패 | [24-release-GREEN](evidence-v0.2.5/24-release-GREEN.log), [36-build](evidence-v0.2.5/36-build.log) |
|
||||
|
||||
중간 실행의 실수/실패도 남겼다. `01-loudness-RED.log`는 harness 경로 오류여서 유효한 제품 RED로
|
||||
세지 않는다. `06-generator-GREEN.log`는 이름과 달리 **실패**한 중간 실행이다(0 LRA fixture의
|
||||
FFmpeg sentinel); 수정 후 `16-converter-GREEN.log`와 최종 Python이 통과했다.
|
||||
`15-lint.log`의 관측 코드 타입 오류를 수정했다. `21-browser-initial.log`는 33 통과/1 실패이며
|
||||
wall clock과 audio clock의 차이 때문에 너무 일찍 GainNode를 읽었다. clock 기반 관측으로 수정한
|
||||
focused 6 tests(`33-browser-gains-resample.log`)와 최종 36 tests가 통과했다.
|
||||
`30-unit.log`는 138 통과/1 실패였으며, 늘어난 실제 Python 계약 검사가 기존 subprocess 60초
|
||||
제한을 넘었다. 180초로 조정 후 동일 테스트를 포함한 `34-unit.log`가 전부 통과했다.
|
||||
`20-asr.log`는 현재도 **실패 기록**이며 GREEN으로 분류하지 않는다.
|
||||
|
||||
## 최종 실행 결과와 재검증 명령
|
||||
|
||||
환경: Node v26.7.0, npm 11.19.0, Python 3.11.16, FFmpeg 6.1.1-3ubuntu5,
|
||||
Google Chrome 146.0.7680.80. [environment.json](evidence-v0.2.5/environment.json).
|
||||
|
||||
| 검사 | 결과 | 증거 |
|
||||
| --- | --- | --- |
|
||||
| `npm run lint` (ESLint + tsc) | PASS | [32-lint.log](evidence-v0.2.5/32-lint.log) |
|
||||
| `npm test` | 15 files / **139 tests PASS** | [34-unit.log](evidence-v0.2.5/34-unit.log) |
|
||||
| `python3 -m unittest discover -s tests/python -v` | **40 tests PASS**, 64.954초 | [29-python.log](evidence-v0.2.5/29-python.log) |
|
||||
| `npm run build` | PASS, 109 WAV와 notice/manifest 검증 | [36-build.log](evidence-v0.2.5/36-build.log) |
|
||||
| `npm audit --json` | **0 vulnerabilities** | [npm-audit.json](evidence-v0.2.5/npm-audit.json) |
|
||||
| system Chrome desktop/mobile 전체 | **36 PASS**, skipped/flaky/unexpected=0, 296.138초 | [37-browser.log](evidence-v0.2.5/37-browser.log), [JSON](evidence-v0.2.5/browser-results.json) |
|
||||
| 정상 실제 오디오 흐름 | console/page errors=0, failed requests=0, external runtime requests=0, axe violations=0 | [browser-summary.json](evidence-v0.2.5/browser-summary.json) |
|
||||
| 보존/원본/배포물 byte 대조 | PASS | [38-preservation.log](evidence-v0.2.5/38-preservation.log), [preservation.json](evidence-v0.2.5/preservation.json) |
|
||||
| secret scan | PASS, 저장소/새 증거의 텍스트 검사 | [40-final-checks.log](evidence-v0.2.5/40-final-checks.log) |
|
||||
| `git diff --check` | PASS | [40-final-checks.log](evidence-v0.2.5/40-final-checks.log) |
|
||||
|
||||
```bash
|
||||
npm run lint
|
||||
npm test
|
||||
python3 -m unittest discover -s tests/python -v
|
||||
npm run build
|
||||
npm audit --json
|
||||
CHROME_PATH=/usr/bin/google-chrome PLAYWRIGHT_NO_SANDBOX=0 \
|
||||
PLAYWRIGHT_JSON_OUTPUT_FILE=.agent/evidence-v0.2.5/browser-results.json \
|
||||
npx playwright test --reporter=line,json --output=.agent/evidence-v0.2.5/browser-final
|
||||
python3 .agent/evidence-v0.2.5/measure.py
|
||||
python3 .agent/evidence-v0.2.5/reproduce.py
|
||||
python3 .agent/evidence-v0.2.5/check-preservation.py
|
||||
python3 .agent/evidence-v0.2.5/secret-scan.py
|
||||
git diff --check
|
||||
```
|
||||
|
||||
Chrome은 sandbox를 켠 system executable로 실행했다. 작업 디렉터리로 범위를 제한한 실제 Chrome
|
||||
프로세스 인자에 `--no-sandbox`가 없음을 [chrome-sandbox-final.json](evidence-v0.2.5/chrome-sandbox-final.json)에
|
||||
보존했다. 109 WAV의 해시/24kHz decode, 모든 환경 실제 loop/start/stop, 3문항 고정 단계·다음 단계·
|
||||
시작 단계·SNR·중도 종료·무응답·재청취·음량·404 재시도·layout/axe를 검사했다.
|
||||
의도적으로 주입한 404/변조 시나리오의 오류는 정상 흐름 0건 통계에서 제외한다.
|
||||
desktop/mobile은 같은 system Chrome의 viewport/touch emulation이며 물리 모바일/Safari 인증이 아니다.
|
||||
|
||||
## Privacy, 문서와 릴리스 인계
|
||||
|
||||
추가 ASR은 로컬 캐시의 동일 tiny multilingual 모델, faster-whisper 1.2.1 CPU int8,
|
||||
beam_size=5, best_of=5, 기본 VAD, condition_on_previous_text=true로 새 정확한 해시를 검사했다.
|
||||
시장 1개 segment와 나머지 7개 0개 결과를 원문 그대로
|
||||
[final-asr.json](evidence-v0.2.5/final-asr.json)에 보존했다. ASR text는 검증된 전사가 아니며
|
||||
환각일 수 있고, 성공/실패 모두 실제 대화·음악의 유무나 법적 허용 여부를 확정하지 않는다.
|
||||
이전 실패/no-VAD/최종 결과/승인은 원본 파일 그대로다. 원문 ASR의 prior/supplementary 경로는
|
||||
기존 v0.2.3 privacy-screening 증거 기준이다. 새 privacy gate 실패를 숨기기 위해 segment를
|
||||
삭제하거나 모델/VAD/threshold/원본 구간을 바꾸지 않았다.
|
||||
|
||||
README, ARCHITECTURE, AUDIO_PROVENANCE, DEPLOYMENT, WORDS, CHANGELOG, license notice를 갱신했다.
|
||||
변경한 DSP/loader/무결성/생성기/빌드 검증과 테스트에는 핵심 매개변수·상한·공식·실패 경계의
|
||||
한국어 설계 주석을 추가했다. 과거 문서의 v0.2.3 출처/측정/승인은 역사 기록으로 표시했다.
|
||||
|
||||
수용 기준 중 로컬 구현/검증은 위 선언한 loudnorm 측정 범위에서 완료했다. 별도 ebur128 계기
|
||||
불일치와 새 ASR 실패는 인수 제한으로 남는다. ACCEPTANCE의 릴리스 3항(Neo 독립 검증 후
|
||||
commit-addressed 원자 배포, 공개 WAV LUFS/true peak/hash/MIME·production Chrome,
|
||||
feature push/main fast-forward/annotated tag/fresh clone)은 사용자 지시에 따라 **미실행**이다.
|
||||
secrets를 읽거나 사용하지 않았고 외부 메시지·원격 Git 변경·배포를 하지 않았다.
|
||||
@@ -0,0 +1,93 @@
|
||||
# Find-Word v0.2.5 — Field recording notices
|
||||
|
||||
These third-party recordings retain their own licenses. The private project license does not apply to them.
|
||||
All files are modified excerpts: trimmed, faded, downmixed, resampled, normalized and converted to WAV.
|
||||
The market derivative remains CC BY-SA 4.0. No additional restrictions are imposed on that audio.
|
||||
|
||||
## 길거리 — street
|
||||
|
||||
Suggested: Sunday, 4th May 2008 5.05pm - sounds outside my window, by cori (Cori Samuel), via Wikimedia Commons; public domain.
|
||||
|
||||
Creator: cori (Cori Samuel)
|
||||
Source: https://commons.wikimedia.org/wiki/File:Sunday_in_the_city_street_noise2.ogg
|
||||
Download: https://upload.wikimedia.org/wikipedia/commons/2/24/Sunday_in_the_city_street_noise2.ogg
|
||||
License: Public domain (PD-author) — https://commons.wikimedia.org/wiki/Template:PD-author
|
||||
Output license: Public domain (PD-author)
|
||||
Changes: excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement; source seconds 35–47.
|
||||
|
||||
## 쇼핑몰 — mall
|
||||
|
||||
Suggested: 1 minute at the Alexa mall in Berlin, by thore, via Wikimedia Commons; public domain.
|
||||
|
||||
Creator: thore (Thore)
|
||||
Source: https://commons.wikimedia.org/wiki/File:1_minute_at_the_alexa_mall_in_berlin.ogg
|
||||
Download: https://upload.wikimedia.org/wikipedia/commons/f/fd/1_minute_at_the_alexa_mall_in_berlin.ogg
|
||||
License: Public domain (PD-author) — https://commons.wikimedia.org/wiki/Template:PD-author
|
||||
Output license: Public domain (PD-author)
|
||||
Changes: excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement; source seconds 36–48.
|
||||
|
||||
## 극장 — theater
|
||||
|
||||
Suggested: Crowd Ambience - Theater, by ElevatorFan2020, from Freesound, CC0 1.0.
|
||||
|
||||
Creator: ElevatorFan2020
|
||||
Source: https://freesound.org/people/ElevatorFan2020/sounds/853576/
|
||||
Download: https://cdn.freesound.org/previews/853/853576_14269391-lq.mp3
|
||||
License: CC0 1.0 Universal — https://creativecommons.org/publicdomain/zero/1.0/
|
||||
Output license: CC0 1.0 Universal
|
||||
Changes: excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement; source seconds 45–57.
|
||||
|
||||
## 백화점 — department
|
||||
|
||||
Suggested: US Department store - checkouts, by icmusic, from Freesound, CC0 1.0.
|
||||
|
||||
Creator: icmusic
|
||||
Source: https://freesound.org/people/icmusic/sounds/268941/
|
||||
Download: https://cdn.freesound.org/previews/268/268941_40107-lq.mp3
|
||||
License: CC0 1.0 Universal — https://creativecommons.org/publicdomain/zero/1.0/
|
||||
Output license: CC0 1.0 Universal
|
||||
Changes: excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement; source seconds 90–102.
|
||||
|
||||
## 시장 — market
|
||||
|
||||
Italia Palermo mercato-Ballaro 20161225 122421, by Marie Flutre, CC BY-SA 4.0, via Wikimedia Commons. Modified by excerpting, trimming, fades, normalization, downmixing, resampling and PCM WAV conversion. The derivative audio remains CC BY-SA 4.0.
|
||||
|
||||
Creator: Marie Flutre (Wikimedia user Timflutre)
|
||||
Source: https://commons.wikimedia.org/wiki/File:Italia_Palermo_mercato-Ballaro_20161225_122421.ogg
|
||||
Download: https://upload.wikimedia.org/wikipedia/commons/e/e8/Italia_Palermo_mercato-Ballaro_20161225_122421.ogg
|
||||
License: CC BY-SA 4.0 — https://creativecommons.org/licenses/by-sa/4.0/
|
||||
Output license: CC BY-SA 4.0
|
||||
Changes: excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement; source seconds 24–36.
|
||||
|
||||
## 지하철 — subway
|
||||
|
||||
TTC Subway Line 1 Ambience - Museum to Union, by PascalHD, CC BY 4.0, via Wikimedia Commons/Freesound. Modified by excerpting, trimming, fades, normalization, downmixing, resampling and PCM WAV conversion.
|
||||
|
||||
Creator: PascalHD
|
||||
Source: https://commons.wikimedia.org/wiki/File:TTC_Subway_Line_1_Ambience_-_Museum_to_Union_(Freesound).ogg
|
||||
Download: https://upload.wikimedia.org/wikipedia/commons/d/d3/TTC_Subway_Line_1_Ambience_-_Museum_to_Union_%28Freesound%29.ogg
|
||||
License: CC BY 4.0 — https://creativecommons.org/licenses/by/4.0/
|
||||
Output license: CC BY 4.0
|
||||
Changes: excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement; source seconds 65–77.
|
||||
|
||||
## 카페 — cafe
|
||||
|
||||
Suggested: Cafe ambiance, by Marble Toast, via Wikimedia Commons, CC0 1.0.
|
||||
|
||||
Creator: Marble Toast
|
||||
Source: https://commons.wikimedia.org/wiki/File:Cafe_ambiance.ogg
|
||||
Download: https://upload.wikimedia.org/wikipedia/commons/5/54/Cafe_ambiance.ogg
|
||||
License: CC0 1.0 Universal — https://creativecommons.org/publicdomain/zero/1.0/
|
||||
Output license: CC0 1.0 Universal
|
||||
Changes: excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement; source seconds 0–12.
|
||||
|
||||
## 비 오는 거리 — rain
|
||||
|
||||
Suggested: Urban Street on a Rainy Afternoon, by Extemporalist, via Wikimedia Commons, CC0 1.0.
|
||||
|
||||
Creator: Extemporalist
|
||||
Source: https://commons.wikimedia.org/wiki/File:Urban_Street_on_a_Rainy_Afternoon.flac
|
||||
Download: https://upload.wikimedia.org/wikipedia/commons/8/8c/Urban_Street_on_a_Rainy_Afternoon.flac
|
||||
License: CC0 1.0 Universal — https://creativecommons.org/publicdomain/zero/1.0/
|
||||
Output license: CC0 1.0 Universal
|
||||
Changes: excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement; source seconds 180–192.
|
||||
@@ -0,0 +1,655 @@
|
||||
{
|
||||
"version": "0.2.5",
|
||||
"normalization": {
|
||||
"algorithm": "FFmpeg loudnorm EBU R128 two-pass linear; independent final PCM input measurement",
|
||||
"targetIntegratedLUFS": -32.0,
|
||||
"truePeakCeilingDBTP": -6.0,
|
||||
"filterTruePeakDBTP": -6.1,
|
||||
"targetLRA": 50,
|
||||
"dualMono": false,
|
||||
"toleranceLU": 0.2,
|
||||
"maximumSpreadLU": 0.4,
|
||||
"measurementFilter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json"
|
||||
},
|
||||
"generatedAtUtc": "2026-10-14T10:23:04.620836+00:00",
|
||||
"toolVersions": {
|
||||
"ffmpeg": "ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers"
|
||||
},
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16",
|
||||
"files": [
|
||||
{
|
||||
"environmentId": "street",
|
||||
"displayName": "길거리",
|
||||
"pageUrl": "https://commons.wikimedia.org/wiki/File:Sunday_in_the_city_street_noise2.ogg",
|
||||
"directUrl": "https://upload.wikimedia.org/wikipedia/commons/2/24/Sunday_in_the_city_street_noise2.ogg",
|
||||
"creator": "cori (Cori Samuel)",
|
||||
"license": "Public domain (PD-author)",
|
||||
"licenseUrl": "https://commons.wikimedia.org/wiki/Template:PD-author",
|
||||
"attribution": "Suggested: Sunday, 4th May 2008 5.05pm - sounds outside my window, by cori (Cori Samuel), via Wikimedia Commons; public domain.",
|
||||
"expectedSourceSha256": "0ddb0be7eb3427f781c8268bcbc74b8ad7e1fbf75b9f6966e65274dbe85f3d9d",
|
||||
"sourceBytes": 3414104,
|
||||
"directMediaDurationSeconds": 264.254694,
|
||||
"sourceVerification": {
|
||||
"status": "verified",
|
||||
"dateUtc": "2026-10-14",
|
||||
"method": "SHA-256, byte count, ffprobe format.duration, full FFmpeg decode",
|
||||
"evidence": ".agent/evidence-v0.2.3/source-integrity.json"
|
||||
},
|
||||
"selectedSegmentStartSeconds": 35,
|
||||
"file": "street.wav",
|
||||
"sourceSha256": "0ddb0be7eb3427f781c8268bcbc74b8ad7e1fbf75b9f6966e65274dbe85f3d9d",
|
||||
"outputLicense": "Public domain (PD-author)",
|
||||
"verificationDateUtc": "2026-10-14",
|
||||
"sha256": "1e12ed82c07550e22905b912a8f862ce10dfe884b5d36a928f7a04628665529d",
|
||||
"bytes": 576044,
|
||||
"duration": 12.0,
|
||||
"rms": 0.06761004836258645,
|
||||
"peak": 0.3353271484375,
|
||||
"conversion": {
|
||||
"startSeconds": 35,
|
||||
"durationSeconds": 12,
|
||||
"seekMethod": "input seek",
|
||||
"fadeSeconds": 0.05,
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16 little-endian",
|
||||
"loudness": {
|
||||
"pass1Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json",
|
||||
"pass2Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json:measured_I=-35.88:measured_TP=-13.37:measured_LRA=4.0:measured_thresh=-45.88:offset=0:linear=true",
|
||||
"pass1": {
|
||||
"input_i": "-35.88",
|
||||
"input_tp": "-13.37",
|
||||
"input_lra": "4.00",
|
||||
"input_thresh": "-45.88",
|
||||
"output_i": "-33.21",
|
||||
"output_tp": "-10.31",
|
||||
"output_lra": "3.40",
|
||||
"output_thresh": "-43.21",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "1.21"
|
||||
},
|
||||
"pass2": {
|
||||
"input_i": "-35.68",
|
||||
"input_tp": "-13.37",
|
||||
"input_lra": "4.80",
|
||||
"input_thresh": "-45.68",
|
||||
"output_i": "-31.80",
|
||||
"output_tp": "-9.49",
|
||||
"output_lra": "4.80",
|
||||
"output_thresh": "-41.80",
|
||||
"normalization_type": "linear",
|
||||
"target_offset": "-0.20"
|
||||
},
|
||||
"final": {
|
||||
"input_i": "-32.00",
|
||||
"input_tp": "-9.49",
|
||||
"input_lra": "4.00",
|
||||
"input_thresh": "-42.00",
|
||||
"output_i": "-33.21",
|
||||
"output_tp": "-10.30",
|
||||
"output_lra": "3.40",
|
||||
"output_thresh": "-43.21",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "1.21"
|
||||
}
|
||||
},
|
||||
"operations": "excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement"
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "mall",
|
||||
"displayName": "쇼핑몰",
|
||||
"pageUrl": "https://commons.wikimedia.org/wiki/File:1_minute_at_the_alexa_mall_in_berlin.ogg",
|
||||
"directUrl": "https://upload.wikimedia.org/wikipedia/commons/f/fd/1_minute_at_the_alexa_mall_in_berlin.ogg",
|
||||
"creator": "thore (Thore)",
|
||||
"license": "Public domain (PD-author)",
|
||||
"licenseUrl": "https://commons.wikimedia.org/wiki/Template:PD-author",
|
||||
"attribution": "Suggested: 1 minute at the Alexa mall in Berlin, by thore, via Wikimedia Commons; public domain.",
|
||||
"expectedSourceSha256": "bb066e130e5d665db57cb5f88e820d053c724d8f777b275213998d2074c6529a",
|
||||
"sourceBytes": 1666896,
|
||||
"directMediaDurationSeconds": 60.05551,
|
||||
"sourceVerification": {
|
||||
"status": "verified",
|
||||
"dateUtc": "2026-10-14",
|
||||
"method": "SHA-256, byte count, ffprobe format.duration, full FFmpeg decode",
|
||||
"evidence": ".agent/evidence-v0.2.3/source-integrity.json"
|
||||
},
|
||||
"selectedSegmentStartSeconds": 36,
|
||||
"file": "mall.wav",
|
||||
"sourceSha256": "bb066e130e5d665db57cb5f88e820d053c724d8f777b275213998d2074c6529a",
|
||||
"outputLicense": "Public domain (PD-author)",
|
||||
"verificationDateUtc": "2026-10-14",
|
||||
"sha256": "c1100129d5e05b5fa7a7545b44ebe5cff455576543a27f3c7cbb937fde6a7c69",
|
||||
"bytes": 576044,
|
||||
"duration": 12.0,
|
||||
"rms": 0.027251114844723298,
|
||||
"peak": 0.2449951171875,
|
||||
"conversion": {
|
||||
"startSeconds": 36,
|
||||
"durationSeconds": 12,
|
||||
"seekMethod": "input seek",
|
||||
"fadeSeconds": 0.05,
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16 little-endian",
|
||||
"loudness": {
|
||||
"pass1Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json",
|
||||
"pass2Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json:measured_I=-22.14:measured_TP=-1.82:measured_LRA=1.4:measured_thresh=-32.14:offset=0:linear=true",
|
||||
"pass1": {
|
||||
"input_i": "-22.14",
|
||||
"input_tp": "-1.82",
|
||||
"input_lra": "1.40",
|
||||
"input_thresh": "-32.14",
|
||||
"output_i": "-31.73",
|
||||
"output_tp": "-11.54",
|
||||
"output_lra": "0.90",
|
||||
"output_thresh": "-41.73",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-0.27"
|
||||
},
|
||||
"pass2": {
|
||||
"input_i": "-22.09",
|
||||
"input_tp": "-2.36",
|
||||
"input_lra": "1.40",
|
||||
"input_thresh": "-32.09",
|
||||
"output_i": "-31.95",
|
||||
"output_tp": "-12.22",
|
||||
"output_lra": "1.50",
|
||||
"output_thresh": "-41.95",
|
||||
"normalization_type": "linear",
|
||||
"target_offset": "-0.05"
|
||||
},
|
||||
"final": {
|
||||
"input_i": "-32.01",
|
||||
"input_tp": "-11.68",
|
||||
"input_lra": "1.30",
|
||||
"input_thresh": "-42.01",
|
||||
"output_i": "-31.73",
|
||||
"output_tp": "-11.54",
|
||||
"output_lra": "0.90",
|
||||
"output_thresh": "-41.73",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-0.27"
|
||||
}
|
||||
},
|
||||
"operations": "excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement"
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "theater",
|
||||
"displayName": "극장",
|
||||
"pageUrl": "https://freesound.org/people/ElevatorFan2020/sounds/853576/",
|
||||
"directUrl": "https://cdn.freesound.org/previews/853/853576_14269391-lq.mp3",
|
||||
"creator": "ElevatorFan2020",
|
||||
"license": "CC0 1.0 Universal",
|
||||
"licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"attribution": "Suggested: Crowd Ambience - Theater, by ElevatorFan2020, from Freesound, CC0 1.0.",
|
||||
"expectedSourceSha256": "05c3ece7c088f34700b7610f791c0ad848a24c77be2c32fd1503a78356739a43",
|
||||
"sourceBytes": 1485015,
|
||||
"directMediaDurationSeconds": 176.901224,
|
||||
"sourceVerification": {
|
||||
"status": "verified",
|
||||
"dateUtc": "2026-10-14",
|
||||
"method": "SHA-256, byte count, ffprobe format.duration, full FFmpeg decode",
|
||||
"evidence": ".agent/evidence-v0.2.3/source-integrity.json"
|
||||
},
|
||||
"selectedSegmentStartSeconds": 45,
|
||||
"file": "theater.wav",
|
||||
"sourceSha256": "05c3ece7c088f34700b7610f791c0ad848a24c77be2c32fd1503a78356739a43",
|
||||
"outputLicense": "CC0 1.0 Universal",
|
||||
"verificationDateUtc": "2026-10-14",
|
||||
"sha256": "1fa8c57ce39013ff6bc4c0c4e8aff42f295781d27ba763b2990efe4727b4bd27",
|
||||
"bytes": 576044,
|
||||
"duration": 12.0,
|
||||
"rms": 0.027309642076388547,
|
||||
"peak": 0.16900634765625,
|
||||
"conversion": {
|
||||
"startSeconds": 45,
|
||||
"durationSeconds": 12,
|
||||
"seekMethod": "input seek",
|
||||
"fadeSeconds": 0.05,
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16 little-endian",
|
||||
"loudness": {
|
||||
"pass1Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json",
|
||||
"pass2Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json:measured_I=-25.82:measured_TP=-9.26:measured_LRA=0.9:measured_thresh=-35.82:offset=0:linear=true",
|
||||
"pass1": {
|
||||
"input_i": "-25.82",
|
||||
"input_tp": "-9.26",
|
||||
"input_lra": "0.90",
|
||||
"input_thresh": "-35.82",
|
||||
"output_i": "-31.85",
|
||||
"output_tp": "-15.56",
|
||||
"output_lra": "0.80",
|
||||
"output_thresh": "-41.85",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-0.15"
|
||||
},
|
||||
"pass2": {
|
||||
"input_i": "-25.70",
|
||||
"input_tp": "-9.26",
|
||||
"input_lra": "1.10",
|
||||
"input_thresh": "-35.70",
|
||||
"output_i": "-31.89",
|
||||
"output_tp": "-15.44",
|
||||
"output_lra": "1.10",
|
||||
"output_thresh": "-41.89",
|
||||
"normalization_type": "linear",
|
||||
"target_offset": "-0.11"
|
||||
},
|
||||
"final": {
|
||||
"input_i": "-32.00",
|
||||
"input_tp": "-15.44",
|
||||
"input_lra": "0.90",
|
||||
"input_thresh": "-42.00",
|
||||
"output_i": "-31.85",
|
||||
"output_tp": "-15.56",
|
||||
"output_lra": "0.80",
|
||||
"output_thresh": "-41.85",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-0.15"
|
||||
}
|
||||
},
|
||||
"operations": "excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement"
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "department",
|
||||
"displayName": "백화점",
|
||||
"pageUrl": "https://freesound.org/people/icmusic/sounds/268941/",
|
||||
"directUrl": "https://cdn.freesound.org/previews/268/268941_40107-lq.mp3",
|
||||
"creator": "icmusic",
|
||||
"license": "CC0 1.0 Universal",
|
||||
"licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"attribution": "Suggested: US Department store - checkouts, by icmusic, from Freesound, CC0 1.0.",
|
||||
"expectedSourceSha256": "261fda28722fba623483a90b32e7a2ec388c59887f56a5247156b53f1ffb6ccd",
|
||||
"sourceBytes": 2445024,
|
||||
"directMediaDurationSeconds": 292.872,
|
||||
"sourceVerification": {
|
||||
"status": "verified",
|
||||
"dateUtc": "2026-10-14",
|
||||
"method": "SHA-256, byte count, ffprobe format.duration, full FFmpeg decode",
|
||||
"evidence": ".agent/evidence-v0.2.3/source-integrity.json"
|
||||
},
|
||||
"selectedSegmentStartSeconds": 90,
|
||||
"file": "department.wav",
|
||||
"sourceSha256": "261fda28722fba623483a90b32e7a2ec388c59887f56a5247156b53f1ffb6ccd",
|
||||
"outputLicense": "CC0 1.0 Universal",
|
||||
"verificationDateUtc": "2026-10-14",
|
||||
"sha256": "101683ffb99c666a36b42b92661fdc404f1e2eb114f52ad03dc971734fcab375",
|
||||
"bytes": 576044,
|
||||
"duration": 12.0,
|
||||
"rms": 0.025934230237752497,
|
||||
"peak": 0.15399169921875,
|
||||
"conversion": {
|
||||
"startSeconds": 90,
|
||||
"durationSeconds": 12,
|
||||
"seekMethod": "input seek",
|
||||
"fadeSeconds": 0.05,
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16 little-endian",
|
||||
"loudness": {
|
||||
"pass1Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json",
|
||||
"pass2Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json:measured_I=-23.99:measured_TP=-8.17:measured_LRA=3.7:measured_thresh=-33.99:offset=0:linear=true",
|
||||
"pass1": {
|
||||
"input_i": "-23.99",
|
||||
"input_tp": "-8.17",
|
||||
"input_lra": "3.70",
|
||||
"input_thresh": "-33.99",
|
||||
"output_i": "-31.23",
|
||||
"output_tp": "-15.60",
|
||||
"output_lra": "2.40",
|
||||
"output_thresh": "-41.23",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-0.77"
|
||||
},
|
||||
"pass2": {
|
||||
"input_i": "-24.08",
|
||||
"input_tp": "-8.24",
|
||||
"input_lra": "3.90",
|
||||
"input_thresh": "-34.08",
|
||||
"output_i": "-32.09",
|
||||
"output_tp": "-16.25",
|
||||
"output_lra": "3.90",
|
||||
"output_thresh": "-42.09",
|
||||
"normalization_type": "linear",
|
||||
"target_offset": "0.09"
|
||||
},
|
||||
"final": {
|
||||
"input_i": "-32.00",
|
||||
"input_tp": "-16.18",
|
||||
"input_lra": "3.70",
|
||||
"input_thresh": "-42.00",
|
||||
"output_i": "-31.23",
|
||||
"output_tp": "-15.59",
|
||||
"output_lra": "2.40",
|
||||
"output_thresh": "-41.23",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-0.77"
|
||||
}
|
||||
},
|
||||
"operations": "excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement"
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "market",
|
||||
"displayName": "시장",
|
||||
"pageUrl": "https://commons.wikimedia.org/wiki/File:Italia_Palermo_mercato-Ballaro_20161225_122421.ogg",
|
||||
"directUrl": "https://upload.wikimedia.org/wikipedia/commons/e/e8/Italia_Palermo_mercato-Ballaro_20161225_122421.ogg",
|
||||
"creator": "Marie Flutre (Wikimedia user Timflutre)",
|
||||
"license": "CC BY-SA 4.0",
|
||||
"licenseUrl": "https://creativecommons.org/licenses/by-sa/4.0/",
|
||||
"attribution": "Italia Palermo mercato-Ballaro 20161225 122421, by Marie Flutre, CC BY-SA 4.0, via Wikimedia Commons. Modified by excerpting, trimming, fades, normalization, downmixing, resampling and PCM WAV conversion. The derivative audio remains CC BY-SA 4.0.",
|
||||
"expectedSourceSha256": "fc0075dce8ad05b56460c9f18754c27b2021f21f1c780a595ccda648d33c941d",
|
||||
"sourceBytes": 622200,
|
||||
"directMediaDurationSeconds": 76.696961,
|
||||
"sourceVerification": {
|
||||
"status": "verified",
|
||||
"dateUtc": "2026-10-14",
|
||||
"method": "SHA-256, byte count, ffprobe format.duration, full FFmpeg decode",
|
||||
"evidence": ".agent/evidence-v0.2.3/source-integrity.json"
|
||||
},
|
||||
"selectedSegmentStartSeconds": 24,
|
||||
"file": "market.wav",
|
||||
"sourceSha256": "fc0075dce8ad05b56460c9f18754c27b2021f21f1c780a595ccda648d33c941d",
|
||||
"outputLicense": "CC BY-SA 4.0",
|
||||
"verificationDateUtc": "2026-10-14",
|
||||
"sha256": "b85044f3f0a9717f8bc86152ccacaf9752d63f156e9044a6ab955b33caeebad8",
|
||||
"bytes": 576044,
|
||||
"duration": 12.0,
|
||||
"rms": 0.022879647581302516,
|
||||
"peak": 0.45123291015625,
|
||||
"conversion": {
|
||||
"startSeconds": 24,
|
||||
"durationSeconds": 12,
|
||||
"seekMethod": "input seek",
|
||||
"fadeSeconds": 0.05,
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16 little-endian",
|
||||
"loudness": {
|
||||
"pass1Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json",
|
||||
"pass2Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json:measured_I=-25.51:measured_TP=-0.13:measured_LRA=7.1:measured_thresh=-35.54:offset=0:linear=true",
|
||||
"pass1": {
|
||||
"input_i": "-25.51",
|
||||
"input_tp": "-0.13",
|
||||
"input_lra": "7.10",
|
||||
"input_thresh": "-35.54",
|
||||
"output_i": "-30.46",
|
||||
"output_tp": "-6.10",
|
||||
"output_lra": "3.90",
|
||||
"output_thresh": "-40.46",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-1.54"
|
||||
},
|
||||
"pass2": {
|
||||
"input_i": "-26.35",
|
||||
"input_tp": "-0.42",
|
||||
"input_lra": "7.10",
|
||||
"input_thresh": "-36.35",
|
||||
"output_i": "-32.84",
|
||||
"output_tp": "-6.91",
|
||||
"output_lra": "7.10",
|
||||
"output_thresh": "-42.84",
|
||||
"normalization_type": "linear",
|
||||
"target_offset": "0.84"
|
||||
},
|
||||
"final": {
|
||||
"input_i": "-32.01",
|
||||
"input_tp": "-6.62",
|
||||
"input_lra": "7.10",
|
||||
"input_thresh": "-42.03",
|
||||
"output_i": "-30.46",
|
||||
"output_tp": "-6.10",
|
||||
"output_lra": "3.90",
|
||||
"output_thresh": "-40.46",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-1.54"
|
||||
}
|
||||
},
|
||||
"operations": "excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement"
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "subway",
|
||||
"displayName": "지하철",
|
||||
"pageUrl": "https://commons.wikimedia.org/wiki/File:TTC_Subway_Line_1_Ambience_-_Museum_to_Union_(Freesound).ogg",
|
||||
"directUrl": "https://upload.wikimedia.org/wikipedia/commons/d/d3/TTC_Subway_Line_1_Ambience_-_Museum_to_Union_%28Freesound%29.ogg",
|
||||
"creator": "PascalHD",
|
||||
"license": "CC BY 4.0",
|
||||
"licenseUrl": "https://creativecommons.org/licenses/by/4.0/",
|
||||
"attribution": "TTC Subway Line 1 Ambience - Museum to Union, by PascalHD, CC BY 4.0, via Wikimedia Commons/Freesound. Modified by excerpting, trimming, fades, normalization, downmixing, resampling and PCM WAV conversion.",
|
||||
"expectedSourceSha256": "41fcf064cde53cef1528fe98721347851e60c070d8ff9f213f354025cf272d4c",
|
||||
"sourceBytes": 3343901,
|
||||
"directMediaDurationSeconds": 425.024,
|
||||
"sourceVerification": {
|
||||
"status": "verified",
|
||||
"dateUtc": "2026-10-14",
|
||||
"method": "SHA-256, byte count, ffprobe format.duration, full FFmpeg decode",
|
||||
"evidence": ".agent/evidence-v0.2.3/source-integrity.json"
|
||||
},
|
||||
"selectedSegmentStartSeconds": 65,
|
||||
"file": "subway.wav",
|
||||
"sourceSha256": "41fcf064cde53cef1528fe98721347851e60c070d8ff9f213f354025cf272d4c",
|
||||
"outputLicense": "CC BY 4.0",
|
||||
"verificationDateUtc": "2026-10-14",
|
||||
"sha256": "c613d36d303194a2768da0a93156b2e5a4073460fe899bb2f42ba330521443fd",
|
||||
"bytes": 576044,
|
||||
"duration": 12.0,
|
||||
"rms": 0.03234758164589298,
|
||||
"peak": 0.171966552734375,
|
||||
"conversion": {
|
||||
"startSeconds": 65,
|
||||
"durationSeconds": 12,
|
||||
"seekMethod": "input seek",
|
||||
"fadeSeconds": 0.05,
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16 little-endian",
|
||||
"loudness": {
|
||||
"pass1Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json",
|
||||
"pass2Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json:measured_I=-16.94:measured_TP=-0.23:measured_LRA=4.8:measured_thresh=-26.94:offset=0:linear=true",
|
||||
"pass1": {
|
||||
"input_i": "-16.94",
|
||||
"input_tp": "-0.23",
|
||||
"input_lra": "4.80",
|
||||
"input_thresh": "-26.94",
|
||||
"output_i": "-32.84",
|
||||
"output_tp": "-16.64",
|
||||
"output_lra": "4.10",
|
||||
"output_thresh": "-42.84",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "0.84"
|
||||
},
|
||||
"pass2": {
|
||||
"input_i": "-16.48",
|
||||
"input_tp": "-0.23",
|
||||
"input_lra": "4.70",
|
||||
"input_thresh": "-26.48",
|
||||
"output_i": "-31.54",
|
||||
"output_tp": "-15.29",
|
||||
"output_lra": "4.80",
|
||||
"output_thresh": "-41.54",
|
||||
"normalization_type": "linear",
|
||||
"target_offset": "-0.46"
|
||||
},
|
||||
"final": {
|
||||
"input_i": "-32.00",
|
||||
"input_tp": "-15.29",
|
||||
"input_lra": "4.90",
|
||||
"input_thresh": "-42.00",
|
||||
"output_i": "-32.84",
|
||||
"output_tp": "-16.64",
|
||||
"output_lra": "4.10",
|
||||
"output_thresh": "-42.84",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "0.84"
|
||||
}
|
||||
},
|
||||
"operations": "excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement"
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "cafe",
|
||||
"displayName": "카페",
|
||||
"pageUrl": "https://commons.wikimedia.org/wiki/File:Cafe_ambiance.ogg",
|
||||
"directUrl": "https://upload.wikimedia.org/wikipedia/commons/5/54/Cafe_ambiance.ogg",
|
||||
"creator": "Marble Toast",
|
||||
"license": "CC0 1.0 Universal",
|
||||
"licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"attribution": "Suggested: Cafe ambiance, by Marble Toast, via Wikimedia Commons, CC0 1.0.",
|
||||
"expectedSourceSha256": "6360791fdcee1f64638f0fc9abd6d2c7a1aa75fd3d2b80033170a02d025099dc",
|
||||
"sourceBytes": 19947952,
|
||||
"directMediaDurationSeconds": 1200.000998,
|
||||
"sourceVerification": {
|
||||
"status": "verified",
|
||||
"dateUtc": "2026-10-14",
|
||||
"method": "SHA-256, byte count, ffprobe format.duration, full FFmpeg decode",
|
||||
"evidence": ".agent/evidence-v0.2.3/source-integrity.json"
|
||||
},
|
||||
"selectedSegmentStartSeconds": 0,
|
||||
"file": "cafe.wav",
|
||||
"sourceSha256": "6360791fdcee1f64638f0fc9abd6d2c7a1aa75fd3d2b80033170a02d025099dc",
|
||||
"outputLicense": "CC0 1.0 Universal",
|
||||
"verificationDateUtc": "2026-10-14",
|
||||
"sha256": "6a86d722d23c47d6f3512cf364de18287335b050ad72e639f9a83ba40b669016",
|
||||
"bytes": 576044,
|
||||
"duration": 12.0,
|
||||
"rms": 0.02589284072747213,
|
||||
"peak": 0.131317138671875,
|
||||
"conversion": {
|
||||
"startSeconds": 0,
|
||||
"durationSeconds": 12,
|
||||
"seekMethod": "input seek",
|
||||
"fadeSeconds": 0.05,
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16 little-endian",
|
||||
"loudness": {
|
||||
"pass1Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json",
|
||||
"pass2Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json:measured_I=-19.63:measured_TP=-5.22:measured_LRA=0.3:measured_thresh=-29.63:offset=0:linear=true",
|
||||
"pass1": {
|
||||
"input_i": "-19.63",
|
||||
"input_tp": "-5.22",
|
||||
"input_lra": "0.30",
|
||||
"input_thresh": "-29.63",
|
||||
"output_i": "-32.00",
|
||||
"output_tp": "-17.64",
|
||||
"output_lra": "0.30",
|
||||
"output_thresh": "-42.00",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-0.00"
|
||||
},
|
||||
"pass2": {
|
||||
"input_i": "-19.52",
|
||||
"input_tp": "-5.26",
|
||||
"input_lra": "0.30",
|
||||
"input_thresh": "-29.52",
|
||||
"output_i": "-31.89",
|
||||
"output_tp": "-17.63",
|
||||
"output_lra": "0.30",
|
||||
"output_thresh": "-41.89",
|
||||
"normalization_type": "linear",
|
||||
"target_offset": "-0.11"
|
||||
},
|
||||
"final": {
|
||||
"input_i": "-32.00",
|
||||
"input_tp": "-17.59",
|
||||
"input_lra": "0.30",
|
||||
"input_thresh": "-42.00",
|
||||
"output_i": "-32.00",
|
||||
"output_tp": "-17.64",
|
||||
"output_lra": "0.30",
|
||||
"output_thresh": "-42.00",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-0.00"
|
||||
}
|
||||
},
|
||||
"operations": "excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement"
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "rain",
|
||||
"displayName": "비 오는 거리",
|
||||
"pageUrl": "https://commons.wikimedia.org/wiki/File:Urban_Street_on_a_Rainy_Afternoon.flac",
|
||||
"directUrl": "https://upload.wikimedia.org/wikipedia/commons/8/8c/Urban_Street_on_a_Rainy_Afternoon.flac",
|
||||
"creator": "Extemporalist",
|
||||
"license": "CC0 1.0 Universal",
|
||||
"licenseUrl": "https://creativecommons.org/publicdomain/zero/1.0/",
|
||||
"attribution": "Suggested: Urban Street on a Rainy Afternoon, by Extemporalist, via Wikimedia Commons, CC0 1.0.",
|
||||
"expectedSourceSha256": "ef0511593b1bb0ba47d5c5dafd83eb07ba854b5a65fd5d41b8c76a1b3ff2c22a",
|
||||
"sourceBytes": 91187572,
|
||||
"directMediaDurationSeconds": 1800.0,
|
||||
"sourceVerification": {
|
||||
"status": "verified",
|
||||
"dateUtc": "2026-10-14",
|
||||
"method": "SHA-256, byte count, ffprobe format.duration, full FFmpeg decode",
|
||||
"evidence": ".agent/evidence-v0.2.3/source-integrity.json"
|
||||
},
|
||||
"selectedSegmentStartSeconds": 180,
|
||||
"file": "rain.wav",
|
||||
"sourceSha256": "ef0511593b1bb0ba47d5c5dafd83eb07ba854b5a65fd5d41b8c76a1b3ff2c22a",
|
||||
"outputLicense": "CC0 1.0 Universal",
|
||||
"verificationDateUtc": "2026-10-14",
|
||||
"sha256": "06d59315d23343fab9c5bd8fbbec044f797d7384480b7f70454b11b1676355ae",
|
||||
"bytes": 576044,
|
||||
"duration": 12.0,
|
||||
"rms": 0.024561801864354006,
|
||||
"peak": 0.220947265625,
|
||||
"conversion": {
|
||||
"startSeconds": 180,
|
||||
"durationSeconds": 12,
|
||||
"seekMethod": "input seek",
|
||||
"fadeSeconds": 0.05,
|
||||
"sampleRate": 24000,
|
||||
"channels": 1,
|
||||
"encoding": "PCM16 little-endian",
|
||||
"loudness": {
|
||||
"pass1Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json",
|
||||
"pass2Filter": "loudnorm=I=-32:TP=-6.1:LRA=50:dual_mono=false:print_format=json:measured_I=-50.72:measured_TP=-31.81:measured_LRA=10.1:measured_thresh=-60.72:offset=0:linear=true",
|
||||
"pass1": {
|
||||
"input_i": "-50.72",
|
||||
"input_tp": "-31.81",
|
||||
"input_lra": "10.10",
|
||||
"input_thresh": "-60.72",
|
||||
"output_i": "-28.22",
|
||||
"output_tp": "-8.24",
|
||||
"output_lra": "8.10",
|
||||
"output_thresh": "-38.22",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-3.78"
|
||||
},
|
||||
"pass2": {
|
||||
"input_i": "-52.18",
|
||||
"input_tp": "-31.83",
|
||||
"input_lra": "10.00",
|
||||
"input_thresh": "-62.18",
|
||||
"output_i": "-33.46",
|
||||
"output_tp": "-13.11",
|
||||
"output_lra": "10.10",
|
||||
"output_thresh": "-43.46",
|
||||
"normalization_type": "linear",
|
||||
"target_offset": "1.46"
|
||||
},
|
||||
"final": {
|
||||
"input_i": "-32.01",
|
||||
"input_tp": "-13.09",
|
||||
"input_lra": "10.10",
|
||||
"input_thresh": "-42.01",
|
||||
"output_i": "-28.22",
|
||||
"output_tp": "-8.24",
|
||||
"output_lra": "8.10",
|
||||
"output_thresh": "-38.22",
|
||||
"normalization_type": "dynamic",
|
||||
"target_offset": "-3.78"
|
||||
}
|
||||
},
|
||||
"operations": "excerpt, downmix, resample, linear end fades, FFmpeg EBU R128 two-pass linear loudnorm, PCM16 WAV encoding, final loudness/true-peak measurement"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
"""승인 원본으로 두 번 재생성하고 public과 비교한다. 기존 공개 폴더는 수정하지 않는다."""
|
||||
import hashlib
|
||||
import json
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[3]
|
||||
sys.path.insert(0, str(ROOT / 'scripts'))
|
||||
import ambience_audio as audio
|
||||
|
||||
plan = json.loads((ROOT / '.agent/AMBIENCE-SOURCES-v0.2.3.json').read_text())
|
||||
current = json.loads((ROOT / 'public/ambience/manifest.json').read_text())
|
||||
with tempfile.TemporaryDirectory(prefix='findword-reproduce-') as directory:
|
||||
output = Path(directory) / 'ambience'
|
||||
first = audio.generate(plan, '/tmp/findword-ambience-sources', output)
|
||||
second = audio.generate(plan, '/tmp/findword-ambience-sources', output)
|
||||
# 생성 시각만 달라질 수 있다. gain/iteration 통계·필터·PCM·notice의 재현성을 별도로 검사한다.
|
||||
assert first['files'] == second['files'] == current['files']
|
||||
assert (output / 'AMBIENCE_NOTICES.md').read_bytes() == (ROOT / 'public/ambience/AMBIENCE_NOTICES.md').read_bytes()
|
||||
report = {'twoGenerationsMatchPublished': True, 'ignoredField': 'generatedAtUtc',
|
||||
'toolVersions': first['toolVersions'], 'normalization': first['normalization'],
|
||||
'files': [{'environmentId': f['environmentId'], 'sourceSha256': f['sourceSha256'],
|
||||
'sourceBytes': f['sourceBytes'], 'selectedSegmentStartSeconds': f['selectedSegmentStartSeconds'],
|
||||
'sha256': f['sha256'], 'bytes': f['bytes'], 'final': f['conversion']['loudness']['final']}
|
||||
for f in first['files']]}
|
||||
(Path(__file__).parent / 'reproducibility.json').write_text(json.dumps(report, indent=2)+'\n')
|
||||
print('PASS: all eight source hashes verified, two independent generations and published WAVs/pass metrics/notices match.')
|
||||
@@ -0,0 +1,131 @@
|
||||
{
|
||||
"twoGenerationsMatchPublished": true,
|
||||
"ignoredField": "generatedAtUtc",
|
||||
"toolVersions": {
|
||||
"ffmpeg": "ffmpeg version 6.1.1-3ubuntu5 Copyright (c) 2000-2023 the FFmpeg developers"
|
||||
},
|
||||
"normalization": {
|
||||
"algorithm": "FFmpeg ebur128 measurement; scalar volume in double precision; PCM16; fresh ebur128 verification",
|
||||
"targetIntegratedLUFS": -32.5,
|
||||
"truePeakCeilingDBTP": -6.0,
|
||||
"internalTruePeakCeilingDBTP": -6.2,
|
||||
"toleranceLU": 0.2,
|
||||
"maximumSpreadLU": 0.4,
|
||||
"measurementFilter": "ebur128=peak=true",
|
||||
"maximumIterations": 3
|
||||
},
|
||||
"files": [
|
||||
{
|
||||
"environmentId": "street",
|
||||
"sourceSha256": "0ddb0be7eb3427f781c8268bcbc74b8ad7e1fbf75b9f6966e65274dbe85f3d9d",
|
||||
"sourceBytes": 3414104,
|
||||
"selectedSegmentStartSeconds": 35,
|
||||
"sha256": "dace0969087539e5b67fb6fac11b759e81626574230ca7f8d2feb484753656a8",
|
||||
"bytes": 576044,
|
||||
"final": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -10.2,
|
||||
"loudnessRangeLU": 4.6,
|
||||
"thresholdLUFS": -42.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "mall",
|
||||
"sourceSha256": "bb066e130e5d665db57cb5f88e820d053c724d8f777b275213998d2074c6529a",
|
||||
"sourceBytes": 1666896,
|
||||
"selectedSegmentStartSeconds": 36,
|
||||
"sha256": "a0a135e319ed70f55b03c6e266fb047e53db8008277a6ba8b855a05a1b82662f",
|
||||
"bytes": 576044,
|
||||
"final": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.2,
|
||||
"loudnessRangeLU": 1.4,
|
||||
"thresholdLUFS": -42.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "theater",
|
||||
"sourceSha256": "05c3ece7c088f34700b7610f791c0ad848a24c77be2c32fd1503a78356739a43",
|
||||
"sourceBytes": 1485015,
|
||||
"selectedSegmentStartSeconds": 45,
|
||||
"sha256": "634fc25e8c4e9dcbab97688bc4c0ef9b0299cc7c4c921781a70740aabe46b900",
|
||||
"bytes": 576044,
|
||||
"final": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.1,
|
||||
"loudnessRangeLU": 1.0,
|
||||
"thresholdLUFS": -42.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "department",
|
||||
"sourceSha256": "261fda28722fba623483a90b32e7a2ec388c59887f56a5247156b53f1ffb6ccd",
|
||||
"sourceBytes": 2445024,
|
||||
"selectedSegmentStartSeconds": 90,
|
||||
"sha256": "93e5c23bff2b19716dd21111746837a4df8c52d4b88c6874e57828d09ca5507e",
|
||||
"bytes": 576044,
|
||||
"final": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.6,
|
||||
"loudnessRangeLU": 4.2,
|
||||
"thresholdLUFS": -42.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "market",
|
||||
"sourceSha256": "fc0075dce8ad05b56460c9f18754c27b2021f21f1c780a595ccda648d33c941d",
|
||||
"sourceBytes": 622200,
|
||||
"selectedSegmentStartSeconds": 24,
|
||||
"sha256": "7178307c48c192ac396dcd3c880c377bf56b45e829b459b1feca9f986437e632",
|
||||
"bytes": 576044,
|
||||
"final": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -6.2,
|
||||
"loudnessRangeLU": 6.5,
|
||||
"thresholdLUFS": -42.4
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "subway",
|
||||
"sourceSha256": "41fcf064cde53cef1528fe98721347851e60c070d8ff9f213f354025cf272d4c",
|
||||
"sourceBytes": 3343901,
|
||||
"selectedSegmentStartSeconds": 65,
|
||||
"sha256": "e85cf77a9baa7560fb09966c4eda3b128b92647bc4c54c417a29b4e0f4ac129f",
|
||||
"bytes": 576044,
|
||||
"final": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -16.2,
|
||||
"loudnessRangeLU": 4.9,
|
||||
"thresholdLUFS": -42.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "cafe",
|
||||
"sourceSha256": "6360791fdcee1f64638f0fc9abd6d2c7a1aa75fd3d2b80033170a02d025099dc",
|
||||
"sourceBytes": 19947952,
|
||||
"selectedSegmentStartSeconds": 0,
|
||||
"sha256": "864a81571a2e25a99d6408aa282570e7996c7ace432cf4f4f294677ea5bcad63",
|
||||
"bytes": 576044,
|
||||
"final": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -18.2,
|
||||
"loudnessRangeLU": 0.5,
|
||||
"thresholdLUFS": -42.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"environmentId": "rain",
|
||||
"sourceSha256": "ef0511593b1bb0ba47d5c5dafd83eb07ba854b5a65fd5d41b8c76a1b3ff2c22a",
|
||||
"sourceBytes": 91187572,
|
||||
"selectedSegmentStartSeconds": 180,
|
||||
"sha256": "1842a717e6c77811cb6d6cb09d364e8ef644d50e6beb97d3d187c96e95d85784",
|
||||
"bytes": 576044,
|
||||
"final": {
|
||||
"integratedLUFS": -32.5,
|
||||
"truePeakDBTP": -12.1,
|
||||
"loudnessRangeLU": 8.4,
|
||||
"thresholdLUFS": -42.5
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
"""새 v0.2.5 WAV만 오프라인 ASR로 검사한다. 과거 승인이나 법적 인수를 승계하지 않는다."""
|
||||
from dataclasses import asdict
|
||||
from datetime import datetime, timezone
|
||||
import hashlib
|
||||
from importlib.metadata import version
|
||||
import inspect
|
||||
import json
|
||||
import math
|
||||
from pathlib import Path
|
||||
import platform
|
||||
import sys
|
||||
import ctranslate2
|
||||
from faster_whisper import WhisperModel
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[3]
|
||||
EVIDENCE = Path(__file__).resolve().parent
|
||||
# 과거 실패·no-VAD 증거는 읽기만 하고 현재 결과를 독립 파일에 기록한다.
|
||||
PRIOR_EVIDENCE = ROOT / ".agent/evidence-v0.2.3/privacy-screening"
|
||||
REVISION = 'd90ca5fe260221311c53c58e660288d3deb8d356'
|
||||
SNAPSHOT = Path.home() / '.cache/huggingface/hub/models--Systran--faster-whisper-tiny/snapshots' / REVISION
|
||||
|
||||
def json_safe(value):
|
||||
"""JSON의 비유한 수는 명시적 객체로 보존하며 반환 segment를 삭제하거나 고치지 않는다."""
|
||||
if isinstance(value, float) and not math.isfinite(value):
|
||||
return {'nonFiniteFloat': 'NaN' if math.isnan(value) else 'Infinity' if value > 0 else '-Infinity'}
|
||||
if isinstance(value, dict): return {key: json_safe(item) for key, item in value.items()}
|
||||
if isinstance(value, (list, tuple)): return [json_safe(item) for item in value]
|
||||
return value
|
||||
|
||||
def sha(path):
|
||||
"""원본/모델/실행 스크립트의 연결은 전체 바이트 SHA-256으로 검증한다."""
|
||||
with path.open('rb') as stream: return hashlib.file_digest(stream, 'sha256').hexdigest()
|
||||
|
||||
assert version('faster-whisper') == '1.2.1'
|
||||
started = datetime.now(timezone.utc).isoformat()
|
||||
manifest_path = ROOT / 'public/ambience/manifest.json'
|
||||
manifest_hash = sha(manifest_path)
|
||||
manifest = json.loads(manifest_path.read_text())
|
||||
# Preserve all effective API defaults rather than relying on undocumented invocation settings.
|
||||
parameters = {name: parameter.default for name, parameter in inspect.signature(WhisperModel.transcribe).parameters.items()
|
||||
if name not in ('self', 'audio')}
|
||||
parameters.update(language=None, task='transcribe', beam_size=5, best_of=5, vad_filter=True, vad_parameters=None, condition_on_previous_text=True)
|
||||
prior_path = PRIOR_EVIDENCE / 'prior-attempt-market60-cafe180/final-asr.json'
|
||||
prior = json.loads(prior_path.read_text())
|
||||
assert prior['requiredEmptyPassed'] is False
|
||||
assert json_safe(parameters) == prior['method']['parameters'], 'Decoder/VAD settings must remain identical'
|
||||
ctranslate2.set_random_seed(0)
|
||||
model = WhisperModel(str(SNAPSHOT), device='cpu', compute_type='int8', cpu_threads=4, num_workers=1, local_files_only=True)
|
||||
assert model.model.is_multilingual
|
||||
results = []
|
||||
for entry in manifest['files']:
|
||||
path = ROOT / 'public/ambience' / entry['file']
|
||||
before = sha(path)
|
||||
assert before == entry['sha256'] and path.stat().st_size == entry['bytes']
|
||||
segments, info = model.transcribe(str(path), **parameters)
|
||||
segments = [asdict(segment) for segment in segments] # Exhaust lazy inference; retain exact unedited results.
|
||||
assert sha(path) == before
|
||||
record = {'environmentId': entry['environmentId'], 'file': str(path.relative_to(ROOT)), 'sha256': before,
|
||||
'bytes': path.stat().st_size, 'durationSeconds': entry['duration'],
|
||||
'selectedSegmentStartSeconds': entry['selectedSegmentStartSeconds'], 'sourceSha256': entry['sourceSha256'],
|
||||
'language': info.language, 'languageProbability': info.language_probability,
|
||||
'segments': segments, 'text': ''.join(segment['text'] for segment in segments), 'info': asdict(info)}
|
||||
results.append(record)
|
||||
print(json.dumps({k: record[k] for k in ('environmentId','sha256','language','languageProbability','segments','text')}, ensure_ascii=False), flush=True)
|
||||
assert sha(manifest_path) == manifest_hash
|
||||
required = ['mall', 'market', 'cafe']
|
||||
selected = {result['environmentId']: result for result in results if result['environmentId'] in required}
|
||||
assert set(selected) == set(required)
|
||||
assert {key: result['selectedSegmentStartSeconds'] for key, result in selected.items()} == {'mall': 36, 'market': 24, 'cafe': 0}
|
||||
passed = all(result['segments'] == [] and result['text'] == '' for result in selected.values())
|
||||
report = {'schemaVersion': 1, 'startedAtUtc': started, 'completedAtUtc': datetime.now(timezone.utc).isoformat(),
|
||||
'tool': {'name': 'faster-whisper', 'version': version('faster-whisper'), 'python': platform.python_version(),
|
||||
'dependencies': {name: version(name) for name in ('ctranslate2', 'av', 'numpy', 'tokenizers', 'huggingface-hub')}},
|
||||
'model': {'name': 'tiny', 'multilingual': True, 'repository': 'Systran/faster-whisper-tiny', 'revision': REVISION,
|
||||
'files': {path.name: sha(path) for path in sorted(SNAPSHOT.iterdir()) if path.is_file()}},
|
||||
'method': {'input': 'Exact final 12-second public/ambience WAV files, hash verified before and after inference; built-in Silero VAD with package defaults, no text editing or manual filtering.',
|
||||
'device': 'cpu', 'computeType': 'int8', 'cpuThreads': 4, 'numWorkers': 1, 'randomSeed': 0,
|
||||
'nonFiniteNumberEncoding': 'Non-finite default options use {nonFiniteFloat: Infinity|-Infinity|NaN} tagged objects; no ASR segments or text are discarded.', 'offline': True, 'parameters': parameters, 'manifestSha256': manifest_hash,
|
||||
'vadModelSha256': sha(Path(__import__('faster_whisper').__file__).parent / 'assets/silero_vad_v6.onnx'), 'scriptSha256': sha(Path(__file__)), 'command': '/tmp/findword-asr-venv/bin/python .agent/evidence-v0.2.5/review-fixes/screen-final.py'},
|
||||
'limitations': {'screeningOnly': True, 'humanListeningAcceptance': False, 'legalPrivacyClearance': False,
|
||||
'textIsVerifiedTranscript': False,
|
||||
'explanation': 'Tiny-model ASR is only a screening signal. Empty segments do not prove absence of speech, music or private conversation. Candidate text and language guesses may be hallucinated and are not faithful transcripts. This is NOT human listening acceptance or legal/privacy clearance.'},
|
||||
'priorFailedAttempt': {'file': 'prior-attempt-market60-cafe180/final-asr.json', 'sha256': sha(prior_path), 'requiredEmptyPassed': False},
|
||||
'supplementaryNoVadRun': {'file': 'no-vad-asr.json', 'sha256': sha(PRIOR_EVIDENCE / 'no-vad-asr.json'), 'requiredEmptyPassed': False, 'explanation': 'Historical no-VAD run on mall 36s, market 60s and cafe 180s emitted candidate text that may be hallucinated. It is retained unchanged, is not a screen of the replacement market/cafe WAVs, and does not override the specified VAD gate. Neither empty VAD results nor no-VAD text proves absence or presence of speech/music or provides human listening acceptance or legal/privacy clearance.'}, 'requiredEmptyEnvironmentIds': required, 'requiredEmptyPassed': passed, 'files': results}
|
||||
serialized = json.dumps(json_safe(report), ensure_ascii=False, indent=2, allow_nan=False) + '\n'
|
||||
with (EVIDENCE / 'final-asr.json').open('x') as stream:
|
||||
stream.write(serialized)
|
||||
if not passed: sys.exit('Required changed excerpts produced ASR segments; screening criterion failed.')
|
||||
print('All three changed excerpts have zero emitted segments. Screening signal only; no listening acceptance or legal/privacy clearance.', flush=True)
|
||||
@@ -0,0 +1,7 @@
|
||||
{
|
||||
"method": "High-confidence credential signatures in git-tracked and unignored new text files; no environment/secret access",
|
||||
"textFilesScanned": 668,
|
||||
"findings": [],
|
||||
"passed": true,
|
||||
"limitation": "Pattern scan is not a proof that every possible secret format is absent."
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
"""워크트리의 추적/신규 텍스트에서 명확한 credential 서명만 검사하고 값은 출력하지 않는다."""
|
||||
import json
|
||||
from pathlib import Path
|
||||
import re
|
||||
import subprocess
|
||||
|
||||
ROOT = Path(__file__).resolve().parents[3]
|
||||
# gitignore된 의존성/캐시는 제외한다. 소스·문서·새 evidence는 포함하고 비밀 저장소/환경변수는 읽지 않는다.
|
||||
paths = subprocess.check_output(['git', 'ls-files', '-z', '--cached', '--others', '--exclude-standard'], cwd=ROOT).decode().split('\0')
|
||||
patterns = {
|
||||
'private-key': re.compile(r'-----BEGIN (?:RSA |EC |OPENSSH )?PRIVATE KEY-----'),
|
||||
'aws-access-key': re.compile(r'\b(?:AKIA|ASIA)[A-Z0-9]{16}\b'),
|
||||
'github-token': re.compile(r'\bgh[pousr]_[A-Za-z0-9]{36,}\b'),
|
||||
'openai-token': re.compile(r'\bsk-(?:proj-)?[A-Za-z0-9_-]{35,}\b'),
|
||||
'slack-token': re.compile(r'\bxox[baprs]-[A-Za-z0-9-]{20,}\b'),
|
||||
}
|
||||
findings = []
|
||||
checked = 0
|
||||
for name in sorted(set(paths)):
|
||||
path = ROOT / name
|
||||
if not name or not path.is_file(): continue
|
||||
raw = path.read_bytes()
|
||||
if b'\0' in raw: continue
|
||||
try: content = raw.decode('utf-8')
|
||||
except UnicodeDecodeError: continue
|
||||
checked += 1
|
||||
for kind, pattern in patterns.items():
|
||||
for match in pattern.finditer(content):
|
||||
findings.append({'file': name, 'line': content[:match.start()].count('\n')+1, 'kind': kind})
|
||||
report = {'method':'High-confidence credential signatures in git-tracked and unignored new text files; no environment/secret access',
|
||||
'textFilesScanned':checked,'findings':findings,'passed':not findings,
|
||||
'limitation':'Pattern scan is not a proof that every possible secret format is absent.'}
|
||||
(Path(__file__).parent/'secret-scan.json').write_text(json.dumps(report,indent=2)+'\n')
|
||||
print(json.dumps(report,indent=2))
|
||||
if findings: raise SystemExit(1)
|
||||
@@ -0,0 +1,53 @@
|
||||
"""최종 Playwright 원문을 보존하며 첨부 실측값과 검증 요약만 별도 파일로 추출한다."""
|
||||
import base64
|
||||
import json
|
||||
from pathlib import Path
|
||||
|
||||
EVIDENCE = Path(__file__).resolve().parent
|
||||
report = json.loads((EVIDENCE / 'browser-results.json').read_text())
|
||||
projects = {}
|
||||
|
||||
|
||||
def walk(suite):
|
||||
"""중첩 suite를 순회한다. 실제 result가 실패하면 성공 요약을 만들지 않는다."""
|
||||
for spec in suite.get('specs', []):
|
||||
for test in spec['tests']:
|
||||
project = projects.setdefault(test['projectName'], {'passed': 0, 'attachments': {}})
|
||||
assert len(test['results']) == 1, '재시도 없는 최종 실행만 성공으로 요약한다.'
|
||||
result = test['results'][0]
|
||||
assert result['status'] == 'passed', spec['title']
|
||||
project['passed'] += 1
|
||||
for attachment in result.get('attachments', []):
|
||||
if attachment['contentType'] != 'application/json':
|
||||
continue
|
||||
# 파일 첨부와 base64 본문 첨부의 원문을 같은 방식으로 재사용한다.
|
||||
raw = (Path(attachment['path']).read_bytes() if 'path' in attachment
|
||||
else base64.b64decode(attachment['body']))
|
||||
name = attachment['name'].replace(' ', '-')
|
||||
output = EVIDENCE / f"final-{test['projectName']}-{name}.json"
|
||||
output.write_bytes(raw)
|
||||
project['attachments'][name] = output.name
|
||||
for child in suite.get('suites', []):
|
||||
walk(child)
|
||||
|
||||
|
||||
walk(report)
|
||||
for project in projects.values():
|
||||
gains = json.loads((EVIDENCE / project['attachments']['actual-gain-nodes']).read_text())
|
||||
audit = json.loads((EVIDENCE / project['attachments']['runtime-audit']).read_text())
|
||||
resampled = json.loads((EVIDENCE / project['attachments']['all-voices-resampled-bounds']).read_text())
|
||||
project['resampledPeakMaxima'] = {kind: max(row['normalizedPeak'] for row in resampled['rows'] if row['kind'] == kind)
|
||||
for kind in ('background', 'voice', 'intro')}
|
||||
project['gainCases'] = len(gains['rows'])
|
||||
project['observedBackgroundGainValues'] = sorted({r['sources'][0]['observed'] for r in gains['rows']})
|
||||
project['scheduledBackgroundGainValues'] = sorted({r['sources'][0]['scheduled'] for r in gains['rows']})
|
||||
project['normalFlowAudit'] = {key: len(audit[key]) + len(gains[key])
|
||||
for key in ('errors', 'failed', 'external')}
|
||||
assert project['normalFlowAudit'] == {'errors': 0, 'failed': 0, 'external': 0}
|
||||
project['axeViolations'] = 0 # game/rounds의 실제 axe assertion 통과를 위 status에서 확인했다.
|
||||
|
||||
summary = {'stats': report['stats'], 'projects': projects,
|
||||
'scope': 'System Chrome desktop/mobile emulation; native Web Audio; local built app; intentional fault injections excluded from normal-flow error totals.',
|
||||
'sandboxEvidence': 'chrome-sandbox-final.json'}
|
||||
(EVIDENCE / 'browser-summary.json').write_text(json.dumps(summary, indent=2) + '\n')
|
||||
print(json.dumps(summary, indent=2))
|
||||