@jjlmoya/utils-games-development 1.50.0 → 1.52.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.
Files changed (61) hide show
  1. package/package.json +1 -1
  2. package/src/category/index.ts +3 -1
  3. package/src/entries.ts +8 -1
  4. package/src/tests/locale_completeness.test.ts +2 -2
  5. package/src/tests/tool_validation.test.ts +2 -2
  6. package/src/tool/audioLoopPointFinder/audio-loop-point-finder.css +322 -0
  7. package/src/tool/audioLoopPointFinder/audio-player.ts +84 -0
  8. package/src/tool/audioLoopPointFinder/bibliography.astro +6 -0
  9. package/src/tool/audioLoopPointFinder/bibliography.ts +16 -0
  10. package/src/tool/audioLoopPointFinder/client.ts +262 -0
  11. package/src/tool/audioLoopPointFinder/component.astro +147 -0
  12. package/src/tool/audioLoopPointFinder/dom-utils.ts +55 -0
  13. package/src/tool/audioLoopPointFinder/entry.ts +27 -0
  14. package/src/tool/audioLoopPointFinder/i18n/de.ts +211 -0
  15. package/src/tool/audioLoopPointFinder/i18n/en.ts +211 -0
  16. package/src/tool/audioLoopPointFinder/i18n/es.ts +211 -0
  17. package/src/tool/audioLoopPointFinder/i18n/fr.ts +211 -0
  18. package/src/tool/audioLoopPointFinder/i18n/id.ts +211 -0
  19. package/src/tool/audioLoopPointFinder/i18n/it.ts +211 -0
  20. package/src/tool/audioLoopPointFinder/i18n/ja.ts +211 -0
  21. package/src/tool/audioLoopPointFinder/i18n/ko.ts +211 -0
  22. package/src/tool/audioLoopPointFinder/i18n/nl.ts +211 -0
  23. package/src/tool/audioLoopPointFinder/i18n/pl.ts +211 -0
  24. package/src/tool/audioLoopPointFinder/i18n/pt.ts +211 -0
  25. package/src/tool/audioLoopPointFinder/i18n/ru.ts +211 -0
  26. package/src/tool/audioLoopPointFinder/i18n/sv.ts +211 -0
  27. package/src/tool/audioLoopPointFinder/i18n/tr.ts +211 -0
  28. package/src/tool/audioLoopPointFinder/i18n/zh.ts +211 -0
  29. package/src/tool/audioLoopPointFinder/index.ts +11 -0
  30. package/src/tool/audioLoopPointFinder/logic.test.ts +72 -0
  31. package/src/tool/audioLoopPointFinder/logic.ts +214 -0
  32. package/src/tool/audioLoopPointFinder/metadata-parser.ts +94 -0
  33. package/src/tool/audioLoopPointFinder/seo.astro +15 -0
  34. package/src/tool/audioLoopPointFinder/ui.ts +42 -0
  35. package/src/tool/audioLoopPointFinder/waveform-renderer.ts +53 -0
  36. package/src/tool/saveFileEditor/bibliography.astro +6 -0
  37. package/src/tool/saveFileEditor/bibliography.ts +12 -0
  38. package/src/tool/saveFileEditor/component.astro +351 -0
  39. package/src/tool/saveFileEditor/entry.ts +28 -0
  40. package/src/tool/saveFileEditor/game-save-file-editor.css +250 -0
  41. package/src/tool/saveFileEditor/i18n/de.ts +182 -0
  42. package/src/tool/saveFileEditor/i18n/en.ts +182 -0
  43. package/src/tool/saveFileEditor/i18n/es.ts +182 -0
  44. package/src/tool/saveFileEditor/i18n/fr.ts +182 -0
  45. package/src/tool/saveFileEditor/i18n/id.ts +182 -0
  46. package/src/tool/saveFileEditor/i18n/it.ts +182 -0
  47. package/src/tool/saveFileEditor/i18n/ja.ts +182 -0
  48. package/src/tool/saveFileEditor/i18n/ko.ts +182 -0
  49. package/src/tool/saveFileEditor/i18n/nl.ts +182 -0
  50. package/src/tool/saveFileEditor/i18n/pl.ts +182 -0
  51. package/src/tool/saveFileEditor/i18n/pt.ts +182 -0
  52. package/src/tool/saveFileEditor/i18n/ru.ts +182 -0
  53. package/src/tool/saveFileEditor/i18n/sv.ts +182 -0
  54. package/src/tool/saveFileEditor/i18n/tr.ts +182 -0
  55. package/src/tool/saveFileEditor/i18n/zh.ts +182 -0
  56. package/src/tool/saveFileEditor/index.ts +11 -0
  57. package/src/tool/saveFileEditor/logic.test.ts +69 -0
  58. package/src/tool/saveFileEditor/logic.ts +139 -0
  59. package/src/tool/saveFileEditor/seo.astro +15 -0
  60. package/src/tool/saveFileEditor/ui.ts +24 -0
  61. package/src/tools.ts +5 -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: 'spel-audio-loop-punkt-hittare',
7
+ title: 'Spel Audio Loop Punkt Hittare och Metadata Injektor',
8
+ description: 'Hitta exakta ljudslingpunkter, passa in på nollgenomgångar för att eliminera klick och exportera WAV-filer med LOOPSTART- och LOOPEND-metadata.',
9
+ ui: {
10
+ title: 'Spel Audio Loop Punkt Hittare',
11
+ subtitle: 'Interaktiv vågformsanalysator, nollgenomgångsdetektor och WAV metadatataggare',
12
+ dropzoneTitle: 'Släpp ljudfilen här eller klicka för att bläddra',
13
+ dropzoneSubtitle: 'Stöder WAV, OGG, MP3 och FLAC ljudspår',
14
+ dropzoneButton: 'Välj Ljudfil',
15
+ audioInfoTitle: 'Egenskaper för Ljudspår',
16
+ durationLabel: 'Varaktighet',
17
+ sampleRateLabel: 'Samplingsfrekvens',
18
+ channelsLabel: 'Ljudkanaler',
19
+ totalSamplesLabel: 'Totalt Antal Samplar',
20
+ loopControlsTitle: 'Konfiguration av Loopregion',
21
+ loopStartLabel: 'Markör för Loopstart',
22
+ loopEndLabel: 'Markör för Loopslut',
23
+ loopDurationLabel: 'Loopvaraktighet',
24
+ zeroCrossingLabel: 'Nollgenomgångsanpassning',
25
+ snapZeroCrossingButton: 'Anpassa Markörer till Närmaste Nollgenomgång',
26
+ playLoopButton: 'Förhandsgranska Sömlös Loop',
27
+ pauseLoopButton: 'Pausa Uppspelning',
28
+ stopLoopButton: 'Stoppa Uppspelning',
29
+ exportWavButton: 'Exportera WAV med Loop-metadata',
30
+ sampleUnitLabel: 'Samplar',
31
+ secondUnitLabel: 'Sekunder',
32
+ zoomLabel: 'Vågformszoom',
33
+ zoomInButton: 'Zooma In',
34
+ zoomOutButton: 'Zooma Ut',
35
+ resetZoomButton: 'Återställ Vy',
36
+ noFileSelected: 'Ingen ljudfil inläst ännu',
37
+ invalidAudioFile: 'Kunde inte avkoda ljudfilen',
38
+ presetsTitle: 'Snabbinställningar',
39
+ presetFullTrack: 'Loopa Hela Spåret',
40
+ presetIntroCut: 'Hoppa över 10% Intro',
41
+ presetMiddleLoop: 'Mitten 50% Sektion',
42
+ statusLooping: 'Loop-uppspelning Aktiv',
43
+ statusPaused: 'Uppspelning Pausad',
44
+ statusReady: 'Ljud Inläst och Redo',
45
+ statusLoaded: 'Ljudspår har lästs in framgångsrikt',
46
+ statusDecodeError: 'Fel vid avkodning av ljudfil',
47
+ statusSnapped: 'Markörer anpassade till nollgenomgångar',
48
+ statusStopped: 'Uppspelning stoppad',
49
+ statusExported: 'WAV-fil exporterad med inbäddade loop-taggar',
50
+ },
51
+ seo: [
52
+ {
53
+ type: 'title',
54
+ level: 2,
55
+ text: 'Sömlös Spelljudslooping och Samplingsjustering',
56
+ },
57
+ {
58
+ type: 'paragraph',
59
+ html: 'Att uppnå kontinuerlig bakgrundsmusik i tv-spel kräver exakt samplingsjustering vid loopgränser. Moderna spelmotorer som Unity, Godot, Unreal Engine, FMOD och Wwise använder inbäddade loop-metadata som LOOPSTART och LOOPEND.',
60
+ },
61
+ {
62
+ type: 'stats',
63
+ columns: 4,
64
+ items: [
65
+ { label: 'Samplingsprecision', value: '44.1 kHz / 48 kHz' },
66
+ { label: 'Nollgenomgångströskel', value: '0.00 Amplitud' },
67
+ { label: 'Metadatastandard', value: 'RIFF smpl och INFO' },
68
+ { label: 'Klickreducering', value: '100% Fasjusterad' },
69
+ ],
70
+ },
71
+ {
72
+ type: 'title',
73
+ level: 2,
74
+ text: 'Strategi för Nollgenomgång',
75
+ },
76
+ {
77
+ type: 'tip',
78
+ title: 'Eliminera Klickljud',
79
+ html: 'Passa alltid in både start- och slutmarkörer för loopen vid positiva nollgenomgångar. Detta förhindrar plötsliga amplitudhopp och klickljud i högtalarna.',
80
+ },
81
+ {
82
+ type: 'title',
83
+ level: 2,
84
+ text: 'Jämförelsetabell för Metadatakompatibilitet',
85
+ },
86
+ {
87
+ type: 'comparative',
88
+ columns: 2,
89
+ items: [
90
+ {
91
+ title: 'RIFF smpl Chunk Markör',
92
+ description: 'Standard binära metadata inbäddade i WAV-headern',
93
+ points: [
94
+ 'Stöds nativt av Godot, FMOD, Wwise och GameMaker',
95
+ 'Ger exakt samplingsprecision utan tidsdrift',
96
+ 'Sparar loop-markörer i samma WAV-fil',
97
+ 'Eliminerar klick vid nollgenomgångsanpassning',
98
+ ],
99
+ },
100
+ {
101
+ title: 'Manuell Ljudklippning',
102
+ description: 'Uppdelning av intro och loop i separata filer',
103
+ points: [
104
+ 'Används av enkla mediaspelare',
105
+ 'Känslig för små pauser och tidsavvikelser',
106
+ 'Kräver hantering av flera filer i projektet',
107
+ 'Hög risk för klick vid övergångar',
108
+ ],
109
+ },
110
+ ],
111
+ },
112
+ {
113
+ type: 'title',
114
+ level: 2,
115
+ text: 'Referenstabell för Samplingsfrekvenser',
116
+ },
117
+ {
118
+ type: 'table',
119
+ headers: ['Samplingsfrekvens', 'Samplar per Sekund', 'Rekommenderad Användning', 'Tidsupplösning'],
120
+ rows: [
121
+ ['44,100 Hz', '44,100', 'Standard CD-kvalitet i Spelmusik', '0.0226 ms per sample'],
122
+ ['48,000 Hz', '48,000', 'Moderna Dator- och Konsolspel', '0.0208 ms per sample'],
123
+ ['96,000 Hz', '96,000', 'High Definition Masterljud', '0.0104 ms per sample'],
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ level: 2,
129
+ text: 'Automatiserad Metadatainjektion på Bytenivå',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'När du exporterar ljudspår från detta verktyg bäddas nya metadatastrukturer in direkt i RIFF-headern på den exporterade WAV-filen.',
134
+ },
135
+ ],
136
+ faqTitle: 'Vanliga Frågor',
137
+ faq: [
138
+ {
139
+ question: 'Vad är LOOPSTART- och LOOPEND-metadatataggar?',
140
+ answer: 'LOOPSTART och LOOPEND är fält som mäts i exakt antal samplar.',
141
+ },
142
+ {
143
+ question: 'Varför uppstår klickljud vid looppunkter?',
144
+ answer: 'Klick uppstår när vågformen vid slutet inte stämmer överens med amplituden eller fasen i början.',
145
+ },
146
+ {
147
+ question: 'Laddas min originalljudfil upp någonstans?',
148
+ answer: 'Nej. All bearbetning sker lokalt i din webbläsares minne.',
149
+ },
150
+ ],
151
+ howTo: [
152
+ {
153
+ name: 'Ladda Ljudspår',
154
+ text: 'Dra och släpp din musikfil eller välj en WAV-, OGG-, MP3- eller FLAC-fil.',
155
+ },
156
+ {
157
+ name: 'Placera Loopmarkörer',
158
+ text: 'Ställ in start och slut på loopen via vågformen.',
159
+ },
160
+ {
161
+ name: 'Anpassa till Nollgenomgång',
162
+ text: 'Klicka på knappen för nollgenomgångsanpassning.',
163
+ },
164
+ {
165
+ name: 'Testa och Exportera',
166
+ text: 'Lyssna på den sömlösa loopen och exportera WAV-filen.',
167
+ },
168
+ ],
169
+ schemas: [
170
+ {
171
+ '@context': 'https://schema.org',
172
+ '@type': 'SoftwareApplication',
173
+ name: 'Spel Audio Loop Punkt Hittare',
174
+ applicationCategory: 'MultimediaApplication',
175
+ operatingSystem: 'Any',
176
+ offers: {
177
+ '@type': 'Offer',
178
+ price: '0',
179
+ priceCurrency: 'SEK',
180
+ },
181
+ },
182
+ {
183
+ '@context': 'https://schema.org',
184
+ '@type': 'FAQPage',
185
+ mainEntity: [
186
+ {
187
+ '@type': 'Question',
188
+ name: 'Vad är LOOPSTART- och LOOPEND-metadatataggar?',
189
+ acceptedAnswer: {
190
+ '@type': 'Answer',
191
+ text: 'LOOPSTART och LOOPEND är fält som mäts i antal samplar.',
192
+ },
193
+ },
194
+ ],
195
+ },
196
+ {
197
+ '@context': 'https://schema.org',
198
+ '@type': 'HowTo',
199
+ name: 'Hur du hittar och injicerar looppunkter för ljud',
200
+ step: [
201
+ {
202
+ '@type': 'HowToStep',
203
+ name: 'Ladda Ljudspår',
204
+ text: 'Dra och släpp din musikfil eller välj en ljudfil.',
205
+ },
206
+ ],
207
+ },
208
+ ],
209
+ bibliographyTitle: 'Referenser och Vidare Läsning',
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: 'oyun-ses-dongu-noktasi-bulucu',
7
+ title: 'Oyun Ses Döngü Noktası Bulucu ve Üstveri Enjektörü',
8
+ description: 'Hassas ses döngü noktalarını bulun, tık seslerini önlemek için sıfır geçişlerine hizalayın ve LOOPSTART ve LOOPEND üstverileriyle WAV dosyaları dışa aktarın.',
9
+ ui: {
10
+ title: 'Oyun Ses Döngü Noktası Bulucu',
11
+ subtitle: 'Etkileşimli dalga formu analizörü, sıfır geçiş dedektörü ve WAV üstveri etiketleyici',
12
+ dropzoneTitle: 'Ses dosyasını buraya sürükleyin veya göz atmak için tıklayın',
13
+ dropzoneSubtitle: 'WAV, OGG, MP3 ve FLAC ses parçalarını destekler',
14
+ dropzoneButton: 'Ses Dosyası Seç',
15
+ audioInfoTitle: 'Ses Parçası Özellikleri',
16
+ durationLabel: 'Süre',
17
+ sampleRateLabel: 'Örnekleme Oranı',
18
+ channelsLabel: 'Ses Kanalları',
19
+ totalSamplesLabel: 'Toplam Örnek Sayısı',
20
+ loopControlsTitle: 'Döngü Bölgesi Yapılandırması',
21
+ loopStartLabel: 'Döngü Başlangıç İşaretçisi',
22
+ loopEndLabel: 'Döngü Bitiş İşaretçisi',
23
+ loopDurationLabel: 'Döngü Süresi',
24
+ zeroCrossingLabel: 'Sıfır Geçiş Hizalaması',
25
+ snapZeroCrossingButton: 'En Yakın Sıfır Geçişine Hizala',
26
+ playLoopButton: 'Kusursuz Döngüyü Önizle',
27
+ pauseLoopButton: 'Oynatmayı Duraklat',
28
+ stopLoopButton: 'Oynatmayı Durdur',
29
+ exportWavButton: 'Üstveri ile WAV Dışa Aktar',
30
+ sampleUnitLabel: 'Örnekler',
31
+ secondUnitLabel: 'Saniye',
32
+ zoomLabel: 'Dalga Formu Yakınlaştırma',
33
+ zoomInButton: 'Yakınlaştır',
34
+ zoomOutButton: 'Uzaklaştır',
35
+ resetZoomButton: 'Görünümü Sıfırla',
36
+ noFileSelected: 'Henüz bir ses dosyası yüklenmedi',
37
+ invalidAudioFile: 'Ses dosyası çözülemedi',
38
+ presetsTitle: 'Hızlı Önayarlar',
39
+ presetFullTrack: 'Tüm Parçayı Döngüye Al',
40
+ presetIntroCut: '%10 Girişi Atla',
41
+ presetMiddleLoop: 'Orta %50 Bölüm',
42
+ statusLooping: 'Döngü Oynatma Aktif',
43
+ statusPaused: 'Oynatma Duraklatıldı',
44
+ statusReady: 'Ses Yüklendi ve Hazır',
45
+ statusLoaded: 'Ses parçası başarıyla yüklendi',
46
+ statusDecodeError: 'Ses dosyası çözülürken hata oluştu',
47
+ statusSnapped: 'İşaretçiler sıfır geçiş noktalarına hizalandı',
48
+ statusStopped: 'Oynatma durduruldu',
49
+ statusExported: 'WAV dosyası döngü etiketleriyle dışa aktarıldı',
50
+ },
51
+ seo: [
52
+ {
53
+ type: 'title',
54
+ level: 2,
55
+ text: 'Oyunlarda Kesintisiz Ses Döngüsü ve Örnek Hizalaması',
56
+ },
57
+ {
58
+ type: 'paragraph',
59
+ html: 'Video oyunlarında sürekli arka plan müziği elde etmek, döngü sınırlarında kesin örnek hizalaması gerektirir. Unity, Godot, Unreal Engine, FMOD ve Wwise gibi modern oyun motorları gömülü LOOPSTART ve LOOPEND üstverilerini kullanır.',
60
+ },
61
+ {
62
+ type: 'stats',
63
+ columns: 4,
64
+ items: [
65
+ { label: 'Örnekleme Hassasiyeti', value: '44.1 kHz / 48 kHz' },
66
+ { label: 'Sıfır Geçiş Eşiği', value: '0.00 Genlik' },
67
+ { label: 'Üstveri Standardı', value: 'RIFF smpl ve INFO' },
68
+ { label: 'Tık Azaltma', value: '%100 Faz Hizalı' },
69
+ ],
70
+ },
71
+ {
72
+ type: 'title',
73
+ level: 2,
74
+ text: 'Sıfır Geçiş Stratejisi',
75
+ },
76
+ {
77
+ type: 'tip',
78
+ title: 'Tık Seslerini Önleme',
79
+ html: 'Döngü başlangıç ve bitiş işaretçilerini her zaman pozitif sıfır geçiş noktalarına hizalayın. Bu, hoparlörde ani genlik sıçramalarını ve tık seslerini önler.',
80
+ },
81
+ {
82
+ type: 'title',
83
+ level: 2,
84
+ text: 'Üstveri Uyumluluk Karşılaştırması',
85
+ },
86
+ {
87
+ type: 'comparative',
88
+ columns: 2,
89
+ items: [
90
+ {
91
+ title: 'RIFF smpl Bloğu İşaretçisi',
92
+ description: 'WAV başlığına gömülü standart ikili üstveri',
93
+ points: [
94
+ 'Godot, FMOD, Wwise ve GameMaker tarafından yerel desteklenir',
95
+ 'Zaman kayması olmadan kesin örnek hassasiyeti sağlar',
96
+ 'Döngü işaretçilerini aynı WAV dosyasında saklar',
97
+ 'Sıfır geçişi ile akustik tık seslerini yok eder',
98
+ ],
99
+ },
100
+ {
101
+ title: 'Manuel Ses Kesme',
102
+ description: 'Giriş ve döngü kısımlarını ayrı dosyalara bölme',
103
+ points: [
104
+ 'Üstveri okumayan basit medya oynatıcılar tarafından kullanılır',
105
+ 'Milisaniyelik duraksamalara ve sapmalara açıktır',
106
+ 'Projede birden fazla dosyayı yönetmeyi gerektirir',
107
+ 'Geçişlerde yüksek tık sesi riski taşır',
108
+ ],
109
+ },
110
+ ],
111
+ },
112
+ {
113
+ type: 'title',
114
+ level: 2,
115
+ text: 'Örnekleme Oranları Referans Tablosu',
116
+ },
117
+ {
118
+ type: 'table',
119
+ headers: ['Örnekleme Oranı', 'Saniyedeki Örnek', 'Önerilen Kullanım Alanı', 'Zaman Çözünürlüğü'],
120
+ rows: [
121
+ ['44,100 Hz', '44,100', 'Standart CD Kalitesinde Oyun Müziği', 'Örnek başına 0.0226 ms'],
122
+ ['48,000 Hz', '48,000', 'Modern Masaüstü ve Konsol Oyunları', 'Örnek başına 0.0208 ms'],
123
+ ['96,000 Hz', '96,000', 'Yüksek Çözünürlüklü Master Ses', 'Örnek başına 0.0104 ms'],
124
+ ],
125
+ },
126
+ {
127
+ type: 'title',
128
+ level: 2,
129
+ text: 'Bayt Düzeyinde Otomatik Üstveri Enjeksiyonu',
130
+ },
131
+ {
132
+ type: 'paragraph',
133
+ html: 'Bu araçtan ses parçalarını dışa aktarırken yeni üstveri yapıları doğrudan WAV dosyasının RIFF başlığına enjekte edilir.',
134
+ },
135
+ ],
136
+ faqTitle: 'Sıkça Sorulan Sorular',
137
+ faq: [
138
+ {
139
+ question: 'LOOPSTART ve LOOPEND üstveri etiketleri nedir?',
140
+ answer: 'LOOPSTART ve LOOPEND, mutlak örnek sayısı olarak ölçülen üstveri alanlarıdır.',
141
+ },
142
+ {
143
+ question: 'Döngü noktalarında neden tık sesleri oluşur?',
144
+ answer: 'Tık sesleri, bitişteki dalga formunun başlangıçtaki genlik veya faz ile eşleşmemesi durumunda oluşur.',
145
+ },
146
+ {
147
+ question: 'Orijinal ses dosyam bir sunucuya yükleniyor mu?',
148
+ answer: 'Hayır. Tüm işlemler yerel olarak tarayıcınızın belleğinde gerçekleşir.',
149
+ },
150
+ ],
151
+ howTo: [
152
+ {
153
+ name: 'Ses Parçasını Yükle',
154
+ text: 'Müzik dosyanızı sürükleyip bırakın veya bir WAV, OGG, MP3 veya FLAC dosyası seçin.',
155
+ },
156
+ {
157
+ name: 'İşaretçileri Konumlandır',
158
+ text: 'Dalga formu üzerinden döngü başlangıç ve bitişini ayarlayın.',
159
+ },
160
+ {
161
+ name: 'Sıfır Geçişine Hizala',
162
+ text: 'Sıfır geçiş noktalarına hizalamak için düğmeye tıklayın.',
163
+ },
164
+ {
165
+ name: 'Test Et ve Dışa Aktar',
166
+ text: 'Kusursuz döngüyü dinleyin ve WAV dosyasını dışa aktarın.',
167
+ },
168
+ ],
169
+ schemas: [
170
+ {
171
+ '@context': 'https://schema.org',
172
+ '@type': 'SoftwareApplication',
173
+ name: 'Oyun Ses Döngü Noktası Bulucu',
174
+ applicationCategory: 'MultimediaApplication',
175
+ operatingSystem: 'Any',
176
+ offers: {
177
+ '@type': 'Offer',
178
+ price: '0',
179
+ priceCurrency: 'TRY',
180
+ },
181
+ },
182
+ {
183
+ '@context': 'https://schema.org',
184
+ '@type': 'FAQPage',
185
+ mainEntity: [
186
+ {
187
+ '@type': 'Question',
188
+ name: 'LOOPSTART ve LOOPEND üstveri etiketleri nedir?',
189
+ acceptedAnswer: {
190
+ '@type': 'Answer',
191
+ text: 'LOOPSTART ve LOOPEND, örnek sayısı olarak ölçülen üstveri alanlarıdır.',
192
+ },
193
+ },
194
+ ],
195
+ },
196
+ {
197
+ '@context': 'https://schema.org',
198
+ '@type': 'HowTo',
199
+ name: 'Ses döngü noktaları nasıl bulunur ve enjekte edilir',
200
+ step: [
201
+ {
202
+ '@type': 'HowToStep',
203
+ name: 'Ses Parçasını Yükle',
204
+ text: 'Müzik dosyanızı sürükleyip bırakın veya bir ses dosyası seçin.',
205
+ },
206
+ ],
207
+ },
208
+ ],
209
+ bibliographyTitle: 'Referanslar ve İleri Okuma',
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音质游戏配乐', '每采样 0.0226 ms'],
122
+ ['48,000 Hz', '48,000', '现代桌面及主机游戏', '每采样 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: 'CNY',
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,11 @@
1
+ import type { ToolDefinition } from '../../types';
2
+ import { audioLoopPointFinder } from './entry';
3
+
4
+ export * from './entry';
5
+
6
+ export const AUDIO_LOOP_POINT_FINDER_TOOL: ToolDefinition = {
7
+ entry: audioLoopPointFinder,
8
+ Component: () => import('./component.astro'),
9
+ SEOComponent: () => import('./seo.astro'),
10
+ BibliographyComponent: () => import('./bibliography.astro'),
11
+ };