รบกวนคำถามอีกครั้งครับ หลังจากพยายามแก้ให้อ่าน รัษฏา ให้ถูกต้องจนแล้วจนรอดก็แก้ไม่ได้ครับ ผมเลยเปลี่ยนไปใช้แผนที่ ปี 2011 ได้เรื่องเลยครับ ทดสอบวิ่งจาก สนามบินภูเก็ตไปห้างเซ็นทรัล พอเป็นแผนที่ปี 2011 ที่มุมล่างขวามันขึ้น อย่างนี้เลยครับ รัษฏา (อ.เมืองภูเก็ต) และที่แย่ไปใหญ่ก็คือ นอกจากรัษฏาอ่านออกมาเป็น รัด ดา แล้ว อ. ยังอ่านออกมาเป็น ออ อีกต่างหากครับแทนที่จะอ่านเป็นอำเภอ แต่ ตรงส่วนที่เป็นถนน ยังคงอ่านเป็นอำเภออยู่ครับ
ปล. ส่วนเรื่อง trip time ที่เคยสอบถามมานั้น ผมไปแก้ใน dictionary แต่ก็ไม่ประสบความสำเร็จ ก็เลยไปแก้ที่สกินเลยครับ โดยไปแก้ที่ไฟล์ customized.lua ครับ
การทดสอบของผมใช้
สกิน zozo
แผนที่ ปี 2011
ไฟล์เสียงล่าสุดของคุณ Pizza_P ครับ
หลังจากได้ไล่โค้ดต่างๆทั้งตัว DATA และ skin แล้ว ผมขอเสนอวิธีแก้การอ่านชื่อตำบลและอำเภอของตัวสกิน zozo ซึ่งเป็นฟังก์ชั่นพิเศษที่เพิ่มมาของตัวสกินนี้ในการอ่านชื่อตำบลและอำเภอเวลาที่ขับผ่านเข้าไปครับ ตัวสกินมีฟังก์ชั่นในการอ่านตำบลกับอำเภออยู่ 3 จุดใน customized.lua คือ
1. แถวๆบรรทัด 1177sc_zzTripInfoTTSTest = function()
if MODEL.lua.zzVTITTS() then
local adist = MODEL.lua.LastDestination() sc_zzsayspeech(translated_iformat(m_i18n("Arrived at: %1$s"), adist ),"voice.cockpitspeech.destinfo")
doDelayed(400, function()
local ddist = MODEL.other.trips[0].distance_total()
sc_zzsayspeech(translated_iformat(m_i18n("Trip Length: %1$s"), MODEL.other.format_distance(ddist, MODEL.regional.units(), MODEL.regional.distance_display_mode(), 0)),"voice.cockpitspeech.destinfo")
end
)
doDelayed(600, function()
local tdist = MODEL.other.trips[0].time_total()
sc_zzsayspeech(translated_iformat(m_i18n("Trip Time: %1$s"), Format_Timespan(tdist, ETimespanFormat.Min), MODEL.other.format_time_dayperiod(tdist, MODEL.regional.timeformat(), 2)),"voice.cockpitspeech.destinfo")
end
)
end
end
2. อยู่แถวๆบรรทัด 4755sc_zz_citychange = function()
if MODEL.lua.zzCityShow ~= 0 and MODEL.navigation.car.is_incity() then
if MODEL.lua.zzCitySoundTTS() and MODEL.lua.zzCityTTS() and MODEL.regional.current_voice.is_tts() then
sc_zzsayspeech(MODEL.navigation.car.address.city(),"voice.cockpitspeech.destinfo") elseif not MODEL.regional.current_voice.is_tts() or not MODEL.lua.zzCityTTS() then
sc_zzplaysound(MODEL.lua.zzCitySoundName(), MODEL.lua.zzCitySoundVolume())
end
end
end
3. อันนี้อยู่ติดกับอันที่สองsc_zzCitySoundTTSTest = function()
if MODEL.lua.zzCitySoundTTS() then
sc_zzsayspeech(MODEL.navigation.car.address.city(),"voice.cockpitspeech.destinfo") end
end
วิธีแก้ไข1. ให้เปลี่ยนรูปแบบของไฟล์โดยใช้ Notepad++ จากเดิม ANSI ให้แปลงเป็น
UCS-2 Little Endian ไม่เช่นนั้นมันจะไม่ทำงานกับภาษาไทยได้
2. เพิ่ม function นี้ลงไปในที่ว่างตรงไหนก็ได้
sc_CityTransform = function(tcity)
tcity = wstring.gsub(tcity, L"อ%.", L"อำเภอ")
tcity = wstring.gsub(tcity, L"รัษฎา", L"รัดสะดา")
-- เพิ่มเติมคำอ่านอื่นๆที่ต้องการ --
return tcity
end
3. เปลี่ยนโค้ดที่เป็นตัวบรรทัดสีแดงในฟังก์ชั่นข้างบน เพื่อเรียกใช้ function ใหม่สำหรับเปลี่ยนคำอ่านที่เราเพิ่มเข้าไป
จุดที่ 1 ให้เปลี่ยนเป็น
local adist = sc_CityTransform(MODEL.lua.LastDestination()) จุดที่ 2 กับ 3 โค้ดเหมือนกัน ให้เปลี่ยนเป็น
sc_zzsayspeech(sc_CityTransform(MODEL.navigation.car.address.city()),"voice.cockpitspeech.destinfo")
เสร็จแล้วก็เอากลับเข้าไปในสกินเหมือนเดิมเป็นอันใช้ได้ครับ ได้ผลอย่างไรก็ลองเล่นดูครับ ผมลองบน Emulator นะครับ ยังไม่ได้ใช้จริง
2/3/2555 แก้ไขข้อความเรื่องการแปลงไฟล์ครับ