หน้า 1 จากทั้งหมด 1

ฟังชั่น say_number กับการอ่านภาษาไทย

โพสต์โพสต์แล้ว: 18 เม.ย. 2011 23:44
โดย phatlung
อยากทราบวิธีทำไห้ asterisk อ่านตัวเลขภาษาไทยครับ

ถ้าเป็นตัวเลข 32,199.34 อยากไห้อ่าน สามหมื่นสองพันหนึ่งร้อยเก้าสิบเก้าบาท สามสิบสี่สตางค์ ครับ

ลองดัดแปลงจาก sound ที่เป็น en ก็อ่าน ไม่ถูกต้อง

Re: ฟังชั่น say_number กับการอ่านภาษาไทย

โพสต์โพสต์แล้ว: 19 เม.ย. 2011 08:53
โดย nuiz
ถ้าเป็น phpagi ผมว่าเขาน่าจะเขียนให้อ่านตัวเลขหลักสิบ หลักร้อย หลักพัน ... ถูกต้องนะครับ แต่อาจจะแยกตัวเลขที่มี จุดทศนิยม ไม่ออก

เอ่อ.. ไม่ทราบว่าตอนนี้มันอ่านอะไรออกมาครับ

สำหรับการแยก บาท กับ สตางค์ ออกจากกัน ต้องเขียน php code เพิ่มเติมอ่ะครับ ใช้ฟังก์ชั่น split แยกตัวเลขออกมาเป็นบาท (หน้า . ทศนิยม) กับสตางค์ (หลัง . ทศนิยม) เก็บไว้ในตัวแปร แล้วค่อยใช้ say_number อ่านมันออกมา

แล้วก็อัดเสียง สิบ ร้อย พัน หมื่น แสน ล้าน บาท สตางค์ ภาษาไทย เพิ่มเติม

ตัวอย่าง code ครับ

โค้ด: เลือกทั้งหมด
function say_credit ($credit) {
                list($baht, $stang)=split('[.]', sprintf('%01.2f', $credit));
                $agi-> stream_file('your-credit');
                if ($baht==0 && $stang==0){
                        $agi->say_number(0);
                        $agi->stream_file('stang');
                }else{
                        if ($baht >= 1){
                                $agi->say_number($baht);
                                $agi-> stream_file('baht');
                        }

                        if ($stang>0){
                                $agi->say_number($stang);
                                $agi-> stream_file('stang');
                        }
                }
}


ไฟล์เสียง
baht บาท
stang สตางค์
your-credit จำนวนเงิน

Re: ฟังชั่น say_number กับการอ่านภาษาไทย

โพสต์โพสต์แล้ว: 20 เม.ย. 2011 13:51
โดย phatlung
ขอบคุณมากครับสำหรับคำตอบ
ตอนนี้ดัดแปลงเสร็จเรียบร้อยแล้วครับ :D

Re: ฟังชั่น say_number กับการอ่านภาษาไทย

โพสต์โพสต์แล้ว: 20 เม.ย. 2011 15:05
โดย phatlung
ได้เอาโค้ดการแปลงตัวเลขเป็นตัวหนังสือมาแปลงเอาตอนนี้ใช้ได้แล้วนะครับ
สำหรับท่านที่ต้องการ นำฟังงั่ชนี้ไปไส่ใน phpagi.php ได้เลยนะครับและเรียกการใช้งานเหมือนฟังชั่นใน agiทั่วไป
สำหรับเสียงนั้นอัดเอาเองได้เลยครับตามนี้
0 -9 และ 10(สิบ)
sib=สิบ
roi=ร้อย
pan=พัน
muan=หมื่น
san=แสน
larn=ล้าน
baht=บาท
stang=สตางค์
ei=ยี่
eid=เอ็ด

โค้ด: เลือกทั้งหมด
function say_number_thai($number)
{
  $txtnum1 = array('0','1','2','3','4','5','6','7','8','9','10');
  $txtnum2 = array('','sib','roi','pan','muan','san','larn');
  $number = str_replace(",","",$number);
  $number = str_replace(" ","",$number);
  $number = explode(".",$number);
  if(sizeof($number)>2){
    exit;
  }
  $strlen = strlen($number[0]);
  $convert = '';
  for($i=0;$i<$strlen;$i++){
    $n = substr($number[0], $i,1);
    if($n!=0){
      if($i==($strlen-1) AND $n==1){ $this-> stream_file('eid'); }
      elseif($i==($strlen-2) AND $n==2){ $this-> stream_file('ei'); }
      elseif($i==($strlen-2) AND $n==1){ }
      else{
                   $this-> say_digits($txtnum1[$n],"#"); }
                   $this-> stream_file($txtnum2[$strlen-$i-1],"#");
    }
  }
$this-> stream_file('baht');
if($number[1]=='0' OR $number[1]=='00' OR $number[1]==''){
  }else{
    $strlen = strlen($number[1]);
    for($i=0;$i<$strlen;$i++){
      $n = substr($number[1], $i,1);
      if($n!=0){
        if($i==($strlen-1) AND $n==1){$this-> stream_file('eid');}
        elseif($i==($strlen-2) AND $n==2){$this-> stream_file('ei');}
        elseif($i==($strlen-2) AND $n==1){}
        else{
                 $this-> say_digits($txtnum1[$n],"#"); }
                   $this-> stream_file($txtnum2[$strlen-$i-1],"#");
      }
    }
      $this-> stream_file('stang');
  }
}