@jjlmoya/utils-games-development 1.49.0 → 1.51.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/category/index.ts +2 -1
- package/src/entries.ts +5 -1
- package/src/tests/locale_completeness.test.ts +1 -1
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tool/audioLoopPointFinder/audio-loop-point-finder.css +322 -0
- package/src/tool/audioLoopPointFinder/audio-player.ts +84 -0
- package/src/tool/audioLoopPointFinder/bibliography.astro +6 -0
- package/src/tool/audioLoopPointFinder/bibliography.ts +16 -0
- package/src/tool/audioLoopPointFinder/client.ts +262 -0
- package/src/tool/audioLoopPointFinder/component.astro +147 -0
- package/src/tool/audioLoopPointFinder/dom-utils.ts +55 -0
- package/src/tool/audioLoopPointFinder/entry.ts +27 -0
- package/src/tool/audioLoopPointFinder/i18n/de.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/en.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/es.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/fr.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/id.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/it.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/ja.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/ko.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/nl.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/pl.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/pt.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/ru.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/sv.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/tr.ts +211 -0
- package/src/tool/audioLoopPointFinder/i18n/zh.ts +211 -0
- package/src/tool/audioLoopPointFinder/index.ts +11 -0
- package/src/tool/audioLoopPointFinder/logic.test.ts +72 -0
- package/src/tool/audioLoopPointFinder/logic.ts +214 -0
- package/src/tool/audioLoopPointFinder/metadata-parser.ts +94 -0
- package/src/tool/audioLoopPointFinder/seo.astro +15 -0
- package/src/tool/audioLoopPointFinder/ui.ts +42 -0
- package/src/tool/audioLoopPointFinder/waveform-renderer.ts +53 -0
- package/src/tool/spriteSheetPacker/sprite-sheet-packer.css +55 -19
- package/src/tools.ts +3 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { AudioLoopPointFinderUI } from '../ui';
|
|
3
|
+
import { bibliographyEntries } from '../bibliography';
|
|
4
|
+
|
|
5
|
+
export const content: ToolLocaleContent<AudioLoopPointFinderUI> = {
|
|
6
|
+
slug: 'audio-loop-point-finder',
|
|
7
|
+
title: 'ゲームオーディオループポイントファインダーおよびメタデータインジェクター',
|
|
8
|
+
description: '正確なオーディオループポイントを検出し、ゼロクロスにスナップしてノイズを排除し、LOOPSTARTおよびLOOPENDメタデータを埋め込んだWAVファイルをエクスポートします。',
|
|
9
|
+
ui: {
|
|
10
|
+
title: 'ゲームオーディオループポイントファインダー',
|
|
11
|
+
subtitle: 'インタラクティブな波形アナライザー、ゼロクロスディテクター、WAVメタデータタグ編集ツール',
|
|
12
|
+
dropzoneTitle: 'オーディオファイルをドラッグ&ドロップまたはクリックして選択',
|
|
13
|
+
dropzoneSubtitle: 'WAV、OGG、MP3、FLACオーディオトラックに対応',
|
|
14
|
+
dropzoneButton: 'オーディオファイルを選択',
|
|
15
|
+
audioInfoTitle: 'オーディオトラックのプロパティ',
|
|
16
|
+
durationLabel: '再生時間',
|
|
17
|
+
sampleRateLabel: 'サンプルレート',
|
|
18
|
+
channelsLabel: 'オーディオチャンネル',
|
|
19
|
+
totalSamplesLabel: '総サンプル数',
|
|
20
|
+
loopControlsTitle: 'ループ領域の設定',
|
|
21
|
+
loopStartLabel: 'ループ開始マーカー',
|
|
22
|
+
loopEndLabel: 'ループ終了マーカー',
|
|
23
|
+
loopDurationLabel: 'ループ再生時間',
|
|
24
|
+
zeroCrossingLabel: 'ゼロクロススナップ',
|
|
25
|
+
snapZeroCrossingButton: '最も近いゼロクロス点にマーカーをスナップ',
|
|
26
|
+
playLoopButton: 'シームレスループを試聴',
|
|
27
|
+
pauseLoopButton: '一時停止',
|
|
28
|
+
stopLoopButton: '再生停止',
|
|
29
|
+
exportWavButton: 'メタデータ付きWAVをエクスポート',
|
|
30
|
+
sampleUnitLabel: 'サンプル',
|
|
31
|
+
secondUnitLabel: '秒',
|
|
32
|
+
zoomLabel: '波形ズーム',
|
|
33
|
+
zoomInButton: '拡大',
|
|
34
|
+
zoomOutButton: '縮小',
|
|
35
|
+
resetZoomButton: '表示をリセット',
|
|
36
|
+
noFileSelected: 'オーディオファイルが未読み込みです',
|
|
37
|
+
invalidAudioFile: 'オーディオファイルのデコードに失敗しました',
|
|
38
|
+
presetsTitle: 'クイックプリセット',
|
|
39
|
+
presetFullTrack: 'トラック全体をループ',
|
|
40
|
+
presetIntroCut: 'イントロ10%をスキップ',
|
|
41
|
+
presetMiddleLoop: '中央50%セクション',
|
|
42
|
+
statusLooping: 'ループ再生中',
|
|
43
|
+
statusPaused: '再生一時停止中',
|
|
44
|
+
statusReady: 'オーディオ読み込み完了',
|
|
45
|
+
statusLoaded: 'オーディオトラックを正常に読み込みました',
|
|
46
|
+
statusDecodeError: 'オーディオファイルのデコードエラー',
|
|
47
|
+
statusSnapped: 'マーカーをゼロクロス点にスナップしました',
|
|
48
|
+
statusStopped: '再生を停止しました',
|
|
49
|
+
statusExported: 'ループタグ埋め込みWAVファイルをエクスポートしました',
|
|
50
|
+
},
|
|
51
|
+
seo: [
|
|
52
|
+
{
|
|
53
|
+
type: 'title',
|
|
54
|
+
level: 2,
|
|
55
|
+
text: 'ゲームオーディオのシームレスループとサンプル整合',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'paragraph',
|
|
59
|
+
html: 'ゲーム内でBGMを途切れることなく再生するには、ループの境界で正確なサンプルアライメントが必要です。Unity、Godot、Unreal Engine、FMOD、Wwiseなどのゲームエンジンは、WAVヘッダーのLOOPSTARTおよびLOOPENDメタデータを自動読み込みします。',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'stats',
|
|
63
|
+
columns: 4,
|
|
64
|
+
items: [
|
|
65
|
+
{ label: 'サンプルレート精度', value: '44.1 kHz / 48 kHz' },
|
|
66
|
+
{ label: 'ゼロクロス閾値', value: '0.00 振幅' },
|
|
67
|
+
{ label: 'メタデータ規格', value: 'RIFF smpl および INFO' },
|
|
68
|
+
{ label: 'ノイズ低減', value: '100% 位相整合' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'title',
|
|
73
|
+
level: 2,
|
|
74
|
+
text: 'ゼロクロススナップ戦略',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: 'tip',
|
|
78
|
+
title: 'ポップノイズの防止',
|
|
79
|
+
html: 'ループの開始および終了マーカーは、常に振幅が負から正へ遷移するゼロクロス点に配置してください。これによりスピーカーの急激な変位を防ぎ、クリックノイズを排除します。',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'title',
|
|
83
|
+
level: 2,
|
|
84
|
+
text: 'メタデータ互換性の比較',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'comparative',
|
|
88
|
+
columns: 2,
|
|
89
|
+
items: [
|
|
90
|
+
{
|
|
91
|
+
title: 'RIFF smpl チャンクマーカー',
|
|
92
|
+
description: 'WAVヘッダー構造内に埋め込まれる標準バイナリメタデータ',
|
|
93
|
+
points: [
|
|
94
|
+
'Godot、FMOD、Wwise、GameMakerでネイティブサポート',
|
|
95
|
+
'時間ズレのないミリ秒以上の完全なサンプル精度',
|
|
96
|
+
'単一のWAVファイル内にループ情報を含めて保存',
|
|
97
|
+
'ゼロクロススナップと組み合わせて完全ノイズレス化',
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
title: '手動ファイル分割',
|
|
102
|
+
description: 'イントロとループ部分を別々のファイルに切り出す方法',
|
|
103
|
+
points: [
|
|
104
|
+
'メタデータ非対応の簡易プレイヤーで使用',
|
|
105
|
+
'ミリ秒単位の再生ギャップやラグが発生しやすい',
|
|
106
|
+
'プロジェクト内で複数の音声ファイルを管理する必要がある',
|
|
107
|
+
'繋ぎ目でプチプチ音が発生するリスクが高い',
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'title',
|
|
114
|
+
level: 2,
|
|
115
|
+
text: '標準サンプルレート参照表',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'table',
|
|
119
|
+
headers: ['サンプルレート', '1秒あたりのサンプル数', '推奨使用環境', '時間解像度'],
|
|
120
|
+
rows: [
|
|
121
|
+
['44,100 Hz', '44,100', '標準CD品質ゲームBGM', '1サンプルあたり 0.0226 ms'],
|
|
122
|
+
['48,000 Hz', '48,000', '現代のPCおよびコンソールゲーム', '1サンプルあたり 0.0208 ms'],
|
|
123
|
+
['96,000 Hz', '96,000', 'ハイレゾマスターオーディオ素材', '1サンプルあたり 0.0104 ms'],
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
type: 'title',
|
|
128
|
+
level: 2,
|
|
129
|
+
text: 'バイトレベルでの自動メタデータ注入',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: '本ツールから音声ファイルをエクスポートする際、出力されるWAVバイナリのRIFFヘッダー内に新しいメタデータ構造が直接書き込まれます。',
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
faqTitle: 'よくある質問',
|
|
137
|
+
faq: [
|
|
138
|
+
{
|
|
139
|
+
question: 'LOOPSTARTとLOOPENDメタデータタグとは何ですか?',
|
|
140
|
+
answer: 'LOOPSTARTおよびLOOPENDは、絶対サンプルフレーム数で測定されるメタデータフィールドです。',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
question: 'ループポイントでプチプチ音(クリックノイズ)が発生する理由は何ですか?',
|
|
144
|
+
answer: '終了マーカーと開始マーカーの位置で音波の振幅や位相の傾きが一致しない場合にノイズが発生します。',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
question: '元の音声ファイルがサーバーにアップロードされることはありますか?',
|
|
148
|
+
answer: 'いいえ。すべての処理とエクスポートはお使いのブラウザメモリ内ローカルで完了します。',
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
howTo: [
|
|
152
|
+
{
|
|
153
|
+
name: 'オーディオファイルを読み込む',
|
|
154
|
+
text: '音楽ファイルをドラッグ&ドロップするか、WAV、OGG、MP3、FLACファイルを選択します。',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'ループマーカーを配置する',
|
|
158
|
+
text: '波形表示や数値入力を使用して、ループの開始位置と終了位置を調整します。',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: 'ゼロクロス点にスナップする',
|
|
162
|
+
text: 'スナップボタンをクリックして、マーカーを最も近いゼロクロス位置に自動で合わせます。',
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: '試聴してエクスポートする',
|
|
166
|
+
text: 'シームレスループを試聴確認した後、メタデータ付きWAVをダウンロードします。',
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
schemas: [
|
|
170
|
+
{
|
|
171
|
+
'@context': 'https://schema.org',
|
|
172
|
+
'@type': 'SoftwareApplication',
|
|
173
|
+
name: 'ゲームオーディオループポイントファインダー',
|
|
174
|
+
applicationCategory: 'MultimediaApplication',
|
|
175
|
+
operatingSystem: 'Any',
|
|
176
|
+
offers: {
|
|
177
|
+
'@type': 'Offer',
|
|
178
|
+
price: '0',
|
|
179
|
+
priceCurrency: 'JPY',
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
'@context': 'https://schema.org',
|
|
184
|
+
'@type': 'FAQPage',
|
|
185
|
+
mainEntity: [
|
|
186
|
+
{
|
|
187
|
+
'@type': 'Question',
|
|
188
|
+
name: 'LOOPSTARTとLOOPENDメタデータタグとは何ですか?',
|
|
189
|
+
acceptedAnswer: {
|
|
190
|
+
'@type': 'Answer',
|
|
191
|
+
text: 'LOOPSTARTおよびLOOPENDは、サンプル数で指定されるメタデータです。',
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
'@context': 'https://schema.org',
|
|
198
|
+
'@type': 'HowTo',
|
|
199
|
+
name: 'オーディオループポイントの検出とタグ埋め込み方法',
|
|
200
|
+
step: [
|
|
201
|
+
{
|
|
202
|
+
'@type': 'HowToStep',
|
|
203
|
+
name: 'オーディオファイルを読み込む',
|
|
204
|
+
text: '音楽ファイルをドラッグ&ドロップするかファイルを選択します。',
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
],
|
|
209
|
+
bibliographyTitle: '参考文献および関連資料',
|
|
210
|
+
bibliography: bibliographyEntries,
|
|
211
|
+
};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { AudioLoopPointFinderUI } from '../ui';
|
|
3
|
+
import { bibliographyEntries } from '../bibliography';
|
|
4
|
+
|
|
5
|
+
export const content: ToolLocaleContent<AudioLoopPointFinderUI> = {
|
|
6
|
+
slug: 'audio-loop-point-finder',
|
|
7
|
+
title: '게임 오디오 루프 포인트 탐색기 및 메타데이터 주입기',
|
|
8
|
+
description: '정확한 오디오 루프 포인트를 찾고 제로 크로싱에 맞추어 팝 노이즈를 제거하며 LOOPSTART 및 LOOPEND 메타데이터가 포함된 WAV 파일을 내보냅니다.',
|
|
9
|
+
ui: {
|
|
10
|
+
title: '게임 오디오 루프 포인트 탐색기',
|
|
11
|
+
subtitle: '대화형 파형 분석기, 제로 크로싱 감지기 및 WAV 메타데이터 태그 편집기',
|
|
12
|
+
dropzoneTitle: '오디오 파일을 여기에 끌어다 놓거나 클릭하여 선택하세요',
|
|
13
|
+
dropzoneSubtitle: 'WAV, OGG, MP3 및 FLAC 오디오 트랙 지원',
|
|
14
|
+
dropzoneButton: '오디오 파일 선택',
|
|
15
|
+
audioInfoTitle: '오디오 트랙 속성',
|
|
16
|
+
durationLabel: '재생 시간',
|
|
17
|
+
sampleRateLabel: '샘플링 레이트',
|
|
18
|
+
channelsLabel: '오디오 채널',
|
|
19
|
+
totalSamplesLabel: '총 샘플 수',
|
|
20
|
+
loopControlsTitle: '루프 영역 설정',
|
|
21
|
+
loopStartLabel: '루프 시작 마커',
|
|
22
|
+
loopEndLabel: '루프 종료 마커',
|
|
23
|
+
loopDurationLabel: '루프 재생 시간',
|
|
24
|
+
zeroCrossingLabel: '제로 크로싱 스냅',
|
|
25
|
+
snapZeroCrossingButton: '가장 가까운 제로 크로싱 지점에 마커 맞추기',
|
|
26
|
+
playLoopButton: '자연스러운 루프 미리듣기',
|
|
27
|
+
pauseLoopButton: '일시정지',
|
|
28
|
+
stopLoopButton: '재생 정지',
|
|
29
|
+
exportWavButton: '메타데이터 포함 WAV 내보내기',
|
|
30
|
+
sampleUnitLabel: '샘플',
|
|
31
|
+
secondUnitLabel: '초',
|
|
32
|
+
zoomLabel: '파형 확대/축소',
|
|
33
|
+
zoomInButton: '확대',
|
|
34
|
+
zoomOutButton: '축소',
|
|
35
|
+
resetZoomButton: '보기 초기화',
|
|
36
|
+
noFileSelected: '아직 오디오 파일이 로드되지 않았습니다',
|
|
37
|
+
invalidAudioFile: '오디오 파일 디코딩 실패',
|
|
38
|
+
presetsTitle: '빠른 프리셋',
|
|
39
|
+
presetFullTrack: '전체 트랙 루프',
|
|
40
|
+
presetIntroCut: '인트로 10% 건너뛰기',
|
|
41
|
+
presetMiddleLoop: '중앙 50% 구간',
|
|
42
|
+
statusLooping: '루프 재생 활성화됨',
|
|
43
|
+
statusPaused: '재생 일시정지됨',
|
|
44
|
+
statusReady: '오디오 로드 완료 및 준비됨',
|
|
45
|
+
statusLoaded: '오디오 트랙을 성공적으로 로드했습니다',
|
|
46
|
+
statusDecodeError: '오디오 파일 디코딩 중 오류 발생',
|
|
47
|
+
statusSnapped: '마커를 제로 크로싱 지점에 맞추었습니다',
|
|
48
|
+
statusStopped: '재생이 정지되었습니다',
|
|
49
|
+
statusExported: '루프 태그가 포함된 WAV 파일을 내보냈습니다',
|
|
50
|
+
},
|
|
51
|
+
seo: [
|
|
52
|
+
{
|
|
53
|
+
type: 'title',
|
|
54
|
+
level: 2,
|
|
55
|
+
text: '게임 오디오의 끊김 없는 루프 및 샘플 정렬',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'paragraph',
|
|
59
|
+
html: '비디오 게임에서 배경음악이 끊김 없이 지속적으로 재생되려면 루프 경계에서 정확한 샘플 정렬이 필수적입니다. Unity, Godot, Unreal Engine, FMOD, Wwise와 같은 최신 게임 엔진은 WAV 헤더의 LOOPSTART 및 LOOPEND 메타데이터를 직접 읽어 처리합니다.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'stats',
|
|
63
|
+
columns: 4,
|
|
64
|
+
items: [
|
|
65
|
+
{ label: '샘플링 정밀도', value: '44.1 kHz / 48 kHz' },
|
|
66
|
+
{ label: '제로 크로싱 임계값', value: '0.00 진폭' },
|
|
67
|
+
{ label: '메타데이터 표준', value: 'RIFF smpl 및 INFO' },
|
|
68
|
+
{ label: '클릭 노이즈 감소', value: '100% 위상 정렬' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'title',
|
|
73
|
+
level: 2,
|
|
74
|
+
text: '제로 크로싱 스냅 전략',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: 'tip',
|
|
78
|
+
title: '팝 노이즈 방지',
|
|
79
|
+
html: '루프 시작 및 종료 마커는 항상 음의 진폭에서 양의 진폭으로 전환되는 제로 크로싱 지점에 배치하세요. 이를 통해 스피커 진동판의 급격한 변위를 막고 노이즈를 제거할 수 있습니다.',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'title',
|
|
83
|
+
level: 2,
|
|
84
|
+
text: '메타데이터 호환성 비교',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'comparative',
|
|
88
|
+
columns: 2,
|
|
89
|
+
items: [
|
|
90
|
+
{
|
|
91
|
+
title: 'RIFF smpl 청크 마커',
|
|
92
|
+
description: 'WAV 헤더 구조에 내장된 표준 바이너리 메타데이터',
|
|
93
|
+
points: [
|
|
94
|
+
'Godot, FMOD, Wwise, GameMaker에서 자체 지원',
|
|
95
|
+
'시간 오차 없는 완벽한 샘플 단위 정밀도 제공',
|
|
96
|
+
'단일 WAV 파일 내부에 루프 마커를 포함하여 저장',
|
|
97
|
+
'제로 크로싱 스냅과 함께 사용 시 잡음 완벽 제거',
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
title: '수동 오디오 분할',
|
|
102
|
+
description: '인트로와 루프 구간을 별도 파일로 분리하는 방식',
|
|
103
|
+
points: [
|
|
104
|
+
'메타데이터를 읽지 못하는 일반 미디어 플레이어에서 사용',
|
|
105
|
+
'밀리초 단위의 미세한 재생 갭이나 오차가 발생하기 쉬움',
|
|
106
|
+
'프로젝트 내에서 여러 오디오 파일을 관리해야 함',
|
|
107
|
+
'전환 시점에서 팝 노이즈 발생 위험이 높음',
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'title',
|
|
114
|
+
level: 2,
|
|
115
|
+
text: '표준 샘플링 레이트 참조표',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'table',
|
|
119
|
+
headers: ['표준 샘플링 레이트', '초당 샘플 수', '권장 사용 환경', '시간 해상도'],
|
|
120
|
+
rows: [
|
|
121
|
+
['44,100 Hz', '44,100', '표준 CD 음질 게임 BGM', '샘플당 0.0226 ms'],
|
|
122
|
+
['48,000 Hz', '48,000', '최신 PC 및 콘솔 게임', '샘플당 0.0208 ms'],
|
|
123
|
+
['96,000 Hz', '96,000', '고해상도 마스터 오디오 소재', '샘플당 0.0104 ms'],
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
type: 'title',
|
|
128
|
+
level: 2,
|
|
129
|
+
text: '바이트 단위의 자동 메타데이터 주입',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: '본 도구에서 오디오 트랙을 내보낼 때 출력되는 WAV 바이너리 파일의 RIFF 헤더에 새로운 메타데이터 구조가 직접 삽입됩니다.',
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
faqTitle: '자주 묻는 질문',
|
|
137
|
+
faq: [
|
|
138
|
+
{
|
|
139
|
+
question: 'LOOPSTART 및 LOOPEND 메타데이터 태그란 무엇인가요?',
|
|
140
|
+
answer: 'LOOPSTART와 LOOPEND는 절대적인 샘플 프레임 수 단위로 측정되는 메타데이터 필드입니다.',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
question: '루프 포인트에서 클릭 노이즈(틱 소리)가 발생하는 이유는 무엇인가요?',
|
|
144
|
+
answer: '종료 마커 지점의 파형이 시작 마커 지점의 진폭이나 위상과 일치하지 않을 때 노이즈가 발생합니다.',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
question: '원본 오디오 파일이 서버로 업로드되나요?',
|
|
148
|
+
answer: '아니요. 모든 작업과 디코딩은 사용자의 브라우저 메모리 내에서 로컬로 진행됩니다.',
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
howTo: [
|
|
152
|
+
{
|
|
153
|
+
name: '오디오 파일 로드',
|
|
154
|
+
text: '음악 파일을 끌어다 놓거나 WAV, OGG, MP3, FLAC 파일을 선택합니다.',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: '루프 마커 위치 지정',
|
|
158
|
+
text: '파형 보기나 숫자 입력을 사용하여 루프 시작과 끝을 조정합니다.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: '제로 크로싱 스냅 적용',
|
|
162
|
+
text: '스냅 버튼을 클릭하여 가장 가까운 제로 크로싱 지점에 마커를 맞춥니다.',
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: '미리듣기 및 내보내기',
|
|
166
|
+
text: '자연스러운 루프를 청취한 후 메타데이터가 포함된 WAV 파일을 다운로드합니다.',
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
schemas: [
|
|
170
|
+
{
|
|
171
|
+
'@context': 'https://schema.org',
|
|
172
|
+
'@type': 'SoftwareApplication',
|
|
173
|
+
name: '게임 오디오 루프 포인트 탐색기',
|
|
174
|
+
applicationCategory: 'MultimediaApplication',
|
|
175
|
+
operatingSystem: 'Any',
|
|
176
|
+
offers: {
|
|
177
|
+
'@type': 'Offer',
|
|
178
|
+
price: '0',
|
|
179
|
+
priceCurrency: 'KRW',
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
'@context': 'https://schema.org',
|
|
184
|
+
'@type': 'FAQPage',
|
|
185
|
+
mainEntity: [
|
|
186
|
+
{
|
|
187
|
+
'@type': 'Question',
|
|
188
|
+
name: 'LOOPSTART 및 LOOPEND 메타데이터 태그란 무엇인가요?',
|
|
189
|
+
acceptedAnswer: {
|
|
190
|
+
'@type': 'Answer',
|
|
191
|
+
text: 'LOOPSTART와 LOOPEND는 샘플 수 단위로 측정되는 메타데이터 필드입니다.',
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
'@context': 'https://schema.org',
|
|
198
|
+
'@type': 'HowTo',
|
|
199
|
+
name: '오디오 루프 포인트 탐색 및 태그 주입 방법',
|
|
200
|
+
step: [
|
|
201
|
+
{
|
|
202
|
+
'@type': 'HowToStep',
|
|
203
|
+
name: '오디오 파일 로드',
|
|
204
|
+
text: '음악 파일을 끌어다 놓거나 오디오 파일을 선택합니다.',
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
],
|
|
209
|
+
bibliographyTitle: '참고 문헌 및 관련 자료',
|
|
210
|
+
bibliography: bibliographyEntries,
|
|
211
|
+
};
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
2
|
+
import type { AudioLoopPointFinderUI } from '../ui';
|
|
3
|
+
import { bibliographyEntries } from '../bibliography';
|
|
4
|
+
|
|
5
|
+
export const content: ToolLocaleContent<AudioLoopPointFinderUI> = {
|
|
6
|
+
slug: 'game-audio-loop-punt-zoeker',
|
|
7
|
+
title: 'Game Audio Loop Punt Zoeker en Metadata Injector',
|
|
8
|
+
description: 'Vind exacte audio-looppunten, lijn uit op nuldoorgangen om kliks te elimineren en exporteer WAV-bestanden met LOOPSTART- en LOOPEND-metadata.',
|
|
9
|
+
ui: {
|
|
10
|
+
title: 'Game Audio Loop Punt Zoeker',
|
|
11
|
+
subtitle: 'Interactieve golfvormanalysator, nuldoorgangdetector en WAV metadatatagger',
|
|
12
|
+
dropzoneTitle: 'Sleep audiobestand hierheen of klik om te bladeren',
|
|
13
|
+
dropzoneSubtitle: 'Ondersteunt WAV, OGG, MP3 en FLAC audiotracks',
|
|
14
|
+
dropzoneButton: 'Selecteer Audiobestand',
|
|
15
|
+
audioInfoTitle: 'Eigenschappen Audiotrack',
|
|
16
|
+
durationLabel: 'Duur',
|
|
17
|
+
sampleRateLabel: 'Sample-frequentie',
|
|
18
|
+
channelsLabel: 'Audiokanalen',
|
|
19
|
+
totalSamplesLabel: 'Totaal Aantal Samples',
|
|
20
|
+
loopControlsTitle: 'Loopregio Configuratie',
|
|
21
|
+
loopStartLabel: 'Loop-start Marker',
|
|
22
|
+
loopEndLabel: 'Loop-einde Marker',
|
|
23
|
+
loopDurationLabel: 'Loop-duur',
|
|
24
|
+
zeroCrossingLabel: 'Nuldoorgang Uitlijning',
|
|
25
|
+
snapZeroCrossingButton: 'Lijn Markers Uit op Dichtstbijzijnde Nuldoorgang',
|
|
26
|
+
playLoopButton: 'Naadloze Loop Voorvertoning',
|
|
27
|
+
pauseLoopButton: 'Pauzeer Afspelen',
|
|
28
|
+
stopLoopButton: 'Stop Afspelen',
|
|
29
|
+
exportWavButton: 'Exporteer WAV met Loop-metadata',
|
|
30
|
+
sampleUnitLabel: 'Samples',
|
|
31
|
+
secondUnitLabel: 'Seconden',
|
|
32
|
+
zoomLabel: 'Golfvorm Zoom',
|
|
33
|
+
zoomInButton: 'Inzoomen',
|
|
34
|
+
zoomOutButton: 'Uitzoomen',
|
|
35
|
+
resetZoomButton: 'Weergave Herstellen',
|
|
36
|
+
noFileSelected: 'Nog geen audiobestand geladen',
|
|
37
|
+
invalidAudioFile: 'Kan audiobestand niet decoderen',
|
|
38
|
+
presetsTitle: 'Snelle Voorinstellingen',
|
|
39
|
+
presetFullTrack: 'Volledige Track Loopen',
|
|
40
|
+
presetIntroCut: '10% Intro Overslaan',
|
|
41
|
+
presetMiddleLoop: 'Middelste 50% Sectie',
|
|
42
|
+
statusLooping: 'Loop-afspelen Actief',
|
|
43
|
+
statusPaused: 'Afspelen Gepauzeerd',
|
|
44
|
+
statusReady: 'Audio Geladen en Gereed',
|
|
45
|
+
statusLoaded: 'Audiotrack succesvol geladen',
|
|
46
|
+
statusDecodeError: 'Fout bij decoderen van audiobestand',
|
|
47
|
+
statusSnapped: 'Markers uitgelijnd op nuldoorgangen',
|
|
48
|
+
statusStopped: 'Afspelen gestopt',
|
|
49
|
+
statusExported: 'WAV-bestand geëxporteerd met ingebouwde loop-tags',
|
|
50
|
+
},
|
|
51
|
+
seo: [
|
|
52
|
+
{
|
|
53
|
+
type: 'title',
|
|
54
|
+
level: 2,
|
|
55
|
+
text: 'Naadloze Game Audio Looping en Sample Uitlijning',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
type: 'paragraph',
|
|
59
|
+
html: 'Het bereiken van continue achtergrondmuziek in videogames vereist exacte sample-uitlijning bij loopgrenzen. Moderne game-engines zoals Unity, Godot, Unreal Engine, FMOD en Wwise gebruiken ingebouwde loop-metadata zoals LOOPSTART en LOOPEND.',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
type: 'stats',
|
|
63
|
+
columns: 4,
|
|
64
|
+
items: [
|
|
65
|
+
{ label: 'Sample-frequentie Precisie', value: '44.1 kHz / 48 kHz' },
|
|
66
|
+
{ label: 'Nuldoorgang Drempel', value: '0.00 Amplitude' },
|
|
67
|
+
{ label: 'Metadata Standaard', value: 'RIFF smpl en INFO' },
|
|
68
|
+
{ label: 'Klik Reductie', value: '100% Fase Uitgelijnd' },
|
|
69
|
+
],
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: 'title',
|
|
73
|
+
level: 2,
|
|
74
|
+
text: 'Nuldoorgangen voor Klikreductie',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
type: 'tip',
|
|
78
|
+
title: 'Nuldoorgang Strategie',
|
|
79
|
+
html: 'Lijn loop-start en loop-einde markers altijd uit op positieve nuldoorgangpunten. Dit voorkomt vervelende tikjes en faseverschillen tijdens het afspelen.',
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
type: 'title',
|
|
83
|
+
level: 2,
|
|
84
|
+
text: 'Vergelijkingstabel Metadata Compatibiliteit',
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
type: 'comparative',
|
|
88
|
+
columns: 2,
|
|
89
|
+
items: [
|
|
90
|
+
{
|
|
91
|
+
title: 'RIFF smpl Chunk Marker',
|
|
92
|
+
description: 'Standaard binaire metadata ingebouwd in de WAV-header',
|
|
93
|
+
points: [
|
|
94
|
+
'Direct ondersteund door Godot, FMOD, Wwise en GameMaker',
|
|
95
|
+
'Exacte precisie per sample zonder verloop',
|
|
96
|
+
'Slaat loop-markers direct op in het WAV-bestand',
|
|
97
|
+
'Voorkomt akoestische tikken in combinatie met nuldoorgang',
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
title: 'Handmatig Audio Knippen',
|
|
102
|
+
description: 'Intro en loop splitsen in afzonderlijke bestanden',
|
|
103
|
+
points: [
|
|
104
|
+
'Gebuikt door eenvoudige mediaspelers',
|
|
105
|
+
'Gevoelig voor kleine pauzes en milliseconde-afwijkingen',
|
|
106
|
+
'Vereist het beheren van meerdere bestanden',
|
|
107
|
+
'Hoog risico op tikjes bij overgangen',
|
|
108
|
+
],
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
type: 'title',
|
|
114
|
+
level: 2,
|
|
115
|
+
text: 'Referentietabel Sample-frequenties',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
type: 'table',
|
|
119
|
+
headers: ['Sample-frequentie', 'Samples per Second', 'Aanbevolen Toepassing', 'Tijdsresolutie'],
|
|
120
|
+
rows: [
|
|
121
|
+
['44,100 Hz', '44,100', 'Standaard CD-kwaliteit Soundtrack', '0.0226 ms per sample'],
|
|
122
|
+
['48,000 Hz', '48,000', 'Moderne Desktop en Console Games', '0.0208 ms per sample'],
|
|
123
|
+
['96,000 Hz', '96,000', 'High Definition Master Audio', '0.0104 ms per sample'],
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
type: 'title',
|
|
128
|
+
level: 2,
|
|
129
|
+
text: 'Geautomatiseerde Metadata Injectie op Byte-niveau',
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
type: 'paragraph',
|
|
133
|
+
html: 'Bij het exporteren van audiotracks vanuit deze tool worden nieuwe metadatastructuren direct in de RIFF-header van het WAV-bestand geplaatst.',
|
|
134
|
+
},
|
|
135
|
+
],
|
|
136
|
+
faqTitle: 'Veelgestelde Vragen',
|
|
137
|
+
faq: [
|
|
138
|
+
{
|
|
139
|
+
question: 'Wat zijn LOOPSTART en LOOPEND metadata tags?',
|
|
140
|
+
answer: 'LOOPSTART en LOOPEND zijn velden gemeten in het exacte aantal samples.',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
question: 'Waarom ontstaan er tikjes bij looppunten?',
|
|
144
|
+
answer: 'Tikjes ontstaan wanneer de golfvorm aan het einde niet aansluit op de amplicude of fase van het begin.',
|
|
145
|
+
},
|
|
146
|
+
{
|
|
147
|
+
question: 'Wordt mijn originele audiobestand geüpload?',
|
|
148
|
+
answer: 'Nee. Alles gebeurt lokaal in het geheugen van uw browser.',
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
howTo: [
|
|
152
|
+
{
|
|
153
|
+
name: 'Laad Audiotrack',
|
|
154
|
+
text: 'Sleep uw muziekbestand of selecteer een WAV-, OGG-, MP3- of FLAC-bestand.',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'Plaats Loopmarkers',
|
|
158
|
+
text: 'Stel de start en het einde van de loop in via de golfvorm.',
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
name: 'Lijn Uit op Nuldoorgang',
|
|
162
|
+
text: 'Klik op de knop om uit te lijnen op nuldoorgangen.',
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
name: 'Test en Exporteer',
|
|
166
|
+
text: 'Beluister de loop en exporteer het WAV-bestand met metadata.',
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
schemas: [
|
|
170
|
+
{
|
|
171
|
+
'@context': 'https://schema.org',
|
|
172
|
+
'@type': 'SoftwareApplication',
|
|
173
|
+
name: 'Game Audio Loop Punt Zoeker',
|
|
174
|
+
applicationCategory: 'MultimediaApplication',
|
|
175
|
+
operatingSystem: 'Any',
|
|
176
|
+
offers: {
|
|
177
|
+
'@type': 'Offer',
|
|
178
|
+
price: '0',
|
|
179
|
+
priceCurrency: 'EUR',
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
'@context': 'https://schema.org',
|
|
184
|
+
'@type': 'FAQPage',
|
|
185
|
+
mainEntity: [
|
|
186
|
+
{
|
|
187
|
+
'@type': 'Question',
|
|
188
|
+
name: 'Wat zijn LOOPSTART en LOOPEND metadata tags?',
|
|
189
|
+
acceptedAnswer: {
|
|
190
|
+
'@type': 'Answer',
|
|
191
|
+
text: 'LOOPSTART en LOOPEND zijn velden gemeten in het exacte aantal samples.',
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
],
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
'@context': 'https://schema.org',
|
|
198
|
+
'@type': 'HowTo',
|
|
199
|
+
name: 'Hoe vind en injecteer je audio-looppunten',
|
|
200
|
+
step: [
|
|
201
|
+
{
|
|
202
|
+
'@type': 'HowToStep',
|
|
203
|
+
name: 'Laad Audiotrack',
|
|
204
|
+
text: 'Sleep uw muziekbestand of selecteer een audiobestand.',
|
|
205
|
+
},
|
|
206
|
+
],
|
|
207
|
+
},
|
|
208
|
+
],
|
|
209
|
+
bibliographyTitle: 'Referenties en Verder Lezen',
|
|
210
|
+
bibliography: bibliographyEntries,
|
|
211
|
+
};
|