php
  • linux
  • windows
  • text-to-speech
  • espeak
  • 2013-08-05 66 views 2 likes 
    2

    我在運行完全正常的linux終端中運行espeak。 我的問題是,我想從PHP運行espeak(在xampp中)。如何在linux中運行espeak php

    <?php 
    $a="espeak sometext"; 
    system($a); 
    ?> 
    

    但事實並非working.and不產生任何聲音

    ,其中在這件事正在與由PHP腳本在cmd中調用時espeak的命令行程序,絕對精品的窗口 代碼

    <?php 
    $a='espeak "your text"'; 
    system($a); 
    ?> 
    

    請問你們能否幫我在linux上運行這個軟件。 在此先感謝。

    +1

    您是否嘗試過使用完整路徑? – HamZa

    +0

    我在Windows上有相反的問題,不知何故,命令行工作正常,但在從wamp中調用php的命令時,它僅適用於短於91個字符的輸入文本。但是,在服務器上的Linux始終工作得很好。必須是關於內存限制的東西......? –

    回答

    0

    這個espeak不能在系統命令的幫助下使用,因爲系統命令只會在不在客戶端計算機上的服務器上執行。換句話說,如果你的服務器有聲卡,它將在服務器中播放聲音。 唯一的選擇是你必須使用指南在egudiedog.net

    -1

    我在bash腳本中調用eSpeak給出的跛腳:

    #!/bin/bash 
    # 
    # announce - script to convert text parameter into spoken sound 
    # 
    # Prerequisites: 
    # eSpeak 
    # mbrola binary 
    # mbrola voice 
    # alsa sound 
    # libportaudio 
    # 
    # Axel Kemper 21-Feb-2015 
    # 
    #================================================================== 
    # 
    
    get_abs_dir() { 
        echo "$(cd "$(dirname "$1")" && pwd)" 
    } 
    
    set_volume() { 
        # "amixer scontrols" lists all simple ALSA controls 
        # http://manpages.ubuntu.com/manpages/lucid/man1/amixer.1.html 
        amixer set Headphone $1 > /dev/null 
        amixer set Headphone $2 > /dev/null 
        amixer set PCM $1 > /dev/null 
        amixer set PCM $2 > /dev/null 
    } 
    
    text=$* 
    amplitude=100  # 0 .. 200 default: 100 
    pitch=50   # 0 .. 99 default: 50 
    wordsPerMinute=90 # 80 .. 450 default: 175 
    charFormat=2  # 8-bit character set 
    charFormat=1  # UTF-8 character set 
    soundDevice=sysdefault # cf. aplay -L 
    esHome=$(get_abs_dir $0) 
    esHome=${esHome%/bin} 
    
    voice=mb-de2  # "de+f2" 
    
    export LD_LIBRARY_PATH=$esHome/shared_library 
    
    set_volume 100% on 
    # espeak-data has to reside in $esHome 
    espeak --path=$esHome -a $amplitude -p $pitch -b $charFormat -v $voice "$text" --stdout | aplay -D$soundDevice &> /dev/null 
    set_volume 0% off 
    

    該腳本可以讓你調整eSpeak參數。

    而不是在服務器上的eSpeak輸出管道,以aplay當地alsa聲音播放器,你可以把它管到本地.wav文件,你再傳給你的Web客戶端。

    +0

    你可以在這裏添加更多有關前置需求的細節嗎?我得到:pi @ beeplus〜$〜/ bin/announce.sh hello amixer:無法找到簡單控件'Headphone',0 無法讀取數據文件:'/ home/pi/espeak-data/phontab' 無法加載espeak數據 amixer:無法找到簡單的控制'耳機',0 – monojohnny

    +0

    @monojohnny:請參閱編輯的來源。使用「amixer scontrols」來查找您的ALSA聲音控件。確保您的espeak-data目錄位於正確的位置幷包含所有必需的數據。 –

    +0

    謝謝,我會檢查出來,歡呼 – monojohnny

    0

    使用shell_exec()功能,而不是使用系統,LINUX

    <?php 
    $a='espeak "your text"'; 
    shell_exec($a); 
    ?> 
    
    0

    您可以根據您的需要,嘗試這樣的事情,你可能會改變參數(語音),並且如果espeak的支持。這用於希臘語言測試。你也可能想要檢查這個answer

    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') { 
        define('ESPEAK', 'C:\path\to\eSpeak\command_line\espeak'); 
        define('LAME', 'C:\path\to\eSpeak\command_line\lame'); 
    } else { 
        define('ESPEAK', '/usr/bin/espeak'); 
        define('LAME', '/usr/bin/lame'); 
    } 
        $text = 'This is a test'; 
        $voice = "mb-gr2"; 
        $speed_delta = 0; 
        $speed = 145; 
        $pitch = 90; 
        $volume = 100; 
        $filename = date("Y-m-d-H-i-s").'.mp3';  
        $text = escapeshellarg($text); 
    if (!file_exists($filename)) { 
        $cmd = ESPEAK." -v $voice $text -s $speed -p $pitch -a $volume --stdout | ".LAME." --preset voice -q 9 --vbr-new - $filename"; 
        exec($cmd); 
        echo $filename; 
        } 
    
    相關問題