Miles SDK Güncellemesi ve Modernizasyon Çalışması

  • Konuyu açan Konuyu açan Sys
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 11
  • Gösterim Gösterim 187

Sys

MT Üye
MT Üye
Mesaj
224
Çözümler
4
Beğeni
342
Puan
784
Ticaret Puanı
0
# Miles SDK 9.3 Modernizasyonu

Uzun süredir üzerinde çalıştığım Miles Sound System SDK 9.3 modernizasyonunu nihayet bugün tamamladım. Eski geliştirme yapısı günümüz araçlarına uyarlanarak hem SDK hem de MilesLib tarafı güncellendi.

* Visual Studio 2026 (MSVC v145) desteği eklendi.
* C++20 uyumluluğu sağlandı.
* Win32 (x86) ve x64 altyapısı hazırlandı.
* Debug / Release desteği eklendi.
* Static (.lib) ve Shared (.dll) derleme desteği eklendi.
* Modern CMake build sistemi oluşturuldu.
* Eski pointer ve veri tipleri 64-bit uyumlu hale getirildi.
* `stdint` tabanlı modern tip sistemi kullanıldı.
* Eski Miles API kullanımları yeni SDK yapısına uyarlandı.
* MilesLib, yeni SDK ile tamamen uyumlu hale getirildi.
* Visual Studio proje dosyaları güncellendi.
* Build sistemi ve otomasyonu geliştirildi.
* CRC oluşturma sistemi yeniden düzenlendi.

Desteklenen Build Yapıları

* Win32 Debug Static
* Win32 Release Static
* Win32 Debug Shared
* Win32 Release Shared
* x64 Debug Static
* x64 Release Static
* x64 Debug Shared
* x64 Release Shared

Toplam 8 farklı build kombinasyonu destekleniyor.

Şu an SDK tarafı başarıyla derleniyor ve MilesLib yeni yapıya uyarlanmış durumda. Bundan sonraki süreçte istemcinin diğer kütüphaneleri de aynı şekilde modernize edilerek tam x64 desteğine doğru ilerlemeyi planlıyorum.

SpeedTreeRT 1.6 ile başladığım modernizasyon yolculuğu, şimdi Miles Sound System SDK 9.3'ü de tamamlamamla devam ediyor. 😄

Eski altyapıları günümüz standartlarına taşımak gerçekten keyifli bir süreç. Adım adım tüm bağımlılıkları modernleştirerek daha güncel, daha sürdürülebilir ve geleceğe hazır bir istemci altyapısı oluşturmayı hedefliyorum. tabii müsait oldukça :aman:


1784611806999.webp



Bir diğer küçük ama önemli geliştirme de CRC sistemi tarafında oldu. 😄

Eski yapıda Miles dosyalarının CRC ve boyut bilgileri manuel olarak takip ediliyordu. Yeni sistemde ise build çıktılarından otomatik olarak dosya boyutu ve CRC32 değerleri alınabilecek şekilde düzenlendi.

Artık farklı build kombinasyonları için:

  • Win32 / x64
  • Debug / Release
  • Static / Shared
çıktılarının CRC bilgileri ayrı ayrı raporlanabiliyor.

Video da gösterdim vakiti olmayanlar için görsel


1784611943578.webp



Üretilen sonuçlar doğrudan kontrol amacıyla kullanılabiliyor ve istenirse istemci tarafındaki doğrulama tablolarına kolayca aktarılabiliyor.

Kısacası build sonrası "hangi dosyanın hangi sürüm olduğunu" takip etmek ve olası uyumsuzlukları yakalamak çok daha kolay hale geldi.


Biraz da işin acı tarafına gelelim. 😄

Miles tarafında olay sadece `MSS_VERSION "6.5c"` satırını değiştirip yeni DLL bağlamak değildi.

Yıllardır kullanılan eski API yapısı tamamen farklıydı.

Örnek olarak eski 3D ses tarafında:

```cpp
AIL_set_3D_sample_file(m_sample, lpData);

AIL_set_3D_position(m_sample, 0.0F, 0.0F, 0.0F);

AIL_auto_update_3D_position(m_sample, 0);

AIL_3D_sample_status(m_sample);
```

gibi doğrudan 3D sample mantığı üzerine kurulmuş bir sistem vardı.

Yeni Miles SDK tarafında ise bu yapı değişmiş durumda.

Artık:

```cpp
AIL_init_sample(m_sample, 0);

AIL_set_sample_file(m_sample, lpData, size);

AIL_set_sample_is_3D(m_sample, 1);

AIL_set_sample_3D_position(m_sample, 0.0F, 0.0F, 0.0F);

AIL_sample_status(m_sample);
```

şeklinde standart sample sistemi üzerinden ilerliyor.

Yani eski:

`H3DSAMPLE`

`AIL_allocate_3D_sample_handle`

`AIL_set_3D_sample_file`

gibi yapılar tek tek yeni mimariye taşındı.

Asıl zor kısım burada başladı. Çünkü eski sistemde 3D ses ayrı bir dünya iken yeni SDK'da 2D/3D ayrımı farklı ele alınıyor.

Birçok fonksiyon ismi değişti, bazıları tamamen kaldırıldı, bazıları davranış olarak değişti.

Kısacası yaptığımız şey:

"Miles SDK'yı güncellemek" değil,

20 yıllık eski bir ses API kullanımını yeni mimariye adapte etmek oldu. 😅

Başlangıçta:

```cpp
MSS_VERSION "6.5c"
```

ile gelen eski dünya,

şimdi:

```text
Miles SDK 9.3
Visual Studio 2026
C++20
Win32/x64
```

seviyesine taşındı.

Bir de video bırakalım..





Not: Ticari lisans ve telif haklarına saygı gereği SDK dosyaları veya kaynak kodları paylaşılmamaktadır. Bu paylaşım yalnızca geliştirme sürecini ve teknik modernizasyon çalışmalarını özetlemektedir.
 
Son düzenleme:
furkanım naber la 1 konu açıyon 1 yıl girmiyon
 
Emeğine sağlık, ben de bu tarz güncellemeleri yaparken keyif alıyorum çünkü beraberinde pek çok kod çöp oluyor ve temizlenmiş oluyor. Ama söz konusu RAD Game Tools olunca milesin 9.3 sürümü bile günümüzden 14 15 yıl öncesinde kalıyor :D Tabi bu neticede "kötü" anlamına gelmiyor, sadece benim gibi takıklar için modern yapılara geçiş bir tür hastalık gibi. Bu sebeple bence milesi tamamen çöpe atıp fmod veya xaudio2 gibi yapılara geçmek daha mantıklı olur. :aman:
 
Emeğine sağlık, ben de bu tarz güncellemeleri yaparken keyif alıyorum çünkü beraberinde pek çok kod çöp oluyor ve temizlenmiş oluyor. Ama söz konusu RAD Game Tools olunca milesin 9.3 sürümü bile günümüzden 14 15 yıl öncesinde kalıyor :D Tabi bu neticede "kötü" anlamına gelmiyor, sadece benim gibi takıklar için modern yapılara geçiş bir tür hastalık gibi. Bu sebeple bence milesi tamamen çöpe atıp fmod veya xaudio2 gibi yapılara geçmek daha mantıklı olur. :aman:

Teşekkür ederim 😄 Metin2 milliyetçisi olarak @MT2Dev gibi olacağım diye çıktım bu yola. Tabii onun seviyesine ulaşmak kolay değil

Aslında ben de mümkün olduğunca güncel teknolojilere geçmeyi seviyorum. FMOD, XAudio2 gibi çözümler elbette kullanılabilir. Hatta can sıkıntısından AudioLib ile de uğraştım, en sonunda kendimi Miles'ın içinde buldum. 😄

Bu çalışmanın amacı ise ses kütüphanesini değiştirmekten ziyade mevcut istemciyi mümkün olduğunca bozmadan modern geliştirme araçlarıyla çalışabilir hale getirmekti. Özellikle x64, C++20, yeni MSVC sürümleri ve CMake desteğini kazandırmak benim için öncelikliydi.

Miles'ın yerine tamamen farklı bir ses sistemi geçirmek sadece API değişimi değil; 2D/3D ses, streaming, codec desteği ve istemci tarafındaki tüm ses katmanının yeniden ele alınması anlamına geliyor. O yüzden bunu ayrı bir proje olarak görüyorum.

Şimdilik hedefim mevcut bağımlılıkları tek tek modernize ederek istemciyi geleceğe taşımak. Sonrasında uygun bir zamanda ses sistemi gibi büyük bileşenleri de değiştirmek neden olmasın. 🙂

Bir de işin komik tarafı var. Metin2'den o kadar uzak kalmışım ki geri döndüğümde ilk filesi bile kuramadım @Denizeri24 şahittir. 😂
 
Oooo hoşgeldin...
Nerelerdesin sen bea. Başarılar, kolay gelsin.
 
Teşekkür ederim 😄 Metin2 milliyetçisi olarak @MT2Dev gibi olacağım diye çıktım bu yola. Tabii onun seviyesine ulaşmak kolay değil

Aslında ben de mümkün olduğunca güncel teknolojilere geçmeyi seviyorum. FMOD, XAudio2 gibi çözümler elbette kullanılabilir. Hatta can sıkıntısından AudioLib ile de uğraştım, en sonunda kendimi Miles'ın içinde buldum. 😄

Bu çalışmanın amacı ise ses kütüphanesini değiştirmekten ziyade mevcut istemciyi mümkün olduğunca bozmadan modern geliştirme araçlarıyla çalışabilir hale getirmekti. Özellikle x64, C++20, yeni MSVC sürümleri ve CMake desteğini kazandırmak benim için öncelikliydi.

Miles'ın yerine tamamen farklı bir ses sistemi geçirmek sadece API değişimi değil; 2D/3D ses, streaming, codec desteği ve istemci tarafındaki tüm ses katmanının yeniden ele alınması anlamına geliyor. O yüzden bunu ayrı bir proje olarak görüyorum.

Şimdilik hedefim mevcut bağımlılıkları tek tek modernize ederek istemciyi geleceğe taşımak. Sonrasında uygun bir zamanda ses sistemi gibi büyük bileşenleri de değiştirmek neden olmasın. 🙂

Bir de işin komik tarafı var. Metin2'den o kadar uzak kalmışım ki geri döndüğümde ilk filesi bile kuramadım @Denizeri24 şahittir. 😂
Küçük bir düzeltme olarak belirtmek isterim;
Miles'ın yerine tamamen farklı bir ses sistemi geçirmek sadece API değişimi değil; 2D/3D ses, streaming, codec desteği ve istemci tarafındaki tüm ses katmanının yeniden ele alınması anlamına geliyor. O yüzden bunu ayrı bir proje olarak görüyorum.
Aslında tam aksine modern kütüphaneler seni bu saydiklarının tamamından kurtaracak potansiyele, pratikliğe ve codec desteğine sahip oluyor genellikle. Mesela varsayılan olarak Miles kullanırken oyuna yeni bir .wav dosyası ekleneceği zaman bu dosyanın iç özellikleri de birebir clientın/milesin beklediği şekilde uyumlu olmak zorunda oluyor. (Bitrate hızı, bit formatı vs.)
Aksi halde oyun o dosyayı hata vermeden okusa da oyun içinde o sesi çalmıyor. Ben sırf bu tür ameleliklerden usandığım için fmoda geçmiştim.

Tabi dediğin gibi herkesin çizdiği yol kendine özgü olduğu için senin yaptığın da gayet makul. Amacım eleştiri vb. değildir yanlış anlaşılma olmasın, sadece kendi fikrimi belirtmek istedim. Tekrardan eline sağlık :)
 
Miles SDK 9.3 MP3 Desteği Güncellemesi

Eski Miles altyapısındaki:

mssmp3.asi
mssvoice.asi

codec eklentilerinin Miles SDK 9.3 kaynaklarından tekrar derlenemediği ve yeni mss32.dll yapısıyla uyumlu olmadığı için iptal edildi.

o sebepten mp3'e bay bay dedik :D

İlk aşamada MP3 dosyaları WAV formatına çevrilerek test edildi.

Bu test ile:

Miles Stream sistemi
BGM yükleme
Fade sistemi

kontrol edildi ve ses altyapısının çalıştığı doğrulandı.

Ancak WAV dönüşümü kalıcı çözüm olmadığı için MP3 desteği yeniden geliştirildi.

İlk çözüm olarak dr_mp3 decoder MilesLib içerisine entegre edildi:

MP3

dr_mp3 Decoder

PCM

Virtual WAV Stream

Miles

Bu yöntem ile mevcut Miles API değiştirilmeden MP3 desteği tekrar sağlandı.

Daha sonra bu yapı MilesLib içerisinden çıkarılarak doğrudan Miles SDK 9.3 içerisine taşındı.

Yeni yapı:

MP3

Miles SDK VFS

mssmp3codec

dr_mp3 Decoder

PCM Stream

Miles Audio System

Son aşamada hızlı BGM değişimlerinde oluşan Failed to load stream sound hatası incelendi.

Sorunun codec değil, VFS tarafındaki dosya handle temizleme probleminden kaynaklandığı bulundu.

Codec kapanırken alttaki gerçek dosya handle'ı serbest bırakılmadığı için resource leak oluşuyordu.

Düzeltme sonrası:

Codec yaşam döngüsü düzenlendi.
File handle kapatma işlemi düzeltildi.
MP3 stream geçişleri stabil hale getirildi.

Sonuç:

mssmp3.asi bağımlılığı kaldırıldı.
Harici MP3 codec ihtiyacı ortadan kalktı.
MP3 desteği Miles SDK 9.3 içerisine entegre edildi.
Mevcut Miles API yapısı korunarak modern codec altyapısı oluşturuldu.

gördüğüm bir çok sorun oldu düzeltmek ve bu hale getirmek aşırı yordu haa değdi mi evet değdi


Örnek Miles lib içerisinden çözme işlemi vs

1784628531043.webp

.wav dan tekrar mp3 dönüş

1784628583089.webp



Son hali sdk içinde :aman: :aman: :aman:

1784628643858.webp
 
Teşekkür ederim 😄 Metin2 milliyetçisi olarak @MT2Dev gibi olacağım diye çıktım bu yola. Tabii onun seviyesine ulaşmak kolay değil

Aslında ben de mümkün olduğunca güncel teknolojilere geçmeyi seviyorum. FMOD, XAudio2 gibi çözümler elbette kullanılabilir. Hatta can sıkıntısından AudioLib ile de uğraştım, en sonunda kendimi Miles'ın içinde buldum. 😄

Bu çalışmanın amacı ise ses kütüphanesini değiştirmekten ziyade mevcut istemciyi mümkün olduğunca bozmadan modern geliştirme araçlarıyla çalışabilir hale getirmekti. Özellikle x64, C++20, yeni MSVC sürümleri ve CMake desteğini kazandırmak benim için öncelikliydi.

Miles'ın yerine tamamen farklı bir ses sistemi geçirmek sadece API değişimi değil; 2D/3D ses, streaming, codec desteği ve istemci tarafındaki tüm ses katmanının yeniden ele alınması anlamına geliyor. O yüzden bunu ayrı bir proje olarak görüyorum.

Şimdilik hedefim mevcut bağımlılıkları tek tek modernize ederek istemciyi geleceğe taşımak. Sonrasında uygun bir zamanda ses sistemi gibi büyük bileşenleri de değiştirmek neden olmasın. 🙂

Bir de işin komik tarafı var. Metin2'den o kadar uzak kalmışım ki geri döndüğümde ilk filesi bile kuramadım @Denizeri24 şahittir. 😂
@MT2Dev ayrı bir seviye adam 🌹♥️
 
Geri
Üst